Elasticsearch在安全分析領域的應用
- 2019 年 10 月 29 日
- 筆記
ES (Elasticsearch)是當前主流的大數據搜索引擎,具有擴展性好,檢索速度快,近實時等優勢,依託於ES的這些優勢,其不僅廣泛地應用於各種搜索場景,如日誌檢索,應用搜索等,在安全分析等領域也開始逐漸展現其強大的能力。 在傳統安全領域,企業通常會藉助防火牆,殺毒軟體等為企業構造起一套固若金湯的安全防禦體系,然而即使在如此嚴密的防護之下,仍然無法完全保證內部數據的安全,尤其是當面臨內部威脅時。這時,根據已有安全數據進行安全分析,及時發現並處理威脅就顯得尤為重要。然而,現代企業的安全數據已隨著日益蓬勃發展的資訊網路技術而迅速膨脹,對海量安全數據的採集,處理,存儲,查詢等正日益困擾著企業安全分析團隊。 而ES正是為應對海量數據的採集和檢索而生的,將ES應用於安全分析領域可以非常便捷高效地解決安全分析領域海量數據的存儲和檢索問題。使用ES進行安全分析的工作流如下圖:

1. 數據採集
數據採集是安全分析的第一步,也是至關重要的一步。安全分析所需的數據來源多種多樣,有網路數據,也有文件數據,有本機數據還有雲端數據。Elastic Stack提供的Beat工具包含了豐富的數據採集工具,可以方便地應用於各種數據採集場景。下表是安全分析中需要採集的各種數據以及ES下對應的採集方式
數據類型 |
來源 |
採集方式 |
---|---|---|
網路數據 |
網路監控,抓包等 |
Packetbeat, Filebeat |
應用數據 |
日誌 |
Filebeat |
雲端數據 |
介面,日誌 |
Functionbeat, Filebeat |
系統數據 |
系統調用,日誌 |
Auditbeat, Winlogbeat, Filebeat Osquery module |
Elastic不僅提供了官方Beat,還有大量的社區貢獻的Beat,用戶還可以根據自己的需要開發自定義Beat, 完全可以滿足安全分析對各種數據源的採集需求。
2. 數據標準化和增強
2.1 數據標準化
安全分析的數據來源多種多樣,不同來源的數據中表示相同含義的欄位在名稱,類型上各不相同,這就導致了在進行數據檢索分析時,為了檢索不同數據源中的同類數據,可能要兼容性地寫多個查詢條件,這給數據分析帶來了不小的麻煩。如下是一條Apache日誌
10.42.42.42 - - [07/Dec/2018:11:05:07 +0100] "GET /blog HTTP/1.1" 200 2571 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
在實際的安全分析中為了兼容來自不同數據源的數據可能要寫出如下查詢:
src:10.42.42.42 OR client_ip:10.42.42.42 OR apache2.access.remote_ip:10.42.42.42 OR context.user.ip:10.42.42.42 OR src_ip:10.42.42.42
為了解決這個問題,Elastic建立ECS(Elastic Common Schema)項目,採用專業的分類方法,對欄位進行統一命名,且Elastic生態相關組件均遵循這一命名規格,使得對不同數據源的檢索得以簡化。 使用ECS標準後該日誌的調整如下
欄位名稱 |
值 |
備註 |
---|---|---|
@timestamp |
2018-12-07T11:05:07.000Z |
|
ecs.version |
1.0.0 |
|
event.dataset |
apache.access |
|
event.original |
10.42.42.42 – – [07/Dec … |
未修改的完整日誌,供審計用 |
http.request.method |
get |
|
http.response.body.bytes |
2571 |
|
http.response.status_code |
200 |
|
http.version |
1.1 |
|
host.hostname |
webserver-blog-prod |
|
message |
"GET /blog HTTP/1.1" 200 2571 |
事件中重要資訊的文本表達,用於在日誌查看器上簡要顯示 |
service.name |
Company blog |
您為此服務訂製的名稱 |
service.type |
apache |
|
source.geo.* |
|
地理位置欄位 |
source.ip |
10.42.42.42 |
|
url.original |
/blog |
|
user.name |
– |
|
user_agent.* |
|
描述用戶代理的欄位 |
其他不同類型的數據源也通過ECS進行規範,此時查詢語句便可簡化如下:
source.ip:10.42.42.42
ECS不僅對欄位的名稱進行了規範,對欄位的類型也進行了定義。如下是ECS對Destination的部分欄位的定義
欄位 |
定義 |
類型 |
---|---|---|
destination.ip |
IP address of destination. Can be one or multiple IPv4 or IPv6 addresses. |
ip |
destination.hostname |
Hostname of the destionation. |
keyword |
destination.port |
Port of the destination. |
long |
destination.mac |
Mac address of the destination |
keyword |
destination.domain |
Destination domain |
keyword |
destination.subdomain |
Destination subdomain |
keyword |
可以看到ECS會根據欄位的特點為欄位設置最符合其使用場景的欄位類型,以優化其存儲和查詢。
2.2 數據增強
除了對數據進行標準化以外, Elastic Stack中的Beat、Logstash、Elasticsearch等組件都可以對數據進行增強,根據現有環境或數據,通過數據處理衍生出一些相關數據,為安全分析提供更為直接詳細的資訊。如下是各組件提供的數據增強方式
組件 |
數據增強方式 |
說明 |
---|---|---|
Beats |
processor |
可以對數據進行添加,移除,解析等操作,參考 |
Logstash |
filter |
可以根據現有數據進行各種數據處理操作,參考 |
Elasticsearch |
ingest pipeline |
可以根據現有數據進行個數數據操作,甚至通過腳本自定義處理方式,參考 |
3.索引數據
海量安全數據的存儲和檢索在傳統安全分析領域是一個非常棘手的問題,它們往往為了減少存儲的數據量提高查詢速度,不得不丟棄部分非核心數據,這很有可能在後期問題定位時產生數據盲點。而ES具有如下特點:
- 擴展性好:ES採用分散式的架構,可以輕鬆地對資源進行橫向縱向擴縮容,可以滿足不同數據量級及查詢場景對硬體資源的需求。
- 查詢速度快:ES底層採用Lucene作為搜索引擎,並在此之上做了多重優化,保證了用戶對數據查詢數據的需求。
- 相關性高: ES內部提供了完善的評分機制,會根據分詞出現的頻次等資訊對文檔進行相關性排序,保證相關性越高的文檔排序越靠前。另外還提供了包括模糊查詢,前綴查詢,通配符查詢等在內的多種查詢手段,幫助用戶快速高效地進行檢索,第一時間發現安全問題。
4. 自動檢測
面對海量的安全數據,通過人為巡檢的方式來發現數據異常已經成為一件很難實現的事情,而Elastic Stack作為一個完善的數據處理檢索技術棧,在數據異常自動發現方面也有充分考慮。
4.1 Watcher
實現異常自動發現最直接的方式便是基於閾值規則的監控和告警。Elasticsearch提供了Watcher功能: Watcher由Triger, Input, Condition, Transform, Actions等部分組成,其中
- Triger: 用於定義Watcher多久執行一次
- Input: 用於定義數據獲取方式,如ES查詢語句等
- Condition: 用於定義觸發Action的條件
- Transform:用於對數據進行處理以便Action使用
- Actions: 條件觸發時執行的動作 使用這套完善的基於閾值規則的監控和告警功能模組,用戶可以方便快捷地定義各種基於閾值規格的告警,以滿足安全分析的需要。
4.2 Machine Learning
雖然基於閾值規則的監控和告警可以在很多場景下幫助安全分析人員發現一些不符合預期的情況,然而閾值的選擇對告警的效果影響較大,閾值過高無法發現問題,閾值過低又有可能導致誤報。為此Elasticsearch提供了Machine Learning功能 Elasticsearch的Machine Learning功能採用非監督學習方式,通過對歷史數據的學習,並對未來數據進行預測,對於與預測數據不符的情況觸發告警。

5.互動式分析
發現異常僅僅是安全分析工作的開始,為了進一步確認異常,定位異常產生的原因和詳細鏈路,需要對數據進行各種各樣的檢索。ES作為數據搜索引擎,在數據檢索方面提供了強大的支援
- 豐富的DSL:為滿足不同的查詢場景,ES提供了豐富DSL查詢語句,對分詞查詢,短語查詢,範圍查詢,前綴查詢,模糊查詢,布爾查詢,通配符查詢,集合查詢等都有很好的支援。
- 友好地交互介面:Elastic Stack的可視化組件Kibana,為用戶提供了豐富的交互介面。用戶可以在Discover中直接搜索查看數據,也可以在Dev tools中執行任意的ES查詢語句,還可以在Visulization和Dashboard中定義業務關心的數據視圖。
- 專業module支援: 對於一些常用的功能, Elastic Stack甚至直接提供了一套從數據採集到數據展示的完善module。用戶只需要輕鬆配置就可以完成整個鏈路的配置,大大降低了用戶的使用門檻,減輕了用戶的工作負擔。
- SIEM APP: Elastic官方在Kibana 7.2推出了SIEM APP, 為安全分析團隊提供了一個專用的集成化交互工作空間,
6. 響應
在進行安全分析發現一個威脅時,需要採取相應的行動,如將非法用戶添加到防火牆中,發出告警郵件等。 Elasticsearch的Watcher內置了包括郵件,Slack在內的多種通知方式,另外還支援webhook, 用戶可以將任意想要觸發的動作以web服務的形式提供出來,當watcher對應的條件觸發時,便會調用對應的WEB服務,執行用戶定義的動作。
結語
隨著安全數據的不斷暴增,傳統的安全分析方法對於企業安全問題的定位和解決越來越顯得力不從心。ES作為當前主流的大數據存儲和檢索引擎,其優勢使得其對解決當前安全分析領域面臨的問題有得天獨厚的優勢。而Elastic團隊也在這方面不斷發現提供了一套完整的解決方案,使得安全分析團隊在使用ES進行安全分析變得得心應手,有的放矢。 ES的安全分析相關介紹及demo參考:
- 使用 Elastic Stack 進行端對端安全分析
- Hands on with Elastic SIEM: Defending your organization with the Elastic Stack
- Elastic Stack Security Analytics