Создание файла политик Systrace.
Несмотря на то, что синтаксис файла политики простой, внесение в него любого системного вызова дело довольно непростое. Кроме знания, что делает некоторый системный вызов, нужно описать каждый системный вызов, используемый приложением.
Чтобы не забыть какой-нибудь вызов, нужно провести трассировку системных вызовов с помощью ранее рассмотренной программы systrace. Когда будет создан базовый файл политик, разрешающий все необходимые приложению системные вызовы, нужно приступить к ужесточению правил - к исследованию различных системных вызовов, которые могут быть использованы для атаки.
Создание файла политики - занятие изрядно утомительное. Systrace предоставляет альтернативный способ.
Автоматическое создание файла политик.
Одна из лучших функций Systrace - это режим обучения, во время которого программа заносит все используемые процессом системные вызовы в файл политик. Все, что останется сделать, - это отредактировать файл политик.
Для автоматического генерирования файла политик применяется опция -А, переключающая Systrace в режим обучения. В качестве второго аргумента надо задать любое приложение, кроме самого Systrace:
В следующем примере программа будет изучать системные вызовы сервера аутентификации ident. Если посмотреть список процессов, то можно увидить два процесса: один - демон мониторинга systrace, а второй - для другого демона (получившего доступ к порту 113 и запущенного от имени пользователя nobody):
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).
В результат тестирования был сгенерирован следующий файл:
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 с параметром -а (а не -А):
Во время данного процесса каждое нарушение правил будет запротоколировано в файле /var/log/messages. Вне зависимости, писался ли файл самостоятельно или он был сгенерирован systrace, можно проверить файл /var/log/messages . Удалим из файла политик строку, разрешающую чтение /etc/passwd:
Тогда в файле /var/log/messages появится сообщение о том, что чтение файла /etc/passwd не разрешено:
Интерактивная проверка файла политик
Systrace позволяет проверять файл политик в так называемом интерактивном режиме В этом режиме systrace запрашивает у владельца процессов, что исполнять с любым не разрешенным (точнее, с неуказанным в файле политик) действием.
Для запуска systrace в интерактивном режиме не надо указывать опции программы:
В интерактивном режиме программа просто запрашивает, что сделать с тем или иным системным вызовом: разрешить или запретить.
Если не установлена система X11, то можно запустить systrace в текстовом режиме, для этого используется опция -t.
Готовые файлы политик.
Создание файла политик (даже с помощью функции автоматического генерирования и интерактивного режима) - занятие достаточно рутинное и далеко не у всех есть время этим заниматься. Поэтому можно использовать уже готовые файлы политик.
В интернете можно найти и скачать более 200 уже протестированных файлов политик для различных приложений - от sed до gaim. Все, что остается сделать, - это всего лишь скачать нужный файл и записать его в каталог /etc/systrace.
Правда, есть одно «но»: все файлы которые мне встречались были предназначены для OpenBSD, и для того, чтобы нужно было употреблять в Linux, их надо будет хорошенько отредактировать. Но это не создавать и не отлаживать политики с нуля!