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