Проверка системных событий
Для обеспечения безопасности и надежности операционной системы необходимо внимательно следить за ее работой. Это включает в себя мониторинг, анализ логов и, конечно же, аудит системных событий. Несмотря на то, что аудит сам по себе не является средством защиты от возможных инцидентов, он играет важную роль в выявлении нарушений безопасности и последующей их устранении.
Для этой цели используется специальная утилита под названием auditd, которая обеспечивает мониторинг системных операций и их анализ. Система аудита устанавливает триггеры на функции, обрабатывающие системные вызовы (которые являются фундаментальными операциями в ядре системы). Затем эти триггеры срабатывают в соответствии с правилами, заданными администратором. Информация о всех этих действиях записывается в журнал, который впоследствии может быть проанализирован.
С auditd можно следить за различными событиями, такими как запуск и завершение работы системы, выполнение приложений, доступ к файлам и изменение их прав доступа, изменения данных о пользователях и группах, создание сетевых соединений, а также изменение сетевых настроек и многое другое.
Установка
В большинстве случаев, пакет audit уже установлен по умолчанию в системах CentOS.
Для Debian / Ubuntu вы можете выполнить следующую команду для установки:
sudo apt-get install auditd
Установленный пакет включает в себя несколько утилит:
- auditctl — управление системой аудита, получение информации о текущем состоянии, добавление и удаление правил;
- autrace — аудит событий, вызываемых процессами, аналогично утилите strace;
- ausearch — поиск событий в журналах;
- aureport — создание отчетов о работе аудита.
Основные параметры конфигурации демона auditd (такие как формат логов, периодичность обновления, максимальный размер и другие) настраиваются в конфигурационном файле /etc/audit/auditd.conf. Обычно, стандартные настройки достаточно для успешного выполнения аудита, но при необходимости вы можете вносить дополнительные изменения по вашему усмотрению. Подробные описания параметров можно найти, например, здесь, а также в мануале команды man auditd.conf.
Создание правил
Настройка правил выполняется с использованием утилиты auditctl и следующих опций:
- -l — вывод списка созданных правил (после установки auditd, список правил будет пустым);
- -a — добавление нового правила;
- -d — удаление правила из списка;
- -D — удаление всех правил.
Для формирования новых правил используется следующая команда:
sudo auditctl -a список,действие -S имя_системного_вызова -F фильтр
Список представляет собой набор событий, к которым нужно применить правило. Можно интерпретировать список как фильтр, который делает правило более точным.
Существует пять видов списков:
- task — события, связанные с созданием процессов;
- entry — события, возникающие при входе в системный вызов;
- exit — события, происходящие при завершении системного вызова;
- user — события, связанные с параметрами пространства пользователя (uid, pid и gid);
- exclude — используется для исключения событий из отслеживания.
На практике, наиболее часто используются entry и exit.
Действие определяет, что необходимо сделать после наступления события: записать его в журнал (always) или не записывать (never).
Имя системного вызова указывает, к какому вызову должен срабатывать триггер и производить захват события (например, open, close, exit и другие).
Фильтр — необязательная опция, которая используется для установки дополнительных параметров. Например, чтобы отслеживать доступ к файлам в каталоге /etc, можно указать его в этом параметре:
sudo auditctl -a exit,always -S open -F path=/etc/
Возможно использование нескольких фильтров, чтобы более точно определить интересующие события, такие как изменения файлов с разрешениями w (write) и a (attribute change):
sudo auditctl -a exit,always -S open -F path=/etc/ -F perm=wa
При настройке правил отслеживания файлов можно не указывать имя системного вызова (опция -S):
sudo auditctl -a exit,always -F path=/etc/ -F perm=wa
Чтобы следить за определенным файлом, можно использовать еще более краткую форму (опция -p заменяет perm):
sudo auditctl -w /etc/passwd -p wa
Файл audit.rules
Правила можно также определять через консоль и сохранять их в файле /etc/audit/audit.rules. В этом случае они будут действовать постоянно.
Синтаксис правил в этом случае идентичен, только нужно опустить команду auditctl, например:
-w /etc/passwd -p wa
В начале файла, как правило, определяются метаправила, которые устанавливают базовые настройки:
# Очистить все предыдущие правила
-D
# Задать количество буферов для хранения сообщений
-b 320
# Действие при переполнении буферов: 0 — ничего не делать; 1 — отправить сообщение в dmesg, 2 — вызвать панику ядра
-f 1
Затем следуют пользовательские правила.
Ниже представлены примеры правил для мониторинга различных событий:
# Слежение за конфигурационными файлами системы аудита
-w /etc/audit/auditd.conf -p wa
-w /etc/audit/audit.rules -p wa
# Слежение за журнальными файлами
-w /var/log/audit/
-w /var/log/audit/audit.log
# Наблюдение за настройками и заданиями at
-w /var/spool/at
-w /etc/at.allow
-w /etc/at.deny
# Мониторинг файлов паролей и групп
-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow
# Слежение за конфигурационными и журнальными файлами входа в систему
-w /etc/login.defs -p wa
-w /etc/securetty
-w /var/log/faillog
-w /var/log/lastlog
# Мониторинг списка и имен хостов
-w /etc/hosts -p wa
# Слежение за стартовыми скриптами демонов
-w /etc/init.d/
-w /etc/init.d/auditd -p wa
# Наблюдение за настройками сервера SSH
-w /etc/ssh/sshd_config
# Отслеживание изменений прав доступа к файлам
-a entry,always -S chmod -S fchmod -S chown -S chown32 -S fchown -S fchown32 -S lchown -S lchown32
# Отслеживание создания, открытия и изменения размера файлов
-a entry,always -S creat -S open -S truncate -S truncate64 -S ftruncate -S ftruncate64
# Отслеживание создания и удаления каталогов
-a entry,always -S mkdir -S rmdir
# Отслеживание удаления и создания ссылок
-a entry,always -S unlink -S rename -S link -S symlink
# Мониторинг операций с монтированием файловых систем
-a entry,always -S mount -S umount -S umount2
После внесения изменений в конфигурационный файл следует перезапустить auditd для их активации:
sudo service auditd restart
Анализ журналов аудита
Журнальные файлы системы аудита сохраняются по пути /var/log/audit. Для анализа этих файлов применяются инструменты ausearch и aureport, которые обладают обширными функциональными возможностями, позволяя создавать информативные отчеты на основе данных журнала в соответствии с заданными критериями.
Дополнительные параметры и опции для этих инструментов можно найти в документации (man aureport и man ausearch) или в онлайн-ресурсах, например, здесь.
Для создания отчета о файлах, можно использовать aureport с опцией -f:
sudo aureport -f
Вы также можете ограничить отчет определенным временным интервалом:
sudo aureport --start месяц/день/год часы:минуты:секунды --end месяц/день/год часы:минуты:секунды
# Например:
sudo aureport -f --start 08/20/20 12:00 --end 08/20/20 13:00
Для указания временных интервалов можно также использовать следующие ключевые слова:
- now (текущее время),
- recent (последние десять минут),
- today (сегодня, начиная с полуночи),
- yesterday (вчера),
- this-week (на текущей неделе),
- this-month (в текущем месяце),
- this-year (в текущем году).
Вывод команды содержит обширное количество информации, и для упрощения анализа можно воспользоваться опцией --summary, чтобы получить краткий обзор обращений к каждому файлу.
sudo aureport -f -i --start recent --summary
В случае обнаружения подозрительной попытки доступа можно выявить процесс, инициировавший это событие:
sudo aureport -f -i --start today | grep /etc/passwd
Затем, с применением инструмента ausearch, каждое событие можно более детально проанализировать:
sudo ausearch -a номер_события
Ausearch также предоставляет возможность находить события на основе различных параметров, таких как:
Идентификатор пользователя (с опцией -ui):
sudo ausearch -ui 1111 --interpret
(Опция --interpret или -i позволяет выводить данные в удобочитаемом формате.)
Имя исполняемого файла (с опцией -x):
sudo ausearch -x /путь/к/файлу
Имя демона (с опцией -tm):
sudo ausearch -tm cron
Системный вызов (с опцией -sc):
sudo ausearch -sc ptrace
Для ограничения результатов по времени можно использовать тот же синтаксис, что и для aureport.
Полный перечень доступных опций ausearch доступен в документации (man ausearch) или в онлайн-ресурсах, например, здесь.