Gentoo Archives: gentoo-user-ru

From: Alex Efros <powerman@×××××××.ua>
To: gentoo-user-ru@l.g.o
Subject: Re: [OBORONA-SPAM] Re: [gentoo-user-ru] hardened
Date: Wed, 09 Nov 2005 15:26:11
Message-Id: 20051109152545.GX7222@home.power
In Reply to: Re: [gentoo-user-ru] hardened by Alexander Tratsevsky
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

Replies

Subject Author
Re: [OBORONA-SPAM] Re: [gentoo-user-ru] hardened Vladimir Solomatin <littleslash@×××××.ru>