付子爔,徐 洋,吳招娣,許丹丹,謝曉堯
(貴州師范大學 貴州省信息與計算科學重點實驗室,貴陽 550001)
隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展和廣泛應用,網(wǎng)絡安全問題日益突出,網(wǎng)絡和與之相連的主機隨時都可能遭受不同種類的攻擊。為保障網(wǎng)絡安全,研究者設(shè)計了多種入侵檢測系統(tǒng)(Intrusion Detection System,IDS)。文獻[1]通過將人工神經(jīng)網(wǎng)絡增加為除掃描用戶、主機系統(tǒng)和目標系統(tǒng)配置文件異常檢測組件之外的第3個組件,把機器學習算法應用于入侵檢測領(lǐng)域。此后研究者將機器學習應用到入侵檢測中,如支持向量機(Support Vetor Machine,SVM)[2]、K最近鄰(K-Nearest Neighbor,KNN)[3]、決策樹、隨機森林和XGBoost等都憑借高識別率成為核心算法,但在后續(xù)的研究中均被發(fā)現(xiàn)存在不足。隨著谷歌AlphaGo擊敗人類圍棋選手李世石,深度學習成為人工智能領(lǐng)域的研究熱點,也成為入侵檢測中的重要技術(shù)[4]。
增量學習[5-6]是一種機器學習方法,其輸入的數(shù)據(jù)被不斷用于擴展現(xiàn)有模型的知識,即進一步訓練模型。它代表了監(jiān)督學習和無監(jiān)督學習的動態(tài)技術(shù),當訓練數(shù)據(jù)逐漸增加或數(shù)據(jù)大小超出系統(tǒng)內(nèi)存限制時,可以應用此方法對持續(xù)增加的數(shù)據(jù)監(jiān)控和切片,并對切片后的部分數(shù)據(jù)進行訓練,直到訓練完所有數(shù)據(jù)。學習率控制新數(shù)據(jù)的適應速率,同時也控制系統(tǒng)與舊數(shù)據(jù)的相關(guān)性,然而對新知識的學習必然導致對舊知識的遺忘??稍O(shè)置永不遺忘其所學習的知識,應用此類設(shè)置的算法被稱為穩(wěn)定的增量機器學習算法。
將深度學習算法應用于入侵檢測可有效提高準確率并降低誤報率,但深度學習算法復雜度較高,計算開銷龐大,而在大數(shù)據(jù)應用場景下,多數(shù)安全設(shè)備不配備高性能顯卡,即使應用深度學習算法也無法即時判斷流量。與此相比,機器學習中的經(jīng)典算法SVM和KNN算法具有算法簡單、消耗資源少的優(yōu)勢。因此,本文在增量學習框架下將上述2種算法相結(jié)合,設(shè)計IL-SVM-KNN分類器,并使用KDD CUP99和NSL-KDD入侵檢測數(shù)據(jù)集對其性能進行驗證。
SVM模型將實例表示為空間中的點,計算得出的映射以盡可能寬的間隔將各個類別的實例分開。當待分類的數(shù)據(jù)距離超平面較遠時,SVM算法可準確分類,但當距離較近小于某閾值時,其分類效果并不理想[2,7]。在KNN分類中,對象的類別判定為K個最近鄰居(K是正整數(shù),通常較小)票數(shù)最多的類別。如果K=1,則對象的類別由最近的節(jié)點直接分配。KNN算法具有訓練時間短、可輕松處理大數(shù)據(jù)和增量數(shù)據(jù)并且避免參數(shù)的過度擬合的優(yōu)點。然而在數(shù)據(jù)不斷增加的情況下,其產(chǎn)生的巨大的搜索空間導致算法耗時長,無法保證實時性。針對這一缺陷,本文將k維樹作為數(shù)據(jù)結(jié)構(gòu),用以縮短分類所產(chǎn)生的耗時[8-9]。
k維樹的數(shù)據(jù)結(jié)構(gòu)可解決多維歐氏空間中的最近鄰問題。k維樹是一個二叉樹,其中每個節(jié)點是一個k維點。k維樹將數(shù)據(jù)集分層劃分為小單元格以確??焖僭L問。本文對數(shù)據(jù)集按照不同維度遞歸地分配數(shù)據(jù)集,使用中間值作為每個級別的樞軸來構(gòu)建k維樹。每個非葉節(jié)點都是超平面,它將空間劃分為2個部分,稱為半空間。該超平面左側(cè)的點由該節(jié)點的左子樹表示,超平面右側(cè)的點由右子樹表示。左子樹中顯示的值小于該維度中的數(shù)據(jù)點,值更大的點位于右子樹。將這些子樹再次分成兩半,并沿著不同的維度劃分超平面[10]。
為從k維樹T中搜索查詢點Q的最近鄰居,算法從最近鄰居的估計點來遍歷k維樹并更新估計點。對于任何的非葉子節(jié)點,如果存在比當前最佳估計E更接近查詢點Q的點,則它必須滿足位于球心為Q、半徑小于Q、E間距離的超球體中。如果這個超球體與當前節(jié)點的另一個半平面(即不是E的半平面)相交,那么結(jié)果就不在當前節(jié)點的子樹中。當涉及K最近鄰居查詢時,需要維護容量為K的有界優(yōu)先隊列,以記錄K個最近鄰居的當前估計值,而不是單個估計點。一個新元素被添加到有界優(yōu)先隊列時,如果隊列已滿,那么具有最高優(yōu)先級的元素將在插入發(fā)生之前從有界優(yōu)先隊列中刪除。在KNN查詢的情況下,離查詢點Q更遠的元素在有界優(yōu)先隊列中具有更高的優(yōu)先級。
國內(nèi)外研究者對KNN和SVM算法進行了大量的研究,提出的改進算法可解決部分難題。文獻[11]引入雙聯(lián)支持向量機到入侵檢測系統(tǒng)中,通過雙聯(lián)支持向量機構(gòu)造2個較小的凸二次優(yōu)化來解決分類問題。實驗結(jié)果表明,基于雙聯(lián)支持向量機的入侵檢測相比傳統(tǒng)SVM算法,可以提高準確率,同時也可減少訓練時間。文獻[12]提出一種基于候選支持向量的增量SVM算法(CSV-ISVM),該算法實現(xiàn)了增量SVM分類的全過程。實驗結(jié)果和性能分析表明,CSV-ISVM算法優(yōu)于一般的ISVM分類算法,適用于實時網(wǎng)絡入侵檢測。文獻[13]針對KNN算法在數(shù)據(jù)樣本稀疏、類內(nèi)數(shù)據(jù)頻次差距較大的情況下分類不平衡的問題,提出稀有近鄰算法KRNN,形成動態(tài)查詢鄰域,并進一步調(diào)整后驗概率估計以偏向稀有類別的分類。KRNN算法顯著提高了KNN對稀有類別的分類準確性,并且性能優(yōu)于重新采樣和成本敏感的學習策略。文獻[14]通過研究傳統(tǒng)KNN算法,設(shè)計基于增量學習的三支決策KNN算法,將數(shù)據(jù)分成數(shù)據(jù)流,進而利用基于三支決策KNN算法的模型處理數(shù)據(jù)。實驗結(jié)果表明,該算法性能優(yōu)于傳統(tǒng)KNN算法和改進的2個KNN算法。
運用SVM和KNN算法實現(xiàn)增量學習可以提高分類性能,但2個算法本身各有缺陷。因此,本文在增量學習的框架下將這兩種算法進行結(jié)合。增量學習具體體現(xiàn)在訓練結(jié)束后和應用模型分類后依舊可以接收訓練數(shù)據(jù),在所學知識基礎(chǔ)上繼續(xù)學習,避免了在非增量學習算法中因?qū)W習新知識導致舊知識重復學習的問題。本文把待分類數(shù)據(jù)根據(jù)KNN算法和SVM算法所得的結(jié)果分為3種情況,再依據(jù)不同情況應用不同的分類策略。增量學習框架和本文設(shè)計的IL-SVM-KNN分類器模型如圖1和圖2所示。
圖1 增量學習框架
圖2 IL-SVM-KNN分類器模型
初始化訓練數(shù)據(jù)集,提取數(shù)據(jù)集中每個數(shù)據(jù)的特征值,作為k維樹的節(jié)點,生成KNN算法部分的平衡k維樹。在SVM算法部分,依據(jù)數(shù)據(jù)的特征值聚類,每兩個類之間找到合適的點,計算超平面和兩點到超平面間的距離。此時的數(shù)據(jù)集是分類器最原始的知識庫。將增量數(shù)據(jù)作為新學習的知識加入已存在的知識庫中。依舊提取特征值,但要在k維樹中找到每個數(shù)據(jù)合適的位置,插入節(jié)點并調(diào)整成平衡k維樹。SVM算法部分同樣依據(jù)特征值聚類,但要在2個類之間重新選取兩點,更新超平面和兩點到超平面的距離。
提取測試數(shù)據(jù)集中每個數(shù)據(jù)的特征值插入平衡k維樹中,使用KNN算法搜索測試數(shù)據(jù)的K個最近節(jié)點,如果這些節(jié)點都有同樣的標簽,則完成一次分類,如圖3中的A部分所示;如果這些節(jié)點中有不止一種標簽,則使用SVM算法求出分隔2個類別的超平面,計算節(jié)點與超平面的距離,如果距離大于預設(shè)的閾值,使用SVM算法進行分類,如圖3中的B部分所示;否則采用KNN算法投票分類,如圖3中的C部分所示[15]。
圖3 IL-SVM-KNN分類的3種情況
IL-SVM-KNN分類器的算法偽代碼如下:
算法1KNN-SVM(test_data[ ],k_neighbors[ ],kdtree[ ],dist)
1.for i in test_data do
2.Insert into kdtree;
3.Searching k-nearest-neighbors;
4.if every k_neighbors[j].label is all the same then
5.Test_data[i].label=k_neighbors[j].label;
6.else if every k_neighbors[j].label is not all the same then
7.calculate the hyperplane;
8.calculate the distance between test_data[i] and hyperplane;
9.if the distance >dist then
10.use SVM classifier;
11.else if the distance <= dist then
12.use KNN classifier;
13.end if
14.end if
15.end for
本文使用KDD CUP99和NSL-KDD數(shù)據(jù)集作為實驗數(shù)據(jù)。KDD CUP99數(shù)據(jù)集內(nèi)數(shù)據(jù)規(guī)模龐大,包含約5×106條訓練數(shù)據(jù)和約3×105條測試數(shù)據(jù),利于應用增量學習算法。每條數(shù)據(jù)為一個TCP或UDP的網(wǎng)絡連接,每條連接的最后一項被標記為正?;虍惓?其中異常又分為4類,分別為DoS、R2L、U2R和Probing。每類又包含多種類型的攻擊,共39種攻擊,其中22種出現(xiàn)在訓練數(shù)據(jù)中,17種出現(xiàn)在測試數(shù)據(jù)中。除去最后一項,每條連接有41項特征,包括9項連接類型特征、13項連接內(nèi)容特征、9項時間流量特征和10項主機流量特征[16]。但KDD CUP99數(shù)據(jù)集有缺陷,主要是存在大量冗余記錄,導致學習算法偏向于頻繁記錄,從而阻止算法學習在異常流量中占比較少的U2R攻擊和R2L攻擊。此外,在測試集中存在的這些重復記錄將導致算法的評估結(jié)果產(chǎn)生偏差,即對頻繁出現(xiàn)的記錄有更高的檢測率[17-19]。NSL-KDD數(shù)據(jù)集包含1.2×105條訓練數(shù)據(jù)和2×104條測試數(shù)據(jù),依然采用KDD CUP99的數(shù)據(jù)格式,但刪除了KDD CUP99訓練和測試數(shù)據(jù)的冗余,從而提高了判別算法優(yōu)劣的區(qū)分度,同時也降低了實驗成本。
本文實驗環(huán)境為:CPU主頻為3.6 GHz的Intel Core i7-9700K,顯卡為顯存11 GB的Nvidia Geforce GTX 1080Ti,內(nèi)存大小為16 GB的Ubuntu 18.04系統(tǒng)。
本文通過混淆矩陣計算準確率A、精確率P和召回率R的數(shù)值,最終使用F1值F1作為分類器的評價指標。
其中:TP表示待分類樣本為正,分類后標記為正;FN表示待分類樣本為正,分類后標記為負;TN表示待分類樣本為負,分類后標記為負;FP表示待分類樣本為負,分類后標記為正。
F1值為精確率和召回率的調(diào)和平均值,其值在0~1之間,1代表最佳,0代表最差。本文實驗所定義的混淆矩陣如圖4所示。
圖4 混淆矩陣定義
數(shù)據(jù)預處理包括降維、One-hot編碼和合并分類3個部分。
1)降維。在將訓練數(shù)據(jù)提供給機器學習算法之前,可通過降維來降低訓練數(shù)據(jù)的維度。降維使數(shù)據(jù)占用更少的磁盤和內(nèi)存空間,從而加快算法運行速度,降低計算成本,也可以降低分類錯誤的可能性。因此,在一般情況下,通過降維能使算法表現(xiàn)出更好的性能。對特征service通過合并特征進行降維,ntpu、urhi、tftpu、redi對應的標簽都是normal,可以將其合并,而pmdump、http2784、harvest、aol、http_8001對應的標簽都是satan,也可以將其合并。
2)One-hot編碼。對protocoltype、service、flag3個特征進行One-hot編碼,例如把特征protocoltype的3個值tcp、udp、icmp編碼為001、010、100。
3)合并分類。根據(jù)官方提供的攻擊分類劃分,把正常流量和39種攻擊類型共分為5類,分別為Normal、DoS、R2L、U2R、Probing,分別標記為0~4。
3.5.1 KDD CUP99數(shù)據(jù)集實驗結(jié)果對比
在KDD CUP99數(shù)據(jù)集上關(guān)于準確率的實驗以每104條測試集數(shù)據(jù)計算準確率,各算法的準確率曲線如圖5和圖6所示,可以看出,IL-SVM-KNN算法的準確率高,在數(shù)據(jù)量達到2×105條之后準確率趨于穩(wěn)定,最終計算出的平均準確率為0.999 84。IL-SVM-KNN算法與決策樹、隨機森林和XGBoost 3種機器學習算法的精確率如圖7所示,可見本文算法也具有優(yōu)勢。各算法的具體性能指標如表1所示,可見IL-SVM-KNN算法的F1值為0.81,在4種算法中得分最高。決策樹和隨機森林在U2R攻擊上的精確率表現(xiàn)不佳,而其他3種算法在U2R和R2L攻擊分類方面的召回率的得分均低于0.2,明顯低于IL-SVM-KNN算法的0.58。
圖5 KDD CUP99數(shù)據(jù)集中IL-SVM-KNN、KNN與SVM算法的準確率
圖6 KDD CUP99數(shù)據(jù)集中IL-SVM-KNN與3種機器學習算法的準確率
圖7 KDD CUP99數(shù)據(jù)集中IL-SVM-KNN與3種機器學習算法的精確率
表1 KDD CUP99數(shù)據(jù)集中IL-SVM-KNN與3種機器學習算法的評價指標
為與經(jīng)典深度學習算法中的卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)進行比較,本文實現(xiàn)了雙層結(jié)構(gòu)的卷積神經(jīng)網(wǎng)絡[20-22]。每層結(jié)構(gòu)包括卷積層、優(yōu)化函數(shù)和激活函數(shù),本文使用批標準化函數(shù)作為優(yōu)化函數(shù),使用線性整流函數(shù)作為激活函數(shù)。在神經(jīng)網(wǎng)絡的最后使用最大池化作為池化層??紤]到多數(shù)入侵檢測設(shè)備不會配備高性能顯卡,本文分別使用CPU和GPU進行對比實驗,實驗結(jié)果如表2所示。可以看出,IL-SVM-KNN算法與用GPU運行的CNN算法相比,在準確率相近的情況下,耗時是CNN的1/2,占用內(nèi)存僅為CNN的1/3。在用CPU運行CNN算法時,僅一次迭代就耗時20 min,響應速度過慢,不具備對比意義,因此,中止CNN在CPU上運行的實驗。
表2 KDD CUP99數(shù)據(jù)集中IL-SVM-KNN與深度學習CNN算法的檢測性能
由于KDD CUP99數(shù)據(jù)量龐大,NSL-KDD數(shù)據(jù)量少,因此關(guān)于運用增量學習能否提升準確率的研究僅在KDD CUP99數(shù)據(jù)集上進行。實驗把KDD CUP99數(shù)據(jù)集中完整的訓練數(shù)據(jù)分為4份,進行4次實驗。第1次學習訓練數(shù)據(jù)的1/4測試訓練效果,計算準確率,之后的每次實驗在原有學習成果的基礎(chǔ)上繼續(xù)學習1/4的訓練數(shù)據(jù),直至學完整個訓練集。實驗結(jié)果如圖8所示,可以看出,隨著所學習的訓練數(shù)據(jù)增多,測試的準確率也隨之提升,說明增量學習有助于提升分類器的準確率。本文實驗增量學習的學習率設(shè)定為0.01,由于IL-SVM-KNN算法并非穩(wěn)定的增量學習算法,在學習新知識的同時不可避免地造成對舊有知識的遺忘,因此增量學習算法即使學習了整個訓練集,計算得出的準確率也會比非增量學習下同一算法的準確率稍有下降。但面對龐大的數(shù)據(jù)量,非增量學習算法靜態(tài)學習需耗費大量內(nèi)存,對設(shè)備硬件的要求較高。而增量學習算法實現(xiàn)了動態(tài)學習,可搭載在相對廉價的設(shè)備上,雖然要付出降低準確率的代價,但應用增量學習依然有意義。
圖8 KDD CUP99數(shù)據(jù)集中IL-SVM-KNN算法與非增量SVM-KNN算法的準確率
3.5.2 NSL-KDD數(shù)據(jù)集實驗結(jié)果對比
在NSL-KDD數(shù)據(jù)集上關(guān)于準確率的實驗以每103條測試集數(shù)據(jù)計算準確率,各算法的準確率曲線如圖9和圖10所示。鑒于KDD CUP99數(shù)據(jù)集存在的局限性,IL-SVM-KNN算法、SVM和KNN算法檢測的準確率均有不同程度的下降,但IL-SVM-KNN算法的準確率下降幅度最小,最終計算出的平均準確率為0.91045,而決策樹、隨機森林和XGBoost算法的平均準確率均在0.8左右。IL-SVM-KNN算法與3種機器學習算法的精確率如圖11所示,可以看出,NSL-KDD數(shù)據(jù)集在大量刪除存在于前三類攻擊中的冗余記錄后,后兩類攻擊記錄占比增大,其他3種算法分類性能均有不同程度的提升。各算法的具體性能指標如表3所示,可見IL-SVM-KNN算法在NSL-KDD數(shù)據(jù)集的F1值為0.79,依然高于3種機器算法。
圖9 NSL-KDD數(shù)據(jù)集中IL-SVM-KNN、KNN與SVM算法的準確率
圖10 NSL-KDD數(shù)據(jù)集中IL-SVM-KNN與3種機器學習算法的準確率
圖11 NSL-KDD數(shù)據(jù)集中IL-SVM-KNN與3種機器學習算法的精確率
表3 NSL-KDD數(shù)據(jù)集中IL-SVM-KNN與3種機器學習算法的評價指標
IL-SVM-KNN與深度學習CNN算法的檢測性能如表4所示,可以看出,IL-SVM-KNN算法的準確率與CNN算法的準確率基本持平,相比于用GPU實現(xiàn)的CNN,極大地縮減了內(nèi)存的占用空間,且耗時低。而在CPU上實現(xiàn)的CNN算法,由于算法其參數(shù)批規(guī)模(batch-size)的要求,模型只能從訓練集中分批讀入數(shù)據(jù),因此盡管內(nèi)存占用少,但在耗時上大幅增加。
表4 NSL-KDD數(shù)據(jù)集中IL-SVM-KNN與深度學習CNN算法的檢測性能
本文在SVM和KNN算法基礎(chǔ)上融合增量學習思想,提出適用于網(wǎng)絡入侵檢測的IL-SVM-KNN算法。實驗結(jié)果表明,該算法的二分類準確率優(yōu)于SVM和KNN算法,五分類準確率優(yōu)于決策樹、隨機森林和XGBoost算法。本文算法可以避免時間與資源的矛盾,加快網(wǎng)絡流量識別速度,滿足入侵檢測的實時性要求,具有準確率高、誤報率低和輕量化的特點,適合部署在計算資源有限的場景。本文僅使用兩層結(jié)構(gòu)的卷積神經(jīng)網(wǎng)絡做對比實驗,后續(xù)將采用其他深度學習算法進行比較。此外,當算法學習到不良數(shù)據(jù)時會造成系統(tǒng)性能下降,如何管控和處理此類數(shù)據(jù),也將是下一步的研究方向。