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.

Разбор инцидента по шагам

Действуйте последовательно и фиксируйте каждый шаг. Не редактируйте исходный журнал: сначала сохраните копию и посчитайте хеш.

  1. Определите окно времени по первому подозрительному событию.
  2. Выгрузите события: ausearch -ts ... -te ... -i.
  3. Постройте цепочку pid → ppid → auid и найдите родительский процесс.
  4. Проверьте USER_AUTH и USER_LOGIN на неудачные попытки.
  5. Сверьте изменения файлов с легитимными работами и деплоями.
  6. Сохраните копию журнала, хеш и список правил на момент инцидента.
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.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте