Pull to refresh

Hardened Gentoo: установка

Reading time 3 min
Views 9.5K
Процесс установки Hardened Gentoo (точнее, апгрейда текущей Gentoo системы в Hardened) выглядит примерно так:

  1. переключаемся на hardened toolchain и пересобираем им всю систему, чтобы все бинарники использовали PIE и SSP (после этого система становится защищена SSP)
  2. устанавливаем hardened-sources (они содержат патчи PaX + GrSecurity + SeLinux + дополнительные от Gentoo) и компилируем их с поддержкой PaX, GrSecurity и GrSecurity/RBAC
  3. перегружаемся с новым ядром (после этого система становится защищена ещё и PaX+PIE и GrSecurity)
  4. некоторое время настраиваем и отлаживаем ограничения доступа (после чего система становится защищена ещё и GrSecurity/RBAC)

Ожидаемые проблемы:
  • не всё может скомпилироваться с PIE+SSP — возможно отдельные пакеты нужно будет патчить или компилировать без одной или обоих из них (мне пока потребовалось через gcc-config переключаться на vanilla gcc только для компиляции X-ов чтобы они работали с ATI-дровами)
  • не всё может нормально работать, т.к. некоторые программы (обычно упоминают X-ы и java) используют выполнение динамически сгенерированного кода для вполне легальных целей, а теперь при попытке это делать они будут киляться либо SSP либо PIE+PaX — для этих программ нужно будет индивидуально отключать часть защит PaX (для этого есть специальные утилиты, например paxctl) и/или компилировать их без SSP
  • не всё может работать из-за ограничений «фич» ядра GrSecurity — в этом случае нужно будет часть защит GrSecurity отключать (глобально, в make menuconfig)
  • настроить ограничения прав доступа может оказаться не просто, и в любой момент когда какая-нить прога сделает что-то, что мы при настройке её прав не учли — она будет прибита ядром… и придётся эти правила в срочном порядке фиксить

Ну что, поехали… :)

Слишком сильная оптимизация (-O3) вместе с hardened toolchain может приводить к разным глюкам и сбоям компиляции, поэтому нужно в /etc/make.conf заменить -O3 на -O2, и убрать все прочие -f* оптимизаторские флаги.

Переходим на hardened-профайл. (Теоретически вместо этого можно было просто добавить в USE-флаги: «hardened pie ssp».)
ln -snf ../usr/portage/profiles/hardened/x86/2.6/ /etc/make.profile

После переключения профайла на hardened/x86/2.6/ выключилось несколько нужных мне USE-флагов, которые в обычных профайлах включены автоматически — я их дописал в make.conf (у вас флаги могут быть другие, просто не забудьте этот момент проследить):
avi encode gtk2 jpeg mpeg oss quicktime spell truetype xv bitmap-fonts truetype-fonts type1-fonts

Компиляция hardened-toolchain и пересборка им всех остальных пакетов:
emerge binutils gcc glibc
emerge -e world
dispatch-conf

Далее, нужно поставить ещё несколько пакетов:
emerge paxtest paxctl gradm

paxtest можно было поставить и раньше, до перехода на hardened toolchain. Эта утилитка пытается делать разные опасные операции (типа переполнения стека с выполнением кода), которые обычно выполняют эксплойты. Если система защищена, то все её попытки будут пресечены, о чём она и сообщит. В общем, можно её погонять до установки hardened toolchain, после а так-же после перезагрузки с ядром где включён PaX, по приколу. :)

paxtest как свою зависимость так-же установит прогу chpax — это старый способ управлять PaX, вместо которого лучше использовать paxctl. Но некоторые проги, распространяемые без исходников, скомпилированы так, что paxctl с ними работать не может, и приходится юзать chpax.

Ну а gradm нужен для настройки RBAC в GrSecurity — тех самых ограничений прав для процессов и юзеров.

Что касается настроек ядра. Я для начала настроил всё так, как описано в доке Gentoo и GrSecurity — при этом не все защиты включены, но большинство софта при таких настройках будет работать. В процессе разбора с настройками возникло несколько теоретических предположений:
  • Если загрузить hardened ядро ДО перекомпилирования системы, то могут возникнуть проблемы если включена эта опция:
    PaX -> Non-executable pages -> Disallow ELF text relocations
  • На сервере, где нет X-ов, можно дополнительно включить: (не забыть перед этим проверить, что от этого не перестало работать что-то кроме X-ов, в частности hwclock):
    Grsecurity -> Address Space Protection -> Disable privileged I/O
  • Кроме того, ещё есть предположение, что некоторые ограничения chroot могут помешать операциям типа инсталляции Gentoo (которая идёт внутри chroot) или попытке починки системы (если, например, для этого загрузиться с CD с таким hardened ядром):
    Grsecurity -> Filesystem Protections -> Deny mounts
    Grsecurity -> Filesystem Protections -> Deny double-chroots
    Grsecurity -> Filesystem Protections -> Deny (f)chmod +s
    Grsecurity -> Filesystem Protections -> Deny mknod
    

Начало. Продолжение следует...
Tags:
Hubs:
+14
Comments 11
Comments Comments 11

Articles