當前位置:
首頁 > 最新 > ElastAlert監控日誌告警Web攻擊行為

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框架。

安裝方法網上有好多,此處就不再闡述。在試用了幾乎所有的安裝方法後,介紹下本人覺得比較快捷有效的安裝方法:


elastalert目前還不支持elk6.0以上版本,本人就是因為版本問題而折騰了好久,所以在安裝elk的時候需要特別注意版本問題。

在嘗試了眾多安裝方法後,還是發現在官方網站下載deb包直接安裝最為有效便捷。 (系統若為centos,下載對應的rpm包)

搜索版本下載

理論上,Elasticsearch及Kibana版本為5.x都可以,而Logstash與elastalert沒啥聯繫,所以Logstash(大於或等於Elasticsearch及Kibana的5.x版本)能向Elasticsearch傳遞日誌信息即可。

下載完elk的deb包後,使用命令很快就能順利安裝。


同樣,此處也只介紹本人的簡單配置。我這裡是只讓Logstash對外開放負責收集日誌,而Elasticsearch及Kibana僅在內網訪問,故Elasticsearch及Kibana並未開啟賬戶認證登陸,有需要開啟或其他需求的讀者們請自行搜索。

我這裡需要用到自定義的配置文件,故配置文件是自行創建的,放在/usr/share/logstash/bin中,取名為filebeat_log.conf :

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格式配置方法,其他伺服器配置方法請自行搜索。


打開,在最後的位置修改log的輸出配置為:

然後重啟tomcat,即生效。


最後即可

四、使用elastalert進行告警


在經過上述的安裝及配置後,終於輪到我們的主角—ElastAlert出來了,其他的告警工具還有、 ,請讀者們自行確定需要使用哪個。

ElastAlert使用python編寫,具有容易上手、文檔全等特點,雖然這個工具擁有如此多的優點,在搭建過程還是遇到了很多很多的未知錯誤,主要原因是網上的資料大多是針對es5.x以前的版本而沒什麼現成的資料可供參考。


具體的功能本文就不一一介紹了,請自行前往官方文檔了解


安裝完成後會系統中會自帶三個命令:

、 、

使用,根據提示設置es後按回車默認即可。

配置完索引及配置文件後,可以使用進行測試。這裡有個bug,如果出現之類的錯誤,在確認沒有其他的問題時,可以先刪除索引,再使用重新生成索引。


以上各欄位的解釋:

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:失敗重試的時間限制


在目錄中新建yaml配置文件 ,下面分開介紹這個配置文件的內容(下個小節將分享我的配置文件,此小節僅解釋其中的必要設置項):

1、告警規則

ElastAlert支持11種告警規則,本文不一一介紹了,為響應web攻擊行為,本文選用的告警規則是。

上述配置文件的意圖即是:在一分鐘內將匹配query裡面的sql注入規則,若匹配次數達到10次,即進行報警。

2、使用郵箱進行告警

ElastAlert提供了 10 多種通知的類型,本文選用的是郵箱告警,還有微信告警、釘釘告警,若有需要,請自行配置。

的配置內容會在下個小節給出,在這個配置中,我自定義了 alert 的內容,更為精確地突出了攻擊者ip、受攻擊的伺服器、攻擊事件等信息。

3、減少重複告警的頻率

在實際的使用中,若使用上述的配置,受到攻擊的時候郵箱將不斷地收到郵件,而這些郵件都對應著同一個攻擊實例,根本沒必要重複收取,於是,我使用了如下的配置:

在本人實際測試的攻擊場景中,發現使用了後,會錯過很多告警(這些告警並不是同一個攻擊實例),暫時不確定原因,還請讀者們自行確定是否開啟該設置。


上述的4.4小節中對每個配置都作了簡單的介紹,這裡就直接放出web攻擊預警的配置文件供各位讀者參考。


在成功配置完ElastAlert後將生成三個配置文件:

啟動elastalert服務,監聽elasticsearch:

為實現守護進程的作用,可以配合進行使用,本文不再闡述。


當匹配到自定義攻擊規則的時候,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 原創獎勵計劃,未經許可禁止轉載

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

RubyMiner挖礦程序24小時內影響全球30%的網路

TAG:FreeBuf |