iT邦幫忙

0

Day 14|Wazuh 自訂規則實作:建立自己的安全警報

  • 分享至 

  • xImage
  •  

一、什麼是 Wazuh 自訂規則?

在前幾天的文章中,我們已經介紹 Wazuh 的 Decoder(解碼器),了解如何將原始日誌解析成結構化資料。
不過,Decoder 主要負責解析日誌,並不會單獨決定哪些事件需要觸發安全警報。
這時候就需要透過 Rules(規則),判斷日誌是否符合特定的安全條件。
Wazuh 本身提供許多內建規則,但在實際企業環境中,可能會遇到特殊的應用程式或自訂日誌格式,因此需要自行建立規則。

二、Wazuh 規則的基本結構

Wazuh 的規則主要使用 XML 格式撰寫,常見的組成如下:

元素 功能
<group> 將相關規則分類
<rule> 定義一條偵測規則
id 規則的唯一識別碼
level 警報嚴重程度,範圍為 0~16
<decoded_as> 指定要比對的 Decoder
<field> 比對解析後的特定欄位
<description> 規則觸發時顯示的描述

例如:

<group name="custom_app,">

  <rule id="100100" level="5">
    <decoded_as>custom_app</decoded_as>
    <field name="status">failed</field>
    <description>
      Application login failed
    </description>
  </rule>

</group>

這條規則代表:
當 Wazuh 收到由 custom_app Decoder 解析的日誌,且 status 欄位為 failed 時,就會觸發等級 5 的警報。

三、建立自訂規則

接下來示範如何建立一條偵測登入失敗事件的規則。

  1. 開啟規則設定檔
    在 Wazuh Server 中執行:
sudo nano /var/ossec/etc/rules/local_rules.xml

這個檔案主要用來存放使用者自行建立的規則,避免直接修改系統內建規則。
2. 新增規則內容
假設系統會產生以下日誌:

2026-10-18 10:30:00 custom_app: user=admin status=failed

若已經透過自訂 Decoder 將日誌解析成 user 與 status 欄位,就可以建立以下規則:

<group name="custom_app,authentication_failed,">

  <rule id="100101" level="7">
    <decoded_as>custom_app</decoded_as>
    <field name="status">^failed$</field>
    <description>
      Failed login detected in custom application
    </description>
  </rule>

</group>

其中:

  • id="100101":自訂規則編號。
  • level="7":設定警報等級為 7。
  • <decoded_as>:指定 Decoder 名稱。
  • :偵測登入狀態是否為 failed。
  • :設定警報訊息。
    注意:這裡的 custom_app 必須與實際 Decoder 名稱一致,而且 Decoder 必須成功解析出 status 欄位,規則才能正確比對。

四、測試自訂規則

完成規則設定後,可以使用 Wazuh 提供的 wazuh-logtest 工具進行測試。

  1. 啟動測試工具
sudo /var/ossec/bin/wazuh-logtest
  1. 輸入測試日誌
2026-10-18 10:30:00 custom_app: user=admin status=failed
  1. 查看測試結果
    若 Decoder 與 Rule 都設定正確,測試結果會包含類似以下內容:
**Phase 2: Completed decoding.
    name: 'custom_app'
    status: 'failed'
    user: 'admin'

**Phase 3: Completed filtering (rules).
    id: '100101'
    level: '7'
    description: 'Failed login detected in custom application'

測試結果主要分成三個階段:

階段 功能
Phase 1 預先解析日誌,辨識時間與來源等資訊
Phase 2 使用 Decoder 解析日誌欄位
Phase 3 比對 Rules,判斷是否觸發警報

如果 Phase 2 已成功解析欄位,但 Phase 3 沒有符合預期的規則,就需要檢查 Rule 的條件設定。

五、重新啟動 Wazuh Manager

確認規則測試成功後,可以重新啟動 Wazuh Manager,讓新規則套用至實際日誌處理流程。

sudo systemctl restart wazuh-manager

接著檢查服務狀態:

sudo systemctl status wazuh-manager

若服務正常運作,代表 Manager 已成功啟動。
需要注意的是,wazuh-logtest 測試成功不代表實際日誌已經被收集。若要在 Dashboard 中看到警報,還必須確認日誌來源已正確設定,且事件確實被 Wazuh 接收。

六、常見問題與排除方式

問題 可能原因 解決方式
規則沒有觸發 Decoder 名稱不一致 確認 decoded_as 設定
欄位無法比對 Decoder 未成功解析欄位 使用 logtest 檢查 Phase 2
規則載入失敗 XML 格式錯誤 檢查標籤是否完整
Manager 無法啟動 規則設定有誤 查看 Manager 日誌
Dashboard 沒有警報 日誌未被收集或規則未觸發 確認日誌收集與規則設定

如果 Wazuh Manager 發生問題,可以透過以下指令查看日誌:

sudo tail -n 50 /var/ossec/logs/ossec.log

藉由錯誤訊息,可以進一步確認是否存在規則格式或載入問題。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言