В этой статье я расскажу, как устроена подсистема аудита, как ей управлять, а также как получить журнал аудита всех интересующих тебя событий.
Подсистема аудита в Linux состоит из двух групп компонентов: в пространстве ядра это kauditd, а в пользовательском — auditd.
В общем виде схема работы подсистемы аудита выглядит следующим образом.
Ядро, принимая системные вызовы из user space, пропускает их через фильтры user , task , filesystem , exclude и exit .
- Фильтр
user используется для фильтрации (исключения) событий, происходящих в пользовательском пространстве до отправки в auditd. Практически никогда не используется.
- Фильтр
task применяется для системных вызовов fork() и clone() .
- Фильтр
filesystem используется для исключения событий для конкретной файловой системы.
- Фильтр
exclude задает исключения для событий.
- Фильтр
exit проходят все системные вызовы. Обычно настраивают именно этот фильтр.
Через netlink(7) сообщения отправляются из kauditd в auditd. При получении событий, демон auditd записывает их в лог (по умолчанию /var/log/audit/audit.log ).
Настраивая фильтры с помощью утилиты auditctl, мы можем управлять потоком событий, который хотим получать. С помощью утилит ausearch, aureport, aulast удобно просматривать журнал аудита.
Давай теперь установим и настроим все подсистемы аудита. Установка крайне проста и не вызывает никаких сложностей:
$ sudo systemctl enable --nowauditd
Статус работы подсистемы аудита можно получить так:
$ sudo auditctl -s enabled 1 failure 1 pid 885 rate_limit 0 backlog_limit 8192 lost 0 backlog 0 backlog_wait_time 60000 loginuid_immutable 0 unlocked
Для теста есть возможность отправить текстовое сообщение в подсистему аудита и убедиться, что соответствующее событие попало в журнал аудита.
$ sudo auditctl -m helloaudit
$ sudo ausearch -m USER
---- type=USER msg=audit(08/31/2021 19:20:11.160:330699) : pid=305708 uid=root auid=andrey ses=5 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='text=helloaudit exe=/usr/sbin/auditctl hostname=rhel.ipa.localdomain addr=? terminal=pts/0 res=success'
Настройки демона auditd представлены в файле /etc/audit/auditd.conf . Конфиг по умолчанию рабочий и не требует изменений, оставляем его как есть.
Разберемся теперь, как управлять фильтрами kauditd. Все настройки фильтров группируются в файлы правил. Формат правил аналогичен синтаксису консольной программы auditctl. Демон auditd загружает эти правила последовательно при старте системы либо вручную по команде пользователя.
info
Важный момент: чтобы наши правила применялись после перезагрузки, необходимо записать их в файл, в каталог /etc/audit/rules.d/ .
Примеры правил ты можешь найти в каталоге /usr/share/audit/sample-rules/ . Правила аудита бывают следующих типов:
Управляющие правила настраивают систему аудита и поведение агента. Все возможные опции перечислены в мане auditctl(8) .
Правила файловой системы необходимы для наблюдения за файлом или каталогом, доступ к которым мы хотим контролировать. Формат правила следующий:
-wpath-to-file -ppermissions -kkeyname
Ключ -w указывает на то, что это правило файловой системы. Далее следует путь к файлу или каталогу.
Ключ -p может содержать любые комбинации прав доступа r (чтение), w (запись), x (выполнение) и a (изменение атрибута).
Ключ -k задает имя правила, по которому впоследствии можно фильтровать логи.
Правила системных вызовов используются для мониторинга системных вызовов, выполняемых любым процессом или конкретным пользователем. Правило имеет следующий формат:
-aaction,list -Ssyscall -F field=value -kkeyname
Ключ -a означает append (добавление) правила в фильтр.
Действие action может быть always (всегда создавать события) или never (никогда не создавать события).
Фильтр list содержит один из возможных вариантов: task , exit , user , filesystem или exclude .
-S указывает конкретный syscall (имя или номер); можно в одном правиле указывать сразу несколько syscall, каждый после своего ключа -S .
-F задает фильтр по полям. Рекомендуется всегда указывать разрядность, добавляя в правила фильтр -F arch=b64 .
Ключ -k — имя правила. Как и в правиле файловой системы, используется для маркировки событий для последующей фильтрации лога.
Важно отметить, что правила системных вызовов значительно влияют на производительность системы в целом. Старайся сократить их количество и объединяй правила, где это возможно.
В качестве тренировки создадим правило аудита для регистрации изменения файла /etc/passwd .
Перейти обратно к новости
|