Перейти к содержанию

Аудит системных событий: мониторинг и анализ безопасности

Для обеспечения безопасности и стабильности Linux-системы недостаточно лишь предотвращать угрозы — важно уметь выявлять и расследовать инциденты. Системный аудит не блокирует атаки, но позволяет зафиксировать факт нарушения, определить его источник и масштаб, а также подготовить доказательную базу для анализа.

Ключевой инструмент аудита в большинстве дистрибутивов — демон auditd. Он отслеживает вызовы ядра (system calls), регистрирует действия пользователей и процессов и сохраняет события в структурированных журналах.


Как работает auditd

Система аудита «подключается» к ядру через триггеры, срабатывающие при входе в системный вызов (entry) или выходе из него (exit). Правила определяют, какие вызовы, файлы, пользователи или процессы подлежат мониторингу. Все зафиксированные события записываются в /var/log/audit/audit.log.

С помощью auditd можно отслеживать:

  • Запуск/остановку системы и служб
  • Работу с критичными файлами (/etc/passwd, /etc/shadow, конфиги SSH и т.д.)
  • Изменение прав доступа, владельца или атрибутов файлов
  • Создание/удаление файлов, каталогов, ссылок
  • Монтирование файловых систем
  • Сетевые подключения и изменения конфигурации
  • Действия конкретных пользователей или процессов

Установка и компоненты

В CentOS/RHEL пакет audit установлен по умолчанию.
В Debian/Ubuntu устанавливается командой:

sudo apt-get install auditd

Основные утилиты:

Утилита Назначение
auditctl Управление правилами и состоянием аудита (динамическая настройка)
ausearch Поиск событий в журналах по различным критериям (пользователь, файл, syscall и др.)
aureport Генерация сводных отчётов (по файлам, пользователям, времени и т.п.)
autrace Трассировка системных вызовов процесса (аналог strace, но с интеграцией в аудит)

Конфигурация демона — в /etc/audit/auditd.conf (буферы, поведение при переполнении, ротация логов и др.). Стандартные настройки обычно подходят для большинства сценариев.


Настройка правил аудита

Правила задаются либо динамически через auditctl, либо статически — в файле /etc/audit/audit.rules.

Базовый синтаксис:

sudo auditctl -a <список>,<действие> -S <syscall> -F <фильтр>
  • Списки событий:
    task — создание процессов
    entry / exit — вход/выход из syscall (наиболее часто используются)
    user — события в пользовательском пространстве
    exclude — исключения

  • Действия:
    always — логировать событие
    never — игнорировать

  • Примеры:

# Отслеживать открытие файлов в /etc с записью или изменением атрибутов
sudo auditctl -a exit,always -S open -F path=/etc/ -F perm=wa

# То же самое — проще и эффективнее для файлов/каталогов:
sudo auditctl -w /etc/ -p wa

# Конкретный файл:
sudo auditctl -w /etc/passwd -p wa

Примечание

-p wa означает: **w**rite (запись) и **a**ttribute change (изменение метаданных: права, владелец и т.д.)

Постоянные правила — в /etc/audit/audit.rules

Формат совпадает с командами auditctl, но без самой команды:

# Очистка старых правил
-D
# Буфер и реакция на переполнение
-b 320
-f 1

# Отслеживание критичных файлов
-w /etc/passwd -p wa
-w /etc/shadow -p wa
-w /etc/ssh/sshd_config -p wa

# Файлы аудита — защищаем от подмены
-w /etc/audit/audit.rules -p wa
-w /etc/audit/auditd.conf -p wa

# Логи аудита
-w /var/log/audit/

# Системные вызовы: изменение прав, создание файлов, монтирование и др.
-a exit,always -S chmod,fchmod,chown,fchown,lchown
-a exit,always -S creat,open,truncate,ftruncate
-a exit,always -S mkdir,rmdir
-a exit,always -S mount,umount,umount2

После редактирования файла примените изменения:

sudo systemctl restart auditd


Анализ журналов

Журналы хранятся в /var/log/audit/. Основные инструменты — aureport и ausearch.

aureport — сводки и отчёты

# Отчёт по обращениям к файлам
sudo aureport -f

# Только за последние 10 минут (+ человекочитаемые имена)
sudo aureport -f -i --start recent

# Сводка по файлам (сколько раз к какому обращались)
sudo aureport -f --summary

# Отчёт за конкретный период
sudo aureport --start 08/20/2025 12:00 --end 08/20/2025 13:00 -f

# Удобные временные метки: today, yesterday, this-week, recent, now
sudo aureport -f --start today --summary

Пример поиска подозрительного доступа:

sudo aureport -f -i --start today | grep /etc/passwd

ausearch — детальный анализ событий

# По ID события (из отчёта aureport)
sudo ausearch -a 123456

# По пользователю (UID)
sudo ausearch -ui 1001 -i

# По исполняемому файлу
sudo ausearch -x /usr/bin/sudo -i

# По системному вызову
sudo ausearch -sc openat -i

# По службе (например, cron)
sudo ausearch -tm cron -i

# С временным ограничением
sudo ausearch --start 08/20/2025 12:00 --end 08/20/2025 13:00 -f /etc/passwd

Примечание

Флаг -i (или --interpret) заменяет UID/GID и коды вызовов на понятные имена.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×