復(fù)雜事件處理(CEP)技術(shù)在數(shù)據(jù)安全場(chǎng)景中的應(yīng)用
大數(shù)據(jù)時(shí)代,數(shù)據(jù)竊取、篡改、個(gè)人隱私泄露等數(shù)據(jù)安全問(wèn)題已成為社會(huì)關(guān)注的焦點(diǎn)。當(dāng)前一種解決方式是通過(guò)分析數(shù)據(jù)安全威脅場(chǎng)景的特征形成事件規(guī)則,結(jié)合規(guī)則引擎進(jìn)行事件告警輸出。但在企業(yè)生產(chǎn)及工作環(huán)境中往往存在復(fù)雜的攻擊,規(guī)則單一、匹配深度過(guò)淺及無(wú)關(guān)聯(lián)性會(huì)產(chǎn)生大量的攻擊行為遺漏和告警不精準(zhǔn)問(wèn)題。復(fù)雜事件處理(CEP, Complex Event Processin-g)技術(shù)應(yīng)運(yùn)而生。
基于復(fù)雜事件處理技術(shù),通過(guò)關(guān)聯(lián)、時(shí)序、聚合等方式對(duì)多種數(shù)據(jù)進(jìn)行分析處理,可以發(fā)現(xiàn)一些有價(jià)值的信息,是大數(shù)據(jù)處理的關(guān)鍵技術(shù)之一。目前,市面上CEP引擎主要有:
- Drools是Java編寫(xiě)的CEP引擎,核心為將規(guī)則集合,以規(guī)則過(guò)濾或關(guān)聯(lián)條件為節(jié)點(diǎn)生成網(wǎng)狀結(jié)構(gòu),數(shù)據(jù)會(huì)在網(wǎng)狀結(jié)構(gòu)中流動(dòng)并在節(jié)點(diǎn)臨時(shí)停留,利用空間換時(shí)間思想避免重復(fù)執(zhí)行相同條件以提升性能;
- Flink CEP是基于Flink計(jì)算框架衍生出的一個(gè)計(jì)算算子,是實(shí)時(shí)復(fù)雜事件處理的解決方案,它利用NFA(非確定有限自動(dòng)機(jī))對(duì)象進(jìn)行狀態(tài)管理;
- Siddhi是用于實(shí)時(shí)事件分析的開(kāi)源引擎,它支持典型的事件檢測(cè)模式,如篩選器、窗口、關(guān)聯(lián)的事件模式,以及更高級(jí)的功能,如事件分區(qū)、將數(shù)據(jù)庫(kù)值映射到事件等;
- Siddhi是一種輕巧、易集成的開(kāi)源CEP引擎,它識(shí)別事件流中需要關(guān)注的特征事件,并進(jìn)行實(shí)時(shí)分析處理,Siddhi與流框架Flink能友好集成,并獲得不錯(cuò)的處理性能。
當(dāng)前數(shù)據(jù)安全事件層出不窮,數(shù)據(jù)的安全傳輸、脫敏、加密、防泄漏等主要是事前防范措施,我們將圍繞數(shù)據(jù)溯源場(chǎng)景,基于CEP引擎對(duì)數(shù)據(jù)泄露相關(guān)事件進(jìn)行關(guān)聯(lián)分析,追蹤溯源。在事件運(yùn)營(yíng)整個(gè)流程中,針對(duì)安全設(shè)備發(fā)來(lái)的安全日志以及數(shù)據(jù)訪問(wèn)和傳輸日志,再經(jīng)過(guò)平臺(tái)解析、增強(qiáng)、歸一化等技術(shù)標(biāo)準(zhǔn)化后,就需要使用CEP規(guī)則引擎對(duì)標(biāo)準(zhǔn)化的日志做深度關(guān)聯(lián)分析,生成安全告警事件(如圖1),并推送給安全運(yùn)維人員,從而完成防護(hù)—檢測(cè)—響應(yīng)的整個(gè)安全事件運(yùn)營(yíng)的閉環(huán)。
圖1 安全日志分析流程
數(shù)據(jù)安全需求與分析場(chǎng)景非常復(fù)雜,為了適應(yīng)快速變更的場(chǎng)景需求和保護(hù)數(shù)據(jù)的價(jià)值,規(guī)則引擎的設(shè)計(jì)架構(gòu)需具備靈活的語(yǔ)義定制、友好的規(guī)則擴(kuò)展以及高效的大數(shù)據(jù)處理能力等特點(diǎn)。另外,根據(jù)日志的存儲(chǔ)特性,CEP規(guī)則引擎可分為實(shí)時(shí)和離線兩種分析模式,下面分別介紹這兩種模式在數(shù)據(jù)安全事件分析場(chǎng)景中的應(yīng)用。
模式一、實(shí)時(shí)復(fù)雜事件處理
為了快速發(fā)現(xiàn)數(shù)據(jù)安全事件,需要實(shí)時(shí)處理設(shè)備日志,因此需要基于實(shí)時(shí)的流式大數(shù)據(jù)處理框架開(kāi)發(fā)CEP規(guī)則引擎。一般情況下,將一個(gè)數(shù)據(jù)安全事件檢測(cè)場(chǎng)景部署到安全運(yùn)營(yíng)平臺(tái)上,需要經(jīng)歷如下步驟:
- Step1:理解數(shù)據(jù)安全事件的表現(xiàn)特征;
- Step2:推理設(shè)備日志的字段特征;
- Step3:歸納事件檢測(cè)邏輯,并轉(zhuǎn)化成事件處理語(yǔ)言(EPL);
- Step4:將EPL集成到CEP規(guī)則引擎中并執(zhí)行;
經(jīng)過(guò)上述步驟后,CEP規(guī)則引擎就可以加載該安全場(chǎng)景的事件檢測(cè)規(guī)則,當(dāng)符合該規(guī)則檢測(cè)模式的設(shè)備日志進(jìn)入到CEP規(guī)則引擎后,即可觸發(fā)生成事件。
基于Flink和Siddhi開(kāi)發(fā)CEP規(guī)則引擎,是實(shí)時(shí)事件處理的典型案例,其事件處理流程的架構(gòu)如圖2。
圖2 Flink-Siddhi流程圖
下面以一個(gè)實(shí)際業(yè)務(wù)中的數(shù)據(jù)安全威脅檢測(cè)場(chǎng)景為例:攻擊者通過(guò)若干已知賬號(hào)和通用密碼嘗試登陸(UEBA異常行為—單設(shè)備登陸多個(gè)不同賬號(hào)),成功后登陸特定用戶(hù)的confluence、郵箱等,翻閱并下載敏感信息(短時(shí)間內(nèi)下載大量文件),如服務(wù)器密碼、敏感文件等,進(jìn)而攻陷了一批服務(wù)器,造成嚴(yán)重的數(shù)據(jù)泄露。該場(chǎng)景涉及到三種日志:登陸認(rèn)證、Web訪問(wèn)和文件傳輸。經(jīng)過(guò)分析可知,該場(chǎng)景的日志具備如下特征:
- 登陸認(rèn)證日志:多次認(rèn)證失敗后突然成功;
- Web訪問(wèn)日志:某設(shè)備突然登陸若干不同的賬號(hào),偏離以往日常行為;
- 文件傳輸日志:短時(shí)間內(nèi)下載大量文件。
上述特征均可以使用CEP規(guī)則引擎內(nèi)置的算子來(lái)表示。
使用EPL將事件檢測(cè)邏輯定義出來(lái),然后將EPL加載到CEP規(guī)則引擎中,通過(guò)解析校驗(yàn)EPL等流程,最終得到一個(gè)物理執(zhí)行流程圖并分發(fā)到集群的各個(gè)worker節(jié)點(diǎn),開(kāi)始執(zhí)行上述事件檢測(cè)規(guī)則。
一般情況下,多數(shù)CEP引擎都提供了狀態(tài)機(jī)的方案,按照事件檢測(cè)規(guī)則對(duì)實(shí)時(shí)日志流進(jìn)行模式匹配,在上述安全事件檢測(cè)規(guī)則的具體執(zhí)行過(guò)程中,有限狀態(tài)機(jī)的執(zhí)行過(guò)程如圖3所示:
圖3 CEP規(guī)則執(zhí)行EPL基本流程
首先,CEP規(guī)則引擎持續(xù)檢測(cè)第一步的登陸認(rèn)證日志,如果檢測(cè)到多次認(rèn)證失敗突然登陸成功的日志,則判定為異常,并將異常登陸認(rèn)證日志緩存起來(lái),記為集合A。同時(shí),實(shí)時(shí)監(jiān)控集合A中日志源/目的IP,若有Web訪問(wèn)日志短時(shí)間內(nèi)登陸大量不同賬號(hào),且登陸賬號(hào)的數(shù)量超過(guò)正?;€(或閾值)的情況,記為異常的Web訪問(wèn)日志集合B。至此,得到了兩個(gè)日志集合A和B,并且將集合A和B中按源/目的IP條件關(guān)聯(lián)得到的集合記為[A&B]模式序列。
同理,以[A&B]模式序列中集合A的目的IP持續(xù)監(jiān)控文件傳輸日志是否有和關(guān)聯(lián)條件相匹配的文件傳輸日志,并且在登陸成功后的一段時(shí)間內(nèi)發(fā)生了大量的文件傳輸行為,于是得到集合C。并最終得到[A&B->C]模式序列。如果該模式序列[A&B->C]不為空,則說(shuō)明日志觸發(fā)該事件檢測(cè)規(guī)則,即可生成最終的賬號(hào)爆破成功后的數(shù)據(jù)泄露告警事件。
通過(guò)我們的CEP引擎,可以靈活高效處理數(shù)據(jù)安全場(chǎng)景的溯源分析,快速還原數(shù)據(jù)泄露過(guò)程的全貌,對(duì)責(zé)任定位、環(huán)境加固、安全預(yù)防起著重要作用。
模式二、離線復(fù)雜事件處理
雖然實(shí)時(shí)處理能檢測(cè)到很多數(shù)據(jù)泄露的場(chǎng)景,但由于部分場(chǎng)景時(shí)間跨度長(zhǎng),且是一次性接入的歷史日志,因此亟需離線復(fù)雜事件處理模式。離線模式可基于歷史日志,支持長(zhǎng)時(shí)間跨度的威脅分析,還原攻擊事件。綠盟科技開(kāi)發(fā)出一套通用的離線規(guī)則執(zhí)行框架,用以支持單源、多源關(guān)聯(lián)分析、復(fù)雜事件處理以及自定義插件類(lèi)規(guī)則,支持更多的場(chǎng)景分析,同時(shí)兼顧效率和資源。離線處理整體架構(gòu)如圖4所示。
圖4 離線規(guī)則執(zhí)行流程
- 規(guī)則與任務(wù)注冊(cè)模塊:支持在界面配置離線規(guī)則和執(zhí)行模式,并注冊(cè)至離線任務(wù)表中,由任務(wù)調(diào)度模塊調(diào)用。
- 任務(wù)調(diào)度模塊:常駐進(jìn)程,用來(lái)監(jiān)控任務(wù)表,根據(jù)任務(wù)信息來(lái)選擇2種執(zhí)行模式:(1)立即執(zhí)行,即手動(dòng)觸發(fā)的一次性任務(wù);(2)周期性執(zhí)行。
- 規(guī)則執(zhí)行模塊:根據(jù)配置和調(diào)度信息,基于對(duì)設(shè)備告警或流量日志、文件傳輸日志的簡(jiǎn)單查詢(xún)或關(guān)聯(lián)聚合等操作,執(zhí)行規(guī)則,生成相應(yīng)事件,最后將任務(wù)執(zhí)行狀態(tài)(成功/失敗)更新至任務(wù)表。
下面我們結(jié)合具體APT攻擊導(dǎo)致數(shù)據(jù)泄露實(shí)例場(chǎng)景來(lái)說(shuō)明:攻擊者首先通過(guò)端口和漏洞掃描嘗試,發(fā)現(xiàn)開(kāi)啟SSH服務(wù),然后制作密碼字典進(jìn)行暴力破解,期間有SQL注入嘗試,獲取密碼、權(quán)限等,成功登陸系統(tǒng)(SSH登陸成功),進(jìn)而安裝病毒程序或工具進(jìn)行木馬遠(yuǎn)程控制活動(dòng),獲取持久控制權(quán)限,登錄后閱讀或傳輸敏感文件,導(dǎo)致數(shù)據(jù)泄露,造成嚴(yán)重的數(shù)據(jù)安全事件。其攻擊流程如圖5所示。
圖5 復(fù)雜持續(xù)攻擊數(shù)據(jù)泄露案例
根據(jù)攻擊階段的關(guān)鍵動(dòng)作可提取特征:
(1)偵查:如端口、Web漏洞掃描;
(2)定向攻擊:賬號(hào)爆破、SQL注入等;
(3)攻陷+入侵:賬號(hào)爆破成功、系統(tǒng)登錄成功等;
(4)安裝工具:感染木馬、病毒等;
(5)惡意活動(dòng):遠(yuǎn)程控制、敏感文件傳輸、數(shù)據(jù)泄露等。
離線模式檢測(cè)當(dāng)前APT攻擊方法:
(1)首先根據(jù)數(shù)據(jù)攻擊場(chǎng)景提取的關(guān)鍵特征配置規(guī)則,這里可以配置為5個(gè)階段:S1(端口掃描)->S2(SSH暴力破解)-> S3(SSH登錄成功)-> S4(感染木馬病毒)-> S5(數(shù)據(jù)泄露);
(2)配置完規(guī)則后選擇執(zhí)行模式(立即或周期執(zhí)行),并注冊(cè)到任務(wù)表中;
(3)任務(wù)監(jiān)控進(jìn)程根據(jù)注冊(cè)信息執(zhí)行對(duì)應(yīng)任務(wù);
(4)執(zhí)行:由于是離線溯源,日志都已存儲(chǔ)至ES中,因此可以從任意階段開(kāi)始搜索。
由于面臨海量日志的關(guān)聯(lián),需解決好關(guān)聯(lián)時(shí)的性能問(wèn)題。這里采用最小日志源雙向關(guān)聯(lián)算法,核心思想為先找到各階段各個(gè)日志源命中數(shù)量的最小值,提取關(guān)鍵關(guān)聯(lián)條件字段信息,如sip、dip等,然后結(jié)合關(guān)聯(lián)條件,將其作為前一步或后一步的追加復(fù)合搜索條件,反復(fù)迭代搜索,獲取最終待關(guān)聯(lián)分析的日志最小數(shù)據(jù)量,在內(nèi)存數(shù)據(jù)庫(kù)中完成聚合關(guān)聯(lián)分析處理。
圖6 最小日志源雙向關(guān)聯(lián)搜索執(zhí)行流程示例
以三個(gè)日志源[s1,s2,s3]的多源關(guān)聯(lián)分析規(guī)則為例,描述詳細(xì)執(zhí)行邏輯:
(1)先查詢(xún)?nèi)齻€(gè)日志源的每個(gè)規(guī)則過(guò)濾條件分別命中的日志總數(shù)列表log_cnt_list =[cnt1,cnt2,cnt3], 假設(shè)cnt2為最小值;
(2)將第二個(gè)日志源過(guò)濾規(guī)則命中的日志數(shù)據(jù)Data2從日志數(shù)據(jù)庫(kù)中取出來(lái),結(jié)合關(guān)聯(lián)條件(如s1.sip=s2.dip),將s2的查詢(xún)結(jié)果Data2作為追加查詢(xún)條件,向前以及向后關(guān)聯(lián)查詢(xún)?nèi)罩驹磗1和s3分別命中的日志數(shù)據(jù)Data1和Data3。需要注意的是,以Data2中的值作為約束關(guān)聯(lián)條件查詢(xún)s1或s3,可能會(huì)查詢(xún)不到結(jié)果,即Data1和Data3可能為空,若為空,則需要及時(shí)終止向前或向后關(guān)聯(lián)查詢(xún),并退出規(guī)則執(zhí)行模塊,以避免對(duì)日志數(shù)據(jù)庫(kù)不必要的查詢(xún)并及時(shí)釋放系統(tǒng)資源。
(3)雙向查詢(xún)?nèi)罩窘Y(jié)束后,將查詢(xún)到的日志數(shù)據(jù)集[Data1,Data2,Data3]寫(xiě)入到內(nèi)存數(shù)據(jù)庫(kù)中,然后參與后續(xù)的關(guān)聯(lián)聚合并輸出事件,并及時(shí)清空內(nèi)存中的臨時(shí)數(shù)據(jù);
(4)增加反查機(jī)制,進(jìn)一步降低數(shù)據(jù)量。
可以看到,定義好場(chǎng)景和特征后,數(shù)據(jù)泄露相關(guān)場(chǎng)景可以靈活通俗的轉(zhuǎn)變成引擎內(nèi)置識(shí)別的方式去溯源檢測(cè),使場(chǎng)景分析的門(mén)檻大大降低,人人都可以基于業(yè)務(wù)中的場(chǎng)景實(shí)例做實(shí)戰(zhàn)分析。
結(jié)語(yǔ)
通過(guò)上文對(duì)復(fù)雜事件處理相關(guān)技術(shù)在數(shù)據(jù)安全典型場(chǎng)景中的應(yīng)用探討,并基于實(shí)時(shí)和離線兩種安全事件分析模式分析具體數(shù)據(jù)泄露場(chǎng)景案例的溯源實(shí)踐,我們可以看到復(fù)雜事件處理技術(shù)在網(wǎng)絡(luò)安全行業(yè)具有重要的應(yīng)用價(jià)值,尤其在數(shù)據(jù)安全事故頻發(fā)的現(xiàn)狀下其價(jià)值體現(xiàn)將更加明顯。但數(shù)據(jù)泄露的場(chǎng)景分析、數(shù)據(jù)竊取、濫用及加密等課題研究仍任重而道遠(yuǎn)。在設(shè)計(jì)上,需要更加完善的數(shù)據(jù)安全治理和評(píng)估框架體系;在技術(shù)上,需要對(duì)方案的性能、多樣性和擴(kuò)展性做持續(xù)探索和優(yōu)化。
【本文是51CTO專(zhuān)欄作者“安全牛”的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)通過(guò)安全牛(微信公眾號(hào)id:gooann-sectv)獲取授權(quán)】