Audit — различия между версиями
(→Примеры) |
|||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | |||
== Введение == | == Введение == | ||
Аудит (audit) — это механизм аудита безопасности в ядре Linux, который позволяет отслеживать события в системе. Он может использоваться для мониторинга доступа к файлам, сетевых подключений, а также других системных событий. | Аудит (audit) — это механизм аудита безопасности в ядре Linux, который позволяет отслеживать события в системе. Он может использоваться для мониторинга доступа к файлам, сетевых подключений, а также других системных событий. | ||
Строка 40: | Строка 39: | ||
Правила аудита задаются с помощью утилиты <code>auditctl</code>, которая по сокету взаимодействует с демоном auditd и передает ему команды. | Правила аудита задаются с помощью утилиты <code>auditctl</code>, которая по сокету взаимодействует с демоном auditd и передает ему команды. | ||
− | При запуске auditd читаются правила из файлов <code>/etc/audit/rules.d/*.rules</code>. Каждая строка в этих файлах представляет собой аргументы для <code>auditctl</code>. Например, строка: | + | При запуске auditd читаются правила из файлов <code>/etc/audit/audit.rules</code> и <code>/etc/audit/rules.d/*.rules</code>. Каждая строка в этих файлах представляет собой аргументы для <code>auditctl</code>. Например, строка: |
-w /etc/passwd -p wa -k passwd-file | -w /etc/passwd -p wa -k passwd-file | ||
эквивалентна запуску команды: | эквивалентна запуску команды: | ||
Строка 69: | Строка 68: | ||
Также утилита ausearch поддерживает несколько форматов вывода, включая форматы текста и JSON. Это может быть полезно для автоматизации процесса анализа журналов аудита. | Также утилита ausearch поддерживает несколько форматов вывода, включая форматы текста и JSON. Это может быть полезно для автоматизации процесса анализа журналов аудита. | ||
− | + | == Примеры == | |
− | + | === Отслеживание изменений в директории или файле === | |
Для отслеживания всех изменений в директории /var/log добавьте следующее правило: | Для отслеживания всех изменений в директории /var/log добавьте следующее правило: | ||
sudo auditctl -w /var/log -p w -k var_log_changes | sudo auditctl -w /var/log -p w -k var_log_changes | ||
Строка 87: | Строка 86: | ||
Эта команда выводит все записи аудита, связанные с ключевым словом var_log_changes, в т.ч. событие записи в файл <code>/var/log/testfile</code>. | Эта команда выводит все записи аудита, связанные с ключевым словом var_log_changes, в т.ч. событие записи в файл <code>/var/log/testfile</code>. | ||
− | + | === Отслеживание запуска определенного приложения === | |
Правило аудита: | Правило аудита: | ||
Строка 97: | Строка 96: | ||
sudo ausearch -k myapp_execution | sudo ausearch -k myapp_execution | ||
− | + | === Отслеживание системных вызовов === | |
Правило аудита для отслеживания 64-битных системных вызовов execve() от root, т.е. отслеживания запуска программ от root: | Правило аудита для отслеживания 64-битных системных вызовов execve() от root, т.е. отслеживания запуска программ от root: | ||
sudo auditctl -a exit,always -F arch=b64 -S execve -F uid=0 -k authentication_events | sudo auditctl -a exit,always -F arch=b64 -S execve -F uid=0 -k authentication_events | ||
Строка 103: | Строка 102: | ||
sudo auditctl -a exit,always -F arch=b32 -S execve -F uid=0 -k authentication_events | 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 | 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. | Это правило отслеживает каждый вызов функции 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 | sudo auditctl -a exit,always -F arch=b64 -S bind -S connect -F success=0 -k network_events | ||
Это правило отслеживает каждый вызов функций bind() и connect() для любого сетевого подключения, которое заканчивается неудачей (success=0) и связывает его с ключевым словом network_events. | Это правило отслеживает каждый вызов функций bind() и connect() для любого сетевого подключения, которое заканчивается неудачей (success=0) и связывает его с ключевым словом network_events. | ||
− | + | === Запись в журнал аудита при подключении устройства USB === | |
Правило аудита: | Правило аудита: | ||
sudo auditctl -w /dev/bus/usb -p rwxa -k usb | sudo auditctl -w /dev/bus/usb -p rwxa -k usb | ||
Строка 121: | Строка 120: | ||
sudo ausearch -f /dev/bus/usb -k usb -i | sudo ausearch -f /dev/bus/usb -k usb -i | ||
Эта команда найдет все записи журнала аудита, связанные с ключом usb и событием OPEN, которое относится к подключению устройства USB. | Эта команда найдет все записи журнала аудита, связанные с ключом usb и событием OPEN, которое относится к подключению устройства USB. | ||
+ | |||
+ | == Интеграция с SIEM == | ||
+ | |||
+ | Интеграция auditd со специализированными системами сбора событий информационной безопасности (SIEM) возможна двумя способами, в зависимости от SIEM: | ||
+ | * через плагин audisp (необходимо установить пакет audispd-plugins) | ||
+ | * через отсылку событий в SIEM как сервер syslog (RFC 5424) | ||
+ | * через свой собственный агент SIEM-системы | ||
+ | |||
+ | Для отсылки событий в syslog-сервер можно использовать службу rsyslog. Установка пакета производится так: | ||
+ | sudo dnf install rsyslog | ||
+ | |||
+ | В файле <code>/etc/rsyslog.conf</code> необходимо задать адрес сервера: | ||
+ | *.* @@<IP адрес сервера SIEM>:<порт> | ||
+ | |||
+ | Перезапустить службу rsyslog: | ||
+ | sudo systemctl restart rsyslog | ||
+ | Проверить ее работу: | ||
+ | sudo systemctl status rsyslog | ||
+ | Добавить ее в автозапуск: | ||
+ | sudo systemctl enable rsyslog | ||
+ | |||
+ | [[Категория:ROSA Server]] |
Текущая версия на 09:56, 10 марта 2023
Содержание
Введение
Аудит (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