壽 增,狄躍斌,馬 驍,許睿超,尹 隆
(1.國網(wǎng)遼寧省電力有限公司,遼寧 沈陽 110003;2.南瑞集團有限公司(國網(wǎng)電力科學(xué)研究院有限公司),江蘇 南京 210061;3.北京科東電力控制系統(tǒng)有限責(zé)任公司,北京 100192;4.東北大學(xué) 軟件學(xué)院,遼寧 沈陽 110169)
傳統(tǒng)的網(wǎng)絡(luò)威脅檢測系統(tǒng),如入侵檢測系統(tǒng),主要使用關(guān)系型數(shù)據(jù)庫進行建模分析,但表與表的關(guān)系復(fù)雜、不直觀,不能表達出清晰的網(wǎng)絡(luò)攻擊路徑。當前,網(wǎng)絡(luò)攻擊行為日新月異,網(wǎng)絡(luò)威脅行為也趨于復(fù)雜化,傳統(tǒng)的檢測方式,例如特征碼檢測[1-2]、opcode[3-4]檢測、虛擬執(zhí)行法等只能對已知的威脅進行檢測,不能檢測出未知、復(fù)雜的網(wǎng)絡(luò)威脅行為,檢測速度慢、資源消耗,嚴重影響了系統(tǒng)的性能。
為了解決傳統(tǒng)網(wǎng)絡(luò)威脅檢測技術(shù)不能應(yīng)對復(fù)雜的網(wǎng)絡(luò)攻擊以及無法對網(wǎng)絡(luò)攻擊進行溯源[5-7]的問題,利用知識圖譜[8-10]與圖數(shù)據(jù)庫Neo4j[11],本文設(shè)計并實現(xiàn)了可動態(tài)識別并學(xué)習(xí)新型網(wǎng)絡(luò)攻擊的網(wǎng)絡(luò)威脅行為分析系統(tǒng)。利用知識圖譜構(gòu)建網(wǎng)絡(luò)威脅行為庫,對復(fù)雜的網(wǎng)絡(luò)威脅行為以及這些行為直接的邏輯關(guān)系進行描述。在威脅識別方面,設(shè)計了知識圖譜匹配算法將采集到的威脅事件發(fā)送至知識圖譜與已有威脅知識圖譜進行匹配。針對新的網(wǎng)絡(luò)威脅,基于知識圖譜的自學(xué)習(xí)能力,設(shè)計了網(wǎng)絡(luò)威脅檢測自學(xué)習(xí)方案,可對新出現(xiàn)的網(wǎng)絡(luò)威脅事件進行學(xué)習(xí),并更新已有知識圖譜。利用Neo4j來實現(xiàn)知識圖譜,采用Flume+Kafka+Storm的平臺架構(gòu)對網(wǎng)絡(luò)威脅行為數(shù)據(jù)進行處理,提升知識圖譜各節(jié)點之間的遍歷搜索速度,加快網(wǎng)絡(luò)威脅行為識別效率。區(qū)別于傳統(tǒng)的檢測方法,基于知識圖譜的網(wǎng)絡(luò)威脅行為檢測不僅具有傳統(tǒng)檢測方法的優(yōu)勢,而且解決了傳統(tǒng)檢測方法速度慢、資源消耗大、無法描述復(fù)雜網(wǎng)絡(luò)威脅行為攻擊鏈等問題。
知識圖譜又稱為科學(xué)知識圖譜,是引文分析與數(shù)據(jù)、信息可視化相結(jié)合的產(chǎn)物。知識圖譜本質(zhì)上是一種基于圖的數(shù)據(jù)結(jié)構(gòu),由節(jié)點和邊組成。其中節(jié)點即實體,由一個全局唯一的ID標示,關(guān)系(也稱屬性)用于連接2個節(jié)點,通過知識圖譜更加快捷地查找到所需要的內(nèi)容,以及發(fā)現(xiàn)節(jié)點與節(jié)點之間的關(guān)系。
本系統(tǒng)采用Neo4j實現(xiàn)知識圖譜,Neo4j是目前用的較多的圖數(shù)據(jù)庫,它基于Java的高性能、高可靠性、可擴展性強的開源圖數(shù)據(jù)庫[12],完全兼容ACID,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性 (Durability)。
Neo4j的數(shù)據(jù)存儲形式主要是節(jié)點(Node)和邊(Edge)來組織數(shù)據(jù)。Node可以代表知識圖譜中的實體;Edge可以用來代表實體間的關(guān)系,關(guān)系可以有方向,兩端對應(yīng)開始節(jié)點和結(jié)束節(jié)點。另外,可以在Node上加一個或多個標簽表示實體的分類,以及一個鍵值對集合來表示該實體除了關(guān)系屬性之外的一些額外屬性。關(guān)系也可以附帶額外的屬性。其使用的存儲后端專門為圖結(jié)構(gòu)數(shù)據(jù)的存儲和管理進行定制和優(yōu)化,在圖上互相關(guān)聯(lián)的節(jié)點在數(shù)據(jù)庫中的物理地址也指向彼此,因此更能發(fā)揮出圖結(jié)構(gòu)形式數(shù)據(jù)的優(yōu)勢。
Flume是Cloudera提供的一個高可用、高可靠、分布式的海量日志采集、聚合和傳輸系統(tǒng)。Flume在數(shù)據(jù)輸入上支持:
① Avro:監(jiān)聽Avro端口,接受來自外部Avro客戶端的事件流。利用Avro可以實現(xiàn)多級流動、扇出流和扇入流等效果。
② Spooling Directory:監(jiān)視指定目錄,讀取新文件的內(nèi)容作為數(shù)據(jù)源。
③ NetCat:監(jiān)聽一個指定的端口,并將接收到的數(shù)據(jù)的每一行轉(zhuǎn)換為一個事件。
④ HTTP:基于http協(xié)議收集消息。
Flume允許復(fù)雜的數(shù)據(jù)流動模型,事務(wù)性的數(shù)據(jù)傳遞保證了數(shù)據(jù)的可靠性,并且Flume支持文件型Channel,提供了可恢復(fù)性。
Kafka[13]是由Apache軟件基金會開發(fā)的一個開源流處理平臺,是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費者在網(wǎng)站中的所有動作流數(shù)據(jù)。因此,本文選擇Apache Kafka[14]作為事件收集與事件處理的中間件。Kafka可以是一臺服務(wù)器,也可以是服務(wù)器集群,統(tǒng)稱為broker。每條發(fā)布到broker上的消息都有一個類別,成為topic。而每個topic下對應(yīng)了多個持久化的數(shù)據(jù)文件,即partition。每個topic在集群環(huán)境中有多個備份。
Storm[15]是一個分布式的、容錯的實時流計算系統(tǒng),可以方便地在一個計算機集群中編寫與擴展復(fù)雜的實時計算,其具有如下優(yōu)勢[16]:
① 低延遲與高性能:Storm集群主要由工作進程、線程和任務(wù)構(gòu)成。每臺主機上可運行多個工作進程,每個工作進程又可以創(chuàng)建多個線程,每個線程可以執(zhí)行多任務(wù),而任務(wù)是真正進行數(shù)據(jù)處理的實體。針對開發(fā)者創(chuàng)建的任務(wù)拓撲圖,Storm能根據(jù)集群中各個主機的性能,恰當?shù)胤峙淙蝿?wù)。
② 高可靠與高容錯:Storm可以保證接收的所有數(shù)據(jù)都能被完全處理,而如果數(shù)據(jù)在處理過程中出現(xiàn)異常,Storm會重新部署出錯的處理單元,保證處理單元永遠運行。
③ 流處理:批處理框架Hadoop[17]運行的是MapReduce job,當job結(jié)束后主機將會進入閑置狀態(tài)。Storm上運行的是拓撲,可以不斷根據(jù)拓撲分發(fā)任務(wù)到處理單元。
本文設(shè)計的系統(tǒng)由大數(shù)據(jù)平臺、威脅事件分析與知識圖譜構(gòu)建模塊、持久化存儲與前端展示模塊部分構(gòu)成,如圖1所示。
圖1 系統(tǒng)架構(gòu)Fig.1 System architecture
在實際網(wǎng)絡(luò)環(huán)境中,系統(tǒng)采集來自網(wǎng)絡(luò)中各個終端節(jié)點上的防火墻探針發(fā)送的網(wǎng)絡(luò)威脅事件信息,將搜集到的各種網(wǎng)絡(luò)威脅事件信息發(fā)送到Flume+Kafka+Storm構(gòu)成的大數(shù)據(jù)平臺,然后由大數(shù)據(jù)平臺將網(wǎng)絡(luò)威脅事件實時地發(fā)送至知識圖譜學(xué)習(xí)識別,并通過Neo4j圖數(shù)據(jù)庫存儲生成的知識圖譜,最后將未識別成功的數(shù)據(jù)傳到MySQL關(guān)系型數(shù)據(jù)庫。然后通過Spring,SpringMVC和Mybatis框架進行數(shù)據(jù)處理并最終返回給前端,由前端將實時的攻擊界面展示給用戶。
(1) 數(shù)據(jù)采集
在事件采集階段,使用Flume平臺提供的接口,搜集已授權(quán)的終端節(jié)點上的各種網(wǎng)絡(luò)威脅事件,再將這些網(wǎng)絡(luò)威脅事件提交給Kafka平臺進行緩沖處理,隨后產(chǎn)生與消費速率相匹配的事件流發(fā)往Storm平臺,由其產(chǎn)生實時的數(shù)據(jù)流發(fā)往Neo4j。
(2) 事件識別
在系統(tǒng)進行初始化的同時,系統(tǒng)同時訪問圖數(shù)據(jù)庫Neo4j,從中提取現(xiàn)有的網(wǎng)絡(luò)威脅事件的知識圖譜,將其載入到內(nèi)存中,運行的時候可以直接在內(nèi)存中訪問,避免在識別過程中多次對數(shù)據(jù)庫訪問,提高了系統(tǒng)的執(zhí)行效率。當遇到網(wǎng)絡(luò)威脅事件時,系統(tǒng)直接從內(nèi)存中讀取知識圖譜與網(wǎng)絡(luò)威脅事件比對。
(3) 威脅學(xué)習(xí)
當系統(tǒng)出現(xiàn)比對異常時,即發(fā)現(xiàn)了未知事件,就啟動學(xué)習(xí)功能,觸發(fā)威脅學(xué)習(xí)模塊。系統(tǒng)通過學(xué)習(xí)此事件,將相關(guān)威脅事件信息加入知識圖譜中,并更新內(nèi)存中的知識圖譜。
(4) 主機評估
系統(tǒng)根據(jù)識別模塊已經(jīng)統(tǒng)計的網(wǎng)絡(luò)威脅行為數(shù)據(jù),對此主機IP地址進行判斷其威脅程度的高低,將威脅程度高的主機納入黑名單中并進行廣播處理。
(5) 數(shù)據(jù)統(tǒng)計
在知識圖譜更新完成后,系統(tǒng)再統(tǒng)計并記錄有關(guān)事件的攻擊次數(shù)等信息,提供給統(tǒng)計算法,供其進行進一步的分析。
(6) 數(shù)據(jù)持久化
在知識圖譜更新完成后,系統(tǒng)將這些數(shù)據(jù)進行持久化,將其存儲到MySQL和Neo4j數(shù)據(jù)庫中,防止數(shù)據(jù)丟失。
(7) 可視化處理
系統(tǒng)調(diào)用前端顯示模塊,將此網(wǎng)絡(luò)威脅事件的信息實時更新到前端,給用戶展示實時的安全情況。
系統(tǒng)的軟件架構(gòu)如圖2所示,主要分為應(yīng)用層、接口層、邏輯層、網(wǎng)絡(luò)層和存儲層。
圖2 系統(tǒng)軟件架構(gòu)Fig.2 System software architecture
① 應(yīng)用層:用戶首先進行注冊,在通過認證后,進入整個系統(tǒng)進行全局管理。服務(wù)器集群中的每個節(jié)點將自己采集到的網(wǎng)絡(luò)威脅事件分析處理后交給系統(tǒng)進行匹配和更新。
② 接口層:系統(tǒng)中包含用戶注冊接口、身份認證接口、數(shù)據(jù)上傳接口、網(wǎng)絡(luò)威脅事件匹配接口和IP控制接口。
③ 邏輯層:通過調(diào)用接口實現(xiàn)了身份認證、網(wǎng)絡(luò)威脅事件匹配、網(wǎng)絡(luò)威脅事件的知識圖譜更新、節(jié)點危險程度更新、IP黑白名單控制和整體事態(tài)感知功能。
④ 網(wǎng)絡(luò)層:主機集群通過大數(shù)據(jù)平臺進行網(wǎng)絡(luò)威脅數(shù)據(jù)的采集與分析。用戶登錄系統(tǒng)后,可以對服務(wù)器采集到的網(wǎng)絡(luò)威脅事件數(shù)據(jù)進行管理。
⑤ 存儲層:接收到新的網(wǎng)絡(luò)威脅事件后,對知識圖譜進行更新,新的事件、賬戶信息更新,存放到數(shù)據(jù)庫中。
在事件采集模塊中,系統(tǒng)采用Flume+Kafka+Storm的數(shù)據(jù)采集處理框架,通過 Flume提供的接口,收集大量已授權(quán)網(wǎng)絡(luò)發(fā)送的威脅事件,再將收集到的威脅事件提交到消息中間件 Kafka,之后在Storm中進行數(shù)據(jù)的消費,傳入到知識圖譜中。系統(tǒng)的數(shù)據(jù)處理流程如圖3所示。
圖3 數(shù)據(jù)處理流程Fig.3 Data processing flow
系統(tǒng)包括6個模塊:大數(shù)據(jù)實時處理模塊、網(wǎng)絡(luò)威脅行為識別模塊、網(wǎng)絡(luò)威脅自學(xué)習(xí)模塊、黑名單策略模塊、數(shù)據(jù)持久化模塊和用戶模塊。系統(tǒng)功能組成如圖4所示。
圖4 系統(tǒng)功能模塊Fig.4 System function modules
大數(shù)據(jù)實時處理模塊負責(zé)搜集威脅事件并將其封裝成實時事件流傳輸給網(wǎng)絡(luò)威脅行為識別模塊,由其進行識別處理,對于未能準確識別的事件交由網(wǎng)絡(luò)威脅自學(xué)習(xí)模塊進行處理;對于識別成功的事件交由黑名單策略模塊進行分析處理;對于傳播影響度較大的IP地址進行屏蔽處理,再將這些得到的信息交給數(shù)據(jù)持久化模塊進行儲存,并將實時的攻擊信息交給用戶模塊呈現(xiàn)給用戶。
該模塊負責(zé)搜集威脅事件,產(chǎn)生實時的數(shù)據(jù)傳輸流到威脅行為發(fā)現(xiàn)模塊。在該模塊中,F(xiàn)lume平臺從所管理的計算機集群防火墻和監(jiān)控軟件中獲取訪問數(shù)據(jù),作為生產(chǎn)者,將數(shù)據(jù)發(fā)送給消息隊列處理系統(tǒng)Kafka;Kafka作為中間緩沖區(qū),解決生產(chǎn)消費速率不匹配問題;Storm則充當消費者實時地處理數(shù)據(jù),產(chǎn)生實時的數(shù)據(jù)流傳輸給威脅識別模塊。該模塊在終端防火墻部署,作為數(shù)據(jù)源,防火墻上記錄有計算機與外界的各種訪問記錄,這些往來記錄作為系統(tǒng)的數(shù)據(jù)。
數(shù)據(jù)實時處理流程如圖5所示。從事件源獲取數(shù)據(jù)后,F(xiàn)lume,Kafka和Storm三個大數(shù)據(jù)平臺各自獨立運行,通過事件流的順序連接形成整體的大數(shù)據(jù)處理平臺。
圖5 數(shù)據(jù)實時處理流程Fig.5 Real-time data processing flow
每個Flume源從數(shù)據(jù)源中不斷地獲取數(shù)據(jù),得到數(shù)據(jù)后將威脅事件的數(shù)據(jù)暫時存儲在管道中,在匯聚點中將數(shù)據(jù)分為一條條的基本單位事件發(fā)向緩沖區(qū)Kafka集群中。
數(shù)據(jù)流分為許多事件類型,推向緩沖區(qū)Kafka后,根據(jù)不同的事件類型被分往不同的主題中,并儲存在物理內(nèi)存中。物理內(nèi)存中以分區(qū)作為單位存儲,等待Storm平臺發(fā)送需求數(shù)據(jù)的請求,再按照請求發(fā)送相應(yīng)規(guī)模的數(shù)據(jù)。傳輸時每條數(shù)據(jù)擁有自己的偏移量,并采用相應(yīng)的機制來保證有序性和傳輸可靠性。
Storm平臺從Kafka中得到消費數(shù)據(jù)后,其中的組件Nimbus模塊則會根據(jù)當前系統(tǒng)的繁忙情況和可負載的數(shù)據(jù)量,將處理信息的任務(wù)分給相對空閑的數(shù)據(jù)處理組件進行處理。
該模塊將知識圖譜與Neo4j圖數(shù)據(jù)庫結(jié)合。在初始化階段,系統(tǒng)根據(jù)威脅事件的各個屬性來構(gòu)建知識圖譜,每一個節(jié)點表示一個威脅事件,節(jié)點之間的連線表示威脅事件之間的路徑關(guān)系,用Neo4j來儲存構(gòu)建好的知識圖譜,用于之后的威脅事件識別[18]。初始化完成后,從數(shù)據(jù)實時處理模塊中獲得實時的威脅事件流信息,比對威脅事件的各個屬性以此來判斷是否為相同事件,借助知識圖譜的特性提高威脅事件的識別速度。
該功能的實現(xiàn)主要依賴大數(shù)據(jù)平臺的計算能力和知識圖譜的擴展學(xué)習(xí)能力。當系統(tǒng)發(fā)現(xiàn)新的網(wǎng)絡(luò)威脅行為,且在已有知識圖譜無法識別該威脅,為此,可以對已獲取的新的網(wǎng)絡(luò)威脅行為的行為路徑進行分析,與從其他終端節(jié)點上獲取的此新網(wǎng)絡(luò)威脅行為的行為特征進行比對。當系統(tǒng)比對一定數(shù)量后,系統(tǒng)便能對新的網(wǎng)絡(luò)威脅行為的行為特征和路徑準確掌握,用以更新知識圖譜。
傳入威脅事件后,每次匹配成功,則將相應(yīng)主機節(jié)點的威脅程度進行更新,在威脅程度超出一定范圍后,認定其為被攻擊者控制的傀儡計算機,自動將此主機IP加入到黑名單中,之后再廣播通知集群中的各個主機節(jié)點,對此IP進行屏蔽,從而抑制由此IP發(fā)送的威脅事件的傳播。
黑名單策略模塊的業(yè)務(wù)流程如圖6所示,當發(fā)現(xiàn)某臺主機被攻擊時,馬上根據(jù)采集到的威脅事件的數(shù)據(jù)進行查詢,即以該主機的IP為目的IP查詢出威脅事件的源IP,并標記此源IP。判斷此IP是否是所有威脅事件傳播的起始IP,如果是,此源IP則為攻擊者;若不是,用其他被感染主機的數(shù)據(jù)繼續(xù)判斷該IP是否被標記到達了一定次數(shù)N,若是則加入黑名單,并繼續(xù)以此IP為目的IP進行查詢,直到到達頂層,找到攻擊者IP地址進行廣播。
圖6 黑名單策略模塊流程Fig.6 Workflow of the blacklist policy module
該模塊將從Neo4j圖數(shù)據(jù)庫中讀取相關(guān)威脅事件信息,通過MySQL數(shù)據(jù)庫對這些事件信息進行存儲,然后再使用Mybatis,Spring和SpringMVC框架進行數(shù)據(jù)處理,最終將處理后的數(shù)據(jù)流返回給前端用戶模塊。數(shù)據(jù)全部用MySQL數(shù)據(jù)庫進行持久化存儲。由于sql寫在xml文件中,Mybatis便于統(tǒng)一管理和優(yōu)化,解除MySQL和程序代碼的耦合。提供映射標簽,支持對象和數(shù)據(jù)庫orm字段關(guān)系的映射、對象關(guān)系映射標簽和對象關(guān)系的組建。
用戶模塊主要分為2個功能:注冊功能和登錄功能。系統(tǒng)會按照用戶身份信息的不同將用戶分為普通用戶和管理員用戶。普通用戶即正常注冊使用的用戶,可以查看自己的主機遭受攻擊的數(shù)據(jù)統(tǒng)計。管理員用戶擁有高權(quán)限,可以看到所有用戶的受攻擊數(shù)據(jù)統(tǒng)計,并可以監(jiān)視整個網(wǎng)絡(luò)。
基于知識圖譜的網(wǎng)絡(luò)威脅行為識別,其本質(zhì)為搜集的威脅事件與知識圖譜中的現(xiàn)有事件進行比較,具體流程如圖7所示。
圖7 基于知識圖譜的網(wǎng)絡(luò)威脅行為識別流程Fig.7 Network threat behavior identification process based on knowledge graph
在威脅識別模塊接收到威脅事件時,利用知識圖譜識別威脅事件[19]。將新的事件與知識圖譜內(nèi)已有的事件進行比較,如果與一個事件的各個屬性都匹配上,則認定為2個事件相同,然后將后續(xù)威脅事件按照當前節(jié)點的路徑相連的節(jié)點相比較,如此循環(huán)直到?jīng)]有匹配上的,則此時威脅事件就達到了一個場景節(jié)點,然后將沒有匹配上的事件傳輸?shù)綌?shù)據(jù)持久層供知識圖譜學(xué)習(xí)。
算法1是對基于知識圖譜的網(wǎng)絡(luò)威脅行為識別過程的描述。在算法1中,安全事件作為基本事件類型,由上層的大數(shù)據(jù)平臺傳導(dǎo),每一個事件包括不同的屬性,例如源IP和目的IP等,通過對這些屬性具體分析識別得到結(jié)果。
算法1:基于知識圖譜的網(wǎng)絡(luò)威脅行為識別算法Input E:Security incident M:Knowledge mapOutput E1:Not matching successfully security incidentBegin whileflag==True do Select event E from data platform if(E in M) then Continue comparison along node path Else Send events to data persistence layer End if End whileEnd
對于未能識別的網(wǎng)絡(luò)威脅,需要通過網(wǎng)絡(luò)威脅行為學(xué)習(xí)算法進行學(xué)習(xí),并對已有知識圖譜進行擴充[20]。網(wǎng)絡(luò)威脅行為學(xué)習(xí)流程如圖8所示。當有威脅事件被檢測到時,開始判斷是否為已知威脅事件,如果為是,則將攻擊路徑和攻擊結(jié)果記錄到數(shù)據(jù)持久層;如果為否,則根據(jù)攻擊結(jié)果檢索相同的攻擊路徑并計算相同路徑的概率,判斷概率是否大于系統(tǒng)設(shè)定的閾值,若大于則將此路徑構(gòu)建到網(wǎng)絡(luò)威脅行為庫中,若不大于則重新開始監(jiān)聽新的事件。
圖8 網(wǎng)絡(luò)威脅行為學(xué)習(xí)流程Fig.8 Network threat behavior learning process
算法2是對網(wǎng)絡(luò)威脅行為學(xué)習(xí)過程的描述。
算法2:網(wǎng)絡(luò)威脅行為學(xué)習(xí)算法Input E:Security incident D:Network dangerous behavior databaseOutput D1:Updated network dangerous behavior database Begin whileflag==True do if(E in D) then Record path into data persistence layer Record attack results into data persistence layer else Retrieve the same attack path according to the attack result Calculate the probability of the same path in each path ifprobability>85%then flag==False Build this path into the network dangerous behavior database End if End if End whileEnd
本文設(shè)計并實現(xiàn)了一個基于知識圖譜的網(wǎng)絡(luò)威脅行為分析系統(tǒng)。利用Flume + Kafka + Storm 構(gòu)建的數(shù)據(jù)處理平臺,保證大量網(wǎng)絡(luò)威脅行為數(shù)據(jù)高效傳輸與處理。利用知識圖譜描述網(wǎng)絡(luò)威脅行為間的各種關(guān)系,并根據(jù)已有網(wǎng)絡(luò)威脅行為來動態(tài)更新已有知識圖譜,實現(xiàn)網(wǎng)絡(luò)威脅行為的自學(xué)習(xí)。系統(tǒng)通過自學(xué)習(xí)、自生成的知識圖譜和實時更新的自適應(yīng)網(wǎng)絡(luò)威脅行為檢測方法,彌補了傳統(tǒng)網(wǎng)絡(luò)威脅檢測方法難以檢測未知、復(fù)雜的網(wǎng)絡(luò)威脅行為的技術(shù)短板,并提升了檢測效率。