陳敬涵
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)
1987年Denning[1]首次提出入侵檢測的概念,在入侵檢測中根據(jù)檢測思路的不同,入侵檢測可以分為誤用檢測和異常檢測兩類。誤用檢測假設(shè)入侵活動能夠被按某種方式精確編碼,通過分析攻擊者的網(wǎng)絡(luò)行為數(shù)據(jù),建立起攻擊模型庫,在實(shí)際的網(wǎng)絡(luò)環(huán)境中通過匹配攻擊者的網(wǎng)絡(luò)行為與攻擊模型庫來檢測入侵者。由于其必須針對每一個(gè)特定攻擊進(jìn)行分析建模,已知的入侵模式必須手工編碼到系統(tǒng)中,且系統(tǒng)需要不斷地升級維護(hù),導(dǎo)致其工作量大,人為參與度高,在應(yīng)對不斷更新的攻擊過程中受到了極大的限制。針對誤用檢測的問題,異常檢測從正常的網(wǎng)絡(luò)行為入手進(jìn)行分析,建立網(wǎng)絡(luò)用戶的正常行為模型,在檢測過程中通過分析網(wǎng)絡(luò)行為偏離正常行為的程度來判斷異常。異常檢測不依賴于具體行為是否出現(xiàn),并且不需要系統(tǒng)及其安全性缺陷的專門知識,相較于誤用檢測,異常檢測在應(yīng)對未知攻擊上具有更好的檢測效果與更好適應(yīng)性,但因?yàn)橛脩粜袨槭墙?jīng)常改變的,對系統(tǒng)中的所有用戶行為進(jìn)行全面描述是不可能做到的,所以一定程度上有更高的誤報(bào)率,并且在用戶數(shù)量多、工作方式易變的環(huán)境中,配置和管理的復(fù)雜性較高。
異常檢測方法可以分為靜態(tài)檢測方法和動態(tài)檢測方法兩類[2-4]。靜態(tài)的檢測方法基于設(shè)定好的閾值,監(jiān)控當(dāng)前網(wǎng)絡(luò)的觀測參數(shù),如果參數(shù)值超出閾值,就認(rèn)為當(dāng)前監(jiān)控的網(wǎng)絡(luò)發(fā)生異常。動態(tài)方法在進(jìn)行異常檢測時(shí),不僅要監(jiān)控當(dāng)前網(wǎng)絡(luò)流量的情況,還要參考相鄰時(shí)間內(nèi)網(wǎng)絡(luò)流量觀測值的變化。動態(tài)檢測方法主要有廣義似然比(GLR)檢測方法[5]、基于指數(shù)平滑技術(shù)的檢測方法[6]和殘差比異常檢測方法[7]等。
Spark是使用Scala開發(fā)的分布計(jì)算框架,由于分布式計(jì)算過程中會涉及大量的數(shù)據(jù)集重用。例如,在數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)的算法中就會涉及大量的數(shù)據(jù)集重用。對于此類問題,設(shè)計(jì)者提出了彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset,RDD),數(shù)據(jù)在整個(gè)并行計(jì)算過程中以RDD的形式緩存于內(nèi)存中并支持緩存與復(fù)用,最大可能的降低了框架I/O,提高了數(shù)據(jù)處理速度。RDD是一種在分布集群節(jié)點(diǎn)上進(jìn)行分區(qū)的只讀對象集合,在集群的分布計(jì)算中多節(jié)點(diǎn)可共享RDD,其具有局部計(jì)算、容錯(cuò)與可擴(kuò)展等特性,并支持基于數(shù)據(jù)集的應(yīng)用?;赗DD開發(fā)者在Spark中提出了內(nèi)存計(jì)算的概念,極大的降低了磁盤的交互讀寫操作?,F(xiàn)階段,RDD緩存粒度較粗,僅支持全部緩存。當(dāng)內(nèi)存不足時(shí),Spark調(diào)用LRU(Least Recently Used)算法將要替換的RDD緩存到磁盤,并在內(nèi)存中緩存新的RDD。Spark的迭代分布式內(nèi)存計(jì)算框架,在數(shù)據(jù)重用度高的應(yīng)用場景中具有高效性,但由于RDD的不可修改性,在異步更新的應(yīng)用場景如索引和爬蟲中Spark有一定的局限性。為了提供不同場景下的Spark大數(shù)據(jù)處理,Spark除了提供MapReduce編程模型之外,還提供了一組工具集包括 SparkSQL、Spark Streaming、MLlib 和GraphX等子模塊。
其中,SparkSQL是在Spark平臺上處理結(jié)構(gòu)化數(shù)據(jù)的工具。首先,SparkSQL針對多種數(shù)據(jù)源問題提供了統(tǒng)一的數(shù)據(jù)源訪問接口,如JSON文件與Apache?Hive表等;其次SparkSQL兼容Hive,復(fù)用Hive的元數(shù)據(jù),支持Hive的UDF、查詢與數(shù)據(jù)等;最后SparkSQL提供了一套簡化版的SQL查詢語句提升了數(shù)據(jù)分析交互性與數(shù)據(jù)分析的效率。Spark Streaming是Spark平臺上的流式計(jì)算工具。首先,Spark Streaming基于Spark API實(shí)現(xiàn),其極大的簡化了流式編程的復(fù)雜度,在進(jìn)行流式編程時(shí)可以像普通的批處理程序一樣進(jìn)行編寫。其次,Spark Streaming將流式計(jì)算、批處理、交互式查詢進(jìn)行了良好的結(jié)合,并提供了良好的自動化容錯(cuò)處理。MLlib是基于Spark編寫的機(jī)器學(xué)習(xí)算法庫,該機(jī)器學(xué)習(xí)庫中包含了常用的聚類、分類、回歸、協(xié)同過濾與統(tǒng)計(jì)分析等算法。MLlib性能是Hadoop的100倍[6-7]。自Spark0.8版本開始MLlib成為了Spark的一個(gè)子模塊。隨著Spark的不斷開發(fā)Mllib也在進(jìn)一步豐富與完善。GraphX是Spark平臺上的圖運(yùn)算工具。用戶可以通過GraphX在Spark平臺上進(jìn)行集合運(yùn)算與圖運(yùn)算。GraphX相較于GraphLab和Giraph等圖計(jì)算框架具有更優(yōu)的計(jì)算性能。
Spark集群主要包含:驅(qū)動程序(Driver)與工作節(jié)點(diǎn)(Worker)。驅(qū)動程序是應(yīng)用程序的起點(diǎn),其負(fù)責(zé)協(xié)調(diào)集群間工作節(jié)點(diǎn)的并行化計(jì)算。工作節(jié)點(diǎn)主要負(fù)責(zé)并行化的計(jì)算由驅(qū)動程序所分配子任務(wù),并將最終的計(jì)算結(jié)果返回給驅(qū)動程序。如圖1所示是Spark運(yùn)行時(shí)狀態(tài):
圖1 Spark運(yùn)行時(shí)狀態(tài)
如上圖1所示,當(dāng)一個(gè)任務(wù)被提交給Driver時(shí),Driver負(fù)責(zé)協(xié)調(diào)啟動多個(gè)Worker,Worker將會從本地文件系統(tǒng)或HDFS中讀取數(shù)據(jù)在集群中進(jìn)行分區(qū)并創(chuàng)建RDD,然后將RDD緩存在內(nèi)存中。在程序運(yùn)行過程中Driver將操執(zhí)行程序傳遞給Worker,協(xié)調(diào)Worker進(jìn)行數(shù)據(jù)處理,當(dāng)Worker的相應(yīng)子任務(wù)處理結(jié)束后,Worker將最后的處理結(jié)果返回給Driver完成整個(gè)運(yùn)行過程。
本文提出的異常行為分析系統(tǒng)支持基于安全規(guī)則定義的知識庫的導(dǎo)入,支持基于快速多模式匹配技術(shù)的大流量網(wǎng)絡(luò)環(huán)境下的網(wǎng)絡(luò)行為特征匹配,實(shí)現(xiàn)網(wǎng)絡(luò)異常行為監(jiān)測。異常行為檢測的總體流程如下圖2所示,主要包括數(shù)據(jù)源、數(shù)據(jù)緩存與分發(fā)、異常行為檢測、結(jié)果存儲與展示四個(gè)部分。
圖2 異常檢測架構(gòu)圖
異常行為檢測的數(shù)據(jù)源為TCP/UDP會話流,將TCP/UDP會話流統(tǒng)稱為Session數(shù)據(jù),Session數(shù)據(jù)來源于Session流量還原程序,由于流量規(guī)模較大,系統(tǒng)對實(shí)時(shí)性要求較高,因此本項(xiàng)目基于Kafka實(shí)現(xiàn)數(shù)據(jù)緩存與分發(fā)。為了便于將數(shù)據(jù)對象作為字節(jié)流在不同組件間傳輸,Session對象采用AVRO序列化方式進(jìn)行處理,Kafka接收端解析AVRO字節(jié)流,并將數(shù)據(jù)傳送給Spark Streaming進(jìn)行處理。具體實(shí)現(xiàn)方式為:Session還原程序作為Kafka系統(tǒng)的producer,通過push模式將消息發(fā)布到broker,異常行為檢測模塊作為Kafka系統(tǒng)的 consumer,通過 pull模式從 broker獲取 Session數(shù)據(jù)。
本文所采用的多數(shù)據(jù)流聚合的方式如下:stream?ing程序在每個(gè)時(shí)間間隔內(nèi)讀取該時(shí)間段內(nèi)的session集合,將session按照上面提到的3個(gè)維度進(jìn)行聚合操作,針對每個(gè)聚合操作,提取出對應(yīng)的統(tǒng)計(jì)特征,然后將統(tǒng)計(jì)特征與規(guī)則列表逐個(gè)進(jìn)行匹配,一旦匹配成功,則認(rèn)為該會話里違反了規(guī)則,根據(jù)規(guī)則的action進(jìn)行異常處理,包括 info、warn、error。
異常行為檢測系統(tǒng)主要基于安全策略實(shí)現(xiàn)異常行為的檢測。具體地,一條安全策略規(guī)則如下所示:
其中,target字段的值只能為“srcip”、“srcip_dstip”、“srcip_dstip_dstport”,filed中的name也是有限制的,基本上充分考慮了所有的統(tǒng)計(jì)字段,如果規(guī)則不合法,將不會起作用。
本文主要制定了端口掃描、主機(jī)掃描、SYN Flood、各類應(yīng)用暴力破解共四類異常檢測規(guī)則,相關(guān)代碼為:
本文通過將安全策略導(dǎo)入攻擊檢測模塊,利用相關(guān)工具分別模擬了端口掃描、主機(jī)探測、SYN Flood以及異常應(yīng)用訪問,進(jìn)行了仿真實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,本文提出的基于快速多模式匹配技術(shù)的大流量網(wǎng)絡(luò)環(huán)境下的網(wǎng)絡(luò)異常行為監(jiān)測方法可有效檢測上述異常。
通過基于源IP及目的IP的數(shù)據(jù)流聚合方式,有效檢測出端口掃描,檢測結(jié)果圖3所示。
圖3 端口掃描檢測結(jié)果
通過基于源IP及目的IP的數(shù)據(jù)流聚合,有效進(jìn)行的主機(jī)探測攻擊檢測,檢測結(jié)果中包含network-probe的異常告警,以及針對44網(wǎng)段存活主機(jī)的端口掃描告警,檢測結(jié)果如圖4所示。
通過基于源IP及目的IP的數(shù)據(jù)流聚合方式,有效檢測出SYN Flood攻擊,檢測結(jié)果中包含針對目標(biāo)主機(jī)的syn-flood及port-scan類型告警,因?yàn)榇舜喂敉瑫r(shí)滿足兩類攻擊的規(guī)則,檢測結(jié)果如圖5所示。
通過基于源IP、目的IP及目的端口的數(shù)據(jù)流聚合方式,有效檢測出異常應(yīng)用攻擊檢測,檢測結(jié)果中包含針對目標(biāo)主機(jī)的ssh-abnormal-acces、mysql-abnormalaccess、smtp-abnormal-access類型告警,檢測結(jié)果如圖6所示。
針對網(wǎng)絡(luò)中繞過安全設(shè)備安全策略的異常網(wǎng)絡(luò)行為檢測問題,本文對異常行為分析與檢測進(jìn)行了深入研究,提出一種基于安全策略的網(wǎng)絡(luò)異常檢測方法。通過該方法可實(shí)現(xiàn)對網(wǎng)絡(luò)中不符合安全策略的網(wǎng)絡(luò)數(shù)據(jù)流的實(shí)時(shí)檢測,提高網(wǎng)絡(luò)安全實(shí)時(shí)監(jiān)測和態(tài)勢感知能力。
圖4 主機(jī)探測檢測結(jié)果
圖5 SYN Flood檢測結(jié)果