Перейти к основному содержимому
Версия: 4.5.X

Auditd

Настройка передачи событий с помощью службы Auditd

Auditd – специальная утилита, которая позволяет вести мониторинг системных действий и анализировать их. Система аудита устанавливает триггеры на функции, ответственные за обработку системных вызовов (обращений к функциям ядра, без которых не может быть произведена ни одна операция в системе), после чего эти триггеры срабатывают согласно пользовательским правилам.

Установка службы auditd с помощью команды:

sudo apt install auditd

В данный пакет входит несколько утилит:

  • auditctl — управление системой аудита, получение информации о состоянии системы, добавление и удаление правил

  • autrace — аудит событий, вызываемых процессами (аналогично strace)

  • ausearch — поиск событий в журналах

  • aureport — создание отчетов о работе аудита

Варианты действий:

  • always - установить контекст аудита. Всегда заполнять его во время входа в системный вызов и всегда генерировать запись во время выхода из системного вызова

  • never - аудит не будет генерировать никаких записей. Это может быть использовано для подавления генерации событий. Обычно необходимо подавлять генерацию вверху списка, а не внизу, т.к. событие инициируется на первом совпавшем правиле

Поля сравнения и их описание:

  • a0, a1, a2, a3 - первые 4 аргумента системного вызова соответственно

  • arch - так как система ориентируется на номера (не названия) системных вызовов, а для многих системных вызовов номера отличаются для 32 и 64 разрядных систем, то необходимо указывать, для какой архитектуры мы пишем правило

  • auid - ID пользователя, с которым он вошёл в систему. Системные сервисы, как правило, имеют auid=-1 (или 4294967295)

  • dir - директория, за которой необходимо наблюдать. Будут залогированы и все события, связанные с файлами и поддиректориями в указанной директории рекурсивно

  • euid - действительный идентификатор пользователя

  • exe - полный путь к исполняемому файлу. Может использоваться только с exit

  • exit - значение, возвращаемое системным вызовом при выходе

  • key (-k) - установка поля для фильтра. Добавляет поле с заданным именем в событие, что облегчает поиск событий в журналах (может иметь любое имя)

  • msgtype - тип события

  • path - полный путь к файлу, за которым необходимо следить, может использоваться только с exit

  • perm - то же, что и параметр -p, будет рассмотрен ниже

  • success - если значение, возвращаемое системным вызовом, больше либо равно 0, данный объект будет равен «true/yes», иначе «false/no». При создании правила используйте 1 вместо «true/yes» и 0 вместо «false/no»

  • uid - идентификатор пользователя - вместо числовых идентификаторов пользователей можно указывать имена (www-data, mail, irc), таким образом, вам не придется учитывать их числовые различия на разных серверах

  • -p - [r|w|x|a] - описывает разрешение доступа файла, за которым нужно следить: чтение, запись, выполнение или изменение прав доступа соответственно

  • -w < path > - устанавливает наблюдение за директорией (рекурсивно) или файлом

  • -W < path > - исключает наблюдение за указанной директорией или файлом

Постоянные правила рекомендуется добавлять в файл audit.rules, расположенный в каталоге /etc/audit/rules.d/. При желании, можно создать в данном каталоге новый файл формата *.rules с произвольным именем и задать в нем нужные правила. Файл audit.rules можно редактировать вручную или с помощью графической утилиты system-config-audit. Другие файлы правил можно редактировать только вручную.

sudo nano /etc/audit/rules.d/audit.rules

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

# игнорирование ошибок
-i
# удаление всех ранее созданных правил
-D
# задаём количество буферов, в которых будут храниться сообщения аудита
-b 16384
# что делать в чрезвычайной ситуации (например, если все буферы будут заполнены) (0 – ничего не делать, 1 – поместить сообщение в dmesg, 2 – отправить ядро в панику (kernel panic))
-f 1
-a exit,always -F dir=/home/TestUser/ -F arch=b64 -S unlink -S unlinkat -S rmdir -S rename -S renameat -k delete
#или
-a exit,always -F dir=/home/TestUser/ -F arch=b32 -S unlink -S unlinkat -S rmdir -S rename -S renameat -k delete

#Изменение паролей:
-w /etc/shadow -p wa -k shadow
-w /etc/passwd -p wa -k passwd

#Отслеживание процессов:
-w /bin/systemctl -p x -k systemd
-w /etc/systemd/ -p wa -k systemd
-w /usr/lib/systemd -p wa -k system

#Изменение настроек сети:
-w /etc/network/ -p wa -k network
-a exit,always -F dir=/etc/NetworkManager/ -F perm=wa -k network_modifications

#Редактирование правил auditd:
-w /sbin/auditctl -p x -k audittools
-w /usr/sbin/auditd -p x -k audittools
-w /usr/sbin/augenrules -p x -k audittools

После сохранения необходимо выйти из файла /etc/audit/rules.d/audit.rules.

подсказка

Для сохранения файла используйте ctrl+o ⇒ Enter ⇒ ctrl+x

осторожно

Для правильного функционирования необходимо убедиться в том, что в конфигурационном файле /etc/audit/auditd.conf для параметра lof_format установленно значение RAW

Перезагрузить службу:

sudo systemctl restart auditd

Подробнее о конфигурации правил на auditd можно почитать здесь (раздел 6 "Регистрация событий безопасности").

к сведению

Файл audit.rules с расширенным набором правил (~140 строк), а также фильтры (32) и директивы (26) под Auditd можно скачать в рамках расширенной технической поддержки

Передача событий из /var/log/audit/audit.log в KOMRAD c помощью rsyslog

Необходимо изменить файл rsyslog.conf с правами суперпользователя:

Ввести в терминале:

sudo nano /etc/rsyslog.conf

Добавить в MODULES следующие строки:

module(load="imfile")
input(type="imfile"
File="/var/log/audit/audit.log"
Tag="tag1"
Severity="error"
Facility="local7")
  • Файл указывает путь и имя текстового файла, который необходимо отслеживать. Имя файла должно быть абсолютным

  • Tag будет устанавливать тег перед каждым сообщением, извлеченным из файла. Если вы хотите, чтобы после тега стояло двоеточие, вы также должны установить его, оно не будет добавлено автоматически

  • Severity присваивает всем сообщениям журнала файла одинаковую серьезность. Это необязательно. По умолчанию для всех сообщений будет установлено значение Уведомление

  • Facility дает всем сообщениям журнала файла одно и то же средство. Опять же, это необязательно. По умолчанию для всех сообщений будет установлено значение local0

Далее в конце файла добавить следующую строку:

local7.* action(type="omfwd" target="IP-адрес Syslog-коллектора" port="49000" protocol="tcp")

Сохранить изменения и выйти. Более подробное описание конфигурации rsyslog см. Настройка передачи событий в Linux с помощью rsyslog

Перезапустить rsyslog с помощью команды:

sudo systemctl restart rsyslog

Проверка работоспособности rsyslog:

sudo systemctl status rsyslog

Передача событий из /var/log/audit/audit.log в KOMRAD по Syslog-ng

С правами суперпользователя изменить файл syslog-ng.conf, для этого:

Ввести в терминале:

sudo nano /etc/syslog-ng/syslog-ng.conf

В разделе Sources добавить строку:

source s_auditd { file (/var/log/audit/audit.log persist-name (s_auditd_for_siem) flags(no-parse)); };

В разделе Destinations добавить строку:

destination komrad { tcp("IP-адрес хоста с Syslog-коллектором" port(49000) persist-name("RAW_SIEM") template("$MESSAGE\n")); };

В разделе Log paths добавить строку:

log { source(s_auditd); destination(komrad); };

Перезагрузить сервис syslog-ng командой в терминале:

sudo systemctl restart syslog-ng

Проверка работоспособности syslog-ng:

sudo systemctl status syslog-ng

Более подробное описание конфигурации syslog-ng - Настройка передачи событий в Linux с помощью syslog-ng