(四川大學網絡空間安全學院 四川 610041)
SDN(Software-Defined Networking,軟件定義網絡)是一種旨在使網絡更加靈活和易于管理的新型網絡架構,它將控制平面與數據平面進行解耦,控制平面負責全局控制與指令的下發,數據平面負責數據轉發與指令的執行,整個架構呈現出數控分離的特點。一個典型的SDN 架構通??梢苑譃閿祿矫?、控制平面和應用平面,數據平面由作為轉發設備的網絡交換機組成;控制平面包含一個或多個SDN控制器,在邏輯上集中管理網絡中的轉發設備;最上層的應用平面則由各種SDN 應用組成[1]。
DDoS(Distributed Denial of Service,分布式拒絕服務)是一種依靠分布式的攻擊源發起的、規模龐大的拒絕服務攻擊。其基本原理為:攻擊者通過攻擊手段入侵分布在不同位置的主機,并在其上安裝控制程序,使其成為傀儡機。發動攻擊時,攻擊者下發攻擊指令,指揮傀儡機向被攻擊的目標發送大量數據包,造成目標系統或網絡在一段時間內無法響應正常服務。DDoS 廣泛存在于傳統網絡中,是目前最常見也是危害最大的網絡攻擊手段之一[2]。隨著SDN的出現,DDoS攻擊也開始活躍在這一新型網絡架構下,并成為SDN 主要安全威脅。
目前針對SDN 架構下DDoS 攻擊的檢測已有一些現成的解決方案,肖甫等[3]提出了一種 SDN 架構下基于 K-近鄰算法(KNearestNeighbor,KNN)的DDoS 攻擊檢測方法,通過提取SDN 交換機中流表特征五元組,使用KNN 算法進行分類檢測,取得了較高的檢出率和較低的誤警率,但忽略了流表項增速的變化。王曉瑞等[4]提出一種基于BP 神經網絡的DDoS 攻擊檢測方法,通過實驗證明其具有較高的檢測準確率,但BP 神經網絡的權值參數進行了隨機初始化,容易陷入局部最優。劉俊杰等[5]提出一種SDN 架構下基于C4.5決策樹算法的DDoS 攻擊檢測方法,通過與SVM、KNN 算法作比較,在檢測準確率、誤報率和檢測時間上都有所改善,但同樣忽略了流表項增速的變化,同時檢測準確率上還可進一步提升。
針對以上文獻所提方法存在的特征選擇不全面以及檢測準確率不夠高兩方面的不足,本文提出一種SDN 架構下基于隨機森林的DDoS 攻擊檢測方法,通過選取流包數均值、流字節數均值、流表項增速、源IP 增速和端口增速組成特征五元組,采用隨機森林算法進行分類檢測。該方法相較于其他方法,在特征選擇方面綜合選取了SDN 架構下DDoS 攻擊檢測的典型特征。同時,隨機森林算法已經被許多理論和研究證明具有很高的預測精度,能較好地容忍異常值和噪聲點的存在,而且不容易出現過擬合[6]。
隨機森林(Random Forest)是一種集成學習方法,它將一組決策樹分類器進行組合,其中每棵決策樹都基于隨機向量的一個獨立集合的值產生[7],最終預測結果通過組合每棵決策樹的結果得到。隨機森林的基本原理是從訓練樣本中有放回地隨機抽取k個樣本,這種有放回的隨機抽樣也被稱為Bootstrap 重抽樣。針對這k個樣本,分別使用決策樹算法進行建模,生成k個決策樹模型。采用簡單多數投票法組合每個決策樹模型的分類結果,形成整個分類模型最終預測結果。
隨機森林分類器(Random Forest Classifier)作為一種組合分類模型,由一組決策樹分類模型{h(X,Θk)k=1,2,…}組成,其中{Θk}是獨立同分布的隨機向量。當自變量X給定時,使用簡單多數投票法從所有決策樹分類結果中挑選出最佳分類結果。
如圖1 所示,隨機森林分類器隨機劃分出k個不同的訓練集,以此來減少各個分類模型之間的相關性,同時提高組合分類器的泛化能力。針對這k個訓練集分別進行訓練,形成分類模型序列{h1(X),h2(X),…,hk(X)},然后將分類模型序列組合成一個多分類模型系統,系統最終的分類結果通過投票法得出,用一個公式表達如下:

其中,H(x)表示多分類模型系統,hi表示單棵決策樹分類模型,Y表示目標變量,I表示示性函數。該式說明,最終的分類結果通過多數投票決策的方式得出。
本文提出的基于隨機森林的DDoS 攻擊檢測方法主要分為三個功能模塊:流表收集模塊、特征提取模塊和攻擊檢測模塊。
2.2.1 流表收集模塊
流表收集模塊部署在SDN 控制器中,在支持OpenFlow 協議的典型SDN 架構下,流表信息的收集不需要額外的第三方設備,OpenFlow 交換機僅通過流表就能收集端口和流的統計信息[8]。在本文的實驗設計中,SDN 控制器通過向交換機周期性地發送ofp_flow_stats_request 報文來請求當前流的統計信息,交換機從流表中讀取相關的統計信息回復給控制器,完成流表信息的收集。

圖1 隨機森林算法模型
2.2.2 特征提取模塊
特征提取模塊的主要功能在于從流表收集模塊收集到的流表信息中提取出與DDoS 攻擊檢測相關的特征,用于攻擊檢測模塊進行模型訓練和分類檢測。本文選取的特征如下:
(1)流包數均值(Average of Packets per Flow,APF)
正常狀態和受到DDoS 攻擊時,每條流中包含的數據包數量是不一樣的。攻擊發生時,攻擊者通常會連續隨機地生成大量的數據包,流的生成速度加快,同時每個流中數據包的數量會減少。

其中PacketNumi是在指定周期內第i條流包含的數據包數,FlowNum是該周期內所有流的數目。
(2)流字節數均值(Average of Bytes per Flow,ABF)
很多DDoS 攻擊者都采用短流攻擊,這樣可以在短時間內形成大量數據包,因此選取每條流中的平均字節數作為檢測特征之一。

其中ByteNumi表示在指定周期區間內第i條流中包含的字節數。
(3)流表項增速(Flow table entries Growing Speed,FGS)
DDoS 攻擊發生時,針對目標主機的數據包會迅速增加。這些數據包來自攻擊者控制的分布式傀儡機,因此會造成關于目標主機的流表項生成速度加快,流表項數目大量增加。

其中FlowTableEntryNum表示在interval時間間隔內目標交換機生成的流表項的數目。
(4)源IP 增速(source IP Growing Speed,IGS)
當發生DDoS 攻擊時,大量不同來源的真實或偽造的IP 地址向同一個目標地址發送大量的數據包,因此源IP 地址的變化是DDoS攻擊發生時的一個重要特征。

其中sIPNum表示在時間間隔interval內源IP 地址的數量。
(5)端口增速(Port Growing Speed,PGS)
在正常狀態下,服務端口增速處于一個相對平穩的范圍,而DDoS 攻擊發生時,攻擊者會隨機生成端口進行連接,因此端口增速相較正常狀態會急劇上升。

其中PortNum表示在時間間隔interval內所有數據包中端口的數量。
2.2.3 攻擊檢測模塊
在獲取特征提取模塊傳來的特征樣本集之后,攻擊檢測模塊采用隨機森林算法對流量樣本進行訓練,并用訓練好的模型對新來的流量樣本進行分類。采用隨機森林算法進行流量分類的具體過程如下:
第1 步,采用Bootstrap 方法進行重抽樣,隨機產生N 個流量樣本訓練集S1,S2,…,SN;
第2 步,對N 個流量樣本訓練集使用決策樹進行建模,生成流量樣本決策樹C1,C2,…,CN。生成決策樹的過程中,為了保證隨機性,在每個非葉節點進行分裂的時候,都從D 個特征中隨機選擇d 個作為分裂特征集,并以分裂特征集d 中的最佳分裂特征對該節點進行分裂;
第3 步,每棵流量樣本決策樹都讓其自然生長,過程中不進行剪枝;
第4 步,使用上述流量樣本決策樹對測試集中的流量樣本Y 進行分類,相應的分類結果為:C1(Y),C2(Y),…,CN(Y);
第5 步,采用簡單多數投票法選出輸出結果最多的類作為測試樣本Y 的最終分類結果。
為了驗證本文提出算法的檢測效果,在Ubuntu 下使用SDN 仿真軟件mininet 搭建了如圖2 所示的實驗環境,其中net1 為DDoS 攻擊的目標網絡,net2 和net3 為發起DDoS 攻擊的傀儡機所在網絡。
本實驗中,正常流量和攻擊流量均通過Scapy 生成。Scapy 是一個數據包處理工具,可以偽造或解碼數據包。Scapy 已經集成為Python 的第三方庫,通過該庫編寫發包腳本,可以生成不同速率不同來源的數據包,從而模擬不同強度的DDoS 攻擊。

圖2 實驗網絡拓撲圖
在訓練樣本生成階段,為了生成正常流量,使用Scapy 生成正常速率的數據包發往net1,這些數據包的源IP 地址設為net2 和net3 中的IP 地址,目的是模擬net2 和net3 中的主機對net1 進行正常訪問。與此同時,通過控制器c0 從交換機s1 中提取生成的流表項。正常訪問的流表項收集完畢之后,使用Scapy 生成速率不同且大于正常訪問速率的TCP SYN 數據包發往net1,模擬針對net1 的SYN Flood 攻擊。這些數據包的源IP 地址既包括net2 和net3 中的IP 地址,又有隨機生成的IP 地址,目的是模擬DDoS 攻擊中攻擊者使用偽造的IP地址進行攻擊的情況。
通過訓練樣本生成階段共收集到15000 條流量記錄,其中正常流量6543 條,攻擊流量8457 條。作為對比,除了隨機森林算法之外,本文還選擇了決策樹、KNN 以及SVM 算法同時對以上數據進行訓練,并采用準確率、查準率、召回率三個指標進行比較分析,其中:
(1)準確率表示模型判斷正確的樣本數量占樣本總數的比例,即

(2)查準率表示模型判斷為攻擊流量的樣本中實際為攻擊流量樣本的比例,即

(3)召回率表示所有攻擊流量樣本中被模型正確判斷出來的比例,即

本文實驗按照DDoS 攻擊的強度分成三組進行,三組實驗使用的流量樣本如表1 所示:

表1 三組實驗所使用的流量樣本
3.2.1 準確率
圖3 展示了DDoS 攻擊強度分別為25%、50%、75%時四種分類算法的準確率,從圖中可以看出,隨著攻擊強度的提高,隨機森林算法的準確率逐步提升,最高時達到99.17%,始終高于其他三種分類算法。注意到攻擊強度從25%提高到50%時,決策樹算法和KNN 算法的分類準確率都有不同程度的下降,這與流量樣本中噪聲點的存在有關。但相同條件下隨機森林算法的準確率卻依然有所上升,充分說明隨機森林算法作為一種集成學習算法對異常值和噪聲具有很好的容忍度,體現了集成學習算法的優勢。

圖3 四種分類算法在不同DDoS 攻擊強度下的準確率
3.2.2 查準率
圖4 展示了不同DDoS 攻擊強度下各個分類算法查準率的變化,該指標反映的是模型對攻擊流量樣本判斷的準確性。從圖中可以看出,隨著攻擊強度的提高,除了SVM 在攻擊強度為50%時查準率降低了之外,其他算法的查準率都有所提升。其中隨機森林算法不論在何種攻擊強度下,查準率都好于其他算法,在攻擊強度最高時能達到99.69%,這說明在識別攻擊流量樣本的準確性方面,隨機森林的表現優于作為比較的其他算法。

圖4 四種分類算法在不同DDoS 攻擊強度下的查準率
3.2.3 召回率
圖5 展示了不同DDoS 攻擊強度下各個分類算法召回率的變化,該指標反映的是模型將所有攻擊流量樣本都檢測出來而不遺漏的能力。從圖中可以看出,隨著DDoS 攻擊強度的提高,各個算法的召回率都有所提升。雖然SVM 算法的召回率最高時達到了99.95%,但在攻擊強度較低時,其召回率是各個算法中最低的,說明該算法在不同攻擊強度下的召回率不夠穩定。而隨機森林算法在各個攻擊強度下都有著很高的召回率,綜合來看,隨機森林算法更符合本文要求。

圖5 四種分類算法在不同DDoS 攻擊強度下的召回率
本文提出了一種基于隨機森林的DDoS 攻擊檢測方法,通過提取SDN 交換機中的流表項特征,采用隨機森林算法進行訓練,從而構建DDoS 攻擊檢測模型。實驗證明,本文提出的基于隨機森林算法的DDoS 攻擊檢測在準確率、查準率和召回率三個指標上總體表現優于其他對比的算法。