Как написать пользовательские правила аудита системы в CentOS 7

Вступление

Система аудита Linux создает контрольный журнал, способ отслеживать все виды информации в вашей системе. Он может записывать много данных, таких как типы событий, дата и время, идентификаторы пользователей, системные вызовы, процессы, используемые файлы, контексты SELinux и уровни чувствительности. Он может отслеживать доступ к файлу, его редактирование или исполнение. Он даже может отслеживать изменения файловых атрибутов. Он может регистрировать использование системных вызовов, команд, выполненных пользователем, неудачных попыток входа в систему и многих других событий. По умолчанию система аудита записывает в журналы только несколько событий, таких как входящие пользователи, пользователи, использующие sudo, и сообщения, связанные с SELinux. Он использует правила аудита для мониторинга определенных событий и создания связанных записей журнала. Можно создать правила аудита.

В этом руководстве мы обсудим различные типы правил аудита и способы добавления или удаления пользовательских правил на вашем сервере.

Предпосылки

Прежде чем приступить к работе с этим учебником, вы должны иметь следующее:

  • CentOS 7 Droplet (работает также с CentOS 6)

  • Пользователь без полномочий root с привилегиями sudo. Чтобы настроить пользователя этого типа, следуйте учебному руководству Initial Server Setup с CentOS 7. Все команды будут выполняться от имени этого пользователя.

  • Основное понимание системы аудита Linux. Посетите Understanding Linux Auditing System на CentOS 7 для получения дополнительной информации.

Просмотр правил аудита

Вы можете просмотреть текущий набор правил аудита, используя команду + auditctl -l +.

sudo auditctl -l

Правила не будут отображаться, если их нет (это значение по умолчанию):

No rules

Когда вы добавляете правила в этом учебнике, вы можете использовать эту команду, чтобы убедиться, что они были добавлены.

Текущее состояние системы аудита можно посмотреть с помощью:

sudo auditctl -s

Вывод будет похож на:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0

Значение + enabled = 1 + показывает, что на этом сервере включен аудит. Значение + pid + - это номер процесса демона аудита. Значение pid 0 указывает, что демон аудита не работает. Запись + lost + сообщит вам, сколько записей событий было + отброшено из-за переполнения очереди аудита ядра. Поле + backlog + показывает, сколько записей событий в настоящее время находится в очереди, ожидая, когда audd прочитает их. Мы обсудим остальные поля вывода в следующем разделе этого урока.

Добавление правил аудита

Вы можете добавить пользовательские правила аудита, используя инструмент командной строки + auditctl +. По умолчанию правила будут добавлены в конец текущего списка, но также могут быть вставлены вверху. Чтобы сделать ваши правила постоянными, вам нужно добавить их в файл + / etc / audit / rules.d / audit.rules +. Каждый раз, когда запускается служба + auditd +, она активирует все правила из файла. Вы можете узнать больше о демоне аудита и системе аудита в нашей другой статье Understanding Audit System на CentOS 7. Правила аудита работают на основе первого совпадения побед - когда правило совпадает, оно не будет оценивать правила в дальнейшем. Правильный порядок правил важен.

Существует три типа правил аудита:

  • Правила контроля: эти правила используются для изменения конфигурации и настроек самой системы аудита.

  • Правила файловой системы: это просмотр файлов или каталогов. Используя эти правила, мы можем проверять любой доступ к определенным файлам или каталогам.

  • Правила системных вызовов: эти правила используются для мониторинга системных вызовов, выполняемых любым процессом или конкретным пользователем.

Правила контроля

Давайте посмотрим на некоторые из правил управления, которые мы можем добавить:

  • + auditctl -b <backlog> + - Установить максимально допустимое число ожидающих аудита буферов. Если все буферы заполнены, ядро ​​проверяет флаг ошибки. Ограничение по умолчанию для невыполненного задания на сервере CentOS составляет 320. Вы можете просмотреть это используя:

sudo auditctl -s

В выводе вы можете увидеть текущее значение * backlog_limit *:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0  lost=0 backlog=0

Если ваше значение backlog больше установленного * backlog_limit *, вам может потребоваться увеличить значение * backlog_limit * для правильной работы журнала аудита. Например, чтобы увеличить значение до 1024, запустите:

sudo auditctl -b 1024

Выход покажет статус:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0  lost=0 backlog=0
  • + auditctl -f [0 1 2] + - установить флаг сбоя (0 = без вывода сообщений, 1 = с печатью. 2 = паника). Эта опция позволяет вам определить, как ядро ​​должно обрабатывать критические ошибки. Если установлено значение 0, сообщения аудита, которые не могут быть зарегистрированы, будут молча отбрасываться. Если установлено значение 1, сообщения отправляются в подсистему журнала ядра. Если установлено значение 2, это вызовет панику ядра. Примеры условий, в которых используется этот флаг, включают превышение предела невыполненной работы, нехватка памяти ядра и превышение предела скорости. Значением по умолчанию является 1. Если у вас нет серьезных проблем с демоном аудита на вашем сервере, вам не нужно будет менять это значение.

  • + auditctl -R <имя файла> + - прочитать правила аудита из указанного файла. Это полезно, когда вы тестируете некоторые временные правила и хотите снова использовать старые правила из файла + audit.rules +.

Правила, которые мы добавляем через + auditctl s, не являются постоянными. Чтобы сделать их постоянными при перезагрузках, вы можете добавить их в файл + / etc / audit / rules.d / audit.rules +. Этот файл использует тот же синтаксис командной строки + auditctl + для указания правил, но без самой команды + auditctl + впереди. Любые пустые строки или любой текст после знака хеша (#) игнорируются. Файл правил по умолчанию выглядит следующим образом:

/etc/audit/rules.d/audit.rules

# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320

# Feel free to add below this line. See auditctl man page

Чтобы изменить значение отставания, скажем, 8192, вы можете изменить * -b 320 * на * -b 8192 * и перезапустить демон аудита, используя:

sudo service auditd restart

Если вы не перезапустите демон, он все равно установит новое значение из конфигурации при следующей перезагрузке сервера.

Правила файловой системы

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

auditctl -w  -p  -k

где

+ path_to_file + - проверяемый файл или каталог. + permissions + - это права, которые регистрируются. Это значение может быть одним или комбинацией r (чтение), w (запись), x (выполнение) и a (изменение атрибута). + key_name + - это необязательная строка, которая помогает вам определить, какие правила генерировали конкретную запись в журнале.

Давайте посмотрим на некоторые примеры.

sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

Приведенное выше правило просит систему аудита следить за любым доступом для записи или изменением атрибута в файле + / etc / hosts + и записывать их в журнал аудита с помощью указанной нами строки пользовательского ключа - + hosts_file_change +.

Если вы хотите сделать это правило постоянным, добавьте его в файл + / etc / audit / rules.d / audit.rules + внизу, например так:

/etc/audit/rules.d/audit.rules

-w /etc/hosts -p wa -k hosts_file_change

Чтобы убедиться, что правило было успешно добавлено, вы можете запустить:

sudo auditctl -l

Если все идет хорошо, вывод должен показать:

LIST_RULES: exit,always watch=/etc/hosts perm=wa key=hosts_file_change

Мы также можем добавить часы в каталоги.

sudo auditctl -w /etc/sysconfig/ -p rwa -k configaccess

Приведенное выше правило добавит наблюдение в каталог + / etc / sysconfig + и все файлы и каталоги под ним для любого доступа для чтения, записи или изменения атрибутов. Он также будет помечать сообщения журнала пользовательским ключом * configaccess *.

Чтобы добавить правило для наблюдения за выполнением команды + / sbin / modprobe + (эта команда может добавлять / удалять модули ядра с сервера):

sudo auditctl -w /sbin/modprobe -p x -k kernel_modules

Для поиска в журналах аудита определенных событий вы можете использовать команду + ausearch +. Например, чтобы найти в журналах аудита все события, отмеченные ключом + configaccess +, вы можете запустить:

sudo ausearch -k configaccess

+ ausearch + подробно обсуждается в нашем другом учебнике Understanding Audit System on CentOS 7 ,

Правила системных вызовов

С помощью аудита системных вызовов вы можете отслеживать действия на сервере далеко за пределами уровня приложения. Синтаксис для правил системных вызовов:

auditctl -a  -S  -F  -k `

где:

  • Замена + -a + на + -A + в приведенной выше команде вставит правило сверху, а не снизу.

  • + action + и + filter + указывают, когда регистрируется определенное событие. + action может быть либо` + всегда`, либо + никогда. + filter + указывает, какой фильтр соответствия правил ядра применяется к событию. Фильтр соответствия правил может быть одним из следующих: + task +, + exit +, + user + и + exclude +. + action, filter + будет + всегда, выход + в большинстве случаев, что говорит + auditctl +, что вы хотите проверять этот системный вызов при его выходе.

  • + system_call + определяет системный вызов по его имени. Несколько системных вызовов могут быть сгруппированы в одно правило, каждое из которых указывается после опции + -S +. Слово + all + также может быть использовано. Вы можете использовать команду + sudo ausyscall --dump + для просмотра списка всех системных вызовов вместе с их номерами.

  • + field = value + указывает дополнительные параметры, которые изменяют правило для соответствия событиям на основе указанной архитектуры, идентификатора пользователя, идентификатора процесса, пути и других.

  • + key_name + - необязательная строка, которая поможет вам позже определить, какое правило или набор правил сгенерировал конкретную запись в журнале.

Давайте теперь посмотрим на некоторые примеры правил системных вызовов.

Чтобы определить правило аудита, которое создает запись в журнале с пометкой «+ rename +» каждый раз, когда файл переименовывается пользователем, чей ID равен 1000 или больше, выполните:

sudo auditctl -a always,exit -F arch=b64 -F "auid>=1000" -S rename -S renameat -k rename

+ -F arch = b64 + говорит о проверке 64-битной версии системных вызовов в правиле.

Чтобы определить правило, которое регистрирует, к каким файлам обращался конкретный пользователь (с UID 1001), и помечает записи журнала с помощью + userfileaccess +:

sudo auditctl -a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

Если вы хотите сделать это правило постоянным, добавьте его в файл + / etc / audit / rules.d / audit.rules + внизу, например так:

/etc/audit/rules.d/audit.rules

-a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

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

sudo auditctl -a always,exit -F path=/etc/hosts -F perm=wa -k hosts_file_change

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

sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

Для рекурсивного просмотра каталога с использованием правила системного вызова вы можете использовать опцию + -F" dir = / path / to / dir "+.

Удаление правил аудита

Чтобы удалить все текущие правила аудита, вы можете использовать команду + auditctl -D +. Чтобы удалить правила наблюдения за файловой системой, добавленные с помощью опции + -w +, вы можете заменить + -w + на + -W + в исходном правиле. Правила системных вызовов, добавленные с помощью опций + -a + или + -A +, могут быть удалены с помощью опции + -d + с исходным правилом. Например, допустим, мы добавили следующее правило:

sudo auditctl -w /etc/passwd -p wa -k passwdaccess

Просмотрите набор правил, используя:

sudo auditctl -l

Выходные данные должны включать:

LIST_RULES: exit,always watch=/etc/passwd perm=wa key=passwdaccess

Чтобы удалить это правило, мы можем использовать следующую команду, просто заменив + -w + на + -W +:

sudo auditctl -W /etc/passwd -p wa -k passwdaccess

Теперь просмотрите набор правил, используя:

sudo auditctl -l

Правило не должно быть в списке сейчас.

Правила блокировки аудита

Можно отключить или включить систему аудита и заблокировать правила аудита с помощью + auditctl -e [0 1 2] +. Например, чтобы временно отключить аудит, выполните:

auditctl -e 0

Когда в качестве аргумента передается + 1 +, включается аудит. Чтобы заблокировать конфигурацию аудита, чтобы ее нельзя было изменить, передайте + 2 + в качестве аргумента. Это делает текущий набор правил аудита неизменным. Правила больше не могут быть добавлены, удалены или изменены, и демон аудита больше не может быть остановлен. Блокировка конфигурации предназначена для того, чтобы быть последней командой в + audit.rules + для всех, кто хочет активировать эту функцию. Любая попытка изменить конфигурацию в этом режиме будет проверена и отклонена. Конфигурация может быть изменена только путем перезагрузки сервера.

Заключение

Информация, предоставляемая системой аудита Linux, очень полезна для обнаружения вторжений. Теперь вы сможете добавлять собственные правила аудита, чтобы можно было регистрировать определенные события.

Помните, что вы всегда можете обратиться к справочной странице + audittl + при добавлении пользовательских правил ведения журнала. Он предлагает полный список параметров командной строки, советы по производительности и примеры. Каталог + / usr / share / doc / audit - / + содержит файлы с предварительно настроенными правилами аудита, основанными на некоторых общих стандартах сертификации.

Related