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 |
Перезагрузить службу:
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