На нескольких из моих подопечных машин в качестве ЦПУ стоит Intel Core 2, системы собирались GCC 4.1.2, который не умеет полностью затачивать код под эти процессоры. С появлениме ветки 4.3 такая возможность появилась. Через неделю после появления "исправленного" GCC 4.3.1 в ~amd64 я подумал, что сейчас уже возможно собрать вполне пригодную систему с полной заточкой под моё железо. Я решил пересобрать текущую default/linux/amd64/2008.0/desktop, gcc-4.1.2, ACCEPT_KEYWORDS="amd64" в hardened/linux/amd64/2008.0/desktop, gcc-4.3.1, glibc-2.7-r2, ACCEPT_KEYWORDS="amd64"
Что делал:
1) Изменил профиль:
Код: Выделить всё
ln -snf /usr/portage/profiles/hardened/linux/amd64/2008.0/desktop /etc/make.profile
2) Изменил в /etc/make.conf:
Код: Выделить всё
CFLAGS="-march=core2 -O2 -pipe"
3) Размаскировал необходимые мне пакеты включая недоделанный в hardened gcc-4 и "вредные и опасные" драйверы nvidia.
Добавил в /etc/portage/package.keywords:
Код: Выделить всё
# hardened
sys-kernel/hardened-sources
sys-devel/gcc
sys-libs/glibc
app-admin/paxtest
в /etc/portage/package.unmask:
Код: Выделить всё
# hardened
sys-devel/gcc
x11-drivers/nvidia-drivers
media-video/nvidia-settings
в /etc/portage/package.mask:
Код: Выделить всё
=sys-libs/glibc-2.8_p*
4) Пересобрал систему такой командой:
Код: Выделить всё
emerge -v linux-headers glibc binutils gcc-config gcc && gcc-config x86_64-pc-linux-gnu-4.3.1 && emerge -vb linux-headers glibc binutils gcc-config gcc && emerge -bkev system && emerge -bkev world
Всё прошло без приключений до сборки 33 пакета командой emerge -bkev world. Несколько раз во время пересборки мира что-то не собиралось, делал emerge --resume --skip-first -a (y не жал), разбирался с вылетевшим пакетом, жал y. Разборки в большинстве случаев сводились к добавления пакета в package.keywords и выполнению emerge -1vb name, в итоге я надобавлял:
Код: Выделить всё
dev-libs/libsigc++
dev-libs/libebml
sci-libs/cln
dev-libs/boost
dev-util/boost-build
sys-libs/libsmbios
dev-cpp/glibmm
dev-libs/glib
app-cdr/cdrdao
media-libs/plotutils
media-libs/netpbm
app-text/libwpd
media-video/mjpegtools
media-video/dvgrab
x11-libs/qt
dev-cpp/gtkmm
media-video/mkvtoolnix
net-p2p/linuxdcpp **
app-antivirus/klamav
sci-astronomy/celestia
net-wireless/kdebluetooth
net-wireless/bluez-libs
net-wireless/bluez-utils
media-video/mplayerthumbs
5) Поставил sys-kernel/hardened-sources, перезагрузился на новое ядро.
Проверил работает ли защита:
Код: Выделить всё
# paxtest blackhat
PaXtest - Copyright© 2003,2004 by Peter Busser <peter@adamantix.org>
Released under the GNU Public Licence version 2 or later
Writing output to paxtest.log
It may take a while for the tests to complete
Test results:
PaXtest - Copyright© 2003,2004 by Peter Busser <peter@adamantix.org>
Released under the GNU Public Licence version 2 or later
Mode: blackhat
Linux book 2.6.25-hardened #1 SMP Wed Jun 18 19:18:54 MSD 2008 x86_64 Intel® Core™2 Duo CPU T7500 @ 2.20GHz GenuineIntel GNU/Linux
Executable anonymous mapping : Killed
Executable bss : Killed
Executable data : Killed
Executable heap : Killed
Executable stack : Killed
Executable anonymous mapping (mprotect) : Killed
Executable bss (mprotect) : Killed
Executable data (mprotect) : Killed
Executable heap (mprotect) : Killed
Executable stack (mprotect) : Killed
Executable shared library bss (mprotect) : Killed
Executable shared library data (mprotect): Killed
Writable text segments : Killed
Anonymous mapping randomisation test : 34 bits (guessed)
Heap randomisation test (ET_EXEC) : 13 bits (guessed)
Heap randomisation test (ET_DYN) : No randomisation
Main executable randomisation (ET_EXEC) : 33 bits (guessed)
Main executable randomisation (ET_DYN) : No randomisation
Shared library randomisation test : 33 bits (guessed)
Stack randomisation test (SEGMEXEC) : No randomisation
Stack randomisation test (PAGEEXEC) : 40 bits (guessed)
Return to function (strcpy) : paxtest: return address contains a NULL byte.
Return to function (memcpy) : Vulnerable
Return to function (strcpy, RANDEXEC) : paxtest: return address contains a NULL byte.
Return to function (memcpy, RANDEXEC) : Vulnerable
Executable shared library bss : Killed
Executable shared library data : Killed
После перезагрузки всё заработало без нареканий, за некоторым исключением.
Не работали приложения активно использующие видеоподсистему и 3d ускорение:
media-video/nvidia-settings
sci-astronomy/celestia
sci-astronomy/stellarium
games-fps/nexuiz
media-gfx/freepv
Помогло частичное отключение защиты:
Код: Выделить всё
paxctl -m /usr/bin/glxinfo
paxctl -m /usr/bin/celestia
paxctl -m /usr/bin/stellarium
paxctl -m /usr/games/bin/nexuiz-glx
paxctl -m /usr/bin/freepv-gl*
paxctl -v /usr/bin/stellarium
PaX control v0.5
Copyright 2004,2005,2006,2007 PaX Team <pageexec@freemail.hu>
- PaX flags: -----m-x-e-- [/usr/bin/stellarium]
MPROTECT is disabled
RANDEXEC is disabled
EMUTRAMP is disabled
Сейчас все эти пакеты работают без нареканий, в nexuiz я не заметил тормозов, но подозреваю падение fps.
app-office/openoffice запускаться тоже не хотел, решение:
Код: Выделить всё
paxctl -cm /usr/lib/openoffice/program/soffice.bin
С этими пакетами пришлось дополнительно поработать:
net-p2p/linuxdcpp # из cvs работает
app-antivirus/klamav # пока не работает, решение ещё не искал
media-video/mplayerthumbs # решение: http://bugs.gentoo.org/show_bug.cgi?id=225745
sci-calculators/fung-calc # он ведь древний!
После послабленний wine вполне работает:
Код: Выделить всё
paxctl -xperms /usr/bin/wine-preloader /usr/bin/wine /usr/bin/wineserver
Я также обновил систему до baselayout-2, работаю на пересобранной системе больше суток, каких-либо неприятностей больше не было.
Остались такие вопросы:
Мне удалось найти крайне мало информации по gcc 4.3 и hardened Gentoo, хотелось бы узнать больше об этой связке.
В сравнении с http://www.gentoo.org/proj/en/hardened/grsecurity.xml paxtest показывает отсутствие рандомизации ET_DYN, это связанно с gcc4, ядром или чем?
При сборке sys-libs/glibc-2.7-r2 выдал:
Код: Выделить всё
WARN: setup
PIE hardening not applied, as your compiler doesn\'t default to PIE
Исходя из http://bugs.gentoo.org/show_bug.cgi?id=198121 большая часть неприятностей с новой веткой gcc уже решена, предлагаю в этой теме обсуждать встретившиеся из оставшихся.