韓 萍,張 寒,方 澄,牛勇鋼
(中國民航大學(xué)電子信息與自動化學(xué)院,天津 300300)
互聯(lián)網(wǎng)行業(yè)的快速發(fā)展在給人們帶來便利的同時,也帶來了網(wǎng)絡(luò)安全隱患。當(dāng)前,網(wǎng)絡(luò)攻擊呈現(xiàn)體系化趨勢,具有攻擊范圍廣、命中率高、潛伏時間長等特點(diǎn)。大數(shù)據(jù)時代網(wǎng)絡(luò)攻擊問題變得更加突出,由于數(shù)據(jù)量愈加龐大,網(wǎng)絡(luò)安全監(jiān)測愈加困難。如何從海量網(wǎng)絡(luò)流量數(shù)據(jù)中實(shí)時、高效、準(zhǔn)確地挖掘出異常網(wǎng)絡(luò)數(shù)據(jù),并快速定位攻擊數(shù)據(jù)和采取應(yīng)急防御措施是亟待解決的問題[1]。異常檢測作為大數(shù)據(jù)挖掘的常用技術(shù)之一,可用于識別定位離群或異常數(shù)據(jù),并從異常數(shù)據(jù)中挖掘有價值的信息[2]。在海量網(wǎng)絡(luò)流量數(shù)據(jù)中,研究針對大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)的實(shí)時、高效異常檢測方法具有重要意義。
根據(jù)不同特征的處理方式,網(wǎng)絡(luò)流量異常檢測方法可分為:基于數(shù)據(jù)本身特征或行為的檢測方法、基于數(shù)據(jù)統(tǒng)計(jì)的檢測方法、基于數(shù)據(jù)聚類分析的檢測方法和基于數(shù)據(jù)鄰近度的檢測方法?;跀?shù)據(jù)本身特征或行為的檢測方法是通過在網(wǎng)絡(luò)流量數(shù)據(jù)中查找、匹配出與異常流量數(shù)據(jù)特征相關(guān)性更強(qiáng)的數(shù)據(jù),從而檢測出異常網(wǎng)絡(luò)流量數(shù)據(jù),但其僅能檢測出已有流量數(shù)據(jù)的攻擊類型,局限性較大?;跀?shù)據(jù)統(tǒng)計(jì)的檢測方法依托數(shù)學(xué)統(tǒng)計(jì)分析出異常數(shù)據(jù),該方法對單個離群點(diǎn)檢測準(zhǔn)確率較高,但在多維數(shù)據(jù)條件下其精度很難達(dá)到應(yīng)用要求?;跀?shù)據(jù)聚類分析的檢測方法則將數(shù)據(jù)量少的簇或不能聚類的數(shù)據(jù)看作異常點(diǎn),在海量網(wǎng)絡(luò)流量條件下,算法復(fù)雜度和誤判率較高[3]?;跀?shù)據(jù)鄰近度的檢測方法對參數(shù)較敏感,花費(fèi)時間較長,對于海量網(wǎng)絡(luò)流量數(shù)據(jù)的處理代價較大,且難以處理局部密度變化較小的異常信息。
綜上,單一的異常檢測方法已不能滿足海量數(shù)據(jù)的檢測需求,多模型融合的異常檢測方法已成為該領(lǐng)域的研究熱點(diǎn)。Ke 等[4]將遺傳算法和BP 算法進(jìn)行融合,但計(jì)算耗時長。Kuang 等[5]將主成分分析(PCA,principal component analysis)算法和支持向量機(jī)(SVM,support vector machines)算法進(jìn)行融合,雖然提高了異常檢測準(zhǔn)確率和召回率等檢測指標(biāo),但串行的計(jì)算方法在處理海量數(shù)據(jù)時效率低下。Hadoop 的流行使得分布式架構(gòu)成為處理海量數(shù)據(jù)的新方法。文獻(xiàn)[6-7]利用MapReduce 模型實(shí)現(xiàn)了算法的并行性,提高了檢測效率,但不能有效處理頻繁迭代的計(jì)算。馮貴蘭等[8]利用Spark 平臺實(shí)現(xiàn)了KNN 算法的并行異常檢測。李水芳等[9]基于Spark 平臺實(shí)現(xiàn)網(wǎng)絡(luò)流量的并行聚類分析,彌補(bǔ)了MapReduce 計(jì)算結(jié)構(gòu)的缺陷,但其對于持續(xù)、快速到達(dá)的流式數(shù)據(jù)難以進(jìn)行檢測處理,不適合實(shí)時在線檢測。
針對上述問題,利用機(jī)器學(xué)習(xí)和大數(shù)據(jù)技術(shù)提出一種多模型融合的流式并行異常檢測方法。首先,根據(jù)網(wǎng)絡(luò)流量特征訓(xùn)練生成多個異常檢測算法模型,然后通過模型融合提高算法準(zhǔn)確度[10],再將模型并行化,可在保證算法精度的基礎(chǔ)上對海量流式數(shù)據(jù)進(jìn)行分布式處理。其次,通過不斷積累異常數(shù)據(jù),從中提取異常網(wǎng)絡(luò)流量數(shù)據(jù)的共有特征,建立異常網(wǎng)絡(luò)流量黑名單,使用在線分析引擎工具對實(shí)時網(wǎng)絡(luò)流量數(shù)據(jù)進(jìn)行在線實(shí)時特征匹配,快速匹配出異常數(shù)據(jù),顯著提高了流式數(shù)據(jù)異常檢測的效率。最后,以KDD CUP99 作為實(shí)例數(shù)據(jù)對算法模型的準(zhǔn)確率和有效性進(jìn)行驗(yàn)證,實(shí)驗(yàn)結(jié)果表明,該方法可顯著提高實(shí)時網(wǎng)絡(luò)流數(shù)據(jù)異常檢測的準(zhǔn)確率,同時還可提高大規(guī)模數(shù)據(jù)異常檢測的效率。
機(jī)器學(xué)習(xí)異常檢測方法種類較多,為了能夠?qū)W(wǎng)絡(luò)流量數(shù)據(jù)進(jìn)行全面檢測,可選用以下算法。
1)主成分分析算法
主成分分析算法通過尋找違背數(shù)據(jù)間相關(guān)性的數(shù)據(jù)點(diǎn)來確定該點(diǎn)是否為異常數(shù)據(jù)[11]。網(wǎng)絡(luò)流量數(shù)據(jù)的屬性值類別眾多,且各屬性間存在一定的關(guān)聯(lián),由PCA 原理可知,該算法不僅可將原始高維空間數(shù)據(jù)映射到低維空間,并保留數(shù)據(jù)集中對方差影響最大的屬性特征,還可通過某個數(shù)據(jù)點(diǎn)的方差大小來判斷其是否為異常離群點(diǎn),因此可將PCA 算法作為融合模型選擇之一。
2)孤立森林算法
孤立森林(IF,isolation forest)算法通過判斷樣本點(diǎn)的離群度來檢測出異常值,當(dāng)樣本點(diǎn)距離正常值越遠(yuǎn),則越可能是離群點(diǎn)[12]。在網(wǎng)絡(luò)流量的異常檢測中,IF 算法對離群點(diǎn)有較好的檢測效果,但當(dāng)離群點(diǎn)數(shù)據(jù)與正常數(shù)據(jù)摻雜在一起時,IF 算法的檢測效果就會大打折扣[13]。由于IF 算法在全局?jǐn)?shù)據(jù)的檢測性能較好,故而選擇將其作為融合模型選擇之一。
3)局部異常因子算法
局部異常因子(LOF,local outlier factor)算法是通過計(jì)算數(shù)據(jù)樣本點(diǎn)的局部可達(dá)密度來反映樣本中某個數(shù)據(jù)點(diǎn)的異常程度[14]。LOF 算法僅依賴于局部可達(dá)密度,對于全局?jǐn)?shù)據(jù)特征的利用率較低,有很大的檢測局限性。但由于已經(jīng)將IF 算法進(jìn)行融合,兩種算法的互補(bǔ)可進(jìn)一步提高對全局和局部離群點(diǎn)的檢測。
對以上3 種算法的融合,可對離群數(shù)據(jù)全面檢測。
4)邏輯回歸算法
異常檢測在實(shí)際應(yīng)用環(huán)境下需要人工進(jìn)行再次驗(yàn)證,并根據(jù)實(shí)際情況進(jìn)行閾值設(shè)置,使實(shí)際應(yīng)用滿足準(zhǔn)確率和效率的雙重需求[15]。邏輯回歸(LR,logistic regression)算法可將判別結(jié)果映射為對異常檢測的概率估計(jì),方便調(diào)整檢測結(jié)果閾值和對特征重要性進(jìn)行選擇排序,因此可以將LR 算法作為融合模型的最終輸出。
單一模型不能滿足算法精度的要求,實(shí)際應(yīng)用中多采用模型融合的方法來提高檢測的準(zhǔn)確率和穩(wěn)定性。Stacking 算法是一種常見的融合算法,其可將幾個簡單模型進(jìn)行融合,從而集中各單模型的優(yōu)勢,達(dá)到提升準(zhǔn)確性和魯棒性的目的。
在實(shí)際網(wǎng)絡(luò)環(huán)境下,流量數(shù)據(jù)來源廣泛、規(guī)模龐大且產(chǎn)生速度快,因而對數(shù)據(jù)的實(shí)時高效收集、發(fā)送及處理分析要求更高。網(wǎng)絡(luò)流量數(shù)據(jù)的實(shí)時流處理包括3 層,如圖1 所示。
圖1 海量數(shù)據(jù)處理架構(gòu)Fig.1 Massive data processing architecture
1)數(shù)據(jù)收集層
采用Apache Kafka 作為海量網(wǎng)絡(luò)流量的數(shù)據(jù)收集端。Kafka[16]是一個分布式、高吞吐量、高實(shí)時性的發(fā)布-訂閱服務(wù)系統(tǒng),具有實(shí)時性強(qiáng)、基于磁盤的數(shù)據(jù)存儲、可拓展性強(qiáng)等優(yōu)點(diǎn),可實(shí)現(xiàn)數(shù)據(jù)信息的實(shí)時流式收集和處理。
使用Kafka 集群對數(shù)據(jù)流進(jìn)行分類接收和發(fā)送,同時根據(jù)數(shù)據(jù)量大小考慮橫向增減Kafka 節(jié)點(diǎn),可滿足生產(chǎn)環(huán)境網(wǎng)絡(luò)流量的數(shù)據(jù)接收需求,避免造成數(shù)據(jù)的阻塞、丟失或冗余。
2)數(shù)據(jù)處理層
使用Spark Streaming 接收Kafka 發(fā)送的流式數(shù)據(jù),對接收到的流式數(shù)據(jù)進(jìn)行實(shí)時批處理,提高海量網(wǎng)絡(luò)流量數(shù)據(jù)的處理能力。
Spark Streaming 作為Spark 中的一個內(nèi)置庫,同樣具有Spark 計(jì)算框架的優(yōu)勢:①基于系統(tǒng)內(nèi)存進(jìn)行計(jì)算,減少數(shù)據(jù)與存儲磁盤間的通信,提高計(jì)算速度;②計(jì)算的基本數(shù)據(jù)結(jié)構(gòu)是抽象彈性分布式數(shù)據(jù)集[17](RDD,resilient distributed datasets),具有容錯機(jī)制,并支持?jǐn)?shù)據(jù)并行處理,可對數(shù)據(jù)進(jìn)行持久化和分區(qū);③RDD 提供了大量的Transformation 和Action 操作來支持常見的數(shù)據(jù)運(yùn)算,相比MapReduce 只有Map 和Reduce 操作,Spark Streaming 具有更豐富的算法實(shí)現(xiàn)選擇性。由此可見,使用Spark Streaming 處理架構(gòu)可滿足海量網(wǎng)絡(luò)流量數(shù)據(jù)的實(shí)時處理需求。
3)數(shù)據(jù)存儲層
隨著網(wǎng)絡(luò)流量內(nèi)容的不斷豐富,屬性特征不斷增多,傳統(tǒng)的數(shù)據(jù)庫強(qiáng)調(diào)數(shù)據(jù)完整性和一致性,不能滿足實(shí)際生產(chǎn)管理中實(shí)時應(yīng)用的需要,而非關(guān)系型數(shù)據(jù)庫又不能對復(fù)雜表進(jìn)行關(guān)聯(lián)和查詢,因而兩者都不能滿足多維查詢、高效分析的需求。Kylin 是一個具有預(yù)計(jì)算能力的分布式數(shù)據(jù)倉庫,基于Hadoop 部署,能進(jìn)行多維關(guān)聯(lián)分析,可以達(dá)到數(shù)據(jù)查詢的亞秒級響應(yīng)。
Kylin 有兩個關(guān)鍵技術(shù):Cube 模型預(yù)計(jì)算和交互式查詢。Cube 模型是所有數(shù)據(jù)維度的組合,是由一張事實(shí)表和一張或多張維表構(gòu)成的星型數(shù)據(jù)存儲結(jié)構(gòu)。事實(shí)表用于存儲所有的數(shù)據(jù)維度和各維度數(shù)據(jù)值,維表用于存放某一特定維度的元數(shù)據(jù)。通過選取滿足自身需求的數(shù)據(jù)維度,建立Cube 模型預(yù)先進(jìn)行數(shù)據(jù)分析計(jì)算[18],并通過SQL 語句實(shí)現(xiàn)對Cube 的交互式查詢和定位。相比于Hive 等數(shù)據(jù)倉庫,Kylin 可以提升網(wǎng)絡(luò)流量分析的精確定位和快速查詢等能力。
傳統(tǒng)串行的機(jī)器學(xué)習(xí)算法處理大規(guī)模數(shù)據(jù)時,處理速度會降低。針對此問題,采用Kafka 和Spark Streaming 為主體的大數(shù)據(jù)實(shí)時處理框架,實(shí)現(xiàn)多模型融合的實(shí)時流量并行異常檢測,并建立異常流量黑名單,使用黑名單匹配可以極大地提高檢測的效率和準(zhǔn)確率。算法實(shí)現(xiàn)流程如圖2 所示,包括本地訓(xùn)練和模型實(shí)時預(yù)測兩大部分。
圖2 實(shí)時流式并行異常檢測流程Fig.2 Flow chart of real-time streaming parallel anomaly detection
本地訓(xùn)練主要是建立Cube 模型和模型融合訓(xùn)練,前者需進(jìn)行特征提取,利用算法識別結(jié)果提取關(guān)鍵特征,生成黑名單。模型融合訓(xùn)練首先分別對PCA、IF、LOF和LR 算法模型進(jìn)行單獨(dú)預(yù)訓(xùn)練,然后使用融合算法將單一模型進(jìn)行融合,最后將融合模型保存到分布式文件存儲系統(tǒng)(HDFS,hadoop distributed file system)中。
模型實(shí)時預(yù)測包括黑名單數(shù)據(jù)匹配和Spark Streaming 實(shí)時預(yù)測計(jì)算。Spark Streaming 接收由Kafka 發(fā)送的數(shù)據(jù),同時調(diào)用保存的融合模型對數(shù)據(jù)對象進(jìn)行實(shí)時并行異常檢測,最后將計(jì)算結(jié)果保存到HDFS。
在采用模型檢測的同時,將已知異常數(shù)據(jù)當(dāng)作初始黑名單庫,使用關(guān)聯(lián)匹配方法檢測出異常數(shù)據(jù)。通過分析數(shù)據(jù)相關(guān)性,提取異常流量數(shù)據(jù)的關(guān)鍵特征,建立Cube 模型。數(shù)據(jù)分析平臺實(shí)時接收來自Kafka 的數(shù)據(jù),與黑名單數(shù)據(jù)進(jìn)行關(guān)聯(lián)匹配,將匹配度高的流量數(shù)據(jù)作為疑似惡意流量數(shù)據(jù),并進(jìn)行人工驗(yàn)證,不斷擴(kuò)充黑名單樣本,提高異常匹配的準(zhǔn)確率。
為保證算法的普適性,提升整體性能,需將單模型進(jìn)行融合。本地訓(xùn)練過程采用Stacking 算法對多個單模型進(jìn)行融合,如圖3 所示,主要分為兩個階段[19]。
圖3 Stacking 算法模型融合訓(xùn)練過程Fig.3 Model fusion training process of Stacking algorithm
第1 階段訓(xùn)練單一的異常檢測模型,再通過五折交叉驗(yàn)證進(jìn)行模型融合。首先將數(shù)據(jù)集劃分為5 個訓(xùn)練子集Traini,i=1,2,…,5,選取Train1作為測試集(Test),Train2、Train3、Train4、Train5作為訓(xùn)練集對PCA 算法模型進(jìn)行訓(xùn)練,Test 對基礎(chǔ)模型做測試,得到預(yù)測結(jié)果Pre1,然后選取Train2作為Test,Train1和Train3、Train4、Train5作為訓(xùn)練集對PCA 算法模型進(jìn)行訓(xùn)練,Test 對基礎(chǔ)模型做測試,得到預(yù)測結(jié)果Pre2,以此類推,最終得到5 次PCA 模型完整的預(yù)測結(jié)果Prei,i=1,2,…,5。同理,對IF 算法模型和LOF 算法模型重復(fù)上述操作進(jìn)行訓(xùn)練,得到相應(yīng)的預(yù)測結(jié)果。
第2 階段通過LR 算法對上層融合結(jié)果進(jìn)行概率估計(jì)。LR 算法是一種廣義上的線性回歸分析預(yù)測模型,利用回歸分析方法對數(shù)據(jù)中有強(qiáng)依賴關(guān)系的數(shù)據(jù)特征進(jìn)行提取,其基本數(shù)學(xué)表達(dá)式為
y(x)=w1x1+w2x2+…+wnxn+b (1)式中,xi表示第i 個樣本特征,如果樣本有n 個特征,構(gòu)成特征向量x=[x1,x2,…,xn]T;wi為xi的對應(yīng)參數(shù),構(gòu)成一個n 維的向量w=[x1,x2,…,xn]T。通過方程求解得到w和b,即
將第1 階段得到的訓(xùn)練集預(yù)測結(jié)果與真實(shí)標(biāo)簽組成矩陣向量,得到一個(PrePCA,PreIF,PreLOF,Label)特征矩陣,經(jīng)過LR 算法進(jìn)行預(yù)測,并通過Logit 函數(shù)預(yù)測結(jié)果的概率值。對式(1)做Logit 變換,可得
式中z=w1x1+w2x2+…+wnxn+b,對式(3)左右兩邊各取對數(shù),得到
從而得到當(dāng)y 分別取值為1 或0 時的概率p,即
至此,可對檢測結(jié)果閾值進(jìn)行調(diào)整,當(dāng)p(y=1)大于既定閾值時,可判斷為正常值,否則判定為異常值。
通過調(diào)節(jié)單一異常檢測模型參數(shù)及實(shí)驗(yàn)對比發(fā)現(xiàn),當(dāng)IF 模型的n_estimators 設(shè)定為100、max_samples設(shè)定為256 時,模型結(jié)果達(dá)到相對最優(yōu)值;當(dāng)LOF 模型的leaf_size 設(shè)定為30、n_neighbors 設(shè)定為80 時,模型達(dá)到最優(yōu)值。將PCA、IF、LOF 算法模型和融合后的模型分別提取出模型文件保存。
利用Kafka 和Spark Streaming 分布式架構(gòu)實(shí)現(xiàn)數(shù)據(jù)和算法模型的流式并行計(jì)算。當(dāng)Spark Streaming 收到Kafka 發(fā)來的網(wǎng)絡(luò)流量數(shù)據(jù)時,首先對數(shù)據(jù)集進(jìn)行緩存,將海量流量數(shù)據(jù)劃分為m 個子集Data1,Data2,…,Datam,通過Spark Streaming 分布式裝載到RDD 中,對RDD 進(jìn)行內(nèi)存緩存。然后對RDD 進(jìn)行分區(qū),由于每個RDD 均由若干個分區(qū)組成,將所有的RDD 分為m 個分區(qū),這些分區(qū)數(shù)據(jù)分布在各節(jié)點(diǎn)中。各節(jié)點(diǎn)使用算法模型對每個數(shù)據(jù)對象進(jìn)行計(jì)算,把本地預(yù)訓(xùn)練的模型保存到集群的HDFS 中,通過Spark 的廣播機(jī)制進(jìn)行分發(fā),廣播流程如圖4 所示,使每個計(jì)算節(jié)點(diǎn)都存有一個只讀、可執(zhí)行的模型。然后在每個分區(qū)中初始化一個模型計(jì)算器,加載分發(fā)得到的算法模型,通過邏輯回歸計(jì)算每個數(shù)據(jù)的異常概率分?jǐn)?shù)。最后將模型預(yù)測得到的結(jié)果返回給用戶。數(shù)據(jù)在經(jīng)過模型預(yù)測計(jì)算后,得到取值范圍為(0,1)的異常分?jǐn)?shù),通過設(shè)置閾值評估預(yù)測異常數(shù)據(jù),并將檢測結(jié)果保存為數(shù)組形式存儲在HDFS 中。
圖4 Spark 廣播模型Fig.4 Spark broadcast model
在單一模型訓(xùn)練和多模型融合階段,均采用Python語言進(jìn)行實(shí)現(xiàn),而Spark Streaming 獲取數(shù)據(jù)和廣播模型均使用Scala 語言,因此在具體實(shí)現(xiàn)過程中,會面臨不同開發(fā)語言之間的調(diào)用問題。代碼實(shí)現(xiàn)主要利用SavedModelBundle 函數(shù)和Broadcast 函數(shù),其中:Saved ModelBundle 函數(shù)用于加載Python 編寫的訓(xùn)練模型;Broadcast 函數(shù)用于廣播。檢測算法實(shí)現(xiàn)流程如下:
步驟1配置調(diào)用Python 模型的依賴庫,保證Python 可以跨語言平臺運(yùn)行;
步驟2配置Kafka 的生產(chǎn)者和消費(fèi)者模型,保證數(shù)據(jù)的實(shí)時流式傳輸;
步驟3調(diào)用Scala 中的上下文接口Streaming Context,使得Spark Streaming 可以接收到來自Kafka消費(fèi)者的數(shù)據(jù);
步驟4使用Scala 的SavedModelBundle 函數(shù)加載訓(xùn)練好的Python 模型文件,然后利用Spark Streaming的分布式計(jì)算特性,使用Broadcast 函數(shù)將模型文件分發(fā)到各個計(jì)算節(jié)點(diǎn);
步驟5各個計(jì)算節(jié)點(diǎn)借助模型文件,對來自Kafka的實(shí)時流式數(shù)據(jù)進(jìn)行預(yù)測,最后將預(yù)測結(jié)果轉(zhuǎn)換成數(shù)據(jù)列表的形式返回到用戶端。
黑名單檢測異常流量方法的關(guān)鍵是建立黑名單數(shù)據(jù)庫,需對Cube 模型進(jìn)行設(shè)計(jì)。Cube 模型的大小和預(yù)計(jì)算時間取決于數(shù)據(jù)的維度,數(shù)據(jù)維度越高,Cube模型越大,預(yù)計(jì)算時間越長,因而需對所有數(shù)據(jù)進(jìn)行關(guān)聯(lián)挖掘統(tǒng)計(jì),找出與異常數(shù)據(jù)相關(guān)性最大的強(qiáng)關(guān)聯(lián)規(guī)則。
以KDD CUP99 作為實(shí)例數(shù)據(jù)集,該數(shù)據(jù)集屬性種類繁多,分為TCP 連接基本特征、TCP 連接內(nèi)容特征、基于時間的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征和基于主機(jī)的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征。關(guān)聯(lián)規(guī)則相關(guān)性的強(qiáng)弱通過支持度和置信度來進(jìn)行判斷,支持度是表示數(shù)據(jù)項(xiàng)集中同時含有特征項(xiàng)和數(shù)據(jù)異常的概率;置信度是在先決特征項(xiàng)條件下,關(guān)聯(lián)結(jié)果數(shù)據(jù)異常發(fā)生的概率。通過線性回歸算法挖掘數(shù)據(jù)之間的相關(guān)性,產(chǎn)生頻繁項(xiàng)集{X1,X2,X3,…,Xn},將初始化線性回歸模型作為特征提取容器,將異常流量標(biāo)簽作為提取目標(biāo),掃描訓(xùn)練集全局?jǐn)?shù)據(jù),提取相關(guān)性最強(qiáng)的屬性信息,得到10 個關(guān)鍵特征如表1 所示。
然后,計(jì)算異常流量數(shù)據(jù)的支持度,設(shè)置支持度的最小閾值為3%,可進(jìn)一步得到頻繁項(xiàng)集為{protocal_type,flag,serror_rate,srv_serror_rate,rerror_rate,srv_rerror_rate,same_srv_rate};設(shè)置置信度的最小閾值為30%,可得關(guān)聯(lián)性更強(qiáng)的頻繁項(xiàng)集{protocal_type,flag,rerror_rate,srv_rerror_rate,same_srv_rate},該項(xiàng)集作為最終的強(qiáng)關(guān)聯(lián)規(guī)則。
使用提取到的強(qiáng)關(guān)聯(lián)規(guī)則設(shè)計(jì)Cube 模型所需的數(shù)據(jù)表單,從而建立黑名單庫。將全局?jǐn)?shù)據(jù)用作事實(shí)表,按照特征分類,設(shè)計(jì)兩張維表,分別為TCP 連接基本特征維表(維表1)和基于時間的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征維表(維表2),每張維表包含相應(yīng)的流量表單數(shù)據(jù)。事實(shí)表與各個維表構(gòu)成星型結(jié)構(gòu)的Cube 模型關(guān)聯(lián)關(guān)系,如圖5 所示。將設(shè)計(jì)好的Cube 模型經(jīng)過MapReduce 引擎執(zhí)行設(shè)定的計(jì)算程序,并存儲在Kylin 分析平臺的數(shù)據(jù)庫中。
圖5 Cube 模型表單設(shè)計(jì)Fig.5 Design of Cube model form
表1 提取出的異常關(guān)鍵特征Tab.1 Key anomaly features obtained
當(dāng)海量網(wǎng)絡(luò)流量數(shù)據(jù)經(jīng)由Kafka 發(fā)送至分析系統(tǒng)中,系統(tǒng)會實(shí)時篩選出符合黑名單強(qiáng)關(guān)聯(lián)規(guī)則的網(wǎng)絡(luò)流量數(shù)據(jù),相比并行檢測算法,黑名單檢測異常數(shù)據(jù)效率更高。檢測出的數(shù)據(jù)經(jīng)過人工進(jìn)一步驗(yàn)證,若確定為異常數(shù)據(jù),則擴(kuò)充至黑名單,不斷豐富黑名單數(shù)據(jù)內(nèi)容,并及時優(yōu)化強(qiáng)關(guān)聯(lián)規(guī)則,提高檢測網(wǎng)絡(luò)流量數(shù)據(jù)的準(zhǔn)確率。
實(shí)驗(yàn)測試環(huán)境在5 臺服務(wù)器上搭建,每臺服務(wù)器的基礎(chǔ)環(huán)境配置相同,搭建了CDH 版本的Hadoop 集群。單臺服務(wù)器的硬件參數(shù)如表2 所示,集群平臺的安裝版本信息如表3 所示。
表2 單臺服務(wù)器硬件參數(shù)Tab.2 Hardware parameters of single server
表3 集群平臺組件版本Tab.3 Version of cluster platform component
3.2.1 數(shù)據(jù)概要和預(yù)處理
使用KDD CUP99 數(shù)據(jù)集作為網(wǎng)絡(luò)流量入侵檢測數(shù)據(jù)集。該數(shù)據(jù)集是從模擬的美國空軍局域網(wǎng)上采集9 個星期的網(wǎng)絡(luò)連接數(shù)據(jù),并提供訓(xùn)練集和測試集。訓(xùn)練集中共有101 384 條數(shù)據(jù),其中異常數(shù)據(jù)4 107 條;測試集中共有62 970 條數(shù)據(jù),其中異常數(shù)據(jù)2 377條。首先,將所有數(shù)據(jù)進(jìn)行預(yù)處理,并對訓(xùn)練集和測試集進(jìn)行二分類,然后使用訓(xùn)練集得到訓(xùn)練模型。為充分測試算法并行度,將測試數(shù)據(jù)集按一定比例劃分為大小不同的3 組,并分別在原有數(shù)據(jù)規(guī)模的基礎(chǔ)上進(jìn)行10 倍采樣復(fù)制擴(kuò)充。測試子集分別表示為Test1、Test2和Test3,數(shù)據(jù)量分布如表4 所示。最后通過不同的測試子集對多種模型進(jìn)行多組實(shí)驗(yàn)測試。使用不同規(guī)模的測試子集模擬實(shí)時產(chǎn)生的數(shù)據(jù)流,測試網(wǎng)絡(luò)流量實(shí)時檢測流程,判斷網(wǎng)絡(luò)行為是否異常。
表4 實(shí)驗(yàn)數(shù)據(jù)集信息Tab.4 Information of experimental data set 條
3.2.2 算法有效性測試
在實(shí)驗(yàn)中選取準(zhǔn)確率和召回率作為機(jī)器學(xué)習(xí)異常檢測算法有效性的評價指標(biāo)。
通過實(shí)驗(yàn)驗(yàn)證模型融合后算法的有效性,分別使用不同測試子集對單模型和融合模型預(yù)測的準(zhǔn)確率和召回率進(jìn)行對比,實(shí)驗(yàn)結(jié)果如表5 所示。
表5 不同模型性能對比Tab.5 Comparison of the performance of different models
從表5 可以看出,對于同一算法模型,不同測試集的準(zhǔn)確率和召回率均有差別,IF 算法模型在所有單獨(dú)模型中表現(xiàn)最好,穩(wěn)定性最高。LOF 算法模型表現(xiàn)最差,準(zhǔn)確率和召回率都比其他模型降低0.15 左右,原因是LOF 算法模型在局部檢測表現(xiàn)更好,而異常流量在數(shù)據(jù)中的占比很小,對于邊緣分布的數(shù)據(jù)更容易出現(xiàn)誤判。而融合模型結(jié)合了以上各單模型的優(yōu)點(diǎn),在網(wǎng)絡(luò)流量的測試中,其綜合檢測性能優(yōu)于單模型。
針對Test3數(shù)據(jù)集,融合模型比單模型中綜合表現(xiàn)最好的IF 模型在召回率上提升0.003 08。IF 模型檢測出1 688 條異常數(shù)據(jù),60 523 條正常數(shù)據(jù),誤判759 條數(shù)據(jù);融合模型檢測出1 950 條異常數(shù)據(jù),60 336 條正常數(shù)據(jù),誤判684 條數(shù)據(jù)。在實(shí)際的生產(chǎn)環(huán)境中,特別是在網(wǎng)絡(luò)流量異常檢測中,更希望在保持準(zhǔn)確率的前提下,識別出更多的異常數(shù)據(jù)。通過多次實(shí)驗(yàn)對比驗(yàn)證,融合模型比其他單模型穩(wěn)定性更高,誤判率更低。
3.2.3 算法并行化測試
為了評價融合模型在集群表現(xiàn)上的優(yōu)劣,選擇集群規(guī)模為1,分別測試4 個計(jì)算節(jié)點(diǎn),在計(jì)算節(jié)點(diǎn)逐漸增加的情況下,考查融合模型完成檢測任務(wù)的時間,并分析融合模型在不同數(shù)據(jù)規(guī)模下的可拓展性。通過Kafka 接收數(shù)據(jù),使用Spark Streaming 實(shí)時流處理數(shù)據(jù)進(jìn)行異常檢測預(yù)測計(jì)算,實(shí)驗(yàn)結(jié)果如圖6 所示。
圖6 可拓展性實(shí)驗(yàn)結(jié)果Fig.6 Experimental results of scalability
從圖6 中可以看出,隨著Spark Streaming 集群中計(jì)算節(jié)點(diǎn)的增加,3 個不同規(guī)模測試子集運(yùn)行時間呈現(xiàn)明顯的指數(shù)下降趨勢,數(shù)據(jù)集規(guī)模越大,并行算法計(jì)算時間下降更加明顯,這是由于Spark Streaming 是基于內(nèi)存計(jì)算,大大減少了各節(jié)點(diǎn)之間磁盤通信和數(shù)據(jù)傳遞開銷,使整個集群的運(yùn)行效率更加穩(wěn)定。實(shí)驗(yàn)結(jié)果表明,融合模型在大數(shù)據(jù)集上有很好的可拓展性,可應(yīng)對現(xiàn)網(wǎng)網(wǎng)絡(luò)流量數(shù)據(jù)的快速增長。
3.2.4 黑名單匹配測試
該部分實(shí)驗(yàn)主要是對黑名單檢測的時間效率和準(zhǔn)確率進(jìn)行測試。首先對查詢效率進(jìn)行測試,將不同的測試子集分別存儲在Kylin 和Hive 中,當(dāng)搜索相同內(nèi)容時,Kylin 與Hive 進(jìn)行匹配查詢的時間結(jié)果對比如表6 所示。
表6 查詢時間對比Tab.6 Comparison of query time
通過表6 可以看出,與Hive 查詢效率相比,使用Kylin 查詢可以極大減少查詢等待時間,查詢速度提升明顯。
然后對黑名單匹配部分和Spark Streaming 模型檢測部分的檢測時間進(jìn)行測試。使用Kafka 分別讀取Test1、Test2和Test3產(chǎn)生實(shí)時數(shù)據(jù)流,黑名單匹配部分所耗時間包括預(yù)計(jì)算時間和結(jié)果查詢等待時間,Spark Streaming 模型檢測部分使用4 個計(jì)算節(jié)點(diǎn),3 個不同測試子集的檢測時間對比,如表7 所示。
表7 檢測時間對比Tab.7 Comparison of detection time
從表7 可以看出,黑名單匹配方法檢測效率更高,是Spark Streaming 模型計(jì)算效率的10 倍以上。
最后,使用黑名單匹配方法對Test3測試子集進(jìn)行準(zhǔn)確率測試。從匹配結(jié)果得知,在23 770 條異常數(shù)據(jù)中可以檢測出10 530 條疑似異常,其中9 530 條驗(yàn)證為異常數(shù)據(jù),檢測準(zhǔn)確率為90.5%。綜上所述,所有實(shí)驗(yàn)可以看出,黑名單匹配方法有較高的檢測效率和漏檢率,因此需要不斷優(yōu)化黑名單,以提高檢測準(zhǔn)確率。
針對網(wǎng)絡(luò)流量數(shù)據(jù)的異常攻擊檢測問題,實(shí)現(xiàn)了海量數(shù)據(jù)的流式并行異常檢測算法。該方法使用Stacking 融合算法對IF、LOF、PCA 和LR 算法模型進(jìn)行了融合,并借助分布式集群進(jìn)行了大數(shù)據(jù)實(shí)驗(yàn),測試了模型的有效性。借助Kylin 平臺建立了Cube 模型以存儲流量黑名單,實(shí)現(xiàn)了對異常流量數(shù)據(jù)的精準(zhǔn)檢測。經(jīng)過實(shí)驗(yàn)測試,結(jié)果表明,融合模型在實(shí)際網(wǎng)絡(luò)環(huán)境下具有很高的可行性和有效性,可達(dá)到網(wǎng)絡(luò)流量異常檢測準(zhǔn)確率和效率雙提升的目的。
雖然該融合模型提高了異常檢測的準(zhǔn)確率,但在模型融合的過程中,會經(jīng)過多次交叉驗(yàn)證,從而增加了模型的訓(xùn)練時間,當(dāng)Spark Streaming 使用該模型進(jìn)行分發(fā)、預(yù)測訓(xùn)練時,會造成內(nèi)存使用過大、數(shù)據(jù)阻塞等現(xiàn)象,后續(xù)工作將針對此問題進(jìn)行改進(jìn)研究。