Ubuntu 22.04 Auditd 系統稽核設定

Ubuntu 22.04 Auditd System Auditing Configuration

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 查看目前的稽核設定:

1
sudo auditctl -s

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. 控制規則:設定稽核系統的行為
  2. 檔案系統規則:監控檔案和目錄的存取
  3. 系統呼叫規則:監控特定的系統呼叫

檔案系統規則語法

1
-w <路徑> -p <權限> -k <識別標籤>

權限參數:

  • r:讀取
  • w:寫入
  • x:執行
  • a:屬性變更

系統呼叫規則語法

1
-a <動作>,<過濾器> -S <系統呼叫> -F <欄位>=<值> -k <識別標籤>

動作選項:

  • always:始終記錄
  • never:從不記錄

過濾器選項:

  • 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 載入規則:

1
sudo augenrules --load

監控系統呼叫

監控使用者與群組變更

建立規則檔案 /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 系統安全監控的核心工具,透過本文的設定,您可以:

  1. 完整追蹤系統上的安全相關事件
  2. 監控關鍵檔案和設定的變更
  3. 記錄使用者活動和權限變更
  4. 產生合規性報告以符合安全規範
  5. 整合 SIEM 系統實現集中化安全監控

建議根據組織的安全需求調整稽核規則,並定期檢視稽核日誌以發現潛在的安全威脅。


參考資料

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy