Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Создание файла политик Systrace.

Рубрика: Безопасность -> Укрепляем Linux
Метки:
Вторник, 16 июня 2009 г.
Просмотров: 5144

Несмотря на то, что синтаксис файла политики простой, внесение в него любого системного вызова дело довольно непростое. Кроме знания, что делает некоторый системный вызов, нужно описать каждый сис­темный вызов, используемый приложением.

     Чтобы не забыть какой-нибудь вызов, нужно провести трассировку системных вызовов с помощью ранее рассмотренной программы systrace. Когда будет создан базовый файл политик, разрешающий все необходи­мые приложению системные вызовы, нужно приступить к ужесточению правил - к исследованию различных системных вызовов, которые могут быть использованы для атаки.

Создание файла политики - занятие изрядно утомительное. Systrace предоставляет альтернативный способ.


     Автоматическое создание файла политик.

     Одна из лучших функций Systrace - это режим обучения, во время которого программа заносит все используемые процессом системные вызовы в файл политик. Все, что останется сделать, - это отредактировать файл политик.

     Для автоматического генерирования файла политик применяется опция -А, переключающая Systrace в режим обучения. В качестве второго аргу­мента надо задать любое приложение, кроме самого Systrace:

# systrace -A /usr/sbin/ident -d

     В следующем примере программа будет изучать системные вызовы сервера аутен­тификации ident. Если посмотреть список процессов, то можно увидить два про­цесса: один - демон мониторинга systrace, а второй - для другого демона (получившего доступ к порту 113 и запущенного от имени пользователя nobody):

root 2261 0.0 0.2 1644 688 ? S 07:13 0:00 systrace -A /usr/sbin/identd -d

nobody 2262 0.0 0.1 1392 424 ? S 07:13 0:00 /usr/

sbin/identd -d

     Во время режима обучения нужно попытаться максимально исполь­зовать исследуемую программу, чтобы systrace знал все аспекты ее поведения. Например, для сервера имен named нужно произвести не только разрешение доменного имени, но и обратное разрешение IP-адреса, передачу зоны, то есть связь с вторичным сервером DNS и т.д.

     После того, как приложение будет полностью протестиро­вано, надо его завершить (попросту «kill»). После завершения прило­жения, systrace сгенерирует файл политик. Обратите внимание: «убивать» надо приложение, а не systrace (в предыдущем примере kill 2262).

     В результат тестирования был сгенерирован следующий файл:

# cat /root/.systrace/usr_sbin_identd Policy: /usr/sbin/identd, Emulation: linux

linux-uname: permit

linux-brk: permit

linux-old_mmap: permit

linux-fsread: filename eq "/etc/Id.so.preload" then permit

linux-fsread: filename eq "/etc/Id.so.cache" then permit

linux-fstat64: permit

linux-close: permit

linux-fsread: filename eq "/lib/tls/libc.so.6" then permit

linux-read: permit

linux_ni_syscall-34: permit

linux-munmap: permit

linux-rt_sigaction: permit

linux-alarm: permit

linux-getpeername: true then permit

linux-write: permit

linux_ni_syscall-43: permit

linux-clone: permit

linux-setsid: permit

linux-chdir: filename eq "/" then permit

linux-fsread: filename eq "/dev/null" then permit

linux-dup2: permit

linux-socket: sockdom eq "AF_INET" and socktype eq "SOCK_STREAM"

then permit

linux-setsockopt: true then permit

liunx-bind: sockaddr eq "inet-[0.0.0.0]:113" then permit

linux-listen: true then permit

linux-socket: sockdom eq "AFJJNIX" and socktype eq "SOCK_STREAM"

then permit

linux-connect: sockaddr eq "/vsr/run/.nscd_socket" then permit

linux-fsread: filename eq "/etc/nsswitch.conf" then permit

linux-mmap2: permit

linux-f sread: filename eq "lib/libnss_files . so . 2" then permit

linux-fsread: filename eq "/etc/passwd" then permit

linux-fcntl64: permit

linux-setuid: uid eq "99"'and uname eq "nobody" then permit

linux-accept: true then permit

linux-getsockname: true then permit

linux-wait64: permit

linux-sigreturn: permit

     Скорее всего, сразу создать исчерпывающий файл политики не получится: просто за один раз невозможно протестировать все аспекты рабо­ты программы, особенно если это сложный интернет-сервер. Поэтому к редактированию данного файла нужно будет вернуться, причем не один раз.

     Проверка файла политик.

     Проверка в обычном режиме.

Теперь, когда есть файл политик, можно его проверить. Для этого нужно запустить systrace с параметром -а (а не -А):

# systrace -a /usr/sbin/identd -d

     Во время данного процесса каждое нарушение правил будет запротоколирова­но в файле /var/log/messages. Вне зависимости, писался ли файл само­стоятельно или он был сгенерирован systrace, можно проверить файл /var/log/messages . Удалим из файла политик строку, разреша­ющую чтение /etc/passwd:

linux-fsread: filename eq "/etc/passwd" then permit

      Тогда в файле /var/log/messages появится сообщение о том, что чтение файла /etc/passwd не разрешено:

Jul 22 22:31:17 dhsilabs systrace: deny user: root, prog: /usr/sbin/identd, pid: 3519(0) [3516], policy: /usr/sbin/identd, filters: 36, syscall: linux-f sread (5) , filename: /etc/passwd

     Интерактивная проверка файла политик

Systrace позволяет проверять файл политик в так называемом интерактив­ном режиме В этом режиме systrace запрашивает у владельца процессов, что исполнять с любым не разрешенным (точнее, с неуказанным в файле поли­тик) действием.

     Для запуска systrace в интерактивном режиме не надо указывать опции программы:

# systrace /usr/sbin/identd -d

     В интерактивном режиме программа просто запрашивает, что сделать с тем или иным системным вызовом: разрешить или запретить.

     Если не установлена система X11, то можно запустить systrace в текстовом режиме, для этого используется опция -t.

     Готовые файлы политик.

     Создание файла политик (даже с помощью функции автоматического ге­нерирования и интерактивного режима) - занятие достаточно рутинное и далеко не у всех есть время этим заниматься. Поэтому можно исполь­зовать уже готовые файлы политик.

     В интернете можно найти и скачать более 200 уже протестированных файлов по­литик для различных приложений - от sed до gaim. Все, что остается сделать, - это всего лишь скачать нужный файл и записать его в каталог /etc/systrace.

     Правда, есть одно «но»: все файлы которые мне встречались были предназначены для OpenBSD, и для того, чтобы нужно было употреблять в Linux, их надо будет хорошенько отре­дактировать. Но это не создавать и не отлаживать политики с нуля!