Audit
Содержание
Введение
Аудит (audit) — это механизм аудита безопасности в ядре Linux, который позволяет отслеживать события в системе. Он может использоваться для мониторинга доступа к файлам, сетевых подключений, а также других системных событий.
В пространстве пользователя работает демон auditd (рассматриваем именно его, хотя возможны иные реализации), который получает от ядра ОС информацию о произошедших событиях и обрабатывает ее в соответствии с настройками.
Ведение логов аудита обычно решает 2 задачи:
- протоколирование происходящего для разбора в случае действий злоумышленника;
- протоколирование происходящего для отладки работы программ.
Поскольку получивший доступ к компьютеру (серверу) злоумышленник может получить доступ к удалению логов аудита, рекомендуется в режиме реального времени отправлять их на внешний сервер. Пример такой настройки рассмотрен в статье Сервер логирования Journald.
Установка auditd
Пакет предустановлен в большинстве дистрибутивов ROSA, при необходимости установка производится так:
sudo dnf install audit
Управление службой auditd
Служба auditd включается автоматически, однако при необходимости ее можно включить в автозапуск так:
sudo systemctl enable auditd
Выключить так:
sudo systemctl mask auditd
Остановить так:
sudo systemctl kill auditd
Настройка auditd
Конфигурационный файл находится по адресу /etc/audit/auditd.conf
. Его содержимое по умолчанию подходит для работы.
Некоторые из наиболее важных параметров:
- max_log_file: максимальный размер журнального файла аудита в мегабайтах.
- num_logs: максимальное количество журнальных файлов аудита.
- log_file: путь к журнальному файлу аудита.
- log_group: группа, которой принадлежит журнальный файл аудита.
- write_logs: писать ли (yes — писать, no — не писать) события аудита в файл
/var/log/audit/audit.log
. Можно выставить no, тогда события аудита будут попадать в systemd-journald, но не будут дублироваться в еще один файл. Утилитаausearch
читает именно этот файл, поэтому ей нельзя будет пользоваться.
Больше информации в man auditd.conf
.
Настройка правил аудита
Правила аудита — это инструкции, какие события нужно подвергать аудиту, то есть логировать.
Правила аудита задаются с помощью утилиты auditctl
, которая по сокету взаимодействует с демоном auditd и передает ему команды.
При запуске auditd читаются правила из файлов /etc/audit/audit.rules
и /etc/audit/rules.d/*.rules
. Каждая строка в этих файлах представляет собой аргументы для auditctl
. Например, строка:
-w /etc/passwd -p wa -k passwd-file
эквивалентна запуску команды:
sudo auditctl -w /etc/passwd -p wa -k passwd-file
Запись в файл позволяет прогружать правила аудита автоматически при запуске ОС.
Выборка из логов аудита с помощью ausearch
Утилита ausearch — это инструмент для анализа журналов аудита, созданных с помощью системы аудита Linux. Журналы аудита содержат записи о действиях, совершаемых в системе, таких как изменение файлов, запуск процессов или использование сетевых ресурсов. Утилита ausearch предназначена для поиска и анализа этих записей.
Она может выполнять поиск записей журнала аудита по различным критериям, таким как время, пользователь, тип события и др.
Для примера, можно использовать следующую команду для поиска всех записей журнала аудита, связанных с изменением файла /etc/passwd:
sudo ausearch -f /etc/passwd
Результаты поиска будут выведены на экран. Каждая запись журнала аудита будет содержать информацию о времени события, типе события, пользователе, который совершил действие, и другие подробности.
Одной из наиболее полезных функций утилиты ausearch является возможность использования ключей для выполнения расширенного поиска. Например, следующая команда выполняет поиск записей журнала аудита, связанных с запуском процесса с именем "httpd":
sudo ausearch -c httpd
Другим полезным ключом является ключ -i, который позволяет просмотреть подробную информацию о конкретной записи журнала аудита. Например, следующая команда выводит подробную информацию о записи журнала аудита:
sudo ausearch -i 12345
где 12345 — это идентификатор записи журнала аудита.
Утилита ausearch также может использоваться для выполнения аудита безопасности. Например, можно настроить систему аудита таким образом, чтобы она записывала информацию о всех неудачных попытках входа в систему. Затем можно использовать утилиту ausearch для поиска этих записей журнала аудита и выявления потенциальных угроз безопасности.
Также утилита ausearch поддерживает несколько форматов вывода, включая форматы текста и JSON. Это может быть полезно для автоматизации процесса анализа журналов аудита.
Примеры
Отслеживание изменений в директории или файле
Для отслеживания всех изменений в директории /var/log добавьте следующее правило:
sudo auditctl -w /var/log -p w -k var_log_changes
Это правило отслеживает любые операции записи (w) в директорию /var/log и связывает их с ключевым словом (tag) var_log_changes.
Проверьте, что правила аудита корректно добавлены:
sudo auditctl -l
Эта команда выводит список текущих правил аудита.
Запишите текст в файл внутри этой директории:
echo text | sudo tee /var/log/testfile
Просмотрите журнальные файлы аудита, используя утилиту ausearch. Чтобы просмотреть все записи аудита, связанные с директорией /var/log, используйте следующую команду:
sudo ausearch -k var_log_changes
Эта команда выводит все записи аудита, связанные с ключевым словом var_log_changes, в т.ч. событие записи в файл /var/log/testfile
.
Отслеживание запуска определенного приложения
Правило аудита:
sudo auditctl -a exit,always -F path=/usr/bin/myapp -F perm=x -k myapp_execution
Это правило отслеживает каждый выход (exit) из приложения /usr/bin/myapp с правами на выполнение (x) и связывает его с ключевым словом myapp_execution.
Поиск событий осуществляется по аналогии:
sudo ausearch -k myapp_execution
Отслеживание системных вызовов
Правило аудита для отслеживания 64-битных системных вызовов execve() от root, т.е. отслеживания запуска программ от root:
sudo auditctl -a exit,always -F arch=b64 -S execve -F uid=0 -k authentication_events
Это правило отслеживает каждый вызов функции execve (используется для запуска исполняемых файлов) с идентификатором пользователя (uid) равным 0 (root) и связывает его с ключевым словом authentication_events. Т.к. 64-битные ОС поддерживают запуск и 32-битных программ, подвергнем аудиту то же самое в 32-битном варианте:
sudo auditctl -a exit,always -F arch=b32 -S execve -F uid=0 -k authentication_events
Отслеживание доступа к конфиденциальным файлам
Правило аудита:
sudo auditctl -a exit,always -F arch=b64 -S open -F dir=/etc/sensitive -F success=0 -k sensitive_files_access
Это правило отслеживает каждый вызов функции open для любого файла в директории /etc/sensitive, который заканчивается неудачей (success=0) и связывает его с ключевым словом sensitive_files_access.
Отслеживание сетевых подключений
Правило аудита:
sudo auditctl -a exit,always -F arch=b64 -S bind -S connect -F success=0 -k network_events
Это правило отслеживает каждый вызов функций bind() и connect() для любого сетевого подключения, которое заканчивается неудачей (success=0) и связывает его с ключевым словом network_events.
Запись в журнал аудита при подключении устройства USB
Правило аудита:
sudo auditctl -w /dev/bus/usb -p rwxa -k usb
Теперь система будет записывать информацию при подключении устройства USB в журнал аудита.
Чтобы найти связанные с подключением устройства USB записи журнала аудита, выполните следующую команду ausearch:
sudo ausearch -f /dev/bus/usb -k usb -i
Эта команда найдет все записи журнала аудита, связанные с ключом usb и событием OPEN, которое относится к подключению устройства USB.
Интеграция с SIEM
Интеграция auditd со специализированными системами сбора событий информационной безопасности (SIEM) возможна двумя способами, в зависимости от SIEM:
- через плагин audisp (необходимо установить пакет audispd-plugins)
- через отсылку событий в SIEM как сервер syslog (RFC 5424)
- через свой собственный агент SIEM-системы
Для отсылки событий в syslog-сервер можно использовать службу rsyslog. Установка пакета производится так:
sudo dnf install rsyslog
В файле /etc/rsyslog.conf
необходимо задать адрес сервера:
*.* @@<IP адрес сервера SIEM>:<порт>
Перезапустить службу rsyslog:
sudo systemctl restart rsyslog
Проверить ее работу:
sudo systemctl status rsyslog
Добавить ее в автозапуск:
sudo systemctl enable rsyslog