張 龍 王勁松
(天津理工大學計算機科學與工程學院 天津 300384) (計算機病毒防治技術國家工程實驗室(天津理工大學) 天津 300457) (天津市智能計算及軟件新技術重點實驗室(天津理工大學) 天津 300384)
分布式拒絕服務攻擊(distributed denial of service, DDoS)一直以來都是互聯網的主要威脅之一[1-4].DDoS攻擊者通過掃描網絡,發現存在漏洞的主機,并將這些存在漏洞的主機作為傀儡機向目標服務器發送大量請求數據包,導致目標主機喪失服務功能,致使網絡故障.分布式拒絕服務攻擊種類繁多,比較常見的有利用UDP進行的分布式反射拒絕服務攻擊、利用TCP三次握手過程進行攻擊的SYN Flood攻擊等[5].現如今網絡多采用分布式架構,這種網絡架構構建之初是為了體現其高擴展性的分布式結構,但是也導致了很多安全漏洞的出現[6].軟件定義網絡(software defined networking, SDN)作為新興的網絡架構,已經逐步流行并被廣泛研究,被認為是網絡發展的方向[7],因此,關于防止SDN網絡中的DDoS攻擊對于SDN網絡安全是十分重要的[8].
SDN是網絡虛擬化的一種實現方式,它將網絡的控制層和數據層分離,達到“軟件管理網絡”的目的.SDN網絡的控制層能夠集中控制整個網絡的信息,控制器中開放了多個編程接口,便于網絡管理人員管理網絡.SDN網絡集中控制的特點使控制器成為DDoS攻擊者的主要攻擊目標[9].當攻擊者向SDN網絡發起DDoS攻擊時,為了通過網絡安全設備,會偽裝源IP地址,交換機持續收到大量的數據包,這些數據包并不在原流表中.控制器不斷收到來自交換機的轉發數據包,成為被攻擊對象.當控制器的資源被耗盡時,整個SDN網絡陷入癱瘓.因此及時檢測并終止SDN網絡中的DDoS攻擊流量成為現在的研究熱點,但是如何及時發現異常流量,精準識別異常流量成為當前研究的難點[10].
為防御DDoS攻擊,如何發現網絡中的異常流量是主要的研究方法.大多數情況下,攻擊者將異常流量偽裝成正常流量,因此很難甄別.基于信息熵的檢測方法與基于機器學習的檢測方法就是眾多檢測方法中的兩種,但這2種檢測方法都存在缺陷.基于信息熵的檢測算法檢測速度快,并不需要構建較多的流量特征,但是相較于基于機器學習的算法存在準確率較低且誤報率較高的缺點.基于機器學習的DDoS流量識別方法具有較高的準確率,但是檢測過程中需要手動構建較多的流量特征,影響檢測速度.因此如何找到一個模型方法,其既能夠具有異常流量的高識別率,又有對高速流量的反應能力和檢測效率,成為研究的難點與挑戰.
深度學習算法的出現解決了機器學習的局限性.深度學習的過程就是使用多個處理層對數據進行高層抽象,得到多重非線性變換函數的過程.深度神經網絡(deep neural network, DNN)在圖像識別、語音識別等領域取得了很好的效果.與傳統的機器學習相比,深度神經網絡通過多層的非線性變換,組合低層特征形成更加抽象的高層表示,使得一個學習系統能夠不依賴人工的特征選擇,發現數據的分布式特征表示,并學習到復雜的表達函數[11].隨著GPU技術以及多種深度學習平臺的不斷發展,使得深度神經網絡能夠快速處理海量數據的分類工作[12-13].因此,基于深度神經網絡識別DDoS異常流量,不需要手動設計過多的流量特征,同時具有更高的檢測準確率與更快的檢測時間.但是在實際應用中,由于SDN網絡中流量巨大,將全部流量進行檢測耗費巨大的計算資源,并且對檢測的實時性造成影響.
因此,綜合之前的研究與學習,本文創新性地提出了一種基于信息熵與DNN的DDoS檢測模型.該模型包括了基于信息熵的初檢模塊和基于DNN的檢測模塊.該檢測模型汲取了信息熵和DNN算法的優點,在初檢模塊發現流量異常之后再進行精度測量.該模型彌補了基于信息熵的檢測算法識別率低、誤報率高的缺點;也縮短了基于DNN算法的檢測時間,降低了資源占用率,不僅可以提高檢測的準確度,還可以縮短檢測的處理時間,節省了DNN算法對資源使用頻率.
本文的主要貢獻有3個方面:
1) 提出了一個SDN中檢測DDoS攻擊的模型,該模型包括基于信息熵的初檢模塊和基于DNN檢測模塊,結合2種方法的優點,提高模型識別率、準確率,降低模型誤報率,加快檢測速率,減少計算資源占用率.
2) 利用OpenFlow協議字段、手工提取等方法構造出了19維特征向量,作為DNN模型的輸入.經過訓練與測試,該模型識別DDoS流量的準確率高于傳統機器學習方法,并具有更低的誤報率.

DDoS攻擊發展至今已經成為當今互聯網的重大安全威脅[14].網絡技術不斷發展,各種新型網絡架構的出現與智能設備的普及,使得DDoS的攻擊方法呈現出多發性的發展趨勢[15].隨著網絡科技的進步,DDoS攻擊者也開始利用新的網絡設備或網絡架構發起攻擊.近年來SDN網絡成為研究人員與網絡服務供應商的研究熱點,而SDN中的DDoS攻擊問題是其中的研究熱點之一[16-17].
Fonseca等人[18]提出了一種設立備用控制器的方法,當SDN網絡遭受到DDoS攻擊時,交換機斷開與控制器的連接,連接到其他備用控制器上.該方法能夠暫時緩解DDoS攻擊帶來的危害,但不能從根本上防止DDoS攻擊.一旦備用控制器也都遭到攻擊,整個SDN網絡將失去控制.Kim等人[19]提出了一種基于流量閾值預測攻擊的方法.該方法通過提取NetFlow流數據構造流量特征,并通過檢測函數來計算流量特征并設計閾值.然而,這種方法需要處理預先收集的數據流量,并且需要大量的前期準備工作.此外,測試的成功與否與研究人員的實際經驗密切相關.
Giseop等人[20]提出了一種快速熵計算方法發現流量中的DDoS攻擊,通過統計網絡流量計算一段時間內的熵值,若熵值超過閾值則認定網絡中發生了DDoS攻擊.該方法成功地提高了檢測速度,但未能顯著提高檢測準確率,且算法具有較高的誤報率.Jun等人[21]提出了一種基于流熵和包采樣的大型網絡檢測機制.該方法提高了檢測的準確率并降低了誤報率,但它根據相關經驗設置了閾值,增加了人為因素的影響.Kalkan等人[22]提出了一個統計解決方案來檢測SDN網絡中的DDoS攻擊,該方法提取流量特征,生成特征矩陣,通過流量特征之間的不同組合計算聯合熵發現流量中的異常流量.該方法與以往基于熵的檢測算法相比有了很大的改進,檢測范圍與檢測準確率都有了很大的提升,但是該方法需要較長周期的準備與統計,計算較為復雜,可擴展性差,實時性不高.Kumar等人[23]提出了一種基于熵的SDN網絡中TCP SYN泛洪攻擊的早期檢測技術.該技術基于流量特征,通過計算一個基于時間的數據包窗口序列內的流量特征的熵值,來測量在SDN控制器接收的數據包的隨機性程度.并與該實例下的閾值(自適應)進行進一步比較,該方法能夠對攻擊進行早期檢測.但是,該方法假設只有一個目標節點,不具有普遍性,而且該方法只針對TCP SYN Flood攻擊.通過以上的研究可知,在SDN中,現有的基于信息熵的DDoS檢測方法很難兼具高準確率與高檢測速率.
Chen等人[24]提出了一種基于SGBoost的DDoS流量檢測算法,該方法使用SGBoost分類器對KDD 99數據集進行測試,測試結果表明該方法具有檢測準確率高和檢測速度快等特點.但是該方法用于其他實驗環境數據的檢測效果未可知.Yang等人[25]利用支持向量機(support vector machines, SVM)的方法檢測SDN中的DDoS流量.該方法同樣對KDD 99數據集進行測試,測試結果表明了該方法的有效性.該方法也面臨實際檢測效果未知的問題.同時文獻[24]與文獻[25]提出的方法都需要手動構建大量特征,影響檢測效率.Tang等人[26]提出了一種基于深度學習的SDN中異常流量檢測方法,該方法設計流量特征,利用深度學習算法檢測SDN網絡中的異常流量,較之前的機器學習方法在準確率上有所提高.但是檢測效率卻不高,當流量巨大時,正常流量的檢測會消耗深度學習硬件的資源,增長計算時間.
通過以上的研究發現,基于信息熵的檢測算法中存在諸多問題:閾值的確定往往會帶來識別率與誤報率的矛盾、計算復雜度高、可擴展性差、檢測速率不高以及數據統計周期較長.基于機器學習的檢測算法中同樣也存在檢測速率低、CPU占用率高、未使用實際數據驗證等問題.深度學習的算法準確率高,誤報率低,但是當網絡流量過大時會影響檢測時間,占用計算資源.本文針對上述研究方法中出現的問題,提出了一種基于信息熵與深度學習的檢測模型.該模型綜合以前的基于信息熵的檢測方法和機器學習檢測方法,利用信息熵的方法對流量進行初步檢測,再利用DNN對疑似問題流量進行精度檢測.該方法與傳統的基于信息熵和基于機器學習的方法相比具有更高的檢測準確率、更低的誤報率以及更高的檢測效率.
本文的檢測模型部署在SDN網絡中的控制器中,該模型包括2個主要部分:基于信息熵的異常初檢模塊和基于DNN的DDoS流量檢測模塊,如圖1所示:

Fig. 1 Detection model structure based on information entropy and DNN圖1 基于信息熵與DNN的檢測模型結構
在SDN網絡中,每當交換機收到一個新的數據包,控制器就會更新該交換機的流表項,當SDN網絡遭到攻擊時,控制器會收到來自交換機大量的數據包,致使控制器中斷服務,網絡癱瘓.異常初檢模塊通過收集SDN控制器中packet_in數據包,計算固定間隔數據包窗口數內數據特征的熵值,并與設定的閾值進行對比,一旦不在正常范圍內,則認定該流量為疑似異常流量,將所有流量進行基于DNN的異常檢測.基于DNN的DDoS流量檢測模塊通過交換機流表項提取所需特征,進行進一步的檢測,以確認網絡中是否發生DDoS攻擊,如果發生攻擊則發出警告,通知網絡管理人員做進一步的處理.
熵(entropy)也被稱作信息熵,是反映隨機變量取值不確定性的程度.當隨機變量取值越是隨機時,信息熵值就越高,當隨機變量取值越一致時,信息熵值就越低[27].
我們用香農公式來計算樣本熵值:
(1)

由于網絡流量的自相似性,我們考量數據包特征樣本的稀疏與密集程度只與樣本的個數有關,熵值的大小只由樣本數據的異同情況決定,例如2個相同數目的樣本序列X和Y,X是一個在30 s內收集的樣本序列,Y是一個在45 s內收集的樣本序列,但是2個樣本序列的熵值相同,那么我們就認為X和Y具有相同的分布稀疏程度[28].
在實驗中,將SDN控制器的packet_in數據包作為單元數據包.我們定義固定的包數間隔為一個包單元數據包(packetbin),即把連續的數據包按特定包數劃分成一個個包單元(bin).我們用packetbin中的某些特征序列值作為樣本數據,并計算該特征序列樣本數據的熵值.我們選取了能夠反映當前網絡狀態的2個最主要特征:源IP地址和目的IP地址.每個packetbin中包數W大小的選擇控制著樣本特征在短時間內的變化情況,如果W值過大會導致熵值變化不明顯從而降低檢測的準確度.原則上,W的選擇與實驗網絡的負載相關,在本實驗環境的SDN網絡里,根據主機數目與流量情況,經過測量分析,發現W=100時對于我們所用的數據是一個很好的折中.在計算熵時,也就是式(1)中的S=W=100,我們計算第1個連續的W個數據包中源IP地址和目的IP地址的信息熵值,然后移動到下一個相鄰的W個包計算相應的熵值.我們得到一個基于信息熵異常流量分析指標,如表1所示:
Table 1 Abnormal Flow Analysis Index Based on Information Entropy

表1 基于信息熵的異常流量分析指標
我們設定了實驗閾值T,如果當指標中的信息熵不在閾值范圍內時,我們則認為SDN網絡中發生了某些異常,發出警告,并將此刻開始啟動基于深度學習的DDoS流量檢測模塊對SDN網絡中的流量進行檢測,發現DDoS攻擊并發出警告.與其他的基于熵的方法不同,我們并不設置置信區間,因為我們并不將其作為判斷網絡中是否發生DDoS的標準,只是將其作為初檢方法,因為單純的基于熵值的檢測方法具有局限性,如閾值如何確定會影響整個算法的準確度,這種方法往往會造成較高的誤報率.在我們的初檢模型里,閾值被設定為一個較為寬泛的范圍,該方法具有較高的檢測識別率,但是卻具有較高的誤報率,作為初檢方法,只要求其具有較高的識別率.
基于信息熵的異常初檢模塊對網絡中的流量進行了異常初檢,將產生的疑似異常流量輸入到深度學習模塊進行進一步的處理,這樣既完成了異常流量的檢測,也減緩了深度學習模塊所需要資源的壓力.
傳統的機器學習算法里,如何選取特征會影響整個算法的成功與否.選擇好的特征能夠提升算法的準確率.但是過多的特征設計會增加算法的復雜度,人工篩選特征的過程會影響模型的檢測速度.DNN模型能夠自動逐層提取特征,對提取的特征進行權值分配,以達到最好的效果.
在實驗的DNN模型里,我們直接提取了OpenFlow流表中的部分字段作為第1層的特征輸入.除了在流表中能夠直接提取的特征外,我們手動設計了2個特征,這些特征同樣作為深度學習網絡的輸入.深度學習模型的輸入特征如表2所示.
我們手動提取的2個特征是平均數據分組數和平均數據分組位數.其中,平均數據分組數n_packets_ave是分組的包數(n_packets)除以流持續時間(duration),即每秒數據分組包數:

(2)
平均數據分組位數(n_bytes_ave)是分組的位數(n_bytes)除以流持續時間(duration),即每秒數據分組位數:

(3)
綜上所述,我們根據流表信息構造了深度學習檢測模型的19維的特征輸入,這些特征都可在流表項中直接讀取,其中手動構建的特征也較易獲得.我們將這19維特征向量都作為深度學習檢測模型的輸入,以識別DDoS異常流量.

Table 2 DNN Feature Description表2 DNN模型輸入特征
深度神經網絡DNN是指深度神經網絡算法,是一個包括一個輸入層、多個隱含層以及一個輸出層的全連接深度神經網絡[29].圖2描述了一個具有5維向量輸入、7維向量輸出并具有L-1層隱含層的DNN網絡模型.

Fig. 2 A DNN model with 5 inputs and 7 outputs圖2 DNN模型圖
在DNN網絡中,每一層都包含了權重向量W和偏移矢量b,我們計算第h層的輸出lh,
lh=tanh(bh+whlh-1),
(4)
其中,bh是偏移矢量,wh是權重矩陣,非線性函數我們使用的是tanh函數.頂層輸出lμ與監督的目標輸出y組合成損失函數ω(lμ,y).輸出層的線性回歸函數為
(5)


(6)
其在(x,y)對上的期望值最小化.訓練時,利用反向傳播(back propagation)算法與梯度下降(gradient descent)算法,根據每個神經元的輸出誤差值,對權重值和偏移量進行調整.當代價函數輸出最小時,達到最佳結果.
輸出函數選擇softmax函數并定義交叉熵誤差函數:
(7)
其中,N為單元數量.通過從w得到相對于每個權重wk的代價函數F(w)來獲得F(w)的梯度,其定義為

(8)
即
wh+1=wh-τhθh,
(9)
其中,τh稱為學習效率[30].最后,根據式(7)~(9),使用相應的隨機梯度下降算法使得代價函數最小化,最后我們將得到最佳的權重值.
實驗使用了包括輸入層、輸出層和10個隱藏層的DNN結構,在隱含層使用雙曲正切tanh函數進行非線性處理,在輸出層進行現行激活,經過多批次的梯度下降訓練,得到最后的檢測模型.
本文利用mininet構建了一個SDN網絡,其中控制器使用了基于JAVA的開源控制器Floodlight,操作系統為Ubuntu16.04.其中深度學習模塊是基于Tensorflow框架進行開發.開發的硬件環境是48核的CPU服務器,操作系統環境為Ubuntu16.04.實驗前,我們利用scapy工具向mininet虛擬網絡中注入流量,模仿DDoS攻擊.Mininet創建的網絡拓撲如圖3所示.SDN網絡由10臺交換機組成,每臺交換機連接10臺主機,選取其中2臺主機作為DDoS攻擊源,向SDN網絡發起攻擊.

Fig. 3 Experimental Topology圖3 實驗拓撲結構
實驗通過識別率(detection rate,DR)、準確率(accuracy,ACC)和誤報率(false alarm rate,FAR)三個指標作為評估模型的標準.
識別率(DR)是被正確識別出的DDoS攻擊流量與樣本中所有DDoS攻擊流量的比率:

(10)
準確率(ACC)是正確識別正常流和異常流占總數據集的比率:

(11)
誤報率(FAR)是指被模型誤識別為DDoS攻擊流量的正常流量與測試集中所有正常流量的比率.誤報率越低代表模型的分類效果越好:

(12)
其中,真正率(true positive,TP)指DDoS異常流量流量被模型識別出的比率,真負率(false positive,FP)指正常流量被錯誤識別為DDoS流量的比率;假正率(true negative,TN)指正常流量被正確識別的比率;假負率(false negative,FN)指DDoS流量被錯誤識別為正常流量的比率[31].
在基于信息熵的異常初檢模塊中,我們提出了基于信息熵的異常流量分析指標,通過計算每個特征向量在若干個窗口內的熵值,根據熵值是否超過閾值來判斷網絡中是否發生了異常.首先采集交換機中正常網絡流量的packet-in數據包,讀取數據包中源IP地址、目的IP地址,再計算每個窗口即100個數據包內的特征熵值.SDN網絡受到DDoS攻擊時,收集10萬條數據流量,解析源IP地址與目的IP地址,并求出信息熵值.對比如圖4、圖5所示:

Fig. 4 Comparison of source IP address entropy of normal traffic and DDoS traffic圖4 正常流量以及DDoS異常流量源IP地址信息熵的變化

Fig. 5 Comparison of destination IP address entropy of normal traffic and DDoS traffic圖5 正常流量以及DDoS異常流量目的IP地址信息熵的變化
由圖4、圖5可以看出,當SDN網絡中發生DDoS攻擊時,特征信息熵值出現了明顯的變化,特征向量值都有明顯的下降,并且變化范圍小.基于信息熵的初檢模塊目的是能夠識別網絡中的異常流量,因此一定要有很高的識別率,但是由于只是初檢模塊,所以并不要求它有很低的誤報率.根據以上原則,分析實驗數據,我們得出了特征熵值的閾值,如表3所示:

Table 3 Threshold Entropy表3 特征熵值閾值
由實驗數據分析可知,當源IP地址信息熵值閾值設定為2.519 2時,異常流量識別的識別率為100%,誤報率為42.769%;當目的IP地址信息熵閾值設為2.555 7時,異常流量識別識別率為100%,誤報率為39.231%.當2個特征熵值之一超過規定閾值時,我們則認為網絡中發生了異常.
為了證明閾值的有效性,我們再次模擬DDoS攻擊并采集數據,做標記以區別正常流量與異常流量.將正常流量與異常流量混合,進行基于信息熵的異常檢測.如果當某一特征的信息熵值低于閾值,則標記為異常流量,最后將標記結果與初始標簽作對比,計算算法的識別率與誤報率.實驗結果如表4所示:
Table 4Recognition Rate and False Alarm Rate Based onEntropy Anomaly Detection Algorithm
表4 基于信息熵異常檢測算法的識別率與誤報率%

由實驗結果可知,基于信息熵的異常流量檢測方法具有極高的識別率,證明該方法能夠有效地識別DDoS攻擊流量,雖然其具有較高的誤報率,但是這并不影響其作為初檢方法的有效性.
實驗的數據集是我們采集的SDN網絡中的真實流量.我們總共采集了12萬條流量數據,其中正常流量7萬條,DDoS攻擊流量5萬條.其中將79 970條數據作為訓練數據集,40 030條數據作為測試集.如表5所示:

Table 5 Description of the Dataset表5 流特征數據集
DNN模型的隱含層數的選擇會影響模型對DDoS流量識別的準確率.選擇具有多少層的DNN作為檢測模型是十分關鍵的.因此,我們分別構建了隱含層數分別為5層、10層、20層、50層和100層這5種DNN模型.在實驗中,我們采用相同的數據集對這5種DNN模型分別進行1 000次的迭代實驗,通過準確率(ACC)來評估每個模型的性能.表6顯示了5種不同結構的DNN模型在相同的訓練集下訓練1 000輪后,使用相同測試集測試后的結果對比.

Table 6 Accuracy Rate of DNN Models with Different Structures表6 不同結構DNN模型的識別準確率
由表6結果可知,DNN模型并非層數越多訓練結果越好,過多的隱藏層數甚至會造成識別結果準確率的下降.因此實驗模型選擇10層的DNN模型.
使用我們采集的實際流量數據集,分別與文獻[24]中的XGBoost模型和文獻[25]中的SVM模型進行對比實驗,同時進行對比的還有傳統機器學習算法K-近鄰(KNN)模型.結果如表7所示.
從表7可以看出,本文實驗使用的DNN模型在檢測率、準確率和誤報率的指標上均好于傳統的機器學習檢測方法,并且DNN深度模型的檢測準確率可達到97.87%,并且誤報率有明顯的下降.從實驗結果可以看出,我們提出的基于深度學習的DDoS流量檢測模型優于傳統的機器學習所構造的模型.

Table 7 Performance Evaluations Comparison of Other Models and DNN Models表7 不同機器學習模型與DNN模型的評估指標 %
同時,我們進行了2組對比實驗,利用實驗數據集使用DNN模型進行DDoS流量的檢測.第1組實驗直接使用OpenFlow字段直接提取的17個特征字段作為模型輸入;第2組實驗除了直接提取17個特征字段外,實時手動構建2個特征“平均數據分組數”和“平均數據分組比特數”,將這19個特征作為模型輸入,同時計算2個不同流量特征輸入下的異常流量準確率與耗時.結果如表8所示:

Table 8 Comparison of Accuracy Rate and Time Cost of DNN Detection Model with Different Input Features表8 不同輸入下DNN檢測模型的準確率與耗時對比
由表8可知,加入了2個手動構建的特征后,模型識別的準確率上升了0.75%,而模型耗時只增加了0.03 s.由此證明了手動構造特征的有效性.
此外,我們還進行了2次對比試驗,對相同的流量數據,第1次只使用基于深度學習的檢測模塊對流量進行檢測,而第2次試驗利用基于信息熵的初檢模塊進行初檢和基于深度學習的檢測模塊進行檢測.結果如表9所示:

Table 9 Comparison of Two Structures With and Without Entropy表9 是否具有信息熵初檢模塊的影響對比
從檢測準確率看出,2種方法對于異常流量識別都具有較高的準確率,都達到了97%以上,都具有良好的識別效果.但是基于信息熵和深度學習的檢測方法節省了CPU使用率,并且減少了處理時間.基于信息熵的初檢方法屬于輕量級的計算,其對計算資源的占用率并不高,而且具有更快的處理速度.
通過調整DNN層數、手動設計輸入特征等手段,得到了適用于該實驗環境最佳的DNN檢測模型.同時,與之前的研究方法進行了對比試驗,結果表明:基于信息熵和深度學習的檢測模型對于識別流量中的DDoS流量具有很高的準確率,更少地占用計算資源和更快的處理速度.
本文提出了一種基于信息熵與DNN的DDoS攻擊檢測模型,并提出了用于計算信息熵的異常流量分析指標和用于DNN模型的19維流量表特征向量.基于信息熵的初檢模型能夠有效地識別異常流量,DNN檢測模塊對流量進行確認.該模型不僅解決了基于信息熵的檢測方法精度不高的問題,還緩解了深度學習方法檢測時間長、占用計算資源等問題.實驗表明,該方法能夠有效識別DDoS異常流量,為網絡管理員提供有效的信息,為SDN的網絡安全提供了有效的保障.