黎文偉 ,岳子喬 ,王濤
[1.湖南大學(xué) 信息科學(xué)與工程學(xué)院,湖南 長(zhǎng)沙 410082;2.區(qū)塊鏈底層技術(shù)及應(yīng)用湖南省重點(diǎn)實(shí)驗(yàn)室(湖南大學(xué)),湖南 長(zhǎng)沙 410012;3.湖南城市學(xué)院 信息科學(xué)與工程學(xué)院,湖南 益陽(yáng) 413000]
網(wǎng)絡(luò)異常檢測(cè)的主要目的就是發(fā)現(xiàn)流量異常,以保證網(wǎng)絡(luò)空間的安全.異常流量的檢測(cè)通??梢员豢醋髁髁康姆诸悊?wèn)題,邏輯回歸、決策樹(shù)、支持向量機(jī)(Support Vector Machine,SVM)等都是經(jīng)常被用來(lái)進(jìn)行異常流量檢測(cè)的機(jī)器學(xué)習(xí)方法.隨著機(jī)器性能的提升和數(shù)據(jù)量的增加,深度學(xué)習(xí)在異常檢測(cè)領(lǐng)域也得到了廣泛的應(yīng)用,并取得了不錯(cuò)的成績(jī)[1-3].深度學(xué)習(xí)快速發(fā)展的同時(shí)也促進(jìn)了圖像識(shí)別等領(lǐng)域的突破[4-5],這些領(lǐng)域的深度學(xué)習(xí)方法一般也被用于分類和異常檢測(cè),因此為人們提供了一些思路,可以結(jié)合其他領(lǐng)域的知識(shí)進(jìn)行異常流量檢測(cè)的探索.異常流量檢測(cè)可以監(jiān)控網(wǎng)絡(luò)狀態(tài),判斷當(dāng)前網(wǎng)絡(luò)是否正常,對(duì)確保網(wǎng)絡(luò)安全具有非常重要的價(jià)值[6-7].基于網(wǎng)絡(luò)異常檢測(cè)的研究非常多,但是由于網(wǎng)絡(luò)異常數(shù)據(jù)的多樣性和復(fù)雜性,各種檢測(cè)方法的自適應(yīng)性較差,對(duì)新出現(xiàn)的異常流量難以判斷.除此之外,當(dāng)前的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法都是基于包括正常數(shù)據(jù)和異常數(shù)據(jù)在內(nèi)的所有數(shù)據(jù)的學(xué)習(xí).正常流量樣本數(shù)據(jù)在現(xiàn)實(shí)世界中數(shù)量多且易于獲得,但獲取并標(biāo)記異常流量數(shù)據(jù)樣本卻極為困難.因此,通過(guò)半監(jiān)督學(xué)習(xí),本文對(duì)異常流量檢測(cè)問(wèn)題展開(kāi)研究,主要貢獻(xiàn)如下:
設(shè)計(jì)了一種基于生成對(duì)抗網(wǎng)絡(luò)的異常流量檢測(cè)模型,在提出的網(wǎng)絡(luò)模型中,利用生成對(duì)抗網(wǎng)絡(luò)的思想來(lái)更好地訓(xùn)練生成器.生成器由編碼-解碼-編碼的網(wǎng)絡(luò)結(jié)構(gòu)組成,不同于一般的基于自編碼器的異常檢測(cè)方法,該模型通過(guò)比較輸入數(shù)據(jù)的底層特征與生成數(shù)據(jù)的底層特征之間的重構(gòu)誤差進(jìn)行異常檢測(cè),解決了自編碼器結(jié)構(gòu)易受噪聲影響的問(wèn)題.在網(wǎng)絡(luò)結(jié)構(gòu)中利用適當(dāng)?shù)呐空?guī)化操作和激活函數(shù)來(lái)提升網(wǎng)絡(luò)的性能,使用卷積操作替代池化層,避免關(guān)鍵特征的丟失.實(shí)驗(yàn)結(jié)果表明,該模型在只學(xué)習(xí)正常流量數(shù)據(jù)樣本分布的前提下,能夠取得非常不錯(cuò)的效果,尤其在分布不均衡的數(shù)據(jù)集中.
在本文提出的基于生成對(duì)抗網(wǎng)絡(luò)的異常流量檢測(cè)模型中引入了記憶增強(qiáng)模塊,記憶增強(qiáng)模塊添加在生成器的編碼器子模塊后.在記憶增強(qiáng)模塊中,使用一個(gè)記憶矩陣保存訓(xùn)練階段的底層特征,當(dāng)輸入一個(gè)流量數(shù)據(jù)時(shí),通過(guò)記憶矩陣對(duì)該數(shù)據(jù)的底層特征進(jìn)行加權(quán)求和,使該數(shù)據(jù)的底層特征更貼近訓(xùn)練階段正常流量數(shù)據(jù)樣本的底層特征,從而導(dǎo)致輸入的異常流量數(shù)據(jù)能夠有更大的重構(gòu)誤差,以進(jìn)一步提高模型的檢測(cè)性能.實(shí)驗(yàn)結(jié)果證明,引入了記憶增強(qiáng)模塊能夠有更好的檢測(cè)效果.
在傳統(tǒng)的各種異常檢測(cè)方法中,支持向量機(jī)被認(rèn)為是分類異常行為的最佳機(jī)器學(xué)習(xí)算法之一.在機(jī)器學(xué)習(xí)最早被應(yīng)用在異常流量檢測(cè)的文獻(xiàn)中,Kim等人[8]提出了一種基于支持向量機(jī)的異常流量檢測(cè)方法,通過(guò)KDD’99 數(shù)據(jù)集上的測(cè)試,證明了將支持向量機(jī)用于異常流量檢測(cè)是一種有效的方法.貝葉斯網(wǎng)絡(luò)是一種概率圖形模型,是不確定知識(shí)表達(dá)和推理領(lǐng)域最有效的理論模型之一.Moore 等人[9]使用樸素貝葉斯(Naive Bayesian,NB)的方法對(duì)網(wǎng)絡(luò)流量按照應(yīng)用分類,在使用最簡(jiǎn)單的樸素貝葉斯分類器上,能夠達(dá)到65%的準(zhǔn)確率.Williams 等人[10]使用樸素貝葉斯、C4.5決策樹(shù)、貝葉斯網(wǎng)絡(luò)和樸素貝葉斯樹(shù)等算法演示了基于一致性和基于相關(guān)性的特征選擇對(duì)特征集約簡(jiǎn)的性能影響,證明了分類算法雖然相似但是對(duì)于分類的效果卻是顯著不同.
隨著計(jì)算機(jī)性能的增強(qiáng)和數(shù)據(jù)規(guī)模的擴(kuò)大,深度學(xué)習(xí)(Deep Learning,DL)開(kāi)始作為機(jī)器學(xué)習(xí)的一個(gè)研究方向且越來(lái)越火熱,它能夠?qū)W習(xí)數(shù)據(jù)的內(nèi)在特征和規(guī)律,屬于一種復(fù)雜的機(jī)器學(xué)習(xí),在矩陣檢測(cè)等方面遠(yuǎn)遠(yuǎn)超過(guò)了當(dāng)前的相關(guān)技術(shù).Javaid 等人[11]提出了一種基于深度學(xué)習(xí)框架的異常流量檢測(cè)方法,他們基于模糊神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)了一種自主學(xué)習(xí)系統(tǒng),并在NSL-KDD 基準(zhǔn)數(shù)據(jù)集上進(jìn)行了性能的比較,能夠達(dá)到88%的正確率.An 等人[12]提出變分自編碼器模型,在NSL-KDD 基準(zhǔn)數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),基于輸入數(shù)據(jù)的重建概率判斷是否屬于異常流量,取得了比PCA和AE模型更高的檢測(cè)性能.在使用全連接神經(jīng)網(wǎng)絡(luò)構(gòu)建異常流量檢測(cè)系統(tǒng)時(shí),在NSL-KDD 數(shù)據(jù)集上的二分類正確率能夠達(dá)到81.2%.高妮等人[13]提出了一種結(jié)合自動(dòng)編碼器和支持向量機(jī)的異常流量檢測(cè)模型(AN-SVM),首先通過(guò)自動(dòng)編碼器學(xué)習(xí)到數(shù)據(jù)分布的底層特征,降低維度,接著使用支持向量機(jī)進(jìn)行異常流量檢測(cè),在減少了模型訓(xùn)練時(shí)間的同時(shí)提高了檢測(cè)的正確率.Wang 等人[14]提出一種基于卷積神經(jīng)網(wǎng)絡(luò)的異常流量檢測(cè)模型,將網(wǎng)絡(luò)流量預(yù)處理為二維矩陣作為輸入,通過(guò)模型提取流量的底層特征,實(shí)現(xiàn)端到端的異常流量檢測(cè).
生成對(duì)抗網(wǎng)絡(luò)是由Goodfellow 等人[15]在2014 年提出來(lái)的一種機(jī)器學(xué)習(xí)架構(gòu),被認(rèn)為是近幾年來(lái)在復(fù)雜數(shù)據(jù)的分布上進(jìn)行無(wú)監(jiān)督學(xué)習(xí)最具有前景的方法之一.生成對(duì)抗網(wǎng)絡(luò)由生成器和判別器兩部分組成,生成器負(fù)責(zé)生成與輸入樣本數(shù)據(jù)相似的偽樣本,判別器負(fù)責(zé)判斷生成樣本和輸入樣本的真?zhèn)?,在?xùn)練過(guò)程中,通過(guò)生成器和判別器彼此的對(duì)抗,最終達(dá)到納什平衡,達(dá)到了生成器生成的數(shù)據(jù)更接近原始輸入樣本數(shù)據(jù),學(xué)習(xí)到了輸入數(shù)據(jù)的概率分布,判別器無(wú)法判斷出真?zhèn)蔚哪康?當(dāng)前將生成對(duì)抗網(wǎng)絡(luò)大部分用于生成樣本和數(shù)據(jù)增強(qiáng),劉海波等人[16]提出一種基于生成對(duì)抗網(wǎng)絡(luò)和長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)的網(wǎng)絡(luò)結(jié)構(gòu),針對(duì)缺少高持續(xù)性威脅攻擊樣本的情況,使用生成對(duì)抗網(wǎng)絡(luò)生成大量攻擊樣本,從而改善了傳統(tǒng)高持續(xù)性威脅攻擊檢測(cè)率低的問(wèn)題.Yin等人[17]提出了一種基于生成對(duì)抗網(wǎng)絡(luò)的半監(jiān)督分類方法,在學(xué)習(xí)部分帶標(biāo)簽數(shù)據(jù)的前提下,在NSL-KDD 數(shù)據(jù)集進(jìn)行了多分類實(shí)驗(yàn),實(shí)驗(yàn)證明了基于生成對(duì)抗網(wǎng)絡(luò)思想的分類模型比原分類模型有更高的檢測(cè)效果,也證明了生成對(duì)抗網(wǎng)絡(luò)在異常流量檢測(cè)領(lǐng)域的適用性.
以上的機(jī)器學(xué)習(xí)方法都是在訓(xùn)練正負(fù)標(biāo)簽樣的前提下,進(jìn)行異常檢測(cè),當(dāng)今以有監(jiān)督的學(xué)習(xí)為指導(dǎo)的異常流量檢測(cè)占據(jù)了學(xué)術(shù)主流[18-20].采用有監(jiān)督學(xué)習(xí)的方式需要大量且各類別分布平衡的已標(biāo)記訓(xùn)練樣本,在現(xiàn)實(shí)生活中,正常流量數(shù)據(jù)樣本數(shù)量多且易于獲得,但是獲取并標(biāo)記異常流量數(shù)據(jù)樣本是極為困難的.而且,在面對(duì)未知種類的異常流量時(shí),當(dāng)前模型的自適應(yīng)性較差.自編碼器和變分自編碼器作為一種半監(jiān)督的深度學(xué)習(xí)方法,能夠通過(guò)合理的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)和預(yù)處理,在訓(xùn)練階段自己學(xué)習(xí)到正常流量數(shù)據(jù)分布,通過(guò)模型的重構(gòu)誤差或者重建概率進(jìn)行異常檢測(cè),達(dá)到不遜于傳統(tǒng)模型的檢測(cè)性能.
本文提出了一個(gè)基于記憶增強(qiáng)的生成對(duì)抗網(wǎng)絡(luò)學(xué)習(xí)框架MeAEG-Net 來(lái)進(jìn)行異常流量檢測(cè).MeAEG-Net 總體框架如圖1 所示,主要包括了基于記憶增強(qiáng)的自編碼子網(wǎng)絡(luò)和重構(gòu)編碼子網(wǎng)絡(luò)的生成器模塊和判別器模塊.流量特征矩陣在進(jìn)入MeAEG-Net 時(shí),生成器接收預(yù)處理后生成的樣本特征矩陣F,在生成器中先經(jīng)過(guò)編碼器生成特征矩陣F的底層特征向量Z,底層特征向量Z經(jīng)過(guò)記憶增強(qiáng)模塊生成特征向量Z^,Z^再經(jīng)過(guò)解碼器生成特征矩陣F′;把生成的特征矩陣F′輸入到重構(gòu)編碼器產(chǎn)生底層特征向量Z′;對(duì)抗網(wǎng)絡(luò)輸入預(yù)處理生成的流量特征矩陣F和經(jīng)過(guò)生成器生成的特征矩陣F′,輸出信息反饋促進(jìn)生成器訓(xùn)練,直至最后生成接近特征矩陣F的矩陣,且底層特征向量Z與底層特征向量Z′盡可能保持最小誤差.網(wǎng)絡(luò)最后的輸出結(jié)果為異常流量的概率值||Z-Z′||1,根據(jù)設(shè)置的閾值θ和||Z-Z′||1進(jìn)行判別.下面對(duì)MeAEG-Net 網(wǎng)絡(luò)結(jié)構(gòu)中的各個(gè)部分進(jìn)行詳細(xì)的闡述.
圖1 MeAEG-Net 記憶增強(qiáng)生成對(duì)抗網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Memory augment based on generative adversarial network MeAEG-Net
Gong 等人[21]提出了一種基于記憶增強(qiáng)的自編碼器網(wǎng)絡(luò)MemAE,通過(guò)在自編碼器中添加一個(gè)記憶增強(qiáng)模塊,改進(jìn)自動(dòng)編碼器.傳統(tǒng)的自編碼器網(wǎng)絡(luò)是輸入的原始樣本數(shù)據(jù)通過(guò)編碼器模塊得到底層特征向量Z,然后底層向量Z再通過(guò)解碼器模塊重構(gòu)為與輸入樣本數(shù)據(jù)類似的數(shù)據(jù),通過(guò)比較輸入數(shù)據(jù)與輸出數(shù)據(jù)的重構(gòu)誤差來(lái)進(jìn)行異常檢測(cè).而由于自動(dòng)編碼器的泛化能力,部分異常的輸入數(shù)據(jù)也能夠被很好地重建,因此,記憶增強(qiáng)自編碼器的目的就是通過(guò)對(duì)底層向量Z的變換來(lái)消減這種泛化能力,使訓(xùn)練階段訓(xùn)練的正常樣本能夠得到貼切的還原,由于底層向量Z會(huì)變換重構(gòu)為與正常樣本相似的數(shù)據(jù),從而使異常數(shù)據(jù)產(chǎn)生明顯的重構(gòu)誤差,達(dá)到異常檢測(cè)的目的.記憶增強(qiáng)模塊見(jiàn)圖2[21].
圖2 記憶增強(qiáng)自編碼器[21]Fig.2 Memory augmentated AE[21]
在傳統(tǒng)的自編碼器網(wǎng)絡(luò)中,輸入數(shù)據(jù)X經(jīng)過(guò)編碼器(Encoder)計(jì)算得到數(shù)據(jù)的底層特征向量Z,而底層特征向量Z再通過(guò)解碼器(Decoder)重構(gòu)為數(shù)據(jù)X∧,見(jiàn)式(1).
在網(wǎng)絡(luò)中使用記憶增強(qiáng)模塊,使得在訓(xùn)練階段時(shí),輸入數(shù)據(jù)經(jīng)編碼器模塊得到底層向量保存成一個(gè)記憶矩陣M,M∈RN×C,其中N表示的是存儲(chǔ)的底層向量的個(gè)數(shù),C表示的是底層向量的維度,即底層特征向量Z的維度.記憶增強(qiáng)模塊的輸出Z^表示為記憶矩陣中N個(gè)底層向量的加權(quán)求和,其中W表示的是對(duì)應(yīng)底層向量的權(quán)值.見(jiàn)式(2).
記憶矩陣M中每個(gè)底層特征向量mi對(duì)應(yīng)的權(quán)重wi計(jì)算公式見(jiàn)(3).
其中d(z,mi)表示的是底層向量Z與記憶矩陣每一列底層向量mi的相似度,相似度使用余弦距離(Co?sine)計(jì)算,見(jiàn)式(4).
在記憶增強(qiáng)模塊中,提出了通過(guò)使用記憶矩陣中N個(gè)底層向量的加權(quán)求和的方式得到輸出的底層向量Z^,而各個(gè)權(quán)重wi的計(jì)算是通過(guò)余弦距離得到的,在得到權(quán)重wi后,還需要對(duì)wi進(jìn)行約束,因?yàn)橥ㄟ^(guò)各個(gè)底層向量的權(quán)重相加也有可能會(huì)導(dǎo)致異常被重構(gòu),所以,結(jié)合激活函數(shù)ReLU 的思想,對(duì)wi進(jìn)行硬閾值約束,即超過(guò)閾值的權(quán)重被保留,其余的設(shè)置為0,超參數(shù)λ表示閾值.見(jiàn)式(5).
為了使記憶增強(qiáng)模塊可以計(jì)算梯度,結(jié)合ReLU函數(shù)進(jìn)行調(diào)整,超參數(shù)λ一般?。?/N,3/N][21],調(diào)整公式見(jiàn)(6).
結(jié)合上述過(guò)程,基于記憶增強(qiáng)模塊的自編碼器網(wǎng)絡(luò)輸出數(shù)據(jù)的計(jì)算公式見(jiàn)式(7).
生成器模塊主要用于提取出輸入特征矩陣的一維底層向量和生成特征矩陣,以及提取出生成特征矩陣的一維底層向量,見(jiàn)圖3.與傳統(tǒng)的使用特征矩陣的重構(gòu)誤差進(jìn)行異常檢測(cè)相比,該方法可以有效地減少噪聲對(duì)模型的影響,且有效地減少了生成器的泛化現(xiàn)象.生成器編碼器模塊和重構(gòu)編碼器模塊中卷積層的每一個(gè)卷積核都可以提取特定的特征,不同的卷積核提取不同的特征,輸入矩陣經(jīng)過(guò)不同特征的卷積操作就變成了一系列特征矩陣,直觀地將這整個(gè)操作視為一個(gè)單獨(dú)的處理過(guò)程,與此同時(shí),網(wǎng)絡(luò)結(jié)構(gòu)中不使用池化層,防止關(guān)鍵特征信息的丟失,通過(guò)使用批量正規(guī)化操作對(duì)網(wǎng)絡(luò)性能進(jìn)行進(jìn)一步提升.
圖3 生成器網(wǎng)絡(luò)結(jié)構(gòu)Fig.3 Generator network architecture
判別器模塊判斷輸入的樣本數(shù)據(jù)為真實(shí)矩陣還是生成器生成的矩陣,本章提出的MeAEG-Net 判別器使用卷積神經(jīng)網(wǎng)絡(luò),最后使用Sigmod 函數(shù)輸出矩陣為真的概率值,見(jiàn)圖4.
圖4 判別器網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 Discriminant network architecture
判別器本質(zhì)上類似分類器,目的在于判斷輸入的流量特征矩陣是生成的特征矩陣F′還是原始矩陣F.
生成器的損失函數(shù)LG由四部分組成,第一部分是生成網(wǎng)絡(luò)中F和F′的重構(gòu)損失Lcon,用于減少經(jīng)過(guò)預(yù)處理的流量特征矩陣F和經(jīng)過(guò)生成器生成的重構(gòu)特征矩陣F′在像素層面上的差距.Lcon見(jiàn)式(8).
第二部分在判別器中,針對(duì)在矩陣特征方面的優(yōu)化損失Ladv,用于減少流量特征矩陣F和在生成器中生成的流量特征矩陣F′的差距,Ladv見(jiàn)式(9).
第三部分中針對(duì)重構(gòu)特征矩陣F′進(jìn)行編碼得到的底層向量Z′,對(duì)于正常流量數(shù)據(jù)而言,希望得到的底層特征向量Z′能夠與矩陣F編碼得到的底層向量Z盡可能相似,因此引入一個(gè)潛在向量之間的誤差優(yōu)化損失函數(shù)Lenc,見(jiàn)式(10).
第四部分是對(duì)于記憶增強(qiáng)模塊中權(quán)重矩陣的稀疏,期望的權(quán)重矩陣的熵越小越好,損失函數(shù)為L(zhǎng)att,見(jiàn)式(11).
對(duì)整個(gè)生成網(wǎng)絡(luò)模型使用損失函數(shù)LG進(jìn)行訓(xùn)練,見(jiàn)式(12).
其中α、β、δ和σ是調(diào)節(jié)分配各損失的權(quán)重,需要在實(shí)驗(yàn)中進(jìn)行調(diào)整.
使用損失函數(shù)LD對(duì)異常流量檢測(cè)模型中的判別器模塊進(jìn)行訓(xùn)練,定義y為真實(shí)的標(biāo)簽值 0或1,定義Adv為判別器,則LD見(jiàn)式(13).
模型在輸入階段不使用隨機(jī)噪聲產(chǎn)生矩陣,而是直接將樣本特征矩陣作為輸入,相比于使用隨機(jī)噪聲作為輸入的方式,該方式能夠更好地提取出原始矩陣的關(guān)鍵特征信息,使得網(wǎng)絡(luò)訓(xùn)練階段能夠?qū)W習(xí)到關(guān)鍵底層特征,從而提高了判別性能.在Berman等人[20]的網(wǎng)絡(luò)結(jié)構(gòu)中,卷積核都采用了4×4 的大小,采用其結(jié)構(gòu)則編碼器模塊只有三個(gè)卷積層,本章增加了卷積層的層數(shù),更有利于訓(xùn)練階段進(jìn)行特征提取.
通過(guò)在編碼器和判別器前三個(gè)卷積層中縮小卷積核的大小,能夠在具有相同感知視野的條件下,提升了網(wǎng)絡(luò)的深度,在一定程度上提升了神經(jīng)網(wǎng)絡(luò)效果的同時(shí)可以有效減少計(jì)算參數(shù)量.在卷積層中取消了池化層的使用,避免了池化層的下采樣操作造成關(guān)鍵特征的丟失.通過(guò)在淺層 Tanh 函數(shù)和深層 ReLU 函數(shù)的結(jié)合使用,一定程度上提升了網(wǎng)絡(luò)性能.
模型在損失函數(shù)方面,相對(duì)于一般的網(wǎng)絡(luò)模型來(lái)說(shuō),生成器模塊的損失函數(shù)由三部分構(gòu)成.除了判別器的相反值和原始矩陣和生成矩陣的差異度之外,還增加了一項(xiàng)生成器模型中編碼器生成的底層向量與重構(gòu)編碼器生成的底層向量之間的L2 正則化.由于是均方誤差,如果誤差大于1,那么平方后,相比L1 正則化而言,誤差就會(huì)被放大很多,如果不是為了進(jìn)行特征選擇,一般使用L2 正則化模型效果更好.因此模型會(huì)對(duì)樣例更敏感.如果樣例是一個(gè)異常值,模型會(huì)調(diào)整最小化異常值的情況,以犧牲其他更一般樣例為代價(jià),因?yàn)橄啾葐蝹€(gè)異常樣例,那些一般的樣例會(huì)得到更小的損失誤差.
文章的網(wǎng)絡(luò)中采用了自編碼器+重構(gòu)編碼器+判別器的網(wǎng)絡(luò)結(jié)構(gòu),通過(guò)對(duì)卷積核大小和步長(zhǎng)的控制,對(duì)網(wǎng)絡(luò)層數(shù)進(jìn)行控制,讓模型的復(fù)雜度盡量減小,計(jì)算復(fù)雜度縮小的同時(shí)提高模型性能,同時(shí)在網(wǎng)絡(luò)中使用批量歸一化及激活函數(shù)等操作提高網(wǎng)絡(luò)的表達(dá)能力.
記憶增強(qiáng)模塊是為了消減生成器的泛化能力,在記憶增強(qiáng)模塊中,采用記憶矩陣的方法,記憶矩陣?yán)锎鎯?chǔ)的都是在訓(xùn)練階段學(xué)習(xí)到的正常數(shù)據(jù)樣本的底層向量,鼓勵(lì)輸入的數(shù)據(jù)經(jīng)編碼器得到的底層向量通過(guò)記憶模塊能夠表示正常數(shù)據(jù)得到的底層向量,這樣重構(gòu)出來(lái)的數(shù)據(jù)與正常數(shù)據(jù)十分相似,當(dāng)輸入的樣本數(shù)據(jù)為異常數(shù)據(jù)時(shí),采用此方法得到的輸出會(huì)與輸入產(chǎn)生更大的重構(gòu)誤差,由此增強(qiáng)了檢測(cè)能力.
本章實(shí)驗(yàn)中采用在入侵檢測(cè)領(lǐng)域經(jīng)常使用的NSL-KDD 數(shù)據(jù)集,數(shù)據(jù)集解決了KDD’99 數(shù)據(jù)集中存在的一些固有問(wèn)題,不包含冗余數(shù)據(jù),而且訓(xùn)練集和測(cè)試集的記錄數(shù)量非常合理,使得該數(shù)據(jù)在入侵檢測(cè)領(lǐng)域得到廣泛的使用,可以幫助研究人員用來(lái)比較不同的入侵檢測(cè)方法.使用NSL-KDD Train+中的全部正常流量數(shù)據(jù)作為訓(xùn)練集,NSL-KDD Test+和NSL-KDD Test-[21]作為測(cè)試集.首先使用Weka 工具進(jìn)行CorrelationAttributeEval 分析得出屬性與類別的相關(guān)性排名,去除相關(guān)性為0 的num_outbound_cmds這一屬性,接著對(duì)數(shù)據(jù)集中的離散值和連續(xù)值進(jìn)行相應(yīng)的預(yù)處理.
本文使用獨(dú)熱編碼對(duì)離散值進(jìn)行處理.當(dāng)使用獨(dú)熱編碼時(shí),針對(duì)協(xié)議類型tcp、udp、icmp,在相同的場(chǎng)景下,分別賦值為(1,0,0)、(0,1,0)和(0,0,1).采用該種方式,模型判斷之間的相似度是一致的,將目標(biāo)主機(jī)的網(wǎng)絡(luò)服務(wù)類型特征service 和鏈接正常或錯(cuò)誤的狀態(tài)flag也通過(guò)獨(dú)熱編碼處理.
在NSL-KDD 連續(xù)值的預(yù)處理中,經(jīng)常使用歸一化方法.本文中,先將取值范圍大的特征,如src_bytes 的取值為[0~ 1 379 963 888],dst_bytes 的取值為[0~1 309 937 401]等進(jìn)行數(shù)值的標(biāo)準(zhǔn)化,數(shù)值的標(biāo)準(zhǔn)化見(jiàn)式(14).
式中,E(Xj)表示特征j的平均值,Stadj表示平均絕對(duì)誤差,相對(duì)于標(biāo)準(zhǔn)差對(duì)于孤立點(diǎn)具有更好的魯棒性,見(jiàn)式(15).
再將標(biāo)準(zhǔn)化的每一個(gè)數(shù)值歸一化到[0,1]的范圍上,歸一化見(jiàn)式(16).
使用NSL-KDD 數(shù)據(jù)集的其他40 個(gè)特征經(jīng)過(guò)上述流量預(yù)處理方法得到1×121 維的流量向量,再使用Python 的reshape()函數(shù),轉(zhuǎn)化為11×11 的流量特征矩陣.
模型的檢測(cè)性能由AUC 值、正確率和F1-Mea?sure三個(gè)指標(biāo)來(lái)衡量[19-20],正確率是二分類和入侵檢測(cè)中最直觀的評(píng)價(jià)指標(biāo),AUC 指標(biāo)代表著ROC 曲線下面的面積,ROC 曲線是假陽(yáng)性率(False Positive Rate,F(xiàn)PR)和真陽(yáng)性率(True Positive Rate,TPR)為橫縱坐標(biāo)的曲線,和閾值的選擇無(wú)關(guān),能更好地表示模型的性能.F1-Measure 被廣泛使用于評(píng)價(jià)分類結(jié)果的質(zhì)量,是精確率(precision)和召回率(recall)綜合衡量的一個(gè)指標(biāo).
此方案通過(guò)深度學(xué)習(xí)框架PyTorch 實(shí)現(xiàn),采用GPU 加速,Python 版本為3.7.0,pytorch1.2.0,Weka 版本為3.8.4,cudn 版本為cudnn-10.0-windows10-x64-v7.4.2.24.
在訓(xùn)練過(guò)程中,首先固定生成器網(wǎng)絡(luò)參數(shù),將預(yù)處理后生成的流量特征矩陣F和經(jīng)過(guò)生成器生成的特征矩陣F′輸入判別器,進(jìn)行監(jiān)督訓(xùn)練,利用正向傳播計(jì)算輸出結(jié)果,通過(guò)對(duì)輸出結(jié)果與實(shí)際結(jié)果的求偏差判斷是否超過(guò)容許范圍,否則進(jìn)行反向傳播以調(diào)整對(duì)抗網(wǎng)絡(luò)參數(shù),使其可以更好地區(qū)分流量特征矩陣F和生成的矩陣F′.然后固定對(duì)抗網(wǎng)絡(luò)參數(shù),訓(xùn)練生成器模塊,在訓(xùn)練過(guò)程中利用正向傳播計(jì)算輸出結(jié)果,通過(guò)對(duì)輸出結(jié)果與實(shí)際結(jié)果的求偏差判斷是否超過(guò)容許范圍,否則進(jìn)行反向傳播,使生成器生成的特征矩陣F′更加貼近輸入之前的特征矩陣F,最終對(duì)抗網(wǎng)絡(luò)無(wú)法做出正確判斷,且生成器生成的特征矩陣F′經(jīng)過(guò)重構(gòu)編碼器得到的底層向量Z′更加貼近特征矩陣F經(jīng)過(guò)重構(gòu)編碼器得到的底層向量Z.然后計(jì)算各層中的誤差,通過(guò)梯度下降算法更新各層權(quán)值,隨著訓(xùn)練次數(shù)的增加,最終生成訓(xùn)練好的網(wǎng)絡(luò)模型.
在測(cè)試階段,直接將需要檢測(cè)的流量特征矩陣F輸入網(wǎng)絡(luò)模型中,經(jīng)過(guò)一系列傳播計(jì)算,使模型同樣的首先進(jìn)行底層特征的提取操作,生成器中編碼器模塊的編碼得到一個(gè)底層向量Z,再經(jīng)過(guò)解碼器生成相似的特征矩陣F′,通過(guò)后續(xù)的傳播計(jì)算,特征矩陣F′經(jīng)過(guò)重構(gòu)編碼器得到一個(gè)底層向量Z′,輸出結(jié)果為異常流量的概率值||Z-Z′ ||1,最后根據(jù)設(shè)置的閾值θ和||Z-Z′ ||1進(jìn)行判別.見(jiàn)圖5.
圖5 模型訓(xùn)練和測(cè)試流量圖Fig.5 Model training and test flow charts
本模型采用自適應(yīng)矩估計(jì)(Adam)優(yōu)化器來(lái)訓(xùn)練網(wǎng)絡(luò).基礎(chǔ)學(xué)習(xí)率(Base_lr)為0.000 2,Adam 參數(shù)中一階矩估計(jì)的指數(shù)衰減率(beta1)為0.5、二階矩估計(jì)的指數(shù)衰減率(beta2)為0.999.網(wǎng)絡(luò)模型中的卷積層使用高斯初始化,初始權(quán)值在均值為0、方差為0.02 的高斯分布中采樣.生成器模塊損失函數(shù)中的四個(gè)權(quán)重參數(shù)分別為1、50、1、0.01,底層向量通道數(shù)為100,記憶增強(qiáng)模塊的記憶矩陣儲(chǔ)存底層向量個(gè)數(shù)N為10 000,硬閾值設(shè)置為0.000 3,根據(jù)GPU 顯存的大小,訓(xùn)練階段每一批次(batch_size)的大小設(shè)置為128,網(wǎng)絡(luò)模型設(shè)置為當(dāng)訓(xùn)練25個(gè)epoch時(shí)結(jié)束訓(xùn)練.
3.3.1 與有監(jiān)督機(jī)器學(xué)習(xí)方法的比較
本文使用Weka 機(jī)器學(xué)習(xí)和挖掘工具,在NSLKDD 數(shù)據(jù)集上,研究二分類(Normal,Anomaly)下,隨機(jī)樹(shù)、樸素貝葉斯、支持向量機(jī)、多層感知機(jī)、決策樹(shù)(J48)等機(jī)器學(xué)習(xí)算法的檢測(cè)準(zhǔn)確率和AUC值和F1-Measure,以及本章使用的MeAEG-Net 模型檢測(cè)準(zhǔn)確率、AUC值和F1-Measure,并進(jìn)行性能比較.其中,傳統(tǒng)機(jī)器學(xué)習(xí)方法在NSL-KDD Train+全部的數(shù)據(jù)上進(jìn)行訓(xùn)練,而MeAEG-Net 只使用數(shù)據(jù)集中的正常樣本.使用NSL-KDD Test+和NSL-KDD Test-21 作為測(cè)試集.
圖6 和圖7 以及表1 和表2 表示在二分類任務(wù)下,使用本文提出的MeAEG-Net 與傳統(tǒng)的機(jī)器學(xué)習(xí)算法在測(cè)試集上的檢測(cè)性能.從數(shù)據(jù)中可以看出本文提出的MeAEG-Net 在只學(xué)習(xí)正常流量數(shù)據(jù)樣本的前提下,相對(duì)于傳統(tǒng)的機(jī)器學(xué)習(xí),在學(xué)習(xí)全部數(shù)據(jù)樣本能夠取得更好的檢測(cè)效果.
圖6 MeAEG-Net與傳統(tǒng)機(jī)器學(xué)習(xí)算法的比較(NSL-KDD Test+)Fig.6 Comparison between MeAEG-Net and the traditional ma?chine learning methods(NSL-KDD Test+)
圖7 MeAEG-Net與傳統(tǒng)機(jī)器學(xué)習(xí)算法的比較(NSL-KDD Test-21)Fig.7 Comparison between MeAEG-Net and the traditional ma?chine learning methods(NSL-KDD Test-21)
表1 與傳統(tǒng)機(jī)器學(xué)習(xí)的性能比較(NSL-KDD Test+)Tab.1 Performance comparison with traditional machine learning(NSL-KDD Test+)
表2 與傳統(tǒng)機(jī)器學(xué)習(xí)的性能比較(NSL-KDD Test-21)Tab.2 Performance comparison with traditional machine learning(NSL-KDD Test-21)
從以上數(shù)據(jù)可以得出,本文提出的模型在NSLKDD Test+數(shù)據(jù)集上,與比較的傳統(tǒng)機(jī)器學(xué)習(xí)方法在AUC 值上提高了0.038到0.187,正確率提高了7%到12.7%,F(xiàn)1-Measure提高了0.086到0.149.這證明了模型能夠在僅僅使用訓(xùn)練集中正常流量數(shù)據(jù)的前提下,達(dá)到比傳統(tǒng)的機(jī)器學(xué)習(xí)算法在有監(jiān)督學(xué)習(xí)的情形下更好的檢測(cè)性能.
因?yàn)镹SL-KDD Test-21 測(cè)試集中存在數(shù)據(jù)分布不均衡的現(xiàn)象,所以一般的機(jī)器學(xué)習(xí)算法檢測(cè)性能較差.從表2 和圖7 的數(shù)據(jù)可以得出,本文提出的模型在AUC 值上與設(shè)計(jì)的決策樹(shù)相差不大,但相對(duì)于其他方法提高了0.057 到0.159,正確率提高了16%到27.6%,F(xiàn)1-Measure 提高了0.199 到0.305.這證明了模型能夠在僅僅使用訓(xùn)練集中正常流量數(shù)據(jù)的前提下,在不均衡的數(shù)據(jù)集中能夠達(dá)到比傳統(tǒng)機(jī)器學(xué)習(xí)算法更優(yōu)異的檢測(cè)性能.
3.3.2 與半監(jiān)督深度學(xué)習(xí)方法的比較
本文使用的方法,是基于正常樣本的訓(xùn)練,達(dá)到能檢測(cè)出異常樣本的目的.因此,選取An Jinwon 等人[12]的變分自編碼器(VAE)與本文采用同樣網(wǎng)絡(luò)結(jié)構(gòu)的自編碼模型(CAE),編碼-解碼-編碼模型(CAEE)以及基于生成對(duì)抗網(wǎng)絡(luò)的CAEE 模型AEGNet作為本模型的比較對(duì)象.
圖8 和圖9 以及表3 和表4 表示在二分類任務(wù)下,使用本文提出的MeAEG-Net 與對(duì)照模型在測(cè)試集上的檢測(cè)性能.從數(shù)據(jù)中可以看出本文提出的MeAEG-Net 在只學(xué)習(xí)正常流量數(shù)據(jù)樣本的前提下相對(duì)于對(duì)照模型能夠取得更好的檢測(cè)效果.
表3 與半監(jiān)督深度學(xué)習(xí)方法的性能比較(NSL-KDD Test+)Tab.3 Performance comparison with semi-supervised deep learning methods(NSL-KDD Test+)
表4 與半監(jiān)督深度學(xué)習(xí)方法的性能比較(NSL-KDD Test-21)Tab.4 Performance comparison with semi-supervised deep learning methods(NSL-KDD Test-21)
圖8 MeAEG-Net與半監(jiān)督深度學(xué)習(xí)方法的比較(NSL-KDD Test+)Fig.8 Comparison between MeAEG-Net and semi-supervised deep learning methods(NSL-KDD Test+)
圖9 MeAEG-Net與半監(jiān)督深度學(xué)習(xí)方法的比較(NSL- KDD Test-21)Fig.9 Comparison between MeAEG-Net and semi-supervised deep learning methods(NSL-KDD Test-21)
從以上數(shù)據(jù)可以得出,本文提出的模型在NSL-KDD Test+數(shù)據(jù)集上,與比較的深度學(xué)習(xí)方法在AUC值上提高了0.019 到0.279,正確率提高了2.8%到26.2%,F(xiàn)1-Measure提高了0.027到0.392.這證明了模型與同樣采用基于半監(jiān)督學(xué)習(xí)的深度學(xué)習(xí)算法AE與AEE 等相比,在NSL-KDD Test+數(shù)據(jù)集上具有更好的檢測(cè)性能.
從以上數(shù)據(jù)可以得出,本文提出的模型在NSL-KDD Test-21 數(shù)據(jù)集上,與比較的深度學(xué)習(xí)方法在AUC 值上提高了0.009 到0.142,正確率提高了2.9%到44%,F(xiàn)1-Measure 提高了0.026到0.51.這證明了模型與同樣采用基于半監(jiān)督學(xué)習(xí)的深度學(xué)習(xí)算法AE與AEE 等相比,在NSL-KDD Test-21 數(shù)據(jù)集上具有更好的檢測(cè)性能.
實(shí)驗(yàn)結(jié)果表明,在相同的實(shí)驗(yàn)條件下,本文提出的MeAEG-Net 以KDD Train+正樣本數(shù)據(jù)為訓(xùn)練集,以 KDD Test+和KDD Test-21 為測(cè)試集,在僅僅訓(xùn)練KDD Train+訓(xùn)練集中的正常樣本數(shù)據(jù)的前提下,在鑒別異常樣本數(shù)據(jù)的性能方面優(yōu)于基于傳統(tǒng)機(jī)器學(xué)習(xí)的分類模型,同時(shí)優(yōu)于同樣只使用正常流量樣本做異常檢測(cè)的基于卷積自編碼器CAE 和VAE 模型以及本文使用的基于卷積神經(jīng)網(wǎng)絡(luò)的編碼-解碼-編碼結(jié)構(gòu)CAEE 與AEG-Net,提升了對(duì)異常流量的檢測(cè)能力.
與目前主流的異常流量檢測(cè)模型不同,本文提出的模型基于生成對(duì)抗網(wǎng)絡(luò)思想,通過(guò)生成對(duì)抗的方式更好地訓(xùn)練生成器模型,并在生成器網(wǎng)絡(luò)中引入記憶增強(qiáng)模塊以此來(lái)提高異常流量數(shù)據(jù)的檢測(cè)能力.模型在訓(xùn)練階段學(xué)習(xí)正常流量數(shù)據(jù)樣本的數(shù)據(jù)分布,通過(guò)比較輸入流量數(shù)據(jù)的重構(gòu)誤差進(jìn)行異常檢測(cè),減少了標(biāo)記異常流量數(shù)據(jù)的工作.與此同時(shí),本文還引入了記憶增強(qiáng)模塊,通過(guò)消減生成器模塊的泛化能力,從而加大異常流量的重構(gòu)誤差,有效地提高了模型的性能.在現(xiàn)實(shí)生活中,根據(jù)網(wǎng)絡(luò)環(huán)境,網(wǎng)絡(luò)管理員可以手動(dòng)調(diào)整閾值,從而可以根據(jù)網(wǎng)絡(luò)需求在靈敏度和特異性之間進(jìn)行權(quán)衡,與其他現(xiàn)有方法相比,這是一個(gè)巨大的優(yōu)勢(shì).下一步,將基于本模型深入研究真實(shí)網(wǎng)絡(luò)流量數(shù)據(jù)下的檢測(cè)性能.