Wazuh 收到日誌後,並不是直接使用 Rule 判斷是否產生警報,而是會先透過 Decoder(解碼器) 解析日誌內容。
簡單來說:
Log → Decoder → Rule → Alert
Decoder 負責把原始日誌拆解成 Wazuh 可以辨識的欄位,Rule 再根據這些欄位判斷是否符合警報條件。
假設 SSH 登入失敗產生以下日誌:
Failed password for root from 192.168.1.50 port 55231 ssh2
對人來說,可以直接看出:
| 項目 | Decoder | Rule |
|---|---|---|
| 主要功能 | 解析日誌 | 判斷事件 |
| 處理內容 | IP、帳號、事件等欄位 | 是否符合警報條件 |
| 處理順序 | 先 | 後 |
| 簡單理解 | 看懂日誌 | 判斷危險程度 |
Wazuh Decoder 使用 XML 格式設定,例如:
<decoder name="example">
<prematch>Failed password</prematch>
</decoder>
其中:
可以把整個流程理解成:
Linux 產生日誌
↓
Wazuh Agent 收集
↓
Decoder 解析內容
↓
提取 IP、帳號、事件等資訊
↓
Rule 進行比對
↓
符合條件
↓
產生 Alert
例如攻擊者持續嘗試 SSH 密碼:
Failed password for root from 192.168.1.50
Decoder 負責辨識:
User = root
Source IP = 192.168.1.50
Event = Failed login
接著 Rule 才能根據這些資訊判斷是否需要產生安全警報。
如果 Decoder 無法正確解析日誌,即使日誌中真的存在攻擊行為,Rule 也可能無法取得需要的資訊。
因此可以把兩者想成:
Decoder 負責「讀懂發生什麼事」,Rule 負責「判斷這件事有多危險」。
這也是 Wazuh 從大量系統日誌中找出安全事件的重要機制。
iThome鐵人賽