Примеры работы со службой аудита
Отслеживание изменений в директории или файле
Для отслеживания всех изменений в директории /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 позволяет создавать ключи для защиты передаваемых данных. Перед передачей, на сервере генерируются ключи и сертификаты:
- Создание приватного ключа:
openssl genrsa -out private.key 2048
- Генерация сертификата:
openssl req -new -x509 -key private.key -out server.crt -days 365
- Эти ключи используются в конфигурации journal-upload.conf для обеспечения шифрования.
Эти меры безопасности позволяют гарантировать, что данные аудита будут переданы в защищенном виде и не будут перехвачены злоумышленниками.