Audit — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
= Аудит в ROSA Linux =
 
 
== Введение ==
 
== Введение ==
 
Аудит (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
 
эквивалентна запуску команды:
 
эквивалентна запуску команды:
 
  sudo 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, в т.ч. событие записи в файл <code>/var/log/testfile</code>.
 +
 
 +
=== Отслеживание запуска определенного приложения ===
 +
 
 +
Правило аудита:
 +
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
 +
 
 +
В файле <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