Назад | Перейти на главную страницу

Auditd Регистрировать все исполнения, кроме некоторых скриптов

Я настроил свой auditd для регистрации всех системных вызовов execve, используя следующие правила:

-a exit,always -F arch=b32 -S execve
-a exit,always -F arch=b64 -S execve

Хотя он отлично фиксирует всю активность любого пользователя в системе, очевидно, что также много шума. Я добавил несколько исключений, например:

-a exit,never -F arch=b32 -S execve -F exe=/bin/date
-a exit,never -F arch=b64 -S execve -F exe=/bin/date

Теперь единственный оставшийся шум, который я все же хотел бы исключить, - это выполнение некоторых скриптов через / bin / sh. В auserach вывод этих выглядит так:

type=PROCTITLE msg=audit(03/21/19 13:35:01.579:7561) : proctitle=/bin/sh /usr/lib/sysstat/debian-sa1 1 1 
type=PATH msg=audit(03/21/19 13:35:01.579:7561) : item=2 name=/lib64/ld-linux-x86-64.so.2 inode=2228626 dev=fc:01 mode=file,755 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 
type=PATH msg=audit(03/21/19 13:35:01.579:7561) : item=1 name=/bin/sh inode=1572884 dev=fc:01 mode=file,755 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 
type=PATH msg=audit(03/21/19 13:35:01.579:7561) : item=0 name=/usr/lib/sysstat/debian-sa1 inode=1968913 dev=fc:01 mode=file,755 ouid=root ogid=root rdev=00:00 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 
type=EXECVE msg=audit(03/21/19 13:35:01.579:7561) : argc=4 a0=/bin/sh a1=/usr/lib/sysstat/debian-sa1 a2=1 a3=1 
type=SYSCALL msg=audit(03/21/19 13:35:01.579:7561) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x561ccb6c2510 a1=0x561ccb6c24b0 a2=0x561ccb6c24d0 a3=0x7fc8166fd810 items=3 ppid=16157 pid=16158 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=52 comm=debian-sa1 exe=/bin/dash key=exec 

Так /usr/lib/sysstat/debian-sa1 выполняется с использованием /bin/sh (который в данном случае является ссылкой на /bin/dash). Здесь я явно не хочу исключать все казни /bin/sh или /bin/dash, но только для некоторых скриптов, которые я разрешаю.

Есть ли способ указать такое исключение? Я пробовал примерно так:

-a exit,never -F arch=b32 -S execve -F exe=/bin/dash -F path=/usr/lib/sysstat/debian-sa1
-a exit,never -F arch=b64 -S execve -F exe=/bin/dash -F path=/usr/lib/sysstat/debian-sa1
-a exit,never -F arch=b32 -S execve -F exe=/usr/lib/sysstat/debian-sa1
-a exit,never -F arch=b64 -S execve -F exe=/usr/lib/sysstat/debian-sa1

но это не сработало.

В соответствии с man auditctl(8) тоже нет возможности проверить a0,a1,... для строки, поскольку там используются указатели. Мне что-то здесь не хватает, или это просто невозможно?

Правильно, в правилах аудита нет практического способа различать execve для одного и того же интерпретатора разных сценариев. Что делать, зависит от вашей цели сбора этой информации.

Если вы хотите узнать, сколько execves и что они запускают, вам нужно придумать способ их синтаксического анализа и фильтрации.

Если вы наблюдаете за непривилегированной деятельностью какого-либо человека или учетной записи службы, проверяйте этого пользователя, а не root.

Однако для наблюдения за границами безопасности вам не нужно все. Намного интереснее, когда euid становится root. Из примеров соответствия в документации рассмотрите rules / 30-pci-dss-v31.rules

## 10.2.5.b All elevation of privileges is logged
-a always,exit -F arch=b64 -S setuid -F a0=0 -F exe=/usr/bin/su -F key=10.2.5.b-elevated-privs-session
-a always,exit -F arch=b32 -S setuid -F a0=0 -F exe=/usr/bin/su -F key=10.2.5.b-elevated-privs-session
-a always,exit -F arch=b64 -S setresuid -F a0=0 -F exe=/usr/bin/sudo -F key=10.2.5.b-elevated-privs-session
-a always,exit -F arch=b32 -S setresuid -F a0=0 -F exe=/usr/bin/sudo -F key=10.2.5.b-elevated-privs-session
-a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -F key=10.2.5.b-elevated-privs-setuid
-a always,exit -F arch=b32 -S execve -C uid!=euid -F euid=0 -F key=10.2.5.b-elevated-privs-setuid