Auditd 记录除某些脚本之外的所有执行情况

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,...字符串。我是否遗漏了什么,还是根本就不可能?

答案1

正确,审计规则中没有实用的方法来区分同一解释器的不同脚本的 execve。要做什么取决于您收集此信息的目的。

如果您想调查有多少个 execve 以及他们运行了什么,您必须想出一种方法来解析和过滤它们。

如果您正在监视某个人或服务帐户的非特权活动,请审核该用户而不是 root 用户。

然而,为了观察安全边界,你并不需要一切。更有趣的是当 euid 成为 root 时。从文档中的合规性示例中,考虑规则/30-pci-dss-v31.规则

## 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

相关内容