auditd — подсистема ядра Linux, которая фиксирует события безопасности: изменения файлов, запуск привилегированных команд, неудачные попытки доступа и входы в систему. В отличие от обычных логов, правила аудита задаются явно, а записи содержат идентификаторы пользователя, процесса и сессии. Разберём установку, правила, чтение журнала и порядок разбора инцидента.
Что именно фиксирует auditd
Ядро передаёт события демону auditd, который пишет их в /var/log/audit/audit.log. Правила бывают двух видов: наблюдение за файлом и фильтрация системных вызовов.
- Watcher — отслеживает доступ к файлу: чтение, запись, выполнение, смену атрибутов.
- Syscall — реагирует на вызовы вроде
execve,openat,setuid. - Key — метка правила, по которой удобно искать события.
Аудит не предотвращает действия. Его задача — оставить проверяемый след и помочь восстановить хронологию.
Установка и проверка состояния
В Debian и Ubuntu пакет называется auditd, плагины для удалённой пересылки — audispd-plugins.
sudo apt install auditd audispd-plugins
sudo systemctl enable --now auditd
sudo auditctl -s
sudo systemctl status auditd --no-pager
Команда auditctl -s показывает, включён ли аудит, сколько правил загружено, переполнялся ли буфер и сколько событий потеряно. Ненулевой счётчик lost означает, что правила слишком тяжёлые или буфер мал.
Настройка auditd.conf
Файл /etc/audit/auditd.conf управляет журналами и поведением при переполнении диска.
max_log_file = 100
num_logs = 10
space_left_action = email
admin_space_left_action = single
disk_full_action = halt
flush = incremental
freq = 50
flush = incremental сбрасывает данные на диск каждые freq записей, снижая риск потери событий при сбое питания. Режим halt при полном диске выбирают только там, где требования безопасности важнее доступности.
Правила: файлы и каталоги
Правила удобно хранить в /etc/audit/rules.d/ и собирать командой augenrules. Начните с минимального набора, который отвечает на вопросы «кто менял учётные записи» и «кто правил конфигурацию SSH».
-D
-b 8192
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/crontab -p wa -k cron
-e 2
Флаг -p wa означает запись и изменение атрибутов. Для каталога наблюдение не рекурсивно: вложенные файлы нужно добавлять отдельно. Строка -e 2 блокирует правила до перезагрузки — это защита от злоумышленника, который попытается отключить аудит.
Правила: системные вызовы
Фильтр по вызовам позволяет замечать запуск команд от root, отказы в доступе и смену привилегий.
-a always,exit -F arch=b64 -S execve -F euid=0 -F auid>=1000 -F auid!=4294967295 -k root_exec
-a always,exit -F arch=b64 -S openat,open -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access_denied
-a always,exit -F arch=b64 -S setuid,setgid -F auid>=1000 -F auid!=4294967295 -k privilege_change
Поле auid — исходный идентификатор пользователя, который сохраняется даже после sudo. Значение 4294967295 означает «не установлен»: такие события часто создают служебные процессы и шумят в отчётах.
Загрузка и неизменяемый режим
Файлы в rules.d не действуют автоматически. Загрузите их и проверьте список.
sudo augenrules --load
sudo auditctl -l
sudo auditctl -s
Если в правилах уже есть -e 2, изменить конфигурацию без перезагрузки не получится: ядро вернёт ошибку. На время отладки уберите строку, а перед вводом в эксплуатацию верните и перезагрузитесь.
Чтение событий: ausearch
Главный инструмент разбора — ausearch. Флаг -i переводит числовые идентификаторы в имена, -k фильтрует по метке, -ts и -te задают окно времени.
sudo ausearch -k identity -i --start today
sudo ausearch -m USER_LOGIN --success no -i
sudo ausearch -m EXECVE -ts recent -i | grep -A3 sudo
sudo ausearch -f /etc/shadow -i
Для инцидента важны поля pid, ppid, uid, auid, ses и comm. По ним восстанавливается цепочка событий. Аргументы команды видны в записях EXECVE как a0, a1 и далее.
Отчёты: aureport
Когда нужна общая картина, aureport строит сводки по входам, отказам, файлам и процессам.
sudo aureport --auth --summary
sudo aureport --failed --summary
sudo aureport -f -i --summary
sudo aureport --start today --summary
Отчёт по файлам показывает, к каким путям было больше всего обращений. Всплеск на /etc/passwd или /etc/shadow — повод посмотреть детали через ausearch.
Разбор инцидента по шагам
Действуйте последовательно и фиксируйте каждый шаг. Не редактируйте исходный журнал: сначала сохраните копию и посчитайте хеш.
- Определите окно времени по первому подозрительному событию.
- Выгрузите события:
ausearch -ts ... -te ... -i. - Постройте цепочку
pid→ppid→auidи найдите родительский процесс. - Проверьте
USER_AUTHиUSER_LOGINна неудачные попытки. - Сверьте изменения файлов с легитимными работами и деплоями.
- Сохраните копию журнала, хеш и список правил на момент инцидента.
sudo cp /var/log/audit/audit.log /var/evidence/audit-$(date +%F-%H%M).log
sha256sum /var/evidence/audit-*.log >> /var/evidence/hashes.txt
sudo auditctl -l > /var/evidence/rules.txt
sudo ausearch -ts today -i > /var/evidence/events.txt
Централизованная пересылка
Локальный журнал можно удалить или подделать при компрометации. Надёжнее отправлять события на отдельный сервер. Плагин audisp-remote настраивается в двух файлах.
# /etc/audit/plugins.d/au-remote.conf
active = yes
direction = out
path = /sbin/audisp-remote
type = always
format = string
# /etc/audit/audisp-remote.conf
remote_server = 10.0.40.10
port = 60
transport = tcp
queue_depth = 1024
На принимающей стороне включите прослушивание: tcp_listen_port = 60 в auditd.conf. Штатный транспорт не шифрует данные, поэтому пересылку делают в выделенном сегменте; при необходимости включается механизм Kerberos. Проверьте, что события действительно приходят.
Производительность и типичные ошибки
- Слишком широкие правила. Наблюдение за всем
/etcбез необходимости создаёт шум. - Малый буфер. Увеличивайте
-bпостепенно и следите заlostвauditctl -s. - Отсутствие ротации. Проверьте
num_logsи свободное место на разделе. - Правила не загружены. После правки файла нужен
augenrules --load. - Наблюдение за каталогом без вложений. Добавляйте ключевые файлы отдельными правилами.
Чек-лист внедрения
- Служба включена в автозапуск, журнал ротируется.
- Правила покрывают учётные записи, sudo, SSH и cron.
- Включён неизменяемый режим
-e 2. - Настроена пересылка на отдельный хост.
- Проверены команды
ausearchиaureportна тестовом событии. - Есть регламент сохранения доказательств при инциденте.
Итог
auditd превращает разрозненные следы в проверяемую хронологию событий. Начните с минимального набора правил для учётных записей и sudo, проверьте отсутствие потерь и только потом расширяйте покрытие. Сочетание неизменяемых правил, централизованной пересылки и отработанного порядка разбора даёт то, чего не даёт обычный syslog.