Auditd 概述
Auditd(Linux Audit Daemon)是 Linux 系統內建的稽核框架,用於追蹤和記錄系統上發生的安全相關事件。它能夠監控系統呼叫、檔案存取、使用者登入等各種活動,是企業環境中不可或缺的安全工具。
主要功能
- 系統呼叫監控:追蹤特定系統呼叫的執行情況
- 檔案存取稽核:監控重要檔案和目錄的存取、修改行為
- 使用者活動追蹤:記錄使用者登入、權限變更等操作
- 合規性支援:符合 PCI-DSS、HIPAA、SOX 等安全規範要求
- 即時告警:可與 SIEM 系統整合,實現即時安全監控
運作架構
Auditd 系統由以下元件組成:
| 元件 | 說明 |
|---|
auditd | 主要的稽核守護程序 |
auditctl | 稽核規則管理工具 |
ausearch | 稽核日誌搜尋工具 |
aureport | 稽核報告產生工具 |
augenrules | 規則檔案合併工具 |
安裝與啟用
安裝 Auditd
在 Ubuntu 22.04 上安裝 auditd 套件:
1
2
| sudo apt update
sudo apt install auditd audispd-plugins -y
|
啟用服務
確保 auditd 服務已啟動並設定開機自動啟用:
1
2
| sudo systemctl start auditd
sudo systemctl enable auditd
|
檢查服務狀態
確認 auditd 正常運作:
1
| sudo systemctl status auditd
|
檢視目前稽核狀態
使用 auditctl 查看目前的稽核設定:
auditd.conf 設定
主要設定檔位於 /etc/audit/auditd.conf,以下是重要的設定項目:
1
| sudo nano /etc/audit/auditd.conf
|
常用設定參數
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| # 日誌檔案位置
log_file = /var/log/audit/audit.log
# 日誌檔案大小上限(MB)
max_log_file = 50
# 日誌檔案數量上限
num_logs = 5
# 達到大小上限時的處理動作
max_log_file_action = ROTATE
# 磁碟空間不足時的處理動作
space_left_action = SYSLOG
# 磁碟空間剩餘警告閾值(MB)
space_left = 75
# 管理員郵件
action_mail_acct = root
# 磁碟完全滿時的處理動作
disk_full_action = SUSPEND
# 日誌格式
log_format = ENRICHED
# 刷新頻率
flush = INCREMENTAL_ASYNC
freq = 50
|
套用設定變更
修改設定後,重新啟動服務:
1
| sudo systemctl restart auditd
|
稽核規則語法
稽核規則定義了系統應該監控哪些事件。規則可以透過 auditctl 指令或規則檔案來設定。
規則類型
Auditd 支援三種類型的規則:
- 控制規則:設定稽核系統的行為
- 檔案系統規則:監控檔案和目錄的存取
- 系統呼叫規則:監控特定的系統呼叫
檔案系統規則語法
1
| -w <路徑> -p <權限> -k <識別標籤>
|
權限參數:
系統呼叫規則語法
1
| -a <動作>,<過濾器> -S <系統呼叫> -F <欄位>=<值> -k <識別標籤>
|
動作選項:
過濾器選項:
task:程序建立時觸發exit:系統呼叫結束時觸發user:使用者空間事件exclude:排除特定事件
監控檔案變更
監控關鍵系統檔案
建立規則檔案 /etc/audit/rules.d/file-watch.rules:
1
| sudo nano /etc/audit/rules.d/file-watch.rules
|
加入以下規則:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| # 監控密碼檔案
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/gshadow -p wa -k identity
# 監控 SSH 設定
-w /etc/ssh/sshd_config -p wa -k sshd_config
# 監控 sudoers 設定
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
# 監控系統啟動腳本
-w /etc/rc.local -p wa -k init
-w /etc/init.d/ -p wa -k init
# 監控 cron 設定
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron
# 監控網路設定
-w /etc/hosts -p wa -k network
-w /etc/network/ -p wa -k network
|
套用規則
使用 augenrules 載入規則:
監控系統呼叫
監控使用者與群組變更
建立規則檔案 /etc/audit/rules.d/syscall-audit.rules:
1
| sudo nano /etc/audit/rules.d/syscall-audit.rules
|
加入以下規則:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # 監控使用者新增與刪除
-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/useradd -k user_modification
-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/userdel -k user_modification
-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/usermod -k user_modification
# 監控群組變更
-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/groupadd -k group_modification
-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/groupdel -k group_modification
-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/groupmod -k group_modification
# 監控權限變更
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -k permission_change
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -k ownership_change
# 監控網路連線
-a always,exit -F arch=b64 -S connect -k network_connect
-a always,exit -F arch=b64 -S accept -k network_accept
-a always,exit -F arch=b64 -S socket -k network_socket
# 監控模組載入
-a always,exit -F arch=b64 -S init_module -S finit_module -k module_load
-a always,exit -F arch=b64 -S delete_module -k module_unload
|
使用 ausearch 搜尋日誌
ausearch 是用於搜尋稽核日誌的強大工具。
基本搜尋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 搜尋今天的所有事件
sudo ausearch -ts today
# 搜尋特定時間範圍
sudo ausearch -ts 04/18/2024 09:00:00 -te 04/18/2024 18:00:00
# 搜尋特定識別標籤
sudo ausearch -k identity
# 搜尋特定使用者
sudo ausearch -ua root
# 搜尋特定程序
sudo ausearch -c sudo
|
進階搜尋
1
2
3
4
5
6
7
8
9
10
11
| # 搜尋失敗的事件
sudo ausearch --success no
# 搜尋特定檔案的存取
sudo ausearch -f /etc/passwd
# 搜尋特定系統呼叫
sudo ausearch -sc execve
# 合併多個條件
sudo ausearch -k identity -ts today --success no
|
輸出格式
1
2
3
4
5
6
7
8
| # 解釋性輸出
sudo ausearch -k identity -i
# CSV 格式輸出
sudo ausearch -k identity --format csv
# 原始格式輸出
sudo ausearch -k identity --raw
|
使用 aureport 產生報告
aureport 可以從稽核日誌產生各種摘要報告。
基本報告
1
2
3
4
5
6
7
8
9
10
11
| # 產生整體摘要報告
sudo aureport
# 登入事件報告
sudo aureport -l
# 認證事件報告
sudo aureport -au
# 檔案存取報告
sudo aureport -f
|
詳細報告
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 失敗事件報告
sudo aureport --failed
# 系統呼叫報告
sudo aureport -s
# 執行程式報告
sudo aureport -x
# 使用者活動報告
sudo aureport -u
# 異常事件報告
sudo aureport -n
|
時間範圍報告
1
2
3
4
5
6
7
8
| # 今天的報告
sudo aureport -ts today
# 本週報告
sudo aureport -ts this-week
# 指定日期範圍
sudo aureport -ts 04/01/2024 -te 04/18/2024
|
常用稽核規則範例
完整的安全稽核規則集
建立 /etc/audit/rules.d/security.rules:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| # 刪除所有現有規則
-D
# 設定緩衝區大小
-b 8192
# 設定失敗模式(1=printk, 2=panic)
-f 1
# === 身分與存取管理 ===
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity
# === 網路設定 ===
-w /etc/hosts -p wa -k network_config
-w /etc/network/ -p wa -k network_config
-w /etc/netplan/ -p wa -k network_config
# === SSH 設定 ===
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/ssh/ssh_config -p wa -k ssh_config
# === 權限提升監控 ===
-w /etc/sudoers -p wa -k actions
-w /etc/sudoers.d/ -p wa -k actions
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k privileged_command
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k privileged_command
# === 排程任務監控 ===
-w /etc/crontab -p wa -k cron
-w /etc/cron.allow -p wa -k cron
-w /etc/cron.deny -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /etc/cron.daily/ -p wa -k cron
-w /etc/cron.hourly/ -p wa -k cron
-w /var/spool/cron/crontabs/ -p wa -k cron
# === 核心與模組 ===
-a always,exit -F arch=b64 -S init_module,finit_module -k module_insertion
-a always,exit -F arch=b64 -S delete_module -k module_removal
-w /etc/modprobe.conf -p wa -k modprobe
-w /etc/modprobe.d/ -p wa -k modprobe
# === 時間變更 ===
-a always,exit -F arch=b64 -S adjtimex,settimeofday -k time_change
-a always,exit -F arch=b64 -S clock_settime -F a0=0x0 -k time_change
-w /etc/localtime -p wa -k time_change
# === 鎖定稽核設定 ===
-e 2
|
套用完整規則集
1
2
3
4
5
| # 載入規則
sudo augenrules --load
# 驗證規則已載入
sudo auditctl -l
|
總結
Auditd 是 Linux 系統安全監控的核心工具,透過本文的設定,您可以:
- 完整追蹤系統上的安全相關事件
- 監控關鍵檔案和設定的變更
- 記錄使用者活動和權限變更
- 產生合規性報告以符合安全規範
- 整合 SIEM 系統實現集中化安全監控
建議根據組織的安全需求調整稽核規則,並定期檢視稽核日誌以發現潛在的安全威脅。
參考資料