Pull to refresh

Hardened Gentoo: настройка

Reading time 4 min
Views 6.8K
Настройка Hardened состоит из двух частей: настройка ядра, и настройка ролей (RBAC или SELinux). Пример настройки ядра 2.6.20 я сейчас покажу. А RBAC/SELinux я пока не настраивал.

Думаю, будет нагляднее всего привести настройки так, как они выглядят в make menuconfig — это за одно позволит оценить «на глаз» возможности PaX и GrSecurity тем, кто с ними до сих пор не сталкивался.

Между разными версиями ядра они немного меняются, но не значительно.
PaX  --->
. [*] Enable various PaX features
....... PaX Control  --->
......... [ ] Support soft mode
......... [*] Use legacy ELF header marking
......... [*] Use ELF program header marking
............. MAC system integration (none)  --->
....... Non-executable pages  --->
......... [*] Enforce non-executable pages
......... [*] . Segmentation based non-executable pages
......... [ ] Emulate trampolines
......... [*] Restrict mprotect()
......... [ ] . Disallow ELF text relocations
......... [ ] Enforce non-executable kernel pages
....... Address Space Layout Randomization  --->
......... [*] Address Space Layout Randomization
......... [*] . Randomize kernel stack base
......... [*] . Randomize user stack base
......... [*] . Randomize mmap() base
..... Miscellaneous hardening features  --->
....... [ ] Sanitize all freed memory
....... [*] Prevent invalid userland pointer dereference
Grsecurity  --->
. Security Level (Custom)  --->
. Address Space Protection  --->
... [*] Deny writing to /dev/kmem, /dev/mem, and /dev/port
... [ ] Disable privileged I/O
... [*] Remove addresses from /proc/<pid>/[smaps|maps|stat]
... [*] Deter exploit bruteforcing
... [*] Runtime module disabling
... [*] Hide kernel symbols
. Role Based Access Control Options  --->
... [*] Hide kernel processes
... (3) Maximum tries before password lockout
... (30) Time to wait after max password tries, in seconds
. Filesystem Protections  --->
... [*] Proc restrictions
... [*] . Restrict /proc to user only
... [*] Additional restrictions
... [*] Linking restrictions
... [*] FIFO restrictions
... [*] Chroot jail restrictions
... [*] . Deny mounts
... [*] . Deny double-chroots
... [*] . Deny pivot_root in chroot
... [*] . Enforce chdir("/") on all chroots
... [*] . Deny (f)chmod +s
... [*] . Deny fchdir out of chroot
... [*] . Deny mknod
... [*] . Deny shmat() out of chroot
... [*] . Deny access to abstract AF_UNIX sockets out of chroot
... [*] . Protect outside processes
... [*] . Restrict priority changes
... [*] . Deny sysctl writes
... [*] . Capability restrictions
. Kernel Auditing  --->
... [ ] Single group for auditing
... [ ] Exec logging
... [*] Resource logging
... [ ] Log execs within chroot
... [ ] Chdir logging
... [*] (Un)Mount logging
... [ ] IPC logging
... [*] Signal logging
... [*] Fork failure logging
... [ ] Time change logging
... [*] /proc/<pid>/ipaddr support
... [ ] ELF text relocations logging (READ HELP)
. Executable Protections  --->
... [*] Enforce RLIMIT_NPROC on execs
... [*] Destroy unused shared memory
... [*] Dmesg(8) restriction
... [ ] Trusted Path Execution (TPE)
. Network Protections  --->
... [*] Larger entropy pools
... [ ] Socket restrictions
. Sysctl support  --->
... [*] Sysctl support
... [*] . Turn on features by default
. Logging Options  --->
... (10) Seconds in between log messages (minimum)
... (4) Number of messages in a burst (maximum)
[ ] Enable access key retention support
[ ] Enable different security models

Абсолютное большинство этих фич работает прозрачно для пользователя. Но есть пара, которые вы можете заметить: во-первых обычные пользователи перестанут видеть процессы других пользователей, а во-вторых они потеряют доступ к некоторым файлам в /proc/, из-за чего вывод команд ifconfig, route, etc. запущенных обычными пользователями станет значительно скромнее.

Надо отметить, что большая часть этих фич может управляться через sysctl. Что, как правило, плохо. А что хорошего в том, что хакер ломает систему наполовину, получает возможность отключить эти защиты через sysctl, после чего доламывает её уже окончательно? К счастью, есть возможность заблокировать изменение настроек GrSecurity через sysctl. Для этого нужно добавить в /etc/sysctl.conf:
kernel.grsecurity.disable_modules = 1
kernel.grsecurity.grsec_lock = 1

Где первая команда запрещает подгрузку модулей ядра (лучше всего на серверах поддержку модулей даже не включать в ядре, но если это не возможно, то теперь есть выход: подгрузить нужные модули при загрузке системы, а потом с помощью kernel.grsecurity.disable_modules запретить подгрузку модулей — чтобы никто случайно руткит не подгрузил :)), а вторая запрещает изменение любых настроек GrSecurity.

Недостаток этого в том, что если вам нужно будет таки подгрузить модуль или отключить часть фич GrSecurity (например, защиту chroot для сборки нового Gentoo), то придётся редактировать /etc/sysctl.conf и перегружаться.

Собственно, настройка на этом окончена.

В качестве резюме, приведу полный набор команд, которые отконвертируют ваш Gentoo в Hardened:
emerge hardened-sources

# Теперь настройте это ядро (пока не включая фичи
# hardened), скомпилируйте и перегрузитесь в него.

ln -snf ../usr/portage/profiles/hardened/x86/2.6/ /etc/make.profile

# Уберите все флаги оптимизации из CFLAGS в /etc/make.conf
# и установите -O2.
# Пример: CFLAGS="-march=pentium-m -O2 -pipe"

# Очистите ваш $PKGDIR (обычно /usr/portage/packages/) для
# ускорения времени пересборки системы используя
# опции -b и -k команды emerge.

emerge -C linux-headers
emerge linux-headers glibc binutils gcc-config gcc

# Проделайте все дополнительные операции, которые могут
# требоваться при обновлении gcc (см. <a href="http://www.gentoo.org/doc/en/gcc-upgrading.xml">GCC Upgrade Guide</a>).

emerge -b glibc binutils gcc portage
emerge -bke system
emerge -ke world

glsa-check -l | grep '\[N\]'

# Ручками обновите пакеты, которые мог выдать glsa-check.

emerge -a --depclean
emerge -uDNa world

emerge paxtest paxctl gradm

revdep-rebuild

dispatch-conf

# Теперь включите в ядре все фичи Hardened,
# соберите его и перегрузитесь.


Начало. Вторая часть. Окончание следует...
Tags:
Hubs:
+11
Comments 16
Comments Comments 16

Articles