Примеры работы со службой аудита

Отслеживание изменений в директории или файле

Для отслеживания всех изменений в директории /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

Для того, чтобы ОС фиксировала такие события как подключение 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.

Централизованный сбор событий аудита

Централизованный сбор данных аудита в ОС необходим для долгосрочного хранения и анализа данных на внешних системах. Такой подход позволяет избежать потерь данных при повреждении локального диска и предоставляет возможность анализа журналов в централизованной точке. В данном контексте важны две основные задачи: архивирование событий и безопасная передача данных.

Для сохранения локальных журналов перед их отправкой на внешнее хранилище может использоваться команда tar, которая позволяет собрать все необходимые файлы с журналами событий в один архив, что упрощает передачу и сжатие данных. Например, чтобы архивировать все журналы аудита, можно использовать команду:

tar -czvf audit_logs.tar.gz /var/log/audit

где параметры:

  • -c — создает архив;
  • -z — сжимает файлы с помощью gzip;
  • -v — вывести процесс на экран;
  • -f — указать имя файла.

Это архивирование важно для сохранения целостности данных до их передачи на внешние серверы.

Для отправки архивированных журналов событий на внешние хранилища используется служба systemd-journal-gatewayd. Эта служба предоставляет веб-интерфейс для просмотра и передачи логов по HTTP(S). Она может быть настроена для предоставления доступа как к локальным журналам, так и для передачи данных на внешние серверы.

Настройка этой службы выполняется через два файла конфигурации:

  • /etc/systemd/journal-remote.conf — файл конфигурации, отвечающий за прием данных из внешних источников;
  • /etc/systemd/journal-upload.conf — файл, используемый для настройки отправки данных на удаленные сервера.

Пример настройки конфигурации: в файле journal-upload.conf можно указать параметры для передачи данных на удаленный сервер:

[Upload]
URL=https://external-server:19532

Для обеспечения защищенной передачи данных аудита может использоваться шифрование с помощью SSL/TLS. Средство openssl позволяет создавать ключи для защиты передаваемых данных. Перед передачей, на сервере генерируются ключи и сертификаты:

  1. Создание приватного ключа:
openssl genrsa -out private.key 2048
  1. Генерация сертификата:
openssl req -new -x509 -key private.key -out server.crt -days 365
  1. Эти ключи используются в конфигурации journal-upload.conf для обеспечения шифрования.

Эти меры безопасности позволяют гарантировать, что данные аудита будут переданы в защищенном виде и не будут перехвачены злоумышленниками.