ElastAlert監控日誌告警Web攻擊行為
*本文作者:shystartree,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
由於公司需要監控web攻擊行為,而因某些原因搭不了waf,才不得不用ElastAlert進行告警,此為前提。
一、ELK安裝
Elasticsearch 是一個分散式、可擴展、實時的搜索與數據分析引擎。 它能從項目一開始就賦予你的數據以搜索、分析和探索的能力。
Logstash是一款輕量級的日誌搜集處理框架,可以方便的把分散的、多樣化的日誌搜集起來,並進行自定義的處理,然後傳輸到指定的位置,
Kibana是一個開源的分析與可視化平台,設計出來用於和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的數據,使用各種不同的圖表、表格、地圖等kibana能夠很輕易地展示高級數據分析與可視化。
ELK這一套軟體可以當作一個MVC模型,logstash是controller層,Elasticsearch是一個model層,kibana是view層。首先將數據傳給logstash,它將數據進行過濾和格式化(轉成JSON格式),然後傳給Elasticsearch進行存儲、建搜索的索引,kibana提供前端的頁面再進行搜索和圖表可視化,它是調用Elasticsearch的介面返回的數據進行可視化。logstash和Elasticsearch是用Java寫的,kibana使用node.js框架。
安裝方法網上有好多,此處就不再闡述。在試用了幾乎所有的安裝方法後,介紹下本人覺得比較快捷有效的安裝方法:
1.1 下載安裝匹配版本的elk
elastalert目前還不支持elk6.0以上版本,本人就是因為版本問題而折騰了好久,所以在安裝elk的時候需要特別注意版本問題。
在嘗試了眾多安裝方法後,還是發現在官方網站下載deb包直接安裝最為有效便捷。 (系統若為centos,下載對應的rpm包)
搜索版本下載
理論上,Elasticsearch及Kibana版本為5.x都可以,而Logstash與elastalert沒啥聯繫,所以Logstash(大於或等於Elasticsearch及Kibana的5.x版本)能向Elasticsearch傳遞日誌信息即可。
下載完elk的deb包後,使用命令很快就能順利安裝。
1.2 elk配置
同樣,此處也只介紹本人的簡單配置。我這裡是只讓Logstash對外開放負責收集日誌,而Elasticsearch及Kibana僅在內網訪問,故Elasticsearch及Kibana並未開啟賬戶認證登陸,有需要開啟或其他需求的讀者們請自行搜索。
我這裡需要用到自定義的配置文件,故配置文件是自行創建的,放在/usr/share/logstash/bin中,取名為filebeat_log.conf :
1.3 啟動方法
elasticsearch&kibana啟動
掃描新的單元&重新載入systemd:
加入開機自啟動:
啟動:
查看狀態:
logstash啟動
進入/usr/share/logstash/bin:
二、使用filebeat進行分散式收集
一開始直接使用logstash進行日誌收集,發現資源消耗實在太大,無奈尋找解決方法,發現filebeat是一個輕量級的日誌傳輸工具,故使用filebeat作為日誌收集,而logstash作為中心過濾器向es傳遞日誌。
所以整體的架構如:
A、B、C、D…(這些伺服器是準備監控被攻擊行為,裝上filebeat)
主伺服器(裝上elk和elastalert,負責收集過濾分析filebeat傳遞的日誌和告警)
下面以tomcat為例子,分享我的配置文件(nginx的話,修改的路徑):
直接解壓下載的tar包,進入目錄修改配置文件。然後啟動filebeat:
三、日誌格式轉json
為方便kibana分析和elastalert的取值,日誌的格式要為json格式,上述的logstash配置文件已適配json格式。
公司的應用伺服器中均為nginx和tomcat,故本文只介紹tomcat及nginx的json格式配置方法,其他伺服器配置方法請自行搜索。
3.1 tomcat的json格式配置
打開,在最後的位置修改log的輸出配置為:
然後重啟tomcat,即生效。
3.2 nginx的json格式配置
最後即可
四、使用elastalert進行告警
在經過上述的安裝及配置後,終於輪到我們的主角—ElastAlert出來了,其他的告警工具還有、 ,請讀者們自行確定需要使用哪個。
ElastAlert使用python編寫,具有容易上手、文檔全等特點,雖然這個工具擁有如此多的優點,在搭建過程還是遇到了很多很多的未知錯誤,主要原因是網上的資料大多是針對es5.x以前的版本而沒什麼現成的資料可供參考。
4.1 安裝elastalert
具體的功能本文就不一一介紹了,請自行前往官方文檔了解
4.2 創建索引
安裝完成後會系統中會自帶三個命令:
、 、
使用,根據提示設置es後按回車默認即可。
配置完索引及配置文件後,可以使用進行測試。這裡有個bug,如果出現之類的錯誤,在確認沒有其他的問題時,可以先刪除索引,再使用重新生成索引。
4.3 配置config.yaml
以上各欄位的解釋:
Rules_folder:用來載入下一階段rule的設置,默認是example_rules
Run_every:用來設置定時向elasticsearch發送請求
Buffer_time:用來設置請求里時間欄位的範圍,默認是45分鐘
Es_host:elasticsearch的host地址
Es_port:elasticsearch 對應的埠號
Use_ssl:可選的,選擇是否用SSL連接es,true或者false
Verify_certs:可選的,是否驗證TLS證書,設置為true或者false,默認為- true
Es_username:es認證的username
Es_password:es認證的password
Es_url_prefix:可選的,es的url前綴(我的理解是https或者http)
Es_send_get_body_as:可選的,查詢es的方式,默認的是GET
Writeback_index:elastalert產生的日誌在elasticsearch中的創建的索引
Alert_time_limit:失敗重試的時間限制
4.4 告警配置介紹
在目錄中新建yaml配置文件 ,下面分開介紹這個配置文件的內容(下個小節將分享我的配置文件,此小節僅解釋其中的必要設置項):
1、告警規則
ElastAlert支持11種告警規則,本文不一一介紹了,為響應web攻擊行為,本文選用的告警規則是。
上述配置文件的意圖即是:在一分鐘內將匹配query裡面的sql注入規則,若匹配次數達到10次,即進行報警。
2、使用郵箱進行告警
ElastAlert提供了 10 多種通知的類型,本文選用的是郵箱告警,還有微信告警、釘釘告警,若有需要,請自行配置。
的配置內容會在下個小節給出,在這個配置中,我自定義了 alert 的內容,更為精確地突出了攻擊者ip、受攻擊的伺服器、攻擊事件等信息。
3、減少重複告警的頻率
在實際的使用中,若使用上述的配置,受到攻擊的時候郵箱將不斷地收到郵件,而這些郵件都對應著同一個攻擊實例,根本沒必要重複收取,於是,我使用了如下的配置:
在本人實際測試的攻擊場景中,發現使用了後,會錯過很多告警(這些告警並不是同一個攻擊實例),暫時不確定原因,還請讀者們自行確定是否開啟該設置。
4.5及配置文件內容
上述的4.4小節中對每個配置都作了簡單的介紹,這裡就直接放出web攻擊預警的配置文件供各位讀者參考。
4.6 運行elastalert
在成功配置完ElastAlert後將生成三個配置文件:
啟動elastalert服務,監聽elasticsearch:
為實現守護進程的作用,可以配合進行使用,本文不再闡述。
4.7 運行效果:
當匹配到自定義攻擊規則的時候,ElastAlert將會以郵件方式發送告警信息:
五、總結
ElastAlert除了本文介紹的告警web攻擊行為外,還能進行異常告警等。使用了frequency的規則後,基本能達到識別web攻擊的目的。在實際的使用中,elastalert能穩定運行,且能根據自定義配置文件精確告警,缺點是告警的格式不夠美觀和需要頻繁地修改配置文件。
參考鏈接:
ElastAlert:『Hi,咱服務掛了』:https://xizhibei.github.io/2017/11/19/alerting-with-elastalert/
[ElastAlert]介紹和安裝:https://segmentfault.com/a/1190000008227486
被elastalert虐了:http://blog.csdn.net/vbaspdelphi/article/details/54291066
*本文作者:shystartree,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載
TAG:FreeBuf |