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