前幾天已經一路從 SSH 登入失敗,看到 Wazuh 如何經過 Decoder、Rule,最後產生 Alert。
但做到這裡,我不想只停在:
「Wazuh 有偵測到。」
我希望可以自己定義偵測條件。
所以今天開始修改 Wazuh 的 Local Rule。
Wazuh 本身已經提供許多 SSH 相關的偵測規則。
但在實際環境中,不同系統可能會有不同需求。
例如我這次希望做到:
SSH 登入失敗
↓
短時間重複發生
↓
符合我的條件
↓
產生自訂 Alert
這樣後面如果要接 Active Response,也可以直接指定自己的 Rule。
Wazuh 自訂規則主要可以放在:
/var/ossec/etc/rules/local_rules.xml
因此先開啟檔案:
sudo nano /var/ossec/etc/rules/local_rules.xml
這裡的重點是:
不直接修改 Wazuh 原本的 Ruleset,而是另外建立自己的 Local Rule。
這樣後續管理也比較方便。
這次我要做的不是重新解析 SSH Log。
前面的 Decoder 已經可以辨識 SSH 事件,所以我要利用既有的事件,再加入自己的判斷條件。
概念如下:
SSHD Log
↓
Wazuh 既有 Decoder / Rule
↓
SSH 登入失敗
↓
Local Rule
↓
判斷是否符合我的條件
↓
Custom Alert
也就是直接站在 Wazuh原本的偵測能力上,再往上增加自己的規則。
我希望的效果是:
一次登入失敗
→ 保留原本事件
多次登入失敗
→ 觸發我的自訂警報
因此自訂 Rule 會需要考慮事件發生次數與時間範圍。
例如:
frequency="3"
timeframe="30"
概念上就是:
30 秒內
↓
符合條件的 SSH 事件出現多次
↓
觸發自訂 Rule
這也是為什麼前面測試時,我會從 Windows 重複輸入錯誤密碼。
不是單純一直測試 SSH,而是要確認:
我的規則到底有沒有真的被觸發。
把 Rule 寫進:
local_rules.xml
並不代表工作已經完成。
接下來還要確認:
XML 格式有沒有錯
↓
Wazuh 能不能載入 Rule
↓
SSH 事件有沒有符合條件
↓
Dashboard 有沒有出現自訂 Alert
只要其中一個環節有問題,就可能出現:
明明有 SSH 登入失敗
但是自訂 Alert 沒出現
所以今天先完成 Rule 的建立。
真正的驗證留到下一篇。
今天開始從「使用 Wazuh 內建偵測」走向「自己建立偵測邏輯」。
目前流程變成:
SSH Log
↓
Decoder
↓
既有 Rule
↓
Local Rule
↓
Custom Alert
這也是後面 Active Response 很重要的準備。
因為如果我要讓系統自動封鎖攻擊來源,就必須先明確知道:
到底是哪一條 Rule 被觸發時,才要執行自動回應。
下一篇直接進行驗證。
我會重新從 Windows 嘗試 SSH 登入,並故意輸入錯誤密碼,確認:
Rule ID:100002
是否真的成功出現在 Wazuh Dashboard。
如果成功,就代表自己的 SSH 偵測規則正式完成。