auditd (аудит Linux)
auditd это пользовательский демон подсистемы аудита Linux (Linux Audit), который записывает события аудита ядра на диск. Что фиксировать, вы задаёте правилами для файлов и системных вызовов, а журнал затем разбираете через ausearch и aureport. Он показывает, кто изменил файл или запустил команду, поэтому служит важным источником улик при расследовании вторжения.
Что такое auditd и как работает подсистема аудита Linux
Подсистема аудита Linux состоит из части в ядре и части в пользовательском пространстве. Ядро создаёт запись, когда событие совпадает с правилом, а также для событий, встроенных в систему, например входов и использования аутентификации. auditd это демон, который записывает эти данные на диск, по умолчанию в /var/log/audit/audit.log. auditctl загружает правила в ядро, а ausearch и aureport ищут по журналу и строят сводки. Настройки демона находятся в /etc/audit/auditd.conf (см. auditd(8)).
В справке audit.rules(7) названы три вида правил: управляющие, которые настраивают систему, правила файловой системы (watches) и правила системных вызовов. Правила могут сопоставлять поля вроде auid, то есть идентификатор, под которым пользователь изначально вошёл в систему, и именно так действие от имени root связывается с конкретным входом. Каждому правилу можно задать ключ, метку до 31 байта, по которой потом ищут. Заранее продуманные ключи это самая полезная привычка, ведь расследование опирается на них.
Правила: написание, загрузка и поиск
Постоянные правила кладут в файлы с расширением .rules в каталоге /etc/audit/rules.d/. augenrules объединяет их в /etc/audit/audit.rules, а augenrules --load загружает результат. В man-страницах старая форма -w помечена как устаревшая из-за низкой производительности, а рекомендуется форма с системным вызовом и полями path, dir и perm:
# /etc/audit/rules.d/50-intrusion.rules
-a always,exit -F arch=b64 -F path=/etc/passwd -F perm=wa -k identity
-a always,exit -F arch=b64 -F path=/etc/shadow -F perm=wa -k identity
-a always,exit -F arch=b64 -F dir=/etc/ssh -F perm=wa -k sshconfig
-a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=unset -k exec
Здесь perm=wa означает запись или изменение атрибутов. Если в системе работают и 32-разрядные программы, добавьте такие же правила с arch=b32. Загруженные правила смотрите через auditctl -l, а состояние ядра через auditctl -s. Затем расследуйте через ausearch(8) и aureport(8):
aureport --start this-week --key --summary
ausearch --start today -k identity -i
Первая команда показывает, какие ключи срабатывали чаще всего, вторая выводит подходящие события с числовыми идентификаторами, переведёнными в имена.
Производительность, ограничения и типичные ошибки
Документация auditctl(8) говорит прямо: правила системных вызовов проверяются для каждого системного вызова, поэтому чем их больше, тем дороже. Указывайте поле arch, объединяйте вызовы в одно правило и избегайте широких правил вроде аудита каждого открытия файла.
Проверьте, что аудит вообще включён. Во многих системах правило -a never,task из 10-no-audit.rules заставляет каждый новый процесс пропускать правила аудита, поэтому ваши правила не срабатывают, и справка советует искать его в выводе auditctl -l. Параметр audit=1 в командной строке ядра делает процессы, запущенные до auditd, доступными для аудита.
Заранее оцените объём. Параметры max_log_file, max_log_file_action и num_logs в auditd.conf задают размер и ротацию, а disk_full_action может даже остановить машину, поэтому выбирайте его осознанно. Если буфер ядра переполняется, дальше решает режим отказа (по умолчанию сообщение ядра, при желании паника), а auditctl -s показывает буфер и потерянные события. Последняя строка -e 2 блокирует правила до перезагрузки, что мешает злоумышленнику отключить аудит, но и вам не даст их менять. Root всё равно может править локальный файл журнала, поэтому пересылайте его на другой хост.
Место auditd в мониторинге и реагировании на инциденты
Большинство логов сообщает, что что-то произошло. auditd говорит, кто это сделал и чем: какой вход запустил команду и какая учётная запись тронула /etc/passwd или файл настроек SSH. В справке audit.rules цель названа прямо: проводить расследование периодически или при инциденте. Как и контроль целостности файлов, он не видит прошлого, поэтому правила нужны до инцидента.
Используйте его вместе с другими источниками. В журнале лежат сообщения служб и аутентификации, а rsyslog может отправлять копии за пределы машины. В руководстве auditd также описан приём событий от других демонов аудита через плагин audisp-remote, так что и записи аудита можно вывести с хоста. Что заслуживает оповещения, читайте в руководстве по мониторингу, о модели привилегий, которую вы аудируете, в руководстве по sudo, а о том, как записи аудита попадают в хронологию, в руководстве по реагированию на взлом.
Связанные термины: journalctl, rsyslog, Контроль целостности файлов, Реагирование на инциденты, SIEM.
Часто задаваемые вопросы
Что такое auditd?
auditd это демон подсистемы аудита Linux. Он записывает данные аудита, которые создаёт ядро по правилам и для встроенных событий вроде входов, по умолчанию в /var/log/audit/audit.log.
Как следить за изменениями файла через auditd?
Добавьте правило вида -a always,exit -F arch=b64 -F path=/etc/passwd -F perm=wa -k identity, где perm=wa означает запись или изменение атрибутов. Старая форма -w ещё работает, но помечена как устаревшая из-за низкой производительности.
Как искать по логам auditd?
Используйте ausearch для поиска событий, например ausearch --start today -k identity -i, и aureport для сводок, например aureport --start this-week --key --summary. Поиск по ключу работает только если вы задали ключи при написании правил.
Замедляет ли auditd сервер?
Может. В документации сказано, что правила системных вызовов проверяются для каждого системного вызова, поэтому чем их больше, тем выше затраты. Держите правила немногочисленными и точными, задавайте поле arch и объединяйте вызовы в одном правиле.
Как сделать правила auditd постоянными?
Поместите их в файл с расширением .rules в каталоге /etc/audit/rules.d/ и выполните augenrules --load. augenrules объединяет файлы в /etc/audit/audit.rules, который загружается при запуске демона.
Хотите увидеть, в каком состоянии ваш сервер?
Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.
Получить бесплатную проверку сервераОткрыть Security Lab