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

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

Исследование системных вызовов.

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

Словосочетание «системный вызов» часто применяется администраторами без полного понимания его сути. Представим, что системный вызов - это запрос (на получение ресурсов или выполнение действий) пользователь­ским приложением ядра, например запрос на создание каталога (системный вызов sys_mkdir), или запрос на установку системных часов (sys_stime), или запрос на монтирование файловой системы (sys_mount).

     В Linux обусловлено почти 200 системных вызовов, которые используются для разных действий. Полный список системных вызовов досту­пен на сайте: http://linuxassembly.org/syscall.html.


     Раньше была использована программа strace для трассировки систем­ных вызовов процесса: эта программа запускала процесс и выводила на кон­соль все системные вызовы, произведенные этим процессом. Тогда список системных вызовов маленькой программы id занял около 3 страниц - так оно и есть. Можно удивиться, если увидить список системных вызовов маленьких программ, как pwd или uname - первая выводит текущий каталог, а другая - название операционной системы и ее версию.

     Системные вызовы вызывают большой интерес с точки зрения бе­зопасности: контролируя системные вызовы, можно контролировать все действия процесса. В мире 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 желательно указать путь к этой библиотеке:

$ ./configure -with-libevent=/usr/local

     Теперь можно откомпилировать приложение как обычно:

$ make

# make install

     Скорее всего, при компиляции появится сообщение о том, что не найден файл linux/systrace.h. Это исправляется следующим образом:

# ср /usr/src/linux-2.6.1/include/linux/systrace.h /usr/include/linux/systrace.h

# make

# make install