朱 婧,伍忠東,丁龍斌,汪 洋
(蘭州交通大學 電子與信息工程學院,蘭州 730070)
DDoS攻擊是當今互聯網受到的主要威脅之一,給全球網絡體系帶來巨大的損失。例如,2016年,域名系統DNS的提供商Dyn遭到DDoS攻擊,造成大量的歐美用戶無法使用推特和亞馬遜等多個網站,2018年,GitHub在DDoS攻擊下一度出現癱瘓情況,使得客戶對GitHub網站的安全性產生質疑,同年,僅阿里云所監測到的云上DDoS攻擊就有近百萬次。由于DDoS攻擊易對軟件定義網絡(Software Defined Network,SDN)環境下的控制器造成嚴重損害,因此,如何高效、實時地檢測出DDoS攻擊,對SDN網絡架構的部署至關重要。目前,針對DDoS攻擊流量的檢測主要基于傳統網絡結構,而在SDN環境下檢測DDoS攻擊的研究仍處于初級階段,因此,在SDN環境下檢測DDoS攻擊具有廣闊的研究前景[1]。
由于將數據和控制平面進行分離是SDN邏輯集中控制網絡構架的核心要求,而OpenFlow是數據和控制平面間統一的開放式接口,因此SDN的特征表現為在擁有邏輯集中式控制平面的同時,借助統一且開放的南向接口來實現對網絡的控制[2]。雖然SDN相對于傳統的網絡架構優勢明顯,但其針對DDoS的攻擊檢測仍存在可靠性和安全性不高等問題。
近年來,研究人員針對SDN環境提出多種DDoS攻擊檢測方法。例如,文獻[3]采用BP神經網絡算法對訓練樣本進行分類,實現對DDoS攻擊的檢測,但BP神經網絡具有隨機初始化權值參數的特點,易陷入局部最優。文獻[4]采用傳統方法SVM分類器進行DDoS檢測,但存在檢測時間長、準確率低等問題。文獻[5]提出基于深度學習的DDoS攻擊檢測和防御方法,并將其代入OpenFlow的SDN環境中進行驗證。文獻[6]將POX作為控制器,但POX支持的協議相對較少。文獻[7]使用最大值熵估計法確定良性流量分布和進行SDN中的異常檢測,但其僅能解決小型辦公室和家庭網絡的問題。文獻[8-10]雖然對SDN環境下的安全問題提出了一些觀點和概述,但是大多與理論問題有關,并沒有實現實際應用。
本文提出一種在SDN環境下基于DBN的DDoS攻擊檢測算法。通過描述SDN的體系結構,分析控制器的結構特征以及受到DDoS攻擊的難易程度,闡明DDoS攻擊控制器的工作機制。通過Mininet模擬SDN的網絡拓撲結構,并使用Ryu控制器構建系統模型,采用Hyenae進行DDoS攻擊模擬,并借助TcpDump收集流量信息。
作為網絡黑客的主要攻擊手段,DDoS攻擊因其將多個計算機聯合作為攻擊目標,其攻擊效果相較于其他網絡攻擊成倍提升,因此,也被稱為洪水攻擊。
DDoS是由拒絕服務攻擊(DoS)衍生而來的,其利用TCP/IP協議的漏洞,以占用或耗盡目標主機系統內存資源為目標,通過操作僵尸網絡中的大量“僵尸機”來阻斷所在鏈路的帶寬,使得用戶的正常服務請求被無理由拒絕[11]。
SDN環境下的DDoS攻擊會對網絡的各個層面造成影響,主要包括以下3個方面[12-13]:
1)攻擊SDN控制器,使整個網絡失去控制層或者切換回傳統網絡的狀態。
2)攻擊SDN交換機,通過占滿交換機中的流表緩存,使交換機無法正常轉發數據。
3)攻擊網絡主機,從而大量消耗目標系統的網絡資源。
本文采用OpenFlow交換機應對上述3種攻擊形式,該交換機主要由流表、安全信道和OpenFlow協議組成,位于數據交換平面內。OpenFlow交換機的主要功能是通過流表實現報文的匹配與轉發,類似于路由器中的路由表以及交換機中的轉發表。因此,流表是OpenFlow交換機的核心,若數據包與流表匹配成功,則直接輸出結果,否則,交換機就會發出請求,驅動控制器進行處理[14]。圖1給出數據包與流表匹配的流程,可以看出,未能匹配的數據包都將被發送到控制器中。

圖1 數據包與流表的匹配流程
針對SDN環境下基于DBN的DDoS攻擊檢測,其模型如圖2所示。其中,數據訓練模塊主要采取DBN深度信念網絡方法,對提取到的特征值等參數進行訓練。基于DBN的攻擊檢測模型主要包括異常檢測模塊、流量特征提取模塊和DDoS攻擊檢測模塊3個部分,具體分析如下:
1)異常檢測模塊的主要功能是計算熵值偏差,當偏差值大于閾值時則視為異常,需進一步判斷是否發生DDoS攻擊。
2)流量特征提取模塊的主要功能是提取與分布式拒絕服務攻擊相關的特征值,即在流表收集模塊中收集的流量值。
3)攻擊檢測模塊的主要功能是在檢測到存在攻擊跡象時,Ryu控制器對其進行處理并在交換機中執行相應指令。

圖2 基于DBN的DDoS入侵檢測模型
由于進入網絡的流量是隨機選擇的,而熵可以用來測定隨機性,因此本文通過熵的概念來檢測DDoS攻擊。
在使用信息熵檢測流量時,主要檢測Window(窗口)的大小和閾值。Window的大小是根據時間段的不同或者數據包的個數來確定的。如果需要測量數據包中的隨機程度,則要在所設置的Window中計算流量信息熵。因此,本文還需找出一個閾值,通過它來判斷流量是否異常,其判斷依據為,如果通過計算得出的信息熵小于閾值,則該流量是異常流量。信息熵值計算公式如下:
(1)
其中,N表示一個窗口的大小,即Window內所含有數據包的個數,pi表示概率,即Window中每個目的IP地址的數據包發生的概率。如果每個IP地址僅出現一次,此時的信息熵即為最大值。由于分布式拒絕服務攻擊的被攻擊者在多數情況下有且只有一個,當大量的數據包被發送到被攻擊者處時,目的IP地址的信息熵將降為最小值。
本文預先設定好實驗閾值,規定Window為50個數據包,每次實驗連續測試5個Window。假設在實驗中,出現連續5個Window的信息熵下降到小于閾值的情況,則說明目前網絡的流量異常,異常警告由Warning發出。其中,規定5個連續Window是為了避免實驗結果的偶然性,降低誤報率,以防被意外的事件所干擾。
由于正常網絡操作也會出現信息熵值小于正常信息熵值的情況,因此僅憑信息熵計算的方法并不能完全確定目前網絡中有無DDoS攻擊發生。因此,當異常檢測模塊檢測到模型中的異常流量時,需根據發送的Warning調用流量特征提取模塊所提取的流量特征來辨別。
本文采用以下5個特征值來描述SDN中的DDoS攻擊行為[15]:
1)流包數均值APF,其表達式如下:
(2)
2)流包速率PTR,其表達式如下:
(3)
3)流表項速率FER,其表達式如下:
FFER=Nflow/T
(4)
4)單流表項比例SFP,其表達式如下:
SSFP=Nflows/Nflow
(5)
5)協議熵PS,其表達式如下:
(6)
在本文中,攻擊檢測模塊DBN的網絡結構共分為5層[16],訓練過程主要包括以下2個步驟:
1)3個RBM堆疊,分別對每一層RBM神經網絡單獨進行無監督訓練,使得輸入參量在映射到其他特征空間時,可以盡可能多地保留特征向量的特征信息。
2)在網絡的最后一層設置隨機森林分類器,以進一步進行有監督訓練,即將上一層收到的受限玻爾茲曼機的輸出特征向量看作新的輸入特征向量。
網絡輸入層和輸出層的節點個數由DBN網絡結構模型決定,其模型如圖3所示。

圖3 本文DBN網絡結構模型
本實驗選用sigmoid函數作為激活函數,通過Python實現。經多次仿真得出,當輸入節點數為5(特征維數為5)、輸出節點為2(0表示正常狀態,1表示攻擊狀態)時仿真效果最佳。其中,sigmoid函數表達式如下:
(7)
本文實驗平臺為Ubantu16.04、Python3.6.4,Ryu控制器及OpenVSwitch交換機,通過Mininet對SDN網絡進行仿真[17]。
本文使用KDD Cup 99數據集來訓練檢測模型,而建立KDD99數據集的目的是為入侵檢測系統提供統一的性能評價基準,該數據集已被廣泛應用于網絡入侵檢測方法的研究和評估[18-19]。本文所用的仿真數據集參考文獻[20],具體如表1所示。

表1 仿真數據集信息
本文使用的數據集均為pcap文件,需對其進行預處理,在Linux環境下通過tshark(需要安裝 wireshark 軟件)命令把每條數據包的載荷去掉,只提取關鍵字段,比如數據包的幀ID、時間戳、協議類型、源IP、目的IP、源端口以及目的端口等。
在Ubuntu中使用命令mn啟動網絡拓撲,然后在Mininet中模擬SDN環境,如圖4所示。其中,主機h1~h3為第1個網段,主機h4~h11為第2個網段,h12~h14為第3個網段,h15~h17為第4個網段,s1~s6為交換機,c0為控制器。輸入dump命令可以查看該仿真網絡拓撲結構的具體信息。
將基于DBN得到的結果與其他3種算法(即隨機森林RF、SVM和XGBoost)進行比較,其評價標準包括準確性AACC、誤報率FFPR和算法運行時間,具體表達式如下:
(8)
(9)
其中,NTP表示被正確標記的正常測試樣本數,NFP表示被錯誤標記的正常測試樣本數,NTN表示被正確標記的攻擊測試樣本數,NFN表示被錯誤標記的攻擊測試樣本數。4種算法的攻擊檢測結果對比如表2所示。

表2 4種算法的攻擊檢測結果對比
表2數據是由500 000條數據進行實驗后獲得的,通過對比發現,DBN算法的測試準確率約為98.65%,而SVM、隨機森林和XGBoost的準確率分別為97.42%、96.58%和96.08%,低于DBN算法,即本文DBN算法準確性較高。與此同時,DBN的誤報率較低。
在運行時間方面,DBN算法優于SVM和XGBoost,但比隨機森林差。這是因為隨機森林在構建決策樹時僅僅使用了概率分布的信息,不需要進行數據標量間的計算,計算復雜度較低。XGBoost需要若干弱分類器依次迭代運行,計算時間較長,SVM需要將數據在更高維空間計算距離,計算復雜度較高,DBN算法只需要對數據進行線性映射和吉布斯采樣,運算復雜度比SVM要小。
圖5為50 000條、100 000條、200 000條和500 000條數據時4種算法的檢測準確率對比。可以看出,DBN算法的測試準確率最高,且隨著數據量的增大,DBN算法的檢測準確率提升幅度變大。

圖5 4種算法的檢測準確率對比
圖6給出4種算法的誤報率對比。可以看出,隨著數據集樣本數的增多,本文DBN算法的誤報率降低,且相比其他算法,其誤報率是最低的。

圖6 4種算法的誤報率對比
綜上所述,本文構建的基于DBN的DDoS攻擊檢測算法的綜合性能較好。
本文提出一種在SDN環境下基于DBN的DDoS攻擊檢測算法。通過分析DDoS攻擊的特點,提取OpenFlow交換機上的流表項特征,構建DDoS攻擊檢測模型。在此基礎上,利用數據集進行訓練和驗證,以實現DDoS攻擊檢測。實驗結果表明,與XGBoost、隨機森林和SVM算法相比,該算法的攻擊檢測準確性較高,而誤報率較低。將本文攻擊檢測算法應用到較大規模的網絡場景中進行驗證是下一步的研究方向。