通過auditd,系統審核允許系統管理員監視其系統這樣他們就可以檢測到未經授權的數據訪問或修改。
默認情況下,auditd將審核SELinux AVC拒絕、系統登錄、帳戶修改和身份驗證事件。事件將記錄到 /var/log/audit/audit.log
配置文件:
- /etc/audit/auditd.conf
- /etc/audit/rules.d/audit.rules
- /etc/audit/audit.rules # 根據/etc/audit/rules.d/audit.rules自動生成
配置開機啟動
systemctl enable auditd
配置規則 (man auditctl)
規則類型可分為:
- 控制規則:控制audit系統的規則;
- 文件系統規則:也可以認為是文件監控,可以監控一個特定文件或者一個路徑。
- 系統調用規則:可以記錄特定程序的系統調用。
1. 控制規則:
-b 設置在內核中audit緩沖空間的最大值。
-f 這個選項來決定內核如何處理critical erros:0=silent 1=printk 2=panic.默認值為1。
-e 設置使能標志,設置為0,為關閉了audit,設置為1,則開啟audit;當設置為2時,表示鎖定,一般在設置完其他規則后最后設置,防止其他人修改規則;任何修改規則的行為都會被拒絕,並且記錄審計日志,只有當重啟系統后,這個使能標志才可以被修改。
2. 文件系統規則
auditctl -w path -p permissions -k key_name
- -w : 目錄或者文件路徑
- -p: 描述文件系統監視將觸發的權限訪問類型,r=讀取,w=寫入,x=執行,a=屬性更改。
- -k: 設置審核規則的篩選關鍵字
3. 系統調用規則
auditctl -a [list,action|action,list] -S [Syscall name or number|all] -F field=value -k key_name
- -a: action和list 明確一個事件被記錄。action可以為always或者never,list明確出對應的匹配過濾,list可以為:task,exit,user,exclude,filesystem。
- -S: system_call 明確出系統調用的名字,幾個系統調用可以寫在一個規則里,如-S xxx -S xxx。系統調用的名字可以在/usr/include/asm/unistd_64.h文件中找到。
- -F: field=value 作為附加選項,修改規則以匹配特定架構、GroupID,ProcessID等的事件。具體有哪些字段,可以參考man linux https://linux.die.net/man/8/auditctl
配置實例
記錄系統的日期和時間的修改
vim + /etc/audit/rules.d/audit.rules
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change -a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k timechange -a always,exit -F arch=b64 -S clock_settime -k time-change -a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change
記錄用戶和組的修改的事件
-w /etc/group -p wa -k identity -w /etc/passwd -p wa -k identity -w /etc/gshadow -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/security/opasswd -p wa -k identity
記錄網絡環境修改時間
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k system-locale -a always,exit -F arch=b32 -S sethostname -S setdomainname -k system-locale -w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale -w /etc/hosts -p wa -k system-locale -w /etc/sysconfig/network -p wa -k system-locale -w /etc/sysconfig/network-scripts/ -p wa -k system-locale
記錄登錄和登出事件
-w /var/log/lastlog -p wa -k logins -w /var/run/faillock/ -p wa -k logins
記錄會話啟動事件
-w /var/run/utmp -p wa -k session -w /var/log/wtmp -p wa -k logins -w /var/log/btmp -p wa -k logins
文件/var/run/utmp跟蹤當前登錄的所有用戶。所有審計記錄都將用標識符“session”標記, 可以用who命令讀取
/var/log/wtmp文件跟蹤登錄、注銷、關機和重新啟動事件。
文件/var/log/btmp跟蹤失敗的登錄嘗試,可以通過輸入命令 ‘/usr/bin/last-f /var/log/btmp’ 讀取。所有審核記錄都將被標記為標識符“logins”
監視對文件權限、屬性、所有權和組的更改
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod
在所有情況下,審核記錄將只為非系統用戶id(auid>=1000)並將忽略守護進程事件(auid=4294967295)。
所有審計記錄用標識符“perm_mod”標記
記錄未授權文件訪問嘗試
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access -a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access -a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access -a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access
確保收集使用特權命令
監視特權程序(那些在執行時設置了setuid和/或setgid位的程序)以確定沒有權限的用戶是否正在運行這些命令。
通過下面命令
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print \ "-a always,exit -F path=" $1 " -F perm=x -F auid>=1000 -F auid!=4294967295 \ -k privileged" }'
得到記錄
-a always,exit -F path=/usr/bin/wall -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/chfn -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/chsh -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/chage -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/gpasswd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/newgrp -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/mount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/su -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/umount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/write -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/crontab -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/ssh-agent -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/pkexec -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/passwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/unix_chkpwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/pam_timestamp_check -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/netreport -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/usernetctl -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/postdrop -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/postqueue -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/lib/polkit-1/polkit-agent-helper-1 -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/libexec/utempter/utempter -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/libexec/dbus-1/dbus-daemon-launch-helper -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/libexec/openssh/ssh-keysign -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged
收集成功掛載磁盤事件
-a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts -a always,exit -F arch=b32 -S mount -F auid>=1000 -F auid!=4294967295 -k mount
確保收集用戶的文件刪除事件
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete -a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
確保收集對系統管理范圍(sudoers)的更改
-w /etc/sudoers -p wa -k scope -w /etc/sudoers.d/ -p wa -k scope
監視sudo日志文件
如果系統已正確配置為禁用su命令並強制所有管理員必須先登錄,然后使用sudo執行特權命令,
然后所有管理員命令將被記錄到/var/log/sudo.log文件.
每當執行命令時,審核事件將被觸發為/var/log/sudo.log文件將打開文件進行寫入,並執行管理命令將寫入日志。
-w /var/log/sudo.log -p wa -k actions
確保收集內核模塊加載和卸載
-w /sbin/insmod -p x -k modules -w /sbin/rmmod -p x -k modules -w /sbin/modprobe -p x -k modules -a always,exit -F arch=b64 -S init_module -S delete_module -k modules
確保審核配置是不可變的
審核規則不能使用auditctl修改。設置標志“-e2“強制將審核置於不可變模式。進行審核更改只能對系統重新啟動。
-e 2