1 |
Hi!
|
2 |
|
3 |
|
4 |
Краткое описание что подразумевается под "Hardened Gentoo" и что оно даёт.
|
5 |
Hardened Gentoo это просто объединение нескольких разных, часто независимых
|
6 |
друг от друга, проектов:
|
7 |
|
8 |
- Hardened toolchain - специальные патчи на gcc/glibc/binutils:
|
9 |
* SSP - добавляет в бинарник защиту от переполнения буфера, т.е.
|
10 |
прога откомпилированная с SSP сама проверяет что у неё не
|
11 |
переполнили буфер и киляет сама себя если обнаруживает переполнение
|
12 |
(как следствие бага в самой программе или попытки её взломать
|
13 |
эксплойтом).
|
14 |
* PIE - не увеличивает защищённость сам по себе, но приводит к
|
15 |
генерации более гибкого кода, благодаря чему его можно будет
|
16 |
защитить на уровне ядра через PaX.
|
17 |
PIE и SSP не зависят друг от друга, и их можно использовать вместе и
|
18 |
по отдельности (по сути, после компиляции hardened toolchain можно
|
19 |
будет через gcc-config переключаться между всеми вариантами - PIE+SSP,
|
20 |
только PIE, только SSP, ничего (т.е. обычный gcc) - например, если
|
21 |
какая-то прога не будет компилироваться.
|
22 |
|
23 |
- Патчи на ядро. Их бывает много, и разных, :) но в Gentoo есть
|
24 |
поддержка только четырёх из них - PaX, SeLinux, GrSecurity и RSBAC.
|
25 |
Функциональность они добавляют трех типов:
|
26 |
1) Защита от переполнения буфера (а-ля SSP но со стороны ядра и
|
27 |
другими методами, так что они друг друга дополняют): PaX.
|
28 |
Например, PaX позволяет запретить выполнение кода в страницах
|
29 |
памяти с данными (софтварная реализация NX-бита, которые появился
|
30 |
только в 64-битных процах Intel) - PaX просто кильнёт процесс если
|
31 |
он попытается нарушить эту защиту; при загрузке программы в
|
32 |
память грузит все её функции по случайным адресам, чтобы эксплойту
|
33 |
было очень сложно узнать на какой адрес передавать управление
|
34 |
(это становится возможным благодаря компиляции с PIE).
|
35 |
2) Отключение потенциально опасных "фич" ядра: GrSecurity, RSBAC.
|
36 |
Пример: запрет выполнять mount внутри chroot - чтобы хакер
|
37 |
взломавший chroot-нутый демон и получивший root-а не смог
|
38 |
выйти из chroot.
|
39 |
3) Ограничение прав процессов и юзеров, в т.ч. (я бы даже сказал -
|
40 |
в основном) юзера root: SeLinux, GrSecurity/RBAC, RSBAC.
|
41 |
Здесь идея в том, что админу (вам :)) нужно подготовить список с
|
42 |
указанием какие проги/юзеры что имеют право делать.
|
43 |
Пример: можно ограничить root-овый процесс apache из всех прав
|
44 |
root-а только возможностью садиться на 80-й порт и читать файлы в
|
45 |
/etc/apache2/. В этом случае даже если его и взломают, и хакер
|
46 |
получит "root", то ЭТОТ "root" сможет делать только
|
47 |
вышеперечисленные операции... хакер будет крайне разочарован. :)
|
48 |
Эти три "фичи" тоже друг не зависят одна от другой. Но сами патчи -
|
49 |
SeLinux, GrSecurity и RSBAC обычно между собой не совместимы и нужно
|
50 |
использовать только один из них. Впрочем, в Gentoo сумели объединить
|
51 |
SeLinux и GrSecurity вместе. Часть GrSecurity, которая занимается
|
52 |
третьей фичей (ограничением прав) называется RBAC, и её использовать
|
53 |
вместе с SeLinux нельзя - или-или.
|
54 |
Итого, варианты есть, например, следующие:
|
55 |
- PaX + GrSecurity
|
56 |
- PaX + GrSecurity (без RBAC) + SeLinux
|
57 |
- PaX + SeLinux
|
58 |
- PaX + RSBAC
|
59 |
- ... etc ...
|
60 |
Я выбрал первый (PaX+GrSecurity) т.к. во-первых настройка SeLinux
|
61 |
обещает быть кошмаром, в отличие от GrSecurity/RBAC; во-вторых на мой
|
62 |
взгляд поддержка RSBAC в Gentoo ещё сыровата; и в-третьих ну понравился
|
63 |
мне GrSecurity, понравился. :))
|
64 |
|
65 |
Итого, процесс выглядит следующим:
|
66 |
- переключаемся на hardened toolchain и пересобираем им всю систему,
|
67 |
чтобы все бинарники использовали PIE и SSP (после этого система
|
68 |
становится защищена SSP)
|
69 |
- устанавливаем hardened-sources (они содержат патчи PaX + GrSecurity +
|
70 |
SeLinux + допольнительные от Gentoo) и компилируем их с поддержкой
|
71 |
PaX, GrSecurity и GrSecurity/RBAC
|
72 |
- перегружаемся с новым ядром (после этого система становится защищена
|
73 |
ещё и PaX+PIE и GrSecurity)
|
74 |
- некоторое время настраиваем и отлаживаем ограничения доступа (после
|
75 |
чего система становится защищена ещё и GrSecurity/RBAC)
|
76 |
|
77 |
Ожидаемые проблемы:
|
78 |
- не всё может скомпилироваться с PIE+SSP - возможно отдельные пакеты
|
79 |
нужно будет патчить или компилировать без одной или обоих из них
|
80 |
(мне пока потребовалось через gcc-config переключаться на vanilla gcc
|
81 |
только для компиляции X-ов чтобы они работали с ATI-дровами)
|
82 |
- не всё может нормально работать, т.к. некоторые программы (обычно
|
83 |
упоминают X-ы и java) используют выполнение динамически
|
84 |
сгенерированного кода для вполне легальных целей, а теперь при попытке
|
85 |
это делать они будут киляться либо SSP либо PIE+PaX - для этих
|
86 |
программ нужно будет индивидуально отключать часть защит PaX (для этого
|
87 |
есть специальные утилиты, например paxctl) и/или компилировать их без SSP
|
88 |
- не всё может работать из-за ограничений "фич" ядра GrSecurity - в этом
|
89 |
случае нужно будет часть защит GrSecurity отключать (глобально, в
|
90 |
make menuconfig)
|
91 |
- настроить ограничения прав доступа может оказаться не просто, и в
|
92 |
любой момент когда какая-нить прога сделает что-то, что мы при
|
93 |
настройке её прав не учли - она будет прибита ядром... и придётся
|
94 |
эти правила в срочном порядке фиксить
|
95 |
|
96 |
|
97 |
Ну что, поехали... :)
|
98 |
|
99 |
Слишком сильная оптимизация (-O3) вместе с hardened toolchain может
|
100 |
приводить к разным глюкам и сбоям компиляции, поэтому нужно в
|
101 |
/etc/make.conf заменить -O3 на -O2.
|
102 |
|
103 |
Переходим на hardened-профайл. (Теоретически вместо этого можно было просто
|
104 |
добавить в USE-флаги: "hardened pie ssp".)
|
105 |
|
106 |
ln -snf ../usr/portage/profiles/hardened/x86/2.6/ /etc/make.profile
|
107 |
|
108 |
После переключения профайла на hardened/x86/2.6/ выключилось несколько
|
109 |
нужных мне USE-флагов, которые в обычных профайлах включены
|
110 |
автоматически - я их дописал в make.conf:
|
111 |
avi encode gtk2 jpeg mpeg oss quicktime spell truetype xv
|
112 |
bitmap-fonts truetype-fonts type1-fonts
|
113 |
|
114 |
Компиляция hardened-toolchain и пересборка им всех остальных пакетов:
|
115 |
|
116 |
emerge binutils gcc glibc
|
117 |
emerge -e world
|
118 |
dispatch-conf
|
119 |
|
120 |
Далее, нужно поставить ещё несколько пакетов:
|
121 |
|
122 |
emerge paxtest paxctl gradm
|
123 |
|
124 |
paxtest можно было поставить и раньше, до перехода на hardened toolchain.
|
125 |
Эта утилитка пытается делать разные опасные операции (типа переполнения
|
126 |
стека с выполнением кода), которые обычно выполняют эксплойты. Если
|
127 |
система защищена, то все её попытки будут пресечены, о чём она и сообщит.
|
128 |
В общем, можно её погонять до установки hardened toolchain, после а
|
129 |
так-же после перезагрузки с ядром где включён PaX, по приколу. :)
|
130 |
|
131 |
paxtest как свою зависимость так-же установит прогу chpax - это вроде
|
132 |
старый способ управлять PaX, вместо которого лучше использовать paxctl.
|
133 |
Но некоторые проги, распространяемые без исходников, скомпилированы так,
|
134 |
что paxctl с ними работать не может, и приходится юзать chpax.
|
135 |
|
136 |
Ну а gradm нужен для настройки RBAC в GrSecurity - тех самых ограничений
|
137 |
прав для процессов и юзеров.
|
138 |
|
139 |
Что касается настроек ядра. Я для начала настроил всё так, как описано в доке
|
140 |
Gentoo и GrSecurity - при этом не все защиты включены, но
|
141 |
большинство софта при таких настройках будет работать. В процессе
|
142 |
разбора с настройками возникло несколько теоретических предположений:
|
143 |
|
144 |
Если загрузить hardened ядро ДО перекомпилирования системы, то могут
|
145 |
возникнуть проблемы если включена эта опция:
|
146 |
|
147 |
PaX -> Non-executable pages -> Disallow ELF text relocations
|
148 |
|
149 |
На сервере, где нет X-ов, можно дополнительно включить: (не забыть
|
150 |
перед этим проверить, что от этого не перестало работать что-то
|
151 |
кроме X-ов, в частности hwclock):
|
152 |
|
153 |
Grsecurity -> Address Space Protection -> Disable privileged I/O
|
154 |
|
155 |
Кроме того, ещё есть предположение, что некоторые ограничения chroot
|
156 |
могут помешать операциям типа инсталляции Gentoo (которая идёт внутри
|
157 |
chroot) или попытке починки системы (если, например, для этого
|
158 |
загрузиться с CD с таким hardened ядром):
|
159 |
|
160 |
Grsecurity -> Filesystem Protections -> Deny mounts
|
161 |
Grsecurity -> Filesystem Protections -> Deny double-chroots
|
162 |
Grsecurity -> Filesystem Protections -> Deny (f)chmod +s
|
163 |
Grsecurity -> Filesystem Protections -> Deny mknod
|
164 |
|
165 |
|
166 |
--
|
167 |
WBR, Alex.
|
168 |
--
|
169 |
gentoo-user-ru@g.o mailing list |