介紹如何在 Linux 系統下安裝並使用 auditd 服務,收集、儲存與查閱系統各種安全性稽核記錄。
auditd(代表 audit daemon)是一個在背景運行的服務,專門負責將系統稽核記錄寫入磁碟,提供管理者搜尋與查核,對於正式的系統而言是一個必要的安全性工具。
若在 Ubuntu Linux 中可透過 apt
來安裝 auditd:
# 安裝 Auditd 相關套件
sudo apt install auditd audispd-plugins
在安裝 auditd 時會安裝兩個套件,其中 auditd
是儲存稽核記錄用的 server,而 audispd-plugins
則是收集系統事件的 client,server 與 client 也可以放在不同的機器上(遠端記錄伺服器)。
安裝好之後,可以使用以下指令操控系統的 auditd
服務:
# 顯示 Auditd 執行狀態 systemctl status auditd # 停止 Auditd sudo systemctl stop auditd # 啟動 Auditd sudo systemctl start auditd # 重新啟動 Auditd sudo systemctl restart auditd # 重新載入 Auditd 設定檔 sudo systemctl reload auditd
安裝好 auditd 之後,要自行設定稽核記錄的詳細規則,auditctl
指令可用來檢視與管理稽核記錄規則:
# 顯示目前狀態 sudo auditctl -s # 顯示所有規則 sudo auditctl -l # 移除所有規則 sudo auditctl -D # 設定每秒記錄筆數上限為 20 sudo auditctl -r 20
以下是一些簡單的稽核記錄規則範例:
# 記錄特定程式的所有系統呼叫 sudo auditctl -a always, -S all -F pid=1005 # 記錄特定使用者開啟的檔案 sudo auditctl -a always, -S openat -F auid=510 # 記錄失敗的 openat 呼叫 sudo auditctl -a always, -S openat -F success=0 # 記錄 /etc/shadow 檔案變更(兩種寫法皆可) sudo auditctl -w /etc/shadow -p wa sudo auditctl -a always, -F path=/etc/shadow -F perm=wa # 記錄整個目錄的變更(包含子目錄與檔案,兩種寫法皆可) sudo auditctl -w /etc/ -p wa sudo auditctl -a always, -F dir=/etc/ -F perm=wa # 記錄管理者存取其他使用者的檔案 sudo auditctl -a always, -F dir=/home/ -F uid=0 -C auid!=obj_uid
若要記錄系統上所有人執行的指令,可以使用以下規則:
# 記錄所有執行指令 sudo auditctl -a ,always -F arch=b64 -S execve sudo auditctl -a ,always -F arch=b32 -S execve
使用 auditctl
指令所設定的規則會直接生效,但是重開機之後就會不見了,若需要長期使用的設定,可將設定內容(auditctl
指令的參數)寫在 /etc/audit/rules.d/audit.rules
設定檔案中。
其餘更詳細的規則可以參考 Neo23x0 所提供的範例設定。
若要查詢 auditd 所儲存下來的稽核記錄,可以使用 ausearch
指令,通常由於記錄內容量很大,所以查詢的時候都會需要配合各種查詢條件進行篩選,找出有興趣的部分,以下是一些常用的參數說明:
參數 | 說明 |
---|---|
-a 事件ID |
顯示指定事件的記錄報表 |
-c 指令名稱 |
顯示指定指令的記錄報表 |
-f 檔案名稱 |
顯示指定檔案的記錄報表 |
-hn 主機名稱 |
顯示指定主機的記錄報表 |
-i |
將數值資料進行適當轉換,方便閱讀 |
-if 輸入檔案 |
從指定檔案輸入記錄資料 |
-k 標籤 |
顯示指定標籤的記錄報表 |
-p PID |
顯示指定程式的記錄報表 |
-te 日期 時間 |
指定結束日期或時間 |
-ts 日期 時間 |
指定開始日期或時間 |
-ui UID |
顯示指定使用者的記錄報表 |
-gi GID |
顯示指定群組的記錄報表 |
-w 關鍵字 |
搜尋完整關鍵字 |
-x 執行檔名稱 |
顯示指定執行檔的記錄報表 |
以下是一些簡單的範例:
# 查看指定檔案或目錄的記錄 ausearch -f /etc # 查看今天的記錄 ausearch -ts today # 查看 2020/07/31 當天的記錄 ausearch -ts 07/31/20 # 查看來自於 IP 位址 192.168.0.12 的記錄 ausearch -hn 192.168.0.12 # 查看使用者 UID 為 1001 的相關記錄 ausearch -ui 1001 # 將數值資料進行適當轉換,方便閱讀 ausearch -i # 查看含有特定標籤的記錄 ausearch -k my_keyword
ausearch
這些篩選參數可以任意組合混用,產生自己需要的查詢條件。
若要產生記錄的統計報表,可以使用 aureport
指令,以下是一些常用的參數說明:
參數 | 說明 |
---|---|
-ts 日期 時間 |
顯示指定日期、時間之後的記錄報表 |
-au |
產生使用者認證相關報表 |
-e |
產生事件相關報表 |
-cr |
產生加密相關報表 |
-c |
產生設定檔變更相關報表 |
--comm |
產生指令執行相關報表 |
-f |
產生檔案相關報表 |
-l |
產生登入相關報表 |
-m |
產生帳號變更相關報表 |
-n |
產生異常事件相關報表 |
-i |
將數值資料進行適當轉換,方便閱讀 |
--failed |
只顯示成功的事件 |
--success |
只顯示失敗的事件 |
以下是一些簡單的範例:
# 產生今天的統計報表 sudo aureport -ts today # 產生昨天的統計報表 sudo aureport -ts yesterday # 產生使用者認證相關報表,並將數值資料進行適當轉換,方便閱讀 sudo aureport -au -i # 顯示登入失敗的報表 sudo aureport -l --failed
參考資料:The Urban Penguin、Linux Hint、cloudin、The Geek Diary、n.sfs.tw、nixCraft、StackExchange