Исследование системных вызовов.
Словосочетание «системный вызов» часто применяется администраторами без полного понимания его сути. Представим, что системный вызов - это запрос (на получение ресурсов или выполнение действий) пользовательским приложением ядра, например запрос на создание каталога (системный вызов sys_mkdir), или запрос на установку системных часов (sys_stime), или запрос на монтирование файловой системы (sys_mount).
В Linux обусловлено почти 200 системных вызовов, которые используются для разных действий. Полный список системных вызовов доступен на сайте: http://linuxassembly.org/syscall.html.
Системные вызовы вызывают большой интерес с точки зрения безопасности: контролируя системные вызовы, можно контролировать все действия процесса. В мире OpenBSD очень знаменита программа Systrace (www.systrace.org), которая доступна и для Linux.
Эта утилита дает возможность установить для каждого приложения список разрешенных системных вызовов. Неразрешенные вызовы будут протоколироваться с помощью syslog. Кроме охраны системных вызовов, Systrace позволяет следить за аргументами, передающихся системным вызовам. Это позволяет, например, разрешить сетевому сервису использовать системный вызов sys_bind(), но только для определенного порта или читать конфигурационный файл только из каталога /etc.
Systrace предлагает режим интерактивного обучения, в процессе которого задаются разрешенные вызовы и их параметры. Можно представить объем работы, который нужно проделать.
Установка Systrace.
Systrace состоит из трех частей: патча ядра, инструмента администрирования и графической оболочки (необязательно). Все это доступно по адресу:
http://www.citi.umich.edu/u/provos/systrace/.
После того, как Systrace-патч установлен, в меню Security Options утилиты конфигурирования ядра появится опция Systrace Support (CONFIG_SYSTRACE) (имеется в виду ядро версии 2.6). Включите эту опцию.
После пересборки ядра надо приступить к установке пользовательских приложений. Systrace нужна библиотека libevent, она доступна по адресу: http://monkey.org/~provos/libevent, поэтому ее можно установить перед установкой systrace. При конфигурировании systrace желательно указать путь к этой библиотеке:
Теперь можно откомпилировать приложение как обычно:
# make install
Скорее всего, при компиляции появится сообщение о том, что не найден файл linux/systrace.h. Это исправляется следующим образом:
# make
# make install