5 декабря 2010 г.

Аудит системных событий (auditd)

Аудит системных событий (auditd)


В ОС Linux, начиная с версии ядра 2.6, существует возможность журналировать такие события, как доступ к файлам и выполнение системных вызовов.
Процесс организации аудита системных событий ОС Linux состоит из следующих действий:


Установка и настройка демона аудита (auditd).  Для установки Auditd в Ubuntu необходимо набрать команду
sudo apt-get install auditd
В состав пакета auditd так же входит 3 утилиты для управления системой аудита и поиска в журналах записей системы.

autrace- утилита аудита событий, порождаемых процессом.
Система аудита позволяет следить за выполнением определенного процесса, используя утилиту autrace . Это особенно полезно при поиске проблем в работе различных демонов. 

ausearch- утилита для поиска записей в журналах аудита.

aureport- утилита строящая отчеты. Утилита aureport используется для формирования отчетов на основе журнального файла аудита audit.log.

Настройка правил аудита, удовлетворяющих заданным условиям.
По умолчанию системный аудит отключен. Для его активации необходимо настроить запуск ядра с параметром audit=1. Если данный параметр присутствует, а демон auditd не запущен, то события журналируются в файл /var/log/messages.
Для того чтобы использовать аудит, в системе необходимо установить пакет audit. Демон auditd позволяет системному администратору настраивать процесс аудита, а именно:
  • Задавать отдельный файл для журналирования событий.
  • Определять ротацию журнального файла событий.
  • Задавать оповещения в случае переполнения журнала событий.
  • Определять уровень детализации событий.
  • Настраивать правила аудита.
В процессе своей работы демон auditd использует конфигурационный файл /etc/audit/auditd.conf. На каждой строке данного файла указываются соответствующие директивы, значения которых указываются после знака «=».

log_file = /var/log/audit/audit.log
log_format = RAW
priority_boost = 3
flush = incremental
freq = 20
num_logs = 4
dispatcher = /sbin/audispd
disp_qos = lossy
max_log_fi1e = 5
max_log_file_action = rotate
space_left = 75
space_left_action = syslog
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = suspend
disk_full_action = suspend
disk_error_action = suspend


Значения по умолчанию для конфигурационного файла /etc/audit/auditd.conf

В директиве log_file указывается файл, куда будут журналироваться события. По умолчанию, таки м файлом является файл /var/log/audit/audit.log. В директиве log_format указывается формат данных, которые необходимо журанлировать. В случае указания значения RAW в данной директиве, события записываются в файл в том виде, в котором они поступают из ядра. В директиве flush определяется частота журналирования событий. Если для данной директивы указано значение INCREMENTAL, то очистка журнала определяется на основе директивы freq, в которой указывается количество записей, которые принимает демон auditd, прежде чем записать их в журнал.
Если в файле auditd.conf указана директива max_log_file_action со значением ROTATE, то журнальные файлы будут ротироваться, достигнув размера, заданного в директиве max_log_file (в Мб). В директиве num_logs определяется количество журнальных файлов, которые должны быть сохранены, прежде чем будет выполнена ротация данных.
В директиве dispatcher задается программа, которая обрабатывает все события аудита. Она может использоваться для формирования отчетов или конвертации журнала в формат, понимаемый другими программами анализа журнальных файлов. Директива disp_qos определяет параметры взаимодействия данной программы с демоном auditd. Если в данной директиве указано значение lossy, то события, посланные данной программе, удаляются, если буфер обмена данными между демоном auditd и данной программой полностью заполнен (по умолчанию размер данного буфера составляет 128Кб). Запись событий по-прежнему осуществляется, если в директиве log_format не указано значение nolog.
В директивах space_left и space_left_action задается, соответственно, предел свободного дискового пространства раздела, на котором располагаются данные аудита, и действие, которое нужно выполнить в случае превышения указанного предела. Если указано значение SYSLOG, то в журнал сервиса syslog будет записано соответствующее предупреждение. В директивах disk_full_action и disk_error_action указываются, соответственно, действие выполняемое в случае заполнения дискового пространства на разделе, содержащем журнальные файлы аудита, и действие выполняемое в случае обнаружения ошибки записи данных в журнальный файл или его ротации. По умолчанию, для данных директив задано значение SUSPEND, при котором следующие события записываться в журнальный файл аудита не будут, а действия, выполняемые в настоящий момент над журнальным фалом, завершатся.
Для настройки правил аудита системных вызовов и слежения за файлами и каталогами используется утилита auditctl. Если сервис auditd настроен на автозапуск, то правила аудита системных вызовов и слежения за объектами файловой системы можно задать в файле /etc/audit/audit.rules. Каждое правило аудита должно задаваться в отдельной строке. Форма записей правил и средств имеет вид аргументов командной строки для команды auditctl. Демон auditd считывает правила сверху вниз и если будет обнаружено два конфликтующих правила, то предпочтение будет отдано первому найденному правилу.
Каждая строка описания правила аудита системных вызовов имеет следующий синтаксис:

-а ,

В качестве параметра указывается список событий, в который добавляется данное правило. К таким спискам относятся списки task (используется для ведения событий, связанных с созданием процессов), user (используется для ведения событий, в которых указываются параметры пользовательского пространства, такие как uid, pid и gid), exclude (используется для запрета аудита указанных в данном списке событий), entry (используется для регистрации событий системных вызовов) и exit (используется для регистрации событий системных вызовов).
В качестве параметра указывается одно из действий, предпринимаемых по отношению к указанным в списках событиям. Доступно всего два действия: never и always. Пи указании действия never, события не записываются в журнал аудита. Указание действия always имеет противоположный эффект.
В параметре задаются опции, являющиеся фильтрами, при помощи которых можно детализировать события аудита. Полный список опций можно посмотреть в руководстве man для команды auditdctl. В качестве опций можно задавать уникальные идентификаторы пользователя или процесса, название системного вызова и многое другое. При этом, возможно использовать логические выражения для формирования комбинированных опций.
Добавлять правила в данный файл можно также при помощи команды auditdctl, используя ключ -а. При этом правила, добавляются в конец файла auditd.conf. Для того, чтобы добавить правило в начало данного файла, необходимо использовать ключ .

-a exit,always -s open -f uid=502 -f key=502open
-a entry,always -s chown
 

Образец определения двух правил в файле auditd.conf.

В первом случае задается правило, которое фиксирует все события, связанные с системным вызовом open, выполняемым от пользователя с идентификатором 502. Записи, удовлетворяющие данному условию, помечаются в файле audit.log меткой 502ореп. Во втором случае задается правило, которое фиксирует все системные вызовы chown.

Когда заданное в правиле действие будет выполнено, результат его выполнения заносится в журнал /var/log/auidt/auidit.log.type=PATH msg=audit(1233260763.459:334): item=0 name="/etc/passwd" inode=852389 dev=08:02 mode=0100644 ouid=0 ogid=0 rdev=00:00
type=SYSCALL msg=audit(1233260763.460:335): arch=40000003 syscall=5 success=yes exit=3 a0=928e350 al=8000 a2=0 a3=8000 items=l ppid=3529 pid=3551 auid=0 uid=502 gid=502 euid=502 suid=502 fsuid=502 egid=502 sgid=502 fsgid=502 tty=ptsl comm="vim" exe="/usr/bin/vim" key="502open"


  Записи данного журнала

Помимо слежения за системными вызовами, система аудита ОС Linux позволяет следить за доступом к файлам и каталогам. Для этого в файле auidt.rules необходимо создать правило имеющее следующий синтаксис:

-w -к

В параметре указывается полный путь к файлу или каталогу, за которым необходимо следить. Параметриспользуется для пометки всех событий, связанных с доступом указанному файлу. Это позволяет быстро находить интересующую информацию в журнальном файле. В следующем примере приведены два правила, в которых осуществляется слежение за файлами в каталоге /etc/sysconfig, а также слежение за доступом к команде iptables:

-w /etc/sysconfig -k sysconfig
-w /sbin/iptables -k iptables -p x


В ключах -k указываются соответствующие метки событий. Ключ -р х во втором правиле указанного примера обозначает, что необходимо рассматривать только события, связанные с выполнением данного файла.
Для управления правилами, помимо редактирования конфигурационного файла audit.rules, можно использовать команду auditctl. Для просмотра активных правил аудита необходимо выполнить команду auditctl -l. Для определения статуса системы аудита необходимо выполнить команду auditctl -s.
Обычно журнальный файл системы аудита событий ОС Linux можно просматривать при помощи любого текстового редактора. Однако для выполнения общего анализа событий требуется суммировать отдельные записи в данном файле, что практически нереально выполнить, используя только возможности текстового редактора.
Для формирование более детального отчета необходимо выполнять команду aureport с использованием дополнительных ключей, который можно найти в руководстве man по данной команде. Например, для отображения статистики об измененных файлах, необходимо запустить команду aureport с ключом .

Комментариев нет:

Отправить комментарий