很多企業(yè)使用 SIEM
來收集日志數(shù)據(jù),并將安適事件與多類安適設(shè)備(入侵檢測(cè)設(shè)備、Web應(yīng)用防火墻等)日志相關(guān)聯(lián),,指導(dǎo)安適人員進(jìn)行風(fēng)險(xiǎn)處置。然而 SIEM
也存在局限,監(jiān)控人員往往被淹沒在海量的告警之中無從下手,原因之一就是對(duì)于威脅的告警沒有處理的依據(jù),例如缺乏經(jīng)驗(yàn)的監(jiān)控人員很難判定一條安適事件告警是掃描還是針對(duì)性攻擊引起的(通常后者需要更多關(guān)注)。而通過借助于威脅情報(bào),可為監(jiān)控人員提供處理依據(jù),也可為安適人員在進(jìn)行日志分析和攻擊溯源時(shí)提供有力幫手。
本文將基于 Splunk,介紹威脅情報(bào)在甲方安適運(yùn)維中的應(yīng)用。
什么是威脅情報(bào)
按照Gartner的定義,威脅情報(bào)是指基于必然知識(shí)的證據(jù),已經(jīng)存在或正在形成的潛在威脅,好比,上下文、機(jī)制、指標(biāo)、意義以及可實(shí)施的建議,利用這些,可以幫手當(dāng)事人形成應(yīng)對(duì)這些危險(xiǎn)的決策。
針對(duì)攻擊者的威脅情報(bào)應(yīng)該包羅以下要點(diǎn):
系統(tǒng)架構(gòu)
在我們公司,Splunk 主要被用來收集各類安適設(shè)備、操作系統(tǒng)、應(yīng)用系統(tǒng)日志,從而實(shí)現(xiàn)安適監(jiān)控、安適告警、數(shù)據(jù)分析的需求。
安適設(shè)備通過 Syslog 發(fā)送,其余存放于操作系統(tǒng)文件系統(tǒng)中的日志通過在客戶端操作系統(tǒng)安置 Splunk Forwarder 實(shí)現(xiàn)日志收集。
初期通過日志字段提取后在 Splunk
實(shí)現(xiàn)了基本的報(bào)表和告警。然而正如前言所述,我們很快就被告警淹沒,無論如何調(diào)整告警閾值都無法令人滿意,于是開始尋找解決方案,通過一系列的選型比較,我們最終決定引入來自微步在線(ThreatBook)的第三方安適情報(bào)數(shù)據(jù),以API形式與
Splunk 整合。
需要注意的是——威脅情報(bào)數(shù)據(jù)的用量通常是有限制的(如按月計(jì)量),因此我們安排了前置系統(tǒng)作為當(dāng)?shù)赝{情報(bào)庫,用以緩存查詢結(jié)果,還順帶實(shí)現(xiàn)了專供內(nèi)部使用的
Web 交互查詢界面,后來又順路實(shí)現(xiàn)了威脅歷史信息的記錄,所有產(chǎn)生過告警的威脅都會(huì)被記錄,而且可被關(guān)聯(lián)搜索。如下圖所示:
(威脅情報(bào)分析界面圖,威脅情報(bào)數(shù)據(jù)來自微步在線ThreatBook TIP API)
隨著威脅情報(bào)數(shù)據(jù)的應(yīng)用,我們逐漸信任了數(shù)據(jù)的準(zhǔn)確度,并開始研究威脅IP自動(dòng)阻斷方案。由于在網(wǎng)絡(luò)建設(shè)時(shí)并沒有這個(gè)需求,因此我們的首要目標(biāo)是逐個(gè)尋找網(wǎng)絡(luò)中是否有串聯(lián)設(shè)備支持通過調(diào)用
API 的方式來達(dá)到 IP 阻斷的目的,最終我們?cè)谝慌_(tái)抗 DDoS 設(shè)備中發(fā)現(xiàn)了這個(gè)功能,并根據(jù)手冊(cè)要求的數(shù)據(jù)格式實(shí)現(xiàn)了接口調(diào)用。
系統(tǒng)架構(gòu)示意圖如下:
技術(shù)要點(diǎn)
日志字段提取
日志字段的提取是最基礎(chǔ)也是最重要的步驟,后續(xù)所有的工作都是基于正確的日志字段提取之上。
Splunk 提供了傻瓜式的字段提取功能,只要展開任意事件,點(diǎn)擊“事件操作”,選擇“提取字段”即可進(jìn)行提取,提取完成后可自動(dòng)生成正則表達(dá)式。
對(duì)于一些比較復(fù)雜的日志格式,使用 Splunk 的自動(dòng)化提取可能就力不從心了(又或許你對(duì)自動(dòng)生成的正則表達(dá)式嗤之以鼻),我們可以手寫正則表達(dá)式,并在“設(shè)置-字段-字段提取”中生存。
圖:Splunk 的字段提取
對(duì)于臨時(shí)使用的需求,也可以在搜索中使用 rex 命令對(duì)事件應(yīng)用正則表達(dá)式:
... | rex field=some_field "(?<capture_name>.*)"
對(duì)于一些以鍵值對(duì)形式輸出的日志,可通過 extract 命令進(jìn)行提取,十分便利:
... | extract kvdelim="=" pairdelim=";"
威脅情報(bào)庫查詢
威脅情報(bào)庫的查詢使用了 Splunk 的 lookup 命令,通過給 lookup 命令傳遞一個(gè)查詢值從而獲得對(duì)應(yīng)的查詢結(jié)果。
lookup 的典型使用場(chǎng)景之一是按照日志中的 IP 地址來查找對(duì)應(yīng)的資產(chǎn):由于日志中不包羅資產(chǎn)信息,而我們又希望通過 IP
地址快速定位到相關(guān)資產(chǎn)信息,此時(shí)就可以建立一張資產(chǎn)表,上傳至 Splunk,在“設(shè)置-查找”完成配置后,即可通過 lookup 命令進(jìn)行搜索。
... | lookup asset_table ip_addr AS dst_ip OUTPUT asset_info
而在使用 lookup 對(duì)威脅情報(bào)進(jìn)行查詢時(shí),則需要用到“外部查找”功能,原理類似于動(dòng)態(tài)生成一個(gè)查找表文件。外部查找功能需要調(diào)用命令和參數(shù),Splunk 的默認(rèn)安置中提供了一個(gè)名為“dnslookup”的外部查找,可以用來參考實(shí)現(xiàn)本身的外部查找。
威脅情報(bào)查詢外部查找腳本的部分實(shí)現(xiàn)代碼如下:
威脅情報(bào)查詢語句如下:
... | stats count by client_ip server_ip | lookup iplookup ip as client_ip OUTPUT info as _TI | spath input=_TI