Audit

Auditd 記錄除某些腳本之外的所有執行

  • March 24, 2019

我將我的 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/shor的所有執行/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。做什麼取決於您收集這些資訊的目標。

如果你想調查有多少 execve 以及它們執行什麼,你必須想出一種方法來解析和過濾它們。

如果您正在觀看某個人或服務帳戶的非特權活動,請審核該使用者而不是 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

引用自:https://serverfault.com/questions/959480