Wazuh的告警系統實作 - ElastAlert 的 Slack 警報觸發 教學
參考連結
前言
根據前一篇的內容,我們接下來打算做的事情如下
- [x] 了解 elastAlert 的 Rule types 撰寫方式
- [x] 成功觸發 slack ,並發送訊息
關於 Filters
參考:https://elastalert2.readthedocs.io/en/latest/recipes/writing_filters.html
Filters 是什麼?
可以想像是 elasticsearch 的查詢條件,如果滿足的話,就觸發 rule 並執行告警動作。
在建立 rule 時可以設定 filters,filters 是作為 elasticsearch query DSL(Domain Specific Language) 的部分,DSL 提供基於 json 來定義查詢,
DSL 大概就長這樣(可以透過點擊Filter/Edit Filter/Edit as Query DSL來查看)
測試 Filter + Slack 發送通知功能
我們這邊採用 frequency
來進行測試,並使用 wazuh 告警來當作範例。你可能不懂 frequency
可以參考官網進行了解,或是這篇寫了蠻多範例撰寫Rule。
而這裡的前提是你已經透過Wazuh的告警系統實作 - Docker 安裝 elastAlert
撰寫 yaml
情境:如果使用者登入windows時,只要在64小時內輸入錯1次密碼,導致觸發Authentication_fail的相關alert,就發送訊息到Slack。
我們想要滿足上述情境,因此撰寫以下 yaml 我們的內容,你可以直接把 a.yaml
的內容做置換。webhook取得連結的方式請參考 slack 官方說明。
1 | name: "Shannon-Alert-Test" |
這邊值得一提的是, alert_subject_args
可以直接填寫 elasticsearch 看得到的 fields 內容。(如圖1)
觸發 windows 登入失敗
-
接下來,你需要一台裝好 wazuh agent 的電腦,這邊我使用 windows10 來進行。你可以透過 kibana 的 agent 註冊功能來快速註冊。
-
然後按照指示進行註冊即可
-
接下來故意登入時,輸入錯誤的密碼
-
然後前往 wazuh,進入 agent 的 security events,確認的確有觸發Authentication failure的事件增加了。
-
最後,你也可以透過
docker logs -f elastalert
查看logs是否有觸發,或是建立 index:elastalert_*
選取hit
field,來確認的確有觸發alert。
Slack 收到通知
透過以上設置,他會發送出以下訊息:
結論
這樣這篇至少你知道該如何撰寫 frequent 的 Rule,並且透過 Slack 來發送警報通知。
目前的進度,完成前面兩者,明天會繼續完成email的警報教學:
- [x] 了解 elastAlert 的 Rule types 撰寫方式
- [x] 成功觸發 slack ,並發送訊息
- [ ] 怎麼透過 email 發送訊息
- [ ] 成功觸發發送 email 功能
- [ ] 把 Labeling Service 部署到 機器上
- [ ] 成功觸發發送 發api進行 labeling 功能