威脅情報在甲方安全運維中的應用
前言
很多企業使用 SIEM 來收集日誌數據,並將安全事件與多類安全設備(入侵檢測設備、Web應用防火牆等)日誌相關聯,指導安全人員進行風險處置。然而 SIEM 也存在局限,監控人員往往被淹沒在海量的告警之中無從下手,原因之一就是對於威脅的告警沒有處理的依據,例如缺乏經驗的監控人員很難判定一條安全事件告警是掃描還是針對性攻擊引起的(通常後者需要更多關注)。而通過借助於威脅情報,可為監控人員提供處理依據,也可為安全人員在進行日誌分析和攻擊溯源時提供有力幫助。
在本文中,來自證通股份有限公司的安全管理團隊證通白帽子,將基於 Splunk,介紹威脅情報在甲方安全運維中的應用。
什麼是威脅情報
根據Gartner的定義,威脅情報是指基於一定知識的證據,已經存在或正在形成的潛在威脅,比如,上下文、機製、指標、意義以及可實施的建議,利用這些,可以幫助當事人形成應對這些危險的決策。
針對攻擊者的威脅情報應該包含以下要點:
係統架構
在我們公司,Splunk 主要被用來收集各類安全設備、操作係統、應用係統日誌,從而實現安全監控、安全告警、數據分析的需求。
安全設備通過 Syslog 發送,其餘存放於操作係統文件係統中的日誌通過在客戶端操作係統安裝 Splunk Forwarder 實現日誌收集。
初期通過日誌字段提取後在 Splunk 實現了基本的報表和告警。然而正如前言所述,我們很快就被告警淹沒,無論如何調整告警閾值都無法令人滿意,於是開始尋找解決方案,通過一係列的選型比較,我們最終決定引入來自微步在線(ThreatBook)的第三方安全情報數據,以API形式與 Splunk 整合。
需要注意的是——威脅情報數據的用量通常是有限製的(如按月計量),因此我們部署了前置係統作為本地威脅情報庫,用以緩存查詢結果,還順帶實現了專供內部使用的 Web 交互查詢界麵,後來又順路實現了威脅曆史信息的記錄,所有產生過告警的威脅都會被記錄,並且可被關聯搜索。如下圖所示:
(威脅情報分析界麵圖,威脅情報數據來自微步在線ThreatBook API)
隨著威脅情報數據的應用,我們逐漸信任了數據的準確度,並開始研究威脅IP自動阻斷方案。由於在網絡建設時並沒有這個需求,因此我們的首要目標是逐個尋找網絡中是否有串聯設備支持通過調用 API 的方式來達到 IP 阻斷的目的,最終我們在一台抗 DDoS 設備中發現了這個功能,並按照手冊要求的數據格式實現了接口調用。
係統架構示意圖如下:
技術要點
日誌字段提取
日誌字段的提取是最基礎也是最重要的步驟,後續所有的工作都是基於正確的日誌字段提取之上。
Splunk 提供了傻瓜式的字段提取功能,隻要展開任意事件,點擊“事件操作”,選擇“提取字段”即可進行提取,提取完成後可自動生成正則表達式。
對於一些比較複雜的日誌格式,使用 Splunk 的自動化提取可能就力不從心了(又或許你對自動生成的正則表達式嗤之以鼻),我們可以手寫正則表達式,並在“設置-字段-字段提取”中保存。
圖:Splunk 的字段提取
對於臨時使用的需求,也可以在搜索中使用 rex 命令對事件應用正則表達式:
- ... | rex field=some_field "(?<capture_name>.*)"
對於一些以鍵值對形式輸出的日誌,可通過 extract 命令進行提取,十分方便:
- ... | extract kvdelim="=" pairdelim=";"
威脅情報庫查詢
威脅情報庫的查詢使用了 Splunk 的 lookup 命令,通過給 lookup 命令傳遞一個查詢值從而獲得對應的查詢結果。
lookup 的典型使用場景之一是根據日誌中的 IP 地址來查找對應的資產:由於日誌中不包含資產信息,而我們又希望通過 IP 地址快速定位到相關資產信息,此時就可以建立一張資產表,上傳至 Splunk,在“設置-查找”完成配置後,即可通過 lookup 命令進行搜索。
- ... | lookup asset_table ip_addr AS dst_ip OUTPUT asset_info
而在使用 lookup 對威脅情報進行查詢時,則需要用到“外部查找”功能,原理類似於動態生成一個查找表文件。外部查找功能需要調用命令和參數,Splunk 的默認安裝中提供了一個名為“dnslookup”的外部查找,可以用來參考實現自己的外部查找。
威脅情報查詢外部查找腳本的部分實現代碼如下:
威脅情報查詢語句如下:
- ... | stats count by client_ip server_ip | lookup iplookup ip as client_ip OUTPUT info as _TI | spath input=_TI
此處首先使用了 stats 命令統計事件數據,隨後使用 lookup 命令對統計完成的數據進行威脅情報查詢,這樣的處理方式可避免重複的查詢,降低係統和網絡開銷,最後將 lookup 命令查詢返回的 JSON 格式數據使用 spath 命令解析。
威脅情報數據解析
對於 IP 的威脅查詢接口,一個惡意的 IP 通過 API 查詢返回的示例數據如下:
- {"response_code":0,"hit":{"expired":false,"detected":true,"info":["zombie","idc","compromised","spam"]},"ip":{"carrier":"1and1.com","ip":"82.165.37.26","location":{"country":"德國","province":"德國","lng":"10.454150","city":"","lat":"51.164181"}}}
字段說明如下:
有了字段信息,我們需要把這個 JSON 字符串解析後再進行下一步判斷。Splunk 提供了 spath 命令,可以將此前 lookup 返回的內容作為 spath 的輸入,並最終輸出解析完成的數據。如下圖所示:
防火牆自動阻斷 API 調用
防火牆的 API 調用和觸發通過 Splunk 的“搜索、報表和告警”實現。通過在 Splunk 中創建定時任務,對一定時間窗口內的日誌進行分析,結合威脅情報數據返回判斷結果,以此為依據決定是否觸發阻斷腳本。
應用場景
所有的技術問題都已解決,後續的工作分為兩塊:利用威脅情報數據豐富現有查詢結果,以及使用新的思路來實現原本無法實現的效果。
我們為此前所有與來源有關的告警都添加了威脅情報信息,監控、安全人員在第一時間即可大致評估事件的嚴重性。
優化模型
有了 IP 地址威脅情報數據,可以有助於評估當前麵臨的安全威脅的嚴重程度,並以可視化的方式呈現。實現方式為:以一定維度(如時間、IP 地址、類型等)聚合安全事件,對聚合的事件做基於 IP 地址的威脅情報查詢,隨後套用特定的模型並呈現。
自動阻斷
威脅情報也為威脅程度的判斷提供了依據,通過定時任務,當發現高危威脅且威脅來源 IP 地址符合預定義的條件時,即觸發腳本調用防火牆 API 的方式,實現黑名單 IP 地址的網絡層自動阻斷。
DNS
我們也使用了威脅情報提供的域名威脅情報查詢功能,在 DNS 服務器中開啟了 DNS 調試日誌並轉發至 Splunk,對匹配的惡意域名解析請求可及時告警。同時計劃實現將惡意域名自動解析到本地的功能,以最大限度避免威脅的擴散。
結語
目前我們在威脅情報的應用還處於摸索階段,隻發揮了其中一小部分的能力。從威脅情報信息的分類角度,威脅情報除了 IP 地址情報、DNS 情報,還可提供文件哈希情報等信息;從威脅情報的要素來說,我們當前隻使用了攻擊者身份、攻擊者位置等基本信息。相信如果更全麵地利用這些信息,可以為安全從業者們提供全新的安全視角、更廣的安全視野,甚至會對工作方式、工具產生革命性的提升。
本文作者:證通白帽子
來源:51CTO
最後更新:2017-11-03 16:34:46