Событие аудита

Задача системы аудита - записать информацию о действии субъекта (процесса, пользователя) над объектом (ресурсом ОС - файлом, каталогом, сокетом и т. д.). Информация об этом отражена в событии аудита. Общий вид любой строки события:

[node=hostname] type=record_type msg=audit(unix_timestamp.milliseconds:serial_number): [metadata] field1=value [fieldN=value]

Первым располагается поле node= с именем системы, в которой произошло событие; по умолчанию не подставляется, для включения необходимо прописать name_format = HOSTNAME в /etc/audit/auditd.conf.

Далее следует поле type=, содержащее информацию о типе записи. Список типов приведён на странице типы записей.

Затем следуют 3 поля - unixtimestamp.миллисекунды:серийный номер записи.

Поле метаданных metadata может быть пустым либо равным одному из значений:

user-space
system-services
configuration
tty
user-account
user-login
audit-daemon
mac-decision
anomaly
anomaly-response
mac
crypto
virt
audit-rule
unknown

Затем следуют поля, характерные для каждого типа записи. Например, для типа записи PATH это поля имени файла name=, inode=, mode=, данные о владельце ouid= и ogid= и т. д.; для записи типа SYSCALL это номер системного вызова syscall=, переданные системному вызову первые 4 аргумента a[0-3]= и т. д.

Событие может быть простым или составным - простое событие аудита содержит одну самодостаточную запись, отражающую действие и результат операции, инициатора действия, объект воздействия. Пример простого события:

type=USER_AUTH msg=audit(1573466553.578:1223): pid=1372 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=PAM:authentication grantors=pam_faillock,pam_unix acct="user" exe="/usr/sbin/sshd" hostname=192.168.1.2 addr=192.168.1.2 terminal=ssh res=success'

Действие: попытка аутентификации с использованием модуля аутентификации pam_unix в качестве бекенда; результат: успешно. Кто: имеющийся в БД (в данному случае - локальной, /etc/passwd) пользователь user`, с адреса 192.168.1.2. Куда: в систему, по SSH.

Составное событие, помимо основной, содержит вспомогательные (auxiliary) записи, разделённые символом перевода строки (`LF, `0x0A) и имеющих одинаковую метку времени и серийный номер - вместе записи образуют полное представление о произошедшем в ОС событии. Пример составного события:

type=SYSCALL msg=audit(1573467044.794:1853): arch=c000003e syscall=59 success=yes exit=0 a0=21bbac0 a1=21952a0 a2=2194fb0 a3=7ffcbd8f9610 items=2 ppid=1475 pid=3690 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ausearch" exe="/usr/sbin/ausearch" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sc_execve"

type=EXECVE msg=audit(1573467044.794:1853): argc=4 a0="ausearch" a1="--raw" a2="-m" a3="EXECVE"

type=CWD msg=audit(1573467044.794:1853):  cwd="/root"

type=PATH msg=audit(1573467044.794:1853): item=0 name="/usr/sbin/ausearch" inode=335751 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0

type=PATH msg=audit(1573467044.794:1853): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=29819 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0

type=PROCTITLE msg=audit(1573467044.794:1853): proctitle=6175736561726368002D2D726177002D6D00455845435645

В одной из записи события выше есть поле proctitle= с кодированным содержимым. Кодирование выполняется для небезопасных строк, которые система аудита принимает из пространства пользователя и которые могут содержать пробелы, символы кавычек, бекслеши и прочие небезопасные символы.

Формат события

Событие аудита может иметь 2 вида записи, RAW или ENRICHED.

Сообщение в RAW-формате представлено в том виде, в каком оно забирается из очереди событий. Уже приведённое составное событие из листинга выше является примером такого RAW-события.

Формат ENRICHED = [cобытие в RAW-формате + разделитель 0x1D + интерпретированные в текстовое представление поля]. Обогащённый формат используется, если необходимо хранить/анализировать сообщения аудита в другой системе. После получении события от ядра демоном auditd, численные значения следующих полей преобразуются в соответствующее текстовое представление: *uid, *gid, syscall, arch, saddr. Затем преобразованные поля добавляются в верхнем регистре в конец события; разделителем между исходными и преобразованными полями является 0x1D.

При выводе событий с помощью ausearch -i поля в верхнем регистре не отображаются так как, независимо от используемого формата RAW или ENRICHED, ausearch самостоятельно декодирует поля и интерпретирует в текстовое представление поля - в системе, в которой была запущена.