郭楠馨, 林宏剛, 張運理, 陳 麟
(1.成都信息工程大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,四川 成都 610225;2.成都信息工程大學(xué)先進密碼技術(shù)與系統(tǒng)安全四川省重點實驗室,四川 成都 610225;3.網(wǎng)絡(luò)空間安全態(tài)勢感知與評估安徽省重點實驗室,安徽 合肥 230027)
由于互聯(lián)網(wǎng)的普及,各種網(wǎng)絡(luò)攻擊也日益頻繁[1],攻擊者利用僵尸網(wǎng)絡(luò)執(zhí)行各種網(wǎng)絡(luò)犯罪活動[2]。近年來,僵尸網(wǎng)絡(luò)的對抗性有所提升,針對蜜罐開源項目采取反制措施,在漏洞利用方面更加迅速[3]?,F(xiàn)有的僵尸網(wǎng)絡(luò)家族正在不斷進化,各種新型攻擊層出不窮[4]。因此,為保障網(wǎng)絡(luò)環(huán)境的安全,對僵尸網(wǎng)絡(luò)的檢測至關(guān)重要。
國內(nèi)外研究者提出了眾多基于機器學(xué)習(xí)算法的僵尸網(wǎng)絡(luò)檢測的方案。周昌令等[5]通過研究校園網(wǎng)上的DNS流量后,提出了18個相關(guān)特征,并采用隨機森林算法實現(xiàn)FFSN的檢測。Khan等[6]提出了一種多層混合技術(shù),根據(jù)僵尸網(wǎng)絡(luò)流量的會話特征,采用基于機器學(xué)習(xí)的分類器,識別僵尸網(wǎng)絡(luò)流量。上述方案基于傳統(tǒng)機器學(xué)習(xí)算法,通過人工提取特征實現(xiàn)僵尸網(wǎng)絡(luò)的檢測。然而,面對復(fù)雜多變的網(wǎng)絡(luò)世界,人工提取特征存在難度大、通用性不夠等缺點。因此,有研究者提出基于深度學(xué)習(xí)的僵尸網(wǎng)絡(luò)檢測方法。McDermott等[7]使用雙向長期短期記憶遞歸神經(jīng)網(wǎng)絡(luò)(BLSTMRNN),并結(jié)合詞嵌入實現(xiàn)Mirai僵尸網(wǎng)絡(luò)的檢測。Chen等[8]使用CNN進行特征提取,并使用決策樹算法進一步提高檢測率,實驗結(jié)果表明,卷積特征對于僵尸網(wǎng)絡(luò)檢測是有效的。牛偉納等[9]提出了一種結(jié)合CNN和RNN兩種神經(jīng)網(wǎng)絡(luò)的方法,可以提取時間與空間兩個維度上的特征。
基于深度學(xué)習(xí)的僵尸網(wǎng)絡(luò)檢測方法雖然取得好的效果,但依賴大量的樣本訓(xùn)練[10]。然而在現(xiàn)實的網(wǎng)絡(luò)環(huán)境中標(biāo)記的僵尸網(wǎng)絡(luò)樣本不夠充分,且占比很低。例如,零日僵尸網(wǎng)絡(luò)是在漏洞發(fā)現(xiàn)當(dāng)天發(fā)起的僵尸網(wǎng)絡(luò)攻擊,短時間內(nèi)難以獲取足夠多的攻擊樣本,可以將其視為小樣本僵尸網(wǎng)絡(luò)檢測問題。小樣本學(xué)習(xí)旨在通過幾個甚至一個樣本完成任務(wù),現(xiàn)在常用元學(xué)習(xí)方法來解決小樣本問題[11]。元學(xué)習(xí)能夠通過學(xué)習(xí)大量的任務(wù),獲得足夠的先驗知識,從而快速學(xué)會新的任務(wù)[12]。Koch等[13]提出了孿生神經(jīng)網(wǎng)絡(luò)(siamese neural networks),將兩個結(jié)構(gòu)相同的神經(jīng)網(wǎng)絡(luò)拼接,且共享權(quán)值,比較輸入兩個樣本的相似度。Snell等[14]提出了原型網(wǎng)絡(luò)(prototypical networks),通過神經(jīng)網(wǎng)絡(luò)將D維數(shù)據(jù)映射到M維的特征空間,新的特征向量的均值心作為每類數(shù)據(jù)的原型點,并用歐幾里得距離計算原型點之間的距離。Sung等[15]提出了關(guān)系網(wǎng)絡(luò)(relation network),通過特征嵌入模塊提取樣本特征,并用關(guān)系模塊計算樣本特征之間的相似度,兩個模塊都采用CNN。該方法在計算樣本間度量沒有預(yù)定義一個固定的度量方法,而是通過神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)一個度量函數(shù),使模型表達更準確。Vinyals等[16]提出了匹配網(wǎng)絡(luò)(matching network),該方案將注意力機制和長短期記憶網(wǎng)絡(luò)(long short-term memory,LSTM)相結(jié)合,將支持集和查詢集輸入CNN提取圖像特征,然后輸入雙向LSTM中獲取圖像的特征向量,最后用余弦距離注意力判斷樣本相似度。上述方法都是基于度量的元學(xué)習(xí),在小樣本分類問題上取得了不錯的成果。
近幾年,注意力機制在小樣本學(xué)習(xí)中的應(yīng)用也越來越廣泛。注意力機制的核心思想是忽略無關(guān)信息關(guān)注重點信息[17],能夠增強模型的魯棒性、泛化性和可解釋性[18]。Ren等[19]提出了注意力吸引網(wǎng)絡(luò),在預(yù)訓(xùn)練好的初始分類器面對新的分類任務(wù)時,會訓(xùn)練一組新的權(quán)重,在不遺忘舊的分類任務(wù)的前提下實現(xiàn)對新類型的分類。Gao等[20]提出了一種基于混合注意力機制的原型網(wǎng)絡(luò),包括實例級注意力用于在支持集中選擇擁有更多信息的實力,降低噪聲干擾的問題;特征級注意力著重關(guān)注特征的重要維度,緩解特征的稀疏性。Wu等[21]在關(guān)系網(wǎng)絡(luò)的基礎(chǔ)上引入自注意力機制,用于獲取特征的非局部信息。
為解決傳統(tǒng)深度學(xué)習(xí)對未經(jīng)學(xué)習(xí)的任務(wù)泛化能力不足、依賴大量標(biāo)記數(shù)據(jù)的問題,本文根據(jù)關(guān)系網(wǎng)絡(luò)[15]的思想,提出基于度量的元學(xué)習(xí)的僵尸網(wǎng)絡(luò)檢測方法。通過簡單的卷積神經(jīng)網(wǎng)絡(luò)提取網(wǎng)絡(luò)流量特征,并學(xué)習(xí)出一個度量函數(shù),用于比較樣本間的相似度。在面對未知的僵尸網(wǎng)絡(luò)類型時,能通過少量的樣本信息快速完成分類任務(wù)。由于卷積神經(jīng)網(wǎng)絡(luò)中的感受野僅覆蓋局部信息,因此在提取特征時引入非局部注意力機制[22],可以提取網(wǎng)絡(luò)流量特征的全局信息,考慮網(wǎng)絡(luò)流量各點之間的聯(lián)系,使僵尸網(wǎng)絡(luò)的檢測結(jié)果更加準確。
提出基于元學(xué)習(xí)和注意力機制的僵尸網(wǎng)絡(luò)檢測方法,整體流程如圖1所示。首先對網(wǎng)絡(luò)流量數(shù)據(jù)進行預(yù)處理,將處理后的數(shù)據(jù)輸入特征提取模塊,在得到特征圖后還需將其輸入比較模塊,獲取兩個樣本之間的相似度。當(dāng)模型獲得足夠多的先驗知識,便能利用很少的樣本完成新的分類任務(wù)。
圖1 檢測方法流程圖
元學(xué)習(xí)在訓(xùn)練和測試階段的基本單元為元任務(wù),而非單個樣本。元任務(wù)可以表示為N-way、K-shot小樣本問題,其中N-way表示N個類型的數(shù)據(jù),K-shot表示每種類型數(shù)據(jù)包含K個樣本數(shù)量,且K較小。本文數(shù)據(jù)集區(qū)別于傳統(tǒng)機器學(xué)習(xí)的數(shù)據(jù)集,由多個元任務(wù)組成元訓(xùn)練集和元測試集,其中元訓(xùn)練集和元測試集的樣本類型不同。每個元任務(wù)包含支持集,查詢集0,1)。支持集表示N×K個已知標(biāo)簽的樣本,查詢集表示N×B個待檢測的樣本。
Vinyals等[16]提出了一種用于元學(xué)習(xí)模型的訓(xùn)練策略。在訓(xùn)練階段,每個元任務(wù)都模擬測試階段的N-way、K-shot問題,進行周期性的迭代訓(xùn)練,學(xué)習(xí)足夠的元任務(wù)T={task1,task2,…,taskn},直至收斂。在面對新任務(wù)時,通過極少量的新樣本,便能快速學(xué)會新任務(wù)taskn+1。
1.1.1 網(wǎng)絡(luò)流量處理
實驗使用的數(shù)據(jù)為原始的網(wǎng)絡(luò)流量,需經(jīng)過預(yù)處理后輸入模型,具體流程如圖2所示。將原始流量按照五元組(源IP、目的IP、源端口、目的端口、協(xié)議)切分為多個子集[23],每個子集包含多個數(shù)據(jù)包,按照時間順序排列組成一個數(shù)據(jù)流。由于每條數(shù)據(jù)流的大小不一,而檢測模型要求輸入固定大小的數(shù)據(jù),因此還需對數(shù)據(jù)流進行采樣。數(shù)據(jù)流的前面部分包含了主要的建立連接過程和內(nèi)容交換信息,后面部分能提供的特征信息較少,所以本文截取數(shù)據(jù)流的前784字節(jié),不足則補0x00。此外,還需對數(shù)據(jù)流進行匿名化和圖像化處理。
圖2 數(shù)據(jù)預(yù)處理流程圖
數(shù)據(jù)匿名化:本文使用的數(shù)據(jù)集為實驗室網(wǎng)絡(luò)采集的流量數(shù)據(jù),IP地址和MAC地址單一且固定,在模型進行特征提取時會干擾實驗結(jié)果,因此對IP地址和MAC地址進行隨機化處理。
轉(zhuǎn)換為灰度圖:將統(tǒng)一大小后的數(shù)據(jù)按照每個字節(jié)二進制值轉(zhuǎn)換為灰度圖,其中0xFF代表黑色,0x00代表白色[23]。
1.1.2 小樣本數(shù)據(jù)集構(gòu)造
在僵尸網(wǎng)絡(luò)檢測中,每次訓(xùn)練都從元訓(xùn)練集中任意選取一種僵尸網(wǎng)絡(luò)類型,并從選取的僵尸網(wǎng)絡(luò)類型中隨機采樣K+B個惡意樣本。再從元訓(xùn)練集中隨機采樣K+B正常樣本。其中,K個惡意樣本和K個正常樣本作為支持集,剩下的2B個樣本作為待檢測的查詢集。這樣的一次采樣訓(xùn)練過程稱為一個episode。
元測試集中的任務(wù)是在訓(xùn)練過程中沒有出現(xiàn)的新任務(wù),其支持集和查詢集構(gòu)造方法與元訓(xùn)練集相同。
本文提出的僵尸網(wǎng)絡(luò)檢測模型分為特征提取模塊和比較模塊兩個部分,模型總體框架如圖3所示。將通過預(yù)處理后的查詢集中的樣本xi和支持集中的樣本xj輸入特征提取模塊中,生成特征圖f(xi)和f(xj),再將特征圖串聯(lián)得到[f(xi),f(xj)]。將[f(xi),f(xj)]輸入到比較模塊中,得到兩個樣本的相似性得分g([f(xi),f(xj)]),范圍是[0,1]。樣本集包含正常流量樣本(負樣本)和僵尸網(wǎng)絡(luò)樣本(正樣本),標(biāo)簽分別為0和1。
圖3 模型總體框架
查詢集中的樣本會和支持集中的樣本一一比較,得到與K個正樣本的相似性得分均值:
與K個負樣本的相似性得分均值:
式(1)、(2)中xjm和xjn分別表示正樣本和負樣本。
在訓(xùn)練過程中得到Cm和Cn后,進行誤差反向傳播,直至收斂(見圖1)。在測試過程中,將元測試集輸入訓(xùn)練好的模型中,得到Cm和Cn后,比較Cm和Cn的大小。若Cm大,預(yù)測標(biāo)簽為1;反之,標(biāo)簽為0。
特征提取模塊和比較模塊都由卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn),網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。特征提取模塊由4個卷積層和注意力機制組成,其中Block表示卷積層,Attention Block為非局部注意力機制。圖4中“Conv,3×3,64”表示卷積操作,卷積核的大小為3×3,通道數(shù)為64;“BN,64”表示批量標(biāo)準化,通道數(shù)為64;“ReLU”表示使用修正線性單元作為激活函數(shù);“Max-Pool,2”表示最大池化,池化核大小為2×2。比較模塊中“Concatenation”表示將特征提取模塊輸出的兩個特征圖串聯(lián)起來;“FC,8”和“FC,1”表示全連接層維度分別為8和1;輸出層通過Sigmoid函數(shù)得到一個實數(shù)。訓(xùn)練過程中,不使用預(yù)設(shè)的固定的線形度量算法,如歐式距離、余弦距離等,而是學(xué)習(xí)出一個非線性的相似度度量,使模型在面對多種僵尸網(wǎng)絡(luò)類型時效果更好。
圖4 僵尸網(wǎng)絡(luò)檢測模型網(wǎng)絡(luò)框架圖
特征提取模塊是一個雙路處理的卷積神經(jīng)網(wǎng)絡(luò),將兩個尺寸為28×28×1的樣本圖片輸入到特征提取模塊中得到兩個尺寸為5×5×64的特征圖;再將特征提取模塊輸出的兩個特征圖輸入到比較模塊中,通過Concatenation將兩個特征圖串聯(lián),得到尺寸為5×5×128的特征圖;特征圖經(jīng)過兩個卷積層和兩個全連接層,最后得到兩個樣本的相似度得分。
在卷積神經(jīng)網(wǎng)絡(luò)中,感受野只考慮了局部范圍,如卷積和池化操作。為捕獲遠距離位置的依賴關(guān)系,通常做法是疊加多個卷積模塊。但導(dǎo)致感受野的效率低,且增加網(wǎng)絡(luò)層數(shù)會提高網(wǎng)絡(luò)設(shè)計難度,因此本文在特征提取模塊引入非局部(Non-Local)注意力機制[22]。Non-local操作對于二維圖片,可以捕獲空間位置的長范圍依賴,實現(xiàn)遠距離的信息傳遞,獲取更多信息,具體的實現(xiàn)為
式中:X表示輸入特征圖,Y表示輸出特征圖,且兩者大小相同;i表示X某一像素點的索引,j表示除i外所有位置的索引;N表示X中像素點個數(shù),用來進行歸一化處理。函數(shù)f計算i和j之間的相似關(guān)系,采用嵌入高斯公式:
式中,公式嵌入項 θXi=WθXi,φ(Xj)=WφXj。 函數(shù) g 用來計算j在X中的特征表示,可以看作1×1的卷積:
圖5展示了Non-Local模塊實現(xiàn)的具體過程。輸入特征圖X的長和寬分別為H、W,通道數(shù)為C,批量大小為N。X首先經(jīng)過3個1×1的卷積核,即經(jīng)過3個線性變化 θ、φ、g 得到 θ(Xi)、φ(Xj)、g(Xj),使通道數(shù)減半,減少計算量;對θ(Xi)、φ(Xj)進行維度變換,再用softmax函數(shù)進行歸一化處理:
圖5 Non-local模塊示意圖
對得到的g(Xj)先進行維度變換,再和f'進行矩陣相乘得到Y(jié);最后將Y再進行維度變換,并經(jīng)過一個1×1的卷積核得到Z:
Z和X的大小和通道數(shù)相同,這樣便于將Non-Local塊引入現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)中。
實驗使用的數(shù)據(jù)集為ISOT Botnet數(shù)據(jù)集[24]和CTU-13數(shù)據(jù)集[25]。ISOT Botnet數(shù)據(jù)集包含了P2P僵尸網(wǎng)絡(luò)和正常流量。CTU-13數(shù)據(jù)集包含了13個不同場景下的僵尸網(wǎng)絡(luò)流量。本文實驗采用其中的正常流量和部分僵尸網(wǎng)絡(luò)流量(Neris、Rbot、Waledac、Zeus、Virut、Fast-Flux)。
實驗環(huán)境為:深度學(xué)習(xí)框架Pytorch;處理器是CPU:i7-7700,GPU:1080TI。
本文采用準確率(accuracy,ACC)、檢測率(detection rate,DR)、誤報率(false alarm rate,FAR)作為評價指標(biāo)。
式中:TP表示僵尸網(wǎng)絡(luò)流量被分類為僵尸網(wǎng)絡(luò)流量個數(shù);FP表示僵尸網(wǎng)絡(luò)流量被分類為正常流量個數(shù);TN表示正常流量被分類為正常流量個數(shù);FN表示正常流量被分類為僵尸網(wǎng)絡(luò)流量個數(shù)。
實驗采用2.1節(jié)的數(shù)據(jù)集,其中Neris和Rbot為IRC僵尸網(wǎng)絡(luò);Waledac和Zeus為P2P僵尸網(wǎng)絡(luò);Virut和Fast-Flux為HTTP僵尸網(wǎng)絡(luò)。為了模擬小樣本場景下的僵尸網(wǎng)絡(luò)檢測,訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)不能重疊,且僵尸網(wǎng)絡(luò)類型不能相同。因此將上述按照協(xié)議分類的3種僵尸網(wǎng)絡(luò)中的1種作為元測試集,剩余2種僵尸網(wǎng)絡(luò)作為元訓(xùn)練集,共有3種組合方式。例如,將P2P僵尸網(wǎng)絡(luò)(Waledac、Zeus)和 HTTP僵尸網(wǎng)絡(luò)(Virut、Fast-Flux)作為元訓(xùn)練集,IRC僵尸網(wǎng)絡(luò)(Neris、Rbot)作為元測試集。由于在訓(xùn)練過程中沒有使用IRC僵尸網(wǎng)絡(luò)樣本,因此在測試過程中將IRC僵尸網(wǎng)絡(luò)視為新的僵尸網(wǎng)絡(luò)類型,即小樣本場景下的僵尸網(wǎng)絡(luò)檢測。
在訓(xùn)練和測試過程中,設(shè)置K=2,N=1、5,B=10。通過完成2-way、1-shot和2-way、5-shot的小樣本實驗,來驗證小樣本場景下僵尸網(wǎng)絡(luò)檢測的可行性。
雖然將僵尸網(wǎng)絡(luò)檢測看作二分類問題,最后輸出0或1,但是比較模塊輸出的是預(yù)測的相似度得分,不是標(biāo)簽,可以看作回歸問題。因此,使用均方誤差(MSE)訓(xùn)練模型:
式中,N為episode個數(shù),K為小樣本數(shù)據(jù)集中每類樣本個數(shù),為模型預(yù)測的待測樣本相似度得分,yij為待測樣本標(biāo)簽。訓(xùn)練過程中使用Adam優(yōu)化算法,并將學(xué)習(xí)率設(shè)置為0.001。圖6表示在訓(xùn)練過程中準確率的變化曲線,在150個episode左右時,模型已接近收斂。因此,采用150個episode訓(xùn)練模型。
圖6 訓(xùn)練準確率變化曲線注意力機制設(shè)置
為了選擇合適的位置引入Non-local注意力機制,在2-way、5-shot的小樣本場景下做了實驗驗證。Baseline,不引入注意力機制。為了驗證注意力機制位置對模型的影響,在特征提取模塊的不同位置引入注意力機制。
模型1:在第1個卷積層后引入一個Non-local注意力機制;模型2:在第2個卷積層后引入一個Non-local注意力機制;模型3:在第3個卷積層后引入一個Non-local注意力機制;模型4:在第4個卷積層后引入一個Non-local注意力機制。
實驗結(jié)果如圖7所示,引入Non-local注意力機制模塊對模型的檢測準確率有所提升,在第一個卷積層后引入Non-Local模塊,即模型1的效果最好。
圖7 不同位置的Non-local模塊測試結(jié)果對比圖
為驗證注意力機制個數(shù)對模型的影響,在特征提取模塊中引入不同個數(shù)的Non-Local注意力機制。
模型5:在第1個卷積層后引入一個Non-local注意力機制;模型6:在前2個卷積層后都引入一個Non-local注意力機制;模型7:在前3個卷積層后都引入一個Non-local注意力機制;模型8:在前4個卷積層后都引入一個Non-local注意力機制。
實驗結(jié)果如圖8所示,Non-local注意力機制模塊數(shù)量增加到2個以上時,對模型的檢測準確率提升很小。根據(jù)圖7和圖8的結(jié)果對比,考慮到模型檢測效果和計算復(fù)雜度,選擇模型6作為本文方法,具體的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖8 不同數(shù)量的Non-local模塊測試結(jié)果對比圖
實驗采用2.2節(jié)的3個指標(biāo),將2way-1shot和2way-5shot小樣本場景下的僵尸網(wǎng)絡(luò)檢測進行100次實驗,將平均值作為最后的結(jié)果匯總于表1。對于IRC僵尸網(wǎng)絡(luò)和HTTP僵尸網(wǎng)絡(luò)的檢測,1shot和5shot實驗都取得了較好的結(jié)果。但對于小樣本場景下P2P僵尸網(wǎng)絡(luò)的檢測準確率還有待提高。在1shot的僵尸網(wǎng)絡(luò)檢測任務(wù)中,平均準確率為96.79%,平均檢測率為96.68%,誤報率為3.32%。在5shot的僵尸網(wǎng)絡(luò)檢測任務(wù)中,平均準確率為98.06%,平均檢測率為98.58%,平均誤報率為2.43%。從實驗結(jié)果來看,對于缺少樣本的情況下,小樣本場景下的僵尸網(wǎng)絡(luò)檢測是可行的。
表1 小樣本場景下的僵尸網(wǎng)絡(luò)檢測結(jié)果匯總表 單位:%
由于基于小樣本的僵尸網(wǎng)絡(luò)檢測還處于比較新的領(lǐng)域,目前還沒有相關(guān)研究成果進行直接對比。因此,將本文方法與其他基于深度學(xué)習(xí)并使用ISOT Botnet數(shù)據(jù)集和CTU-13數(shù)據(jù)集的僵尸網(wǎng)絡(luò)檢測方法進行比較,對比結(jié)果如表2所示。Ahmed等[26]采用簡單的人工神經(jīng)網(wǎng)絡(luò)(artificial neural network,ANN),對僵尸網(wǎng)絡(luò)的檢測準確率僅95%。牛偉納等[9]和 Nugraha等[27]將CNN和LSTM算法相結(jié)合,用來提取流量的空間和時間兩種特征,雖然取得了不錯的效果,但這需要大量的標(biāo)記數(shù)據(jù)訓(xùn)練,且模型的計算復(fù)雜度較高。而本文方法在面對新的僵尸網(wǎng)絡(luò)類型時,僅需5個樣本便能取得很好的檢測效果,相對于其他方法不需要太多標(biāo)記樣本。
表2 本文方法與使用相同數(shù)據(jù)集的其他方法對比
為檢測小樣本場景下的僵尸網(wǎng)絡(luò),提出了一種基于度量元學(xué)習(xí)僵尸網(wǎng)絡(luò)檢測模型。該模型通過卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)一個非線性的相似度度量算法,能更加準確地表達樣本之間的相似度關(guān)系。同時,為了在獲取網(wǎng)絡(luò)流量特征的全局信息,引入了非局部注意力機制,進一步提升了對僵尸網(wǎng)絡(luò)檢測的準確率。在后續(xù)的研究工作中,還會繼續(xù)改進和優(yōu)化模型,特別是提高對P2P僵尸網(wǎng)絡(luò)的檢測效果。