Product SiteDocumentation Site

73.8. Определение правил аудита

Система аудита работает на основе набора правил, определяющих, что должно фиксироваться в файлах журналов. Можно указать следующие типы правил аудита:
  • правила конфигурации — правила позволяющие изменить поведение системы аудита и некоторых её настроек;
  • правила файловой системы — позволяют проверять доступ к определенному файлу или каталогу;
  • правила системных вызовов — регистрируют системные вызовы, выполняемые указанной программой.
Правила аудита могут быть установлены:
  • в командной строке с помощью утилиты auditctl (эти правила не сохраняются после перезагрузки системы);
  • в файле /etc/audit/audit.rules.

73.8.1. Установка правил с помощью auditctl

Команда auditctl позволяет управлять основными функциями системы аудита и определять правила, определяющие, какие события аудита регистрируются.

Примечание

Все команды, которые взаимодействуют со службой аудита и файлами журнала аудита, требуют привилегий root.
Примеры правил изменения конфигурации:
  • установить максимальное количество существующих буферов аудита в ядре:
    # auditctl -b 256
    
  • установить способ обработки для флага сбоя (действие, которое выполняется при обнаружении критической ошибки):
    # auditctl -f 2
    
    в данной конфигурации в случае критической ошибки будет вызван kernel panic;
  • защитить конфигурацию аудита от изменений:
    # auditctl -e 2
    
    в результате все попытки изменить конфигурацию аудита будет отвергнуты:
    The audit system is in immutable mode, no rule changes allowed
    
  • вывести конфигурацию аудита:
    # auditctl -s
    
  • вывести список всех загруженных в данный момент правил аудита:
    # auditctl -l
    
  • удалить все загруженные в данный момент правила аудита:
    # auditctl -D
    
Чтобы определить правило файловой системы, используется следующий синтаксис:
# auditctl -w путь_к_файлу -p разрешения -k имя_ключа
где:
  • путь_к_файлу — файл или каталог, подлежащий аудиту;
  • разрешения — разрешения, которые регистрируются:
    • r — доступ на чтение файла или каталога;
    • w — доступ на запись к файлу или каталогу;
    • x — доступ на исполнение к файлу или каталогу;
    • a — изменение атрибута файла или каталога;
  • имя_ключа — необязательная строка, которая помогает определить, какое правило или набор правил создали конкретную запись в журнале.
Примеры правил файловой системы:
  • записывать все попытки изменения файла /etc/shadow:
    # auditctl -w /etc/shadow -p wa
    
  • записывать все попытки изменения файлов в каталоге /etc/httpd2/:
    # auditctl -w /etc/httpd2/ -p wa -k apache
    
  • регистрировать выполнение команды /sbin/modprobe:
    # auditctl -w /sbin/modprobe -p x -k modules
    
Для добавления правил системных вызовов используется следующая форма записи:
# auditctl -a список,действие -S имя_системного_вызова -F фильтры -k имя_ключа
Здесь список — это список событий, в который следует добавить правило. Доступные списки:
  1. task — добавить правило к списку, отвечающему за процессы. Этот список правил используется только во время создания процесса — когда родительский процесс вызывает fork() или clone(). При использовании этого списка можно использовать только те поля, которые известны во время создания процесса (uid, gid и так далее);
  2. exit — добавить правило к списку, отвечающему за точки выхода из системных вызовов. Этот список применяется, когда необходимо создать событие для аудита, привязанное к точкам выхода из системных вызовов;
  3. user — добавить правило, отвечающее за список фильтрации пользовательских сообщений. Этот список используется ядром, чтобы отфильтровать события, приходящие из пользовательского пространства, перед тем как они будут переданы службе аудита. Могут быть использованы только следующие поля: uid, auid, gid, pid, subj_user, subj_role, subj_type, subj_sen, subj_clr, и msgtype. Все остальные поля будут обработаны, как если бы они не совпали;
  4. exclude — добавить правило к списку, отвечающего за фильтрацию событий определенного типа. Этот список используется, чтобы отфильтровывать ненужные события. События могут быть исключены по идентификатору процесса, идентификатору пользователя, идентификатору группы, идентификатору логина пользователя, типу сообщения или контексту предмета.
Второй параметр опции -a — это действие, которое должно произойти в ответ на возникшее событие:
  1. never — аудит не будет генерировать никаких записей. Может использоваться для подавления генерации событий. Обычно необходимо подавлять генерацию сверху списка, а не снизу, поскольку событие инициируется на первом совпавшем правиле;
  2. always — установить контекст аудита. Всегда заполнять его во время входа в системный вызов, и всегда генерировать запись во время выхода из системного вызова.
Далее указывается опция -S, задающая имя системного вызова, при обращении к которому должен срабатывать триггер (например, open, close, exit). Вместо имени может быть использовано числовое значение.
Необязательная опция -F используется для указания дополнительных параметров фильтрации события.
Примеры правил системных вызовов:
  • вести журнала событий, связанных с использованием системного вызова open(), и регистрировать при этом только обращения к файлам каталога /etc:
    # auditctl -a always,exit -S open -F path=/etc/
    
  • регистрировать только те события, при которых файл открывается только на запись и изменение атрибутов:
    # auditctl -a always,exit -S open -F path=/etc/ -F perm=aw
    
  • записывать все системные вызовы, используемые определённым процессом:
    # auditctl -a always,exit -S all -F pid=1005
    
  • Ззаписывать все файлы, открытые определённым пользователем:
    # auditctl -a always,exit -S openat -F auid=510
    
  • записывать неудачные попытки вызова системной функции openat:
    # auditctl -a exit,always -S openat -F success!=0
    
  • Записывать попытки изменения файла /etc/shadow:
    # auditctl -a always,exit -F path=/etc/shadow -F perm=wa
    
Чтобы определить правило для исполняемого файла, необходимо использовать следующий синтаксис:
# auditctl -a список,действие [ -F arch=cpu -S имя_системного_вызова] -F exe=путь_к_файлу -k имя_ключа
Например, правило для файла /usr/bin/ping:
# auditctl -a always,exit -F exe=/usr/bin/ping -F arch=b64 -S execve -k execution_ping