于 洋 陳丹偉
(南京郵電大學(xué)計算機學(xué)院軟件學(xué)院網(wǎng)絡(luò)空間安全學(xué)院 江蘇 南京 210023)
僵尸網(wǎng)絡(luò)[1](botnet)是由大量被攻擊者控制的聯(lián)網(wǎng)設(shè)備構(gòu)成的,其中受控的聯(lián)網(wǎng)設(shè)備被稱作僵尸主機(bot),攻擊者(botmaster)通過預(yù)先設(shè)置好的命令與控制信道(Command and Control,C&C)操控僵尸主機進行DDOS攻擊、挖礦、惡意軟件分發(fā)等惡意行為。其中最具有代表性的是2016年10月21日攻擊者利用Mirai,感染和控制了數(shù)以萬計的物聯(lián)網(wǎng)設(shè)備,組成了僵尸網(wǎng)絡(luò),對美國域名解析服務(wù)提供商Dyn公司發(fā)動了DDOS攻擊,致使美國東部大面積網(wǎng)絡(luò)癱瘓,包括Twitter、Facebook在內(nèi)的多家美國網(wǎng)站無法通過域名訪問[2]。根據(jù)綠盟發(fā)布的《2018 BOTNET趨勢報告》,2018年總共監(jiān)控到攻擊命令111 472條,其中有效攻擊目標數(shù)量為451 187次,相較2017年增長了66.4%,而botnet攻擊的受害者中,中國占據(jù)了39.78%[3]。
僵尸網(wǎng)絡(luò)通過隨時間推移改變其結(jié)構(gòu)和協(xié)議來維持其存活。C&C信道為僵尸網(wǎng)絡(luò)提供了更新其惡意代碼和協(xié)議的能力,允許僵尸程序在攻擊者的控制下同時執(zhí)行攻擊。早期的僵尸網(wǎng)絡(luò)使用Internet Relay Chat[4](IRC)作為其C&C協(xié)議。隨著技術(shù)的不斷進步,IRC協(xié)議變得過時并且以此構(gòu)建的僵尸網(wǎng)絡(luò)可以被輕易檢測到,因此僵尸網(wǎng)絡(luò)開始使用超文本傳輸協(xié)議(HTTP)等其他協(xié)議進行通信。
僵尸網(wǎng)絡(luò)有兩種主要體系結(jié)構(gòu),即C&C的基礎(chǔ)結(jié)構(gòu):集中式和分散式。在集中式架構(gòu)中,僵尸網(wǎng)絡(luò)中的所有僵尸主機通過IRC或HTTP等協(xié)議與一個或幾個中央控制服務(wù)器建立其通信信道。這種拓撲的優(yōu)勢是可以快速地分發(fā)攻擊指令,方便對僵尸主機的控制。然而,其缺點也很突出,一旦中央控制服務(wù)器被摧毀,整個僵尸網(wǎng)絡(luò)將不再受到控制。因此,近年來越來越多的僵尸網(wǎng)絡(luò)采用分散式C&C來克服中心服務(wù)器故障的問題。通過P2P協(xié)議[5]允許僵尸網(wǎng)絡(luò)中的每個節(jié)點充當客戶端或主設(shè)備,極大增強了C&C的靈活性和健壯性。此外,僵尸網(wǎng)絡(luò)拓撲可以是兩種體系結(jié)構(gòu)的混合模型,以結(jié)合兩種C&C結(jié)構(gòu)的優(yōu)點,從而增加了摧毀僵尸網(wǎng)絡(luò)的難度。
近年來,機器學(xué)習(xí)技術(shù)得到了廣泛的應(yīng)用,其在流量分類上具有良好的表現(xiàn)。Stevanovic等[6]對比了8種機器學(xué)習(xí)方法對僵尸流量的分類性能,實驗表明C4.5、RTree和RForest的性能較好。Chen等[7]提出了一種有效的準實時入侵檢測系統(tǒng):在高速網(wǎng)絡(luò)環(huán)境下使用有監(jiān)督的機器學(xué)習(xí)方法檢測僵尸網(wǎng)絡(luò)。通過使用PF_RING構(gòu)建檢測框架,用于動態(tài)提取流特征,然后使用隨機森林模型提取有效的會話特征,該方法的準確率達到94%。Kirubavathi等[8]提出了一種基于網(wǎng)絡(luò)流量行為分析的機器學(xué)習(xí)技術(shù)來檢測僵尸網(wǎng)絡(luò)。該系統(tǒng)能夠識別新型僵尸網(wǎng)絡(luò),具有高檢測準確度和低誤報率,但是其檢測需要有針對性地選取特征,需要豐富的相關(guān)知識及經(jīng)驗。Azab等[9]使用C4.5決策樹和基于相關(guān)性的特征選擇算法針對Zeus僵尸網(wǎng)絡(luò)進行檢測。Alhawi等[10]研究了Windows勒索軟件流量,使用J48決策樹對基于會話的網(wǎng)絡(luò)流行進行分類,達到97.1%的真陽性率。Anwar等[11]對移動端的僵尸網(wǎng)絡(luò)進行檢測,從Android應(yīng)用程序中提取靜態(tài)功能,再對比多種機器學(xué)習(xí)算法,實驗表明樸素貝葉斯算法的效果最佳。Al-Jarrah[12]提出了一種新型的隨機化數(shù)據(jù)分割學(xué)習(xí)模型,采用改良的正向選擇排序技術(shù)從特征集中過濾多余無關(guān)的特征,并通過基于泰森多邊形的數(shù)據(jù)剪枝方法來減小龐大的訓(xùn)練數(shù)據(jù)集。
隨著人工智能和深度學(xué)習(xí)技術(shù)的快速發(fā)展,神經(jīng)網(wǎng)絡(luò)的相關(guān)算法也被應(yīng)用到數(shù)據(jù)流量分類中。Homayoun等[13]提出了一種基于深度學(xué)習(xí)的僵尸網(wǎng)絡(luò)流量分析器BoTShark,它僅使用網(wǎng)絡(luò)數(shù)據(jù)流,獨立于深度數(shù)據(jù)包檢測技術(shù),因此避免了無法處理加密有效載荷的固有限制。通過自動編碼器和卷積神經(jīng)網(wǎng)絡(luò)分別檢測惡意流量,針對ISCX 2014 botnet數(shù)據(jù)集,自動編碼器具有91%的真陽性和13%的假陽性,而卷積神經(jīng)網(wǎng)絡(luò)具有92%的真陽性和15%的假陽性。Torres等[14]使用LSTM建立基于連接行為的僵尸網(wǎng)絡(luò)檢測模型,通過k折交叉驗證拓展數(shù)據(jù)集進行訓(xùn)練。Pektas等[15]結(jié)合卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)構(gòu)建模型,使用兩個公開可用的數(shù)據(jù)集(CTU-13和ISOT)進行訓(xùn)練和測試。王勇等[16]將歸一化后的數(shù)據(jù)作為輸入,使用基于LeNet-5深度卷積神經(jīng)網(wǎng)絡(luò)進行流量分類。吳迪等[17]提出基于深度學(xué)習(xí)的僵尸網(wǎng)絡(luò)檢測系統(tǒng)BotCatcher,分別從空間和時間2個維度自動化地提取網(wǎng)絡(luò)流量特征,通過卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)建立分類器進行僵尸網(wǎng)絡(luò)檢測,無須人工選取特征,降低了檢測僵尸網(wǎng)絡(luò)的難度。寇廣等[18]使用卷積神經(jīng)網(wǎng)絡(luò)進行僵尸云的檢測,首先從網(wǎng)絡(luò)流量中提取20種特征,再通過特征映射將其轉(zhuǎn)化為灰度圖像,最后使用神經(jīng)網(wǎng)絡(luò)進行特征學(xué)習(xí)得到檢測模型。
本文基于深度學(xué)習(xí)方法,改進數(shù)據(jù)流的處理流程,增加人工提取的特征,在卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上使用批量歸一化技術(shù)和L2正則化,從而實現(xiàn)僵尸網(wǎng)絡(luò)的檢測,提高神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度和檢測準確率。
深度學(xué)習(xí)是機器學(xué)習(xí)的一個子領(lǐng)域,是近年來機器學(xué)習(xí)的重大突破和研究熱點之一,它是一種以人工神經(jīng)網(wǎng)絡(luò)(ANN)為架構(gòu)的對數(shù)據(jù)進行表征學(xué)習(xí)的一種算法。通過引入卷積神經(jīng)網(wǎng)絡(luò)[19](Convolutional Neural Network,CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)[20](Recurrent Neural Networks, RNN),深度學(xué)習(xí)的實用性和適用性得到了巨大的提升。
卷積神經(jīng)網(wǎng)絡(luò)是一種多層人工神經(jīng)網(wǎng)絡(luò)。網(wǎng)絡(luò)中的每一層由多個特征面組成,每個特征面由多個獨立的神經(jīng)元組成,相鄰的兩層神經(jīng)元相互連接,并且在同一層神經(jīng)元之間沒有連接。CNN使用權(quán)值共享的網(wǎng)絡(luò)結(jié)構(gòu),通過改變網(wǎng)絡(luò)的深度和廣度來調(diào)整模型的容量。因此,卷積神經(jīng)網(wǎng)絡(luò)可以有效降低網(wǎng)絡(luò)模型的復(fù)雜度。
典型的卷積神經(jīng)網(wǎng)絡(luò)主要由輸入層、卷積層、池化層、全連接層和輸出層組成。卷積層進行卷積運算,在給定卷積核和輸入數(shù)據(jù)的局部區(qū)域之間執(zhí)行點積,捕捉數(shù)據(jù)中不同位置的相似結(jié)構(gòu),并創(chuàng)建卷積特征。第一層卷積層提取低級特征,在一定范圍內(nèi),卷積層的層數(shù)越多,提取的特征越高級。卷積層的核心參數(shù)有卷積核的大小、卷積核的數(shù)量、滑動步長、激勵函數(shù)等。卷積核是一個多維權(quán)值矩陣,其維數(shù)等于輸入數(shù)據(jù)的位數(shù),例如輸入數(shù)據(jù)為二維圖像,卷積核就是一個二維矩陣。卷積核的個數(shù)就是特征面的數(shù)量,即提取的特征數(shù)。假設(shè)卷積層中輸出特征面n第k個神經(jīng)元的輸出值為Ynk,輸入特征面m第h個神經(jīng)元的輸出值為Xmh,則:
Ynk=fcov(X1h*W1(h)n(k)+X1(h+1)*W1(h+1)n(k)+
X1(h+2)*W1(h+2)n(k)+…+bn)
(1)
式中:bn為輸出特征面n的偏置值;Wm(i)n(j)表示輸入特征面m第i個神經(jīng)元與輸出特征面n第j個神經(jīng)元的連接權(quán)值;fcov()為激勵函數(shù)。激勵函數(shù)通常選擇不飽和非線性函數(shù),例如ReLU函數(shù)、Sigmod函數(shù)、tanh函數(shù)等[21]。
池化層與卷積層一樣,由多個特征面組成,且特征面的數(shù)量與上一層的卷積層相同。池化層對卷積層提取到的特征進行池化操作,簡化神經(jīng)網(wǎng)絡(luò)的復(fù)雜度,減少運算量。設(shè)池化層中第n個輸出特征面的第l個神經(jīng)元的輸出值為tnl,則:
(2)
式中:tnq為池化層第n個輸入特征面第q個神經(jīng)元的輸出值;fsub()為池化方法。常用的池化方法有均值池化、最大池化、隨機池化等[21]。
全連接層與上一層(卷積層、池化層或全連接層)中的所有神經(jīng)元連接,將特征空間映射到樣本標記空間。
近年來,批量歸一化技術(shù)被廣泛應(yīng)用到神經(jīng)網(wǎng)絡(luò)中。批量歸一化[22](Batch Normalization)是一個有效的正則化方法,在神經(jīng)網(wǎng)絡(luò)中添加批量歸一化層,可以對上一層的輸出進行標準化處理(歸一化為均值為0、方差為1的數(shù)據(jù)),使其符合正態(tài)分布,從而使得神經(jīng)網(wǎng)絡(luò)允許使用較大的學(xué)習(xí)率進行訓(xùn)練,提高訓(xùn)練速度,同時也可以使用較小的dropout以提高網(wǎng)絡(luò)的泛化能力。
過擬合是模型訓(xùn)練過程中最常遇見的問題,模型擬合程度過高會限制模型的泛化能力,模型在訓(xùn)練集和測試集上的準確率相差很大。L2正則是目前常用的對抗過擬合的方法,該方法通過在代價函數(shù)后加一個懲罰項,緩解模型過擬合問題。計算公式如下:
(3)
式中:w為神經(jīng)網(wǎng)絡(luò)的權(quán)重參數(shù),α是正則系數(shù),J為原損失函數(shù),J′為加入L2正則后的損失函數(shù)。對權(quán)重參數(shù)w求梯度得:
▽wJ′(w;X,y)=αw+▽wJ(w;X,y)
(4)
因此權(quán)重參數(shù)的更新公式為:
w←(1-εα)w-ε▽wJ(w;X,y))
(5)
式中:ε為梯度下降的步長。可以發(fā)現(xiàn),懲罰項增加了權(quán)重參數(shù)的線性伸縮,從而在一定程度上降低了模型的擬合能力。
通過卷積神經(jīng)網(wǎng)絡(luò)進行僵尸網(wǎng)絡(luò)檢測主要分為3步。首先是將網(wǎng)絡(luò)流量轉(zhuǎn)化為灰度圖像,然后使用卷積神經(jīng)網(wǎng)絡(luò)對灰度圖像進行特征學(xué)習(xí),最后利用訓(xùn)練得到的模型對異常流量進行檢測。整體框架如圖1所示。

圖1 整體框架
本文使用的數(shù)據(jù)集由正常網(wǎng)絡(luò)流量和僵尸網(wǎng)絡(luò)流量組成。其中,僵尸網(wǎng)絡(luò)流量從CTU大學(xué)建立的Stratosphere IPS項目中獲取,本文選擇了具有代表性的僵尸網(wǎng)絡(luò)作為實驗數(shù)據(jù)集,具體組成如表1所示。正常網(wǎng)絡(luò)流量由該項目的CTU-Normal-7和USTC-TFC2016數(shù)據(jù)集中的正常流量構(gòu)成。

表1 僵尸流量數(shù)據(jù)集
數(shù)據(jù)集文件為pcap格式。首先需要對pcap文件進行分割。本文采用基于會話的分割方法,流是具有相同五元組(源IP、源端口、目的IP、目的端口、傳輸協(xié)議)的所有數(shù)據(jù)包,會話則是由雙向流組成的所有數(shù)據(jù)包,即源IP、源端口與目的IP、目的端口互換,以此為粒度將大容量的pcap文件分割成小容量的pcap文件。
進行卷積前需要將分割后的pcap文件轉(zhuǎn)化為二維灰度圖像。卷積神經(jīng)網(wǎng)絡(luò)要求輸入相同大小的灰度圖像,以便提取相同維度的特征,但是分割后的pcap文件大小各異,為了方便特征提取,需要再次對pcap文件進行裁剪。本文截取數(shù)據(jù)流的前1 024字節(jié),長度不足的在末尾用0x00填充。采用此方法截取的數(shù)據(jù)雖然包含了數(shù)據(jù)流的連接信息和部分交換數(shù)據(jù),但是仍有一定的缺陷。
首先,pacp文件結(jié)構(gòu)如表2所示,每個pcap文件均有24字節(jié)的文件頭,文件頭格式如表3所示,magic為文件識別頭,magor version為主版本號,minor version為次要版本號,timezone為當?shù)氐臉藴蕰r間,sigflags為時間戳的精度,snaplen為最大的存儲長度,linktype為鏈路類型。通過對比分析,發(fā)現(xiàn)該部分的數(shù)據(jù)在分割后的pcap文件中基本一致,對后續(xù)的特征提取沒有任何幫助,反而占據(jù)了一定的數(shù)據(jù)量,因此本文從每個pcap文件的第25字節(jié)開始裁剪,減少無效信息干擾的同時還能包含更多的有效數(shù)據(jù)。

表2 pcap文件結(jié)構(gòu)

表3 pcap文件頭格式
其次,由于僅截取每個流1 024字節(jié)的數(shù)據(jù),截取出來的數(shù)據(jù)并不能完全代表相應(yīng)的數(shù)據(jù)流,仍然損失了大量的有用信息。通過分析僵尸網(wǎng)絡(luò)流量的特征,發(fā)現(xiàn)僵尸主機與控制服務(wù)器間傳輸?shù)臄?shù)據(jù),比如心跳包,數(shù)據(jù)格式相對固定;當僵尸主機進行DDOS攻擊時,發(fā)出的數(shù)據(jù)包具有高度的一致性,數(shù)據(jù)流間的相似度極高。作為對比,正常的數(shù)據(jù)流呈現(xiàn)出的特征相對混亂,與僵尸流量有明顯的差異,然而由于數(shù)據(jù)流被截取,這些特征很難完整體現(xiàn)出來。為了更好地表現(xiàn)數(shù)據(jù)流的特征,增強神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)效果,提高僵尸網(wǎng)絡(luò)的檢測準確率,本文從完整的數(shù)據(jù)流中人工提取了表4中的13種特征。

表4 數(shù)據(jù)流特征
提取的特征均為數(shù)據(jù)流的總體特征,可以表現(xiàn)出完整數(shù)據(jù)流的總體信息,將該部分數(shù)據(jù)(共52字節(jié))放在截取數(shù)據(jù)的頭部,再從數(shù)據(jù)包部分截取972字節(jié)數(shù)據(jù)組合成1 024字節(jié),長度不足使用0x00進行填充。然后將裁剪得到的數(shù)據(jù)轉(zhuǎn)化為32×32的二維灰度圖像。為了展示本文使用方法的科學(xué)性,選取部分正常流量和惡意流量轉(zhuǎn)化得到的灰度圖像進行對比,僅憑肉眼就能發(fā)現(xiàn)同種流量相似度很高,而不同流量間存在明顯的差異,如圖2所示。

圖2 不同流量的灰度圖像
LeNet-5是一種典型的卷積神經(jīng)網(wǎng)絡(luò)模型,在手寫數(shù)字識別等領(lǐng)域被廣泛應(yīng)用。本文卷積神經(jīng)網(wǎng)絡(luò)的架構(gòu)基于LeNet-5,并做了針對性的改進。
神經(jīng)網(wǎng)絡(luò)的輸入為處理后的數(shù)據(jù)流轉(zhuǎn)化得到的32×32的灰度圖像,輸出為流量分類結(jié)果,即正常流量和僵尸網(wǎng)絡(luò)流量,因此輸出層的神經(jīng)元為2個,使用softmax分類器。
卷積層C1:使用32個5×5的卷積核進行卷積操作,滑動步長為1,輸出32個28×28的特征面。特征面大小的計算公式:
(6)
式中:oMapN為輸入特征面大??;CWindow為卷積核大小;CInterval為滑動步長。本文采用ReLU作為激勵函數(shù),在使用激勵函數(shù)前增加批量歸一化層。
池化層S1:采用2×2的池化窗口,滑動步長為2,使用最大池化的方法進行池化操作。輸出為32個14×14的特征面。
卷積層C2:使用64個3×3的卷積核進行卷積操作,滑動步長為1,輸出64個12×12的特征面。采用ReLU作為激勵函數(shù),在使用激勵函數(shù)前增加批量歸一化層。
池化層S2:與上一層池化層使用相同的參數(shù),輸出64個6×6的特征面。
全連接層D1:由1 024個神經(jīng)元組成,與上一池化層全連接,輸出為1 024維向量。
全連接層D2(輸出層):由2個神經(jīng)元組成,與上一層全連接,輸出2維向量。
此外,使用L2正則化和dropout方法緩解過擬合,鑒于神經(jīng)網(wǎng)絡(luò)增加了批量歸一化層,可以使用較小的dropout,本文參數(shù)設(shè)置為0.2。為了加快模型訓(xùn)練,本文采用指數(shù)衰減的學(xué)習(xí)率,在訓(xùn)練初期使用較大的學(xué)習(xí)率,加速訓(xùn)練,逐步收斂后使用較小的學(xué)習(xí)率,便于得到最優(yōu)解。
實驗所用的計算機操作系統(tǒng)為Ubuntu 16.04,CPU為i5-6500,內(nèi)存16 GB,主頻3.2 GHz,開發(fā)環(huán)境為Python 3.6.9,使用Tensorflow 1.13.1框架進行卷積神經(jīng)網(wǎng)絡(luò)建模。
本文采用準確率(ACC)和誤報率(FPR)作為評估模型的指標。
(7)
(8)
式中:TP表示正例預(yù)測為正例的樣本數(shù);FP表示反例預(yù)測為正例的樣本數(shù);TN表示正例預(yù)測為反例的樣本數(shù);FN表示反例預(yù)測為反例的樣本數(shù)。
卷積神經(jīng)網(wǎng)絡(luò)的模型結(jié)構(gòu)比傳統(tǒng)機器學(xué)習(xí)模型更為復(fù)雜,參數(shù)的選擇對神經(jīng)網(wǎng)絡(luò)模型的優(yōu)劣有著重要影響。
本文對截取的流量大小、卷積核的大小、池化方法的選擇分別做了對比實驗,以選擇出最合適的參數(shù)構(gòu)建檢測模型。
從圖3可以看出,當截取流量的長度達到1 024字節(jié)后,模型的檢測準確率便不會有明顯提升,因此本文按照1 024字節(jié)截取數(shù)據(jù)流。

圖3 輸入數(shù)據(jù)大小對比
從表5可以看出,當使用最大池化,卷積層C1卷積核為5×5,卷積層C2卷積核為3×3時,檢測準確率最高,誤報率較低,因此本文采用此參數(shù)構(gòu)建神經(jīng)網(wǎng)絡(luò)。

表5 參數(shù)對比
本文從數(shù)據(jù)集處理和卷積神經(jīng)網(wǎng)絡(luò)構(gòu)建進行改進,因此做了3組實驗進行對比,即進行數(shù)據(jù)預(yù)處理未改進神經(jīng)網(wǎng)絡(luò)、改進神經(jīng)網(wǎng)絡(luò)不進行數(shù)據(jù)預(yù)處理、同時采用兩種方法。實驗結(jié)果如圖4、圖5所示。

圖4 ACC對比

圖5 FPR對比
可以看出,對數(shù)據(jù)集進行預(yù)處理后,增加的人工提取的特征有助于神經(jīng)網(wǎng)絡(luò)的特征學(xué)習(xí),從而提高了僵尸網(wǎng)絡(luò)的檢測準確率,降低了誤報率;而對神經(jīng)網(wǎng)絡(luò)進行改進后,可以使用較大的學(xué)習(xí)率和較小的dropout進行訓(xùn)練,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度得到了明顯的提升。將兩種方法結(jié)合后,訓(xùn)練速度較快,僵尸網(wǎng)絡(luò)的檢測準確率仍有一定提升。
本文提出了基于卷積神經(jīng)網(wǎng)絡(luò)的僵尸網(wǎng)絡(luò)檢測方法,實驗表明,通過數(shù)據(jù)預(yù)處理規(guī)范化神經(jīng)網(wǎng)絡(luò)的輸入,同時使用批量歸一化方法,可以提升神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度和泛化能力,提高檢測準確率。
然而數(shù)據(jù)預(yù)處理時讀取數(shù)據(jù)信息并進行計算,需要消耗大量的時間;人工提取特征需要較強的先驗知識,不僅增加了工作量,也限制了神經(jīng)網(wǎng)絡(luò)的泛化能力。后續(xù)需要選擇更優(yōu)的方法,比如使用合適的機器學(xué)習(xí)方法對數(shù)據(jù)集進行預(yù)學(xué)習(xí),更為準確地提取特征,以此來表現(xiàn)數(shù)據(jù)流的特點,從而增強檢驗算法的泛化能力,提高檢測準確率。