Audit

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Введение

Аудит (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