通過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