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

  • Tutorial
Настройка 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,
# соберите его и перегрузитесь.


Начало. Вторая часть. Окончание следует...
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 16
  • 0
    Замечание не совсем по делу: как вы думаете, почему у меня в настройках ядра столько точек? А это потому, что на хабре из двух тэгов, позволяющих вставлять преформатированный текст (pre и code) - ни один не работает нормально. Тэг pre делает дикие интервалы между строчками, а code схлопывает несколько подряд идущих пробелов в один. Вот и приходится извращаться... :(
    • 0
      Забыл переключение на hardenet gcc:
      #gcc-config -l
      ...
      • 0
        Дык он по умолчанию выбирается...
        • 0
          У меня остался по умолчанию gcc 4.2, а на gcc 3.4.6 сам переключался.
          • 0
            А, если у Вас до этого стоял более новый gcc, тогда действительно нужно переключаться ручками.
      • –2
        гента не для работы а для экспериментов, или для красноглазиков которым делать нечего все компилировать из исходников а потом глюки искать
        • 0
          убунта — для прирожденных виндузятников. простота и удобство в ней превращают простые вещи в сложные.

          ;)
          • 0
            убунта это дебиан с более новыми пакетами
            на сервере я пользую дебиан
            на множестве десктопов в нескольких офисах — убунта
            а гента это полуфабрикат для экспериментов — не работать же на нем в продакшне ))))))))
            • 0
              На Gentoo в понимании «из коробки» (а-ля Ubuntu) работать вообще нельзя — там ничего кроме компилятора, шелла и тупого редактора нет. ;-)

              А вот после «экспериментов», а точнее — сборки под свои нужды — получается отличный дистрибутив. Назовём его Super, чтобы не путать с другими дистрибутивами — тем же Gentoo, например. А что такого? Чем этот подход отличается от той же Ubuntu, которая называется Ubuntu а не Debian?

              Поддержкой Вашего дистрибутива Super будут 99.9% времени заниматься разработчики Gentoo. Снова напрашиваются аналоги из мира других дистрибутивов…

              В результате имеем вполне себе полноценный дистрибутив. Идеально заточенный под Ваши нужды — в отличие от всех остальных дистрибутивов, включая Gentoo. В общем, Super! :) Называть его полуфабрикатом — полная чушь. Нестабильным и экспериментальным — можно, если Вы нуждались именно в таком дистрибутиве и специально сделали его таким. А если Вы нуждались в стабильном и консервативном дистрибутиве для серверов — значит сделали его именно таким, и ничего нестабильного или экспериментального в нём не будет.
              • 0
                ну-да ну-да ))))))))))
                все компилировать самому )))) это ж сколько то времени надо? и надо ли? неужели вы думаете оптимизировать пакеты хитрее чем это делают дебиановцы? и стабильнее при абсолютно случайном наборе опций компилирования? ну-ну )))))

                дебиан нужен во первых потому что он как раз «заточен» под нужды сервера — а это первое — стабильность и второе — быстродействие — а с гентой ни первого — так как опций то огромное количество — ни второго — так как при неправильном сочетании опция быстродействие только ниже )))

                убунта нужна потому что это тот же дебиан но с новыми версиями пакетов — и все.

                гента не нужна — первое — потому что стабильной ее сделать может не каждый или если стабильна то без оптимизаций и второе — не быстродействующая так как сочетание различных опций вовсе его не прибавляет, а если где то и прибавляет то дебиановцы давно про это знают — и самое главное — третье — безумное время на обновление — зачем? зачем компилировать все из исходников? зачем столько тратить время на каждое обновление???
                • 0
                  … это ж сколько то времени надо?
                  У меня домашняя workstation пересобирается часов за 7. На серверах пакетов значительно меньше, так что ещё быстрее, сколько точно — не мерял.
                  … и надо ли? неужели вы думаете оптимизировать ...
                  Надо. Нет, не думаю. Дело не в оптимизации. Дело в том, что сборка из исходников позволяет во-первых контролировать зависимости и не включать код для поддержки ненужной функциональности (а меньше кода — меньше багов по определению!), а во-вторых *NIX устроен таким образом, что только при сборке из исходников гарантируется отсутствие проблем из-за несовместимости разных версий библиотек.
                  … а с гентой ни первого… ни второго ...
                  От прямоты рук зависит. Если руки кривые — тогда Вы правы, ничего хорошего не выйдет, лучше взять готовый дистрибутив и надеяться на то, что его собирал кто-то с более прямыми руками, чем Вы.
                  гента не нужна — первое — потому что стабильной ее сделать может не каждый ...
                  Да, не каждый. Поэтому она не каждому нужна. Но это, вообще-то, нормально. Нет в природе ничего такого, что идеально устроило бы всех.
                  если стабильна то без оптимизаций
                  Чушь. Подумайте — что мешает собрать Gentoo один-в-один с теми же настройками, что и «стабильный и оптимизированный» Debian? Абсолютно ничего, уверяю Вас.
                  зачем? зачем компилировать все из исходников? зачем столько тратить время на каждое обновление???
                  О! Вот этого больше никогда не говорите! :) Обновления — это самая сильная сторона Gentoo, значительно круче возможности собирать под себя и оптимизировать! Дело в том, что система обновляется фактически непрерывно, каждый день или несколько дней. При этом на само обновление (включая компиляцию) уходит обычно до пяти минут. А внимание админа требуется на протяжении минуты максимум — глянуть что обновляется, и, изредка, обновить конфиги и/или перезапустить сервисы. Безболезненность этих обновлений и возможность их отката если что-то сломалось на порядки выше всего, что есть в других дистрибутивах!!! Кроме того такие обновления поддерживают более высокий уровень безопасности сервера.
                  • 0
                    1 — у вас 7 часов, а дебиан обновляется меньше минуты

                    2 — гарантированность совместимости в первую очередь гарантируется тем что собирает бинарники в этот набор один мейнтейнер, а не каждый экспериментатор с произвольной логикой сборки диктуемой разным набором опций!!!

                    3 — «прямота рук» понятие не определенное — гораздо большую надежность имеет то что собрано одним а проверено тысячами — а не наоборот — собирают тысячи и каждый в своих глюках вращается — вот к примеру был баг когда опция --ftree-vectorize приводила к определенной ошибке в пакете zlib, но в общем то все работало кроме одного — фокс вылетал в кору… и как вы думаете — сколько надо было времени что бы отследить зависимость поведения фокса от неопределенного бага пакета zlib… конечно применение этой опции можно назвать «кривизной рук» но при определенных обстоятельствах она заметно ускоряет разные штуки… а другие в разных комбинациях замедляют — так что разобраться может только опытный мейнтейнер который исследует свою часть пакетов за которые отвечает — в любом случае произвольно взятый пряморукий гентушник просто по определению не может знать всех особенностей каждого пакета в отдельности.

                    4 — собрать генту с одними и теми-же настройками что и дебиан просто не реально — разные патчи, разные опции компиляции — за каждый пакет в дебиане отвечает своя группа мейнтейнеров и их оптимизирует — а в генте мейнтейнер отвечает в первую очередь за то что бы он у каждого встречного-поперечного компилировался из исходника с любым набором тех чудо-опций с которыми в прошлом были собраны остальные библиотеки что бы каждый мог «затачивать под себя» ))))))) тут уж не до оптимизации — кто хочет оптимизировать — добавляет --ftree-vectorize, ловит кор-дампы и после его называют «криворуким» ))))))))

                    5 — наверно вы про генту узнали после фри бсд ))) вот так и радуетесь как оно лихо собирается… я тоже через генту с фри уходил — до сих пор на генте 3 сервера, все никак не собирусь на дебиан перевести… почему не на федору? — потому что не нравится rpm-based дистры, хотя это не важно

                    на самом деле совершенно не нужно на каждом сервере собирать все каждый раз заново — достаточно один раз собрать на одном и потом обновить этим все сервера — называется бинарный дистрибутив ))) например дебиан. А если у меня 2 офиса по 20 компьютеров то что — на каждом собирать? и если собрать на одном а на другие раздать — то чем будет это от бинарного убунты-дебиана отличаться? только тем что там их собирали профи, а тут «на коленке»?
                    • 0
                      наверно вы про генту узнали после фри бсд
                      Не, у меня всё ещё более запущено. Я до Gentoo несколько лет работал на самособранном дистрибутиве по мотивам LFS. На который ушёл убежал удрал из RedHat 7.x. :)
                      достаточно один раз собрать на одном и потом обновить этим все сервера
                      Угу, именно так и делают в мире Gentoo админы, к которых больше 5-ти серверов. На одном собирают, тестируют, а потом полученные на нём бинарные пакеты моментально ставят на остальные сервера.
                      • 0
                        дебиановские, убунтовские и прочие профи собирают, конечно, качественно, но собирают для всех. так, чтобы у всех на всех конфигурациях все работало.
                        что это за ядро такое и пакеты, в которые включено вообще все, даже то, что мне не нужно.
                        дебиан для ленивых.

                        настраивание ядра под свои нужды в дебиан — вообще сказка страниц на 4 мануала. простейшие вещи превращаются в сложные и непонятные.
                        • 0
                          1 — у вас 7 часов, а дебиан обновляется меньше минуты

                          Здесь скорее всего было указано время полной пересборки целевой системы (emerge -e), а не обновления.
                          По поводу обновления см. последний абзац.

                          ЗЫЖ вообще серверные дистры, чересчур завязанные на конфигурацию через иксы ИМХО как имитатор полётов — понять, что вообще к чему, чтобы потом сесть за настоящую «баранку».
                          ЗЫЫЖ пока не попробуешь всё, толку вести толки нет. Gentoo: попробовал раз, ем и сейчас :) А уж для тех, кто ниасилил, пардон…
                          • 0
                            использую более 4-х лет, на одном сервере до сих пор не могу избавится от этих ошибок молодости — гента она для красноглазиков однако, и для разработчиков

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.