(四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 四川 610041)
SDN(Software-Defined Networking,軟件定義網(wǎng)絡(luò))是一種旨在使網(wǎng)絡(luò)更加靈活和易于管理的新型網(wǎng)絡(luò)架構(gòu),它將控制平面與數(shù)據(jù)平面進(jìn)行解耦,控制平面負(fù)責(zé)全局控制與指令的下發(fā),數(shù)據(jù)平面負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā)與指令的執(zhí)行,整個(gè)架構(gòu)呈現(xiàn)出數(shù)控分離的特點(diǎn)。一個(gè)典型的SDN 架構(gòu)通??梢苑譃閿?shù)據(jù)平面、控制平面和應(yīng)用平面,數(shù)據(jù)平面由作為轉(zhuǎn)發(fā)設(shè)備的網(wǎng)絡(luò)交換機(jī)組成;控制平面包含一個(gè)或多個(gè)SDN控制器,在邏輯上集中管理網(wǎng)絡(luò)中的轉(zhuǎn)發(fā)設(shè)備;最上層的應(yīng)用平面則由各種SDN 應(yīng)用組成[1]。
DDoS(Distributed Denial of Service,分布式拒絕服務(wù))是一種依靠分布式的攻擊源發(fā)起的、規(guī)模龐大的拒絕服務(wù)攻擊。其基本原理為:攻擊者通過攻擊手段入侵分布在不同位置的主機(jī),并在其上安裝控制程序,使其成為傀儡機(jī)。發(fā)動(dòng)攻擊時(shí),攻擊者下發(fā)攻擊指令,指揮傀儡機(jī)向被攻擊的目標(biāo)發(fā)送大量數(shù)據(jù)包,造成目標(biāo)系統(tǒng)或網(wǎng)絡(luò)在一段時(shí)間內(nèi)無法響應(yīng)正常服務(wù)。DDoS 廣泛存在于傳統(tǒng)網(wǎng)絡(luò)中,是目前最常見也是危害最大的網(wǎng)絡(luò)攻擊手段之一[2]。隨著SDN的出現(xiàn),DDoS攻擊也開始活躍在這一新型網(wǎng)絡(luò)架構(gòu)下,并成為SDN 主要安全威脅。
目前針對SDN 架構(gòu)下DDoS 攻擊的檢測已有一些現(xiàn)成的解決方案,肖甫等[3]提出了一種 SDN 架構(gòu)下基于 K-近鄰算法(KNearestNeighbor,KNN)的DDoS 攻擊檢測方法,通過提取SDN 交換機(jī)中流表特征五元組,使用KNN 算法進(jìn)行分類檢測,取得了較高的檢出率和較低的誤警率,但忽略了流表項(xiàng)增速的變化。王曉瑞等[4]提出一種基于BP 神經(jīng)網(wǎng)絡(luò)的DDoS 攻擊檢測方法,通過實(shí)驗(yàn)證明其具有較高的檢測準(zhǔn)確率,但BP 神經(jīng)網(wǎng)絡(luò)的權(quán)值參數(shù)進(jìn)行了隨機(jī)初始化,容易陷入局部最優(yōu)。劉俊杰等[5]提出一種SDN 架構(gòu)下基于C4.5決策樹算法的DDoS 攻擊檢測方法,通過與SVM、KNN 算法作比較,在檢測準(zhǔn)確率、誤報(bào)率和檢測時(shí)間上都有所改善,但同樣忽略了流表項(xiàng)增速的變化,同時(shí)檢測準(zhǔn)確率上還可進(jìn)一步提升。
針對以上文獻(xiàn)所提方法存在的特征選擇不全面以及檢測準(zhǔn)確率不夠高兩方面的不足,本文提出一種SDN 架構(gòu)下基于隨機(jī)森林的DDoS 攻擊檢測方法,通過選取流包數(shù)均值、流字節(jié)數(shù)均值、流表項(xiàng)增速、源IP 增速和端口增速組成特征五元組,采用隨機(jī)森林算法進(jìn)行分類檢測。該方法相較于其他方法,在特征選擇方面綜合選取了SDN 架構(gòu)下DDoS 攻擊檢測的典型特征。同時(shí),隨機(jī)森林算法已經(jīng)被許多理論和研究證明具有很高的預(yù)測精度,能較好地容忍異常值和噪聲點(diǎn)的存在,而且不容易出現(xiàn)過擬合[6]。
隨機(jī)森林(Random Forest)是一種集成學(xué)習(xí)方法,它將一組決策樹分類器進(jìn)行組合,其中每棵決策樹都基于隨機(jī)向量的一個(gè)獨(dú)立集合的值產(chǎn)生[7],最終預(yù)測結(jié)果通過組合每棵決策樹的結(jié)果得到。隨機(jī)森林的基本原理是從訓(xùn)練樣本中有放回地隨機(jī)抽取k個(gè)樣本,這種有放回的隨機(jī)抽樣也被稱為Bootstrap 重抽樣。針對這k個(gè)樣本,分別使用決策樹算法進(jìn)行建模,生成k個(gè)決策樹模型。采用簡單多數(shù)投票法組合每個(gè)決策樹模型的分類結(jié)果,形成整個(gè)分類模型最終預(yù)測結(jié)果。
隨機(jī)森林分類器(Random Forest Classifier)作為一種組合分類模型,由一組決策樹分類模型{h(X,Θk)k=1,2,…}組成,其中{Θk}是獨(dú)立同分布的隨機(jī)向量。當(dāng)自變量X給定時(shí),使用簡單多數(shù)投票法從所有決策樹分類結(jié)果中挑選出最佳分類結(jié)果。
如圖1 所示,隨機(jī)森林分類器隨機(jī)劃分出k個(gè)不同的訓(xùn)練集,以此來減少各個(gè)分類模型之間的相關(guān)性,同時(shí)提高組合分類器的泛化能力。針對這k個(gè)訓(xùn)練集分別進(jìn)行訓(xùn)練,形成分類模型序列{h1(X),h2(X),…,hk(X)},然后將分類模型序列組合成一個(gè)多分類模型系統(tǒng),系統(tǒng)最終的分類結(jié)果通過投票法得出,用一個(gè)公式表達(dá)如下:
其中,H(x)表示多分類模型系統(tǒng),hi表示單棵決策樹分類模型,Y表示目標(biāo)變量,I表示示性函數(shù)。該式說明,最終的分類結(jié)果通過多數(shù)投票決策的方式得出。
本文提出的基于隨機(jī)森林的DDoS 攻擊檢測方法主要分為三個(gè)功能模塊:流表收集模塊、特征提取模塊和攻擊檢測模塊。
2.2.1 流表收集模塊
流表收集模塊部署在SDN 控制器中,在支持OpenFlow 協(xié)議的典型SDN 架構(gòu)下,流表信息的收集不需要額外的第三方設(shè)備,OpenFlow 交換機(jī)僅通過流表就能收集端口和流的統(tǒng)計(jì)信息[8]。在本文的實(shí)驗(yàn)設(shè)計(jì)中,SDN 控制器通過向交換機(jī)周期性地發(fā)送ofp_flow_stats_request 報(bào)文來請求當(dāng)前流的統(tǒng)計(jì)信息,交換機(jī)從流表中讀取相關(guān)的統(tǒng)計(jì)信息回復(fù)給控制器,完成流表信息的收集。
圖1 隨機(jī)森林算法模型
2.2.2 特征提取模塊
特征提取模塊的主要功能在于從流表收集模塊收集到的流表信息中提取出與DDoS 攻擊檢測相關(guān)的特征,用于攻擊檢測模塊進(jìn)行模型訓(xùn)練和分類檢測。本文選取的特征如下:
(1)流包數(shù)均值(Average of Packets per Flow,APF)
正常狀態(tài)和受到DDoS 攻擊時(shí),每條流中包含的數(shù)據(jù)包數(shù)量是不一樣的。攻擊發(fā)生時(shí),攻擊者通常會(huì)連續(xù)隨機(jī)地生成大量的數(shù)據(jù)包,流的生成速度加快,同時(shí)每個(gè)流中數(shù)據(jù)包的數(shù)量會(huì)減少。
其中PacketNumi是在指定周期內(nèi)第i條流包含的數(shù)據(jù)包數(shù),F(xiàn)lowNum是該周期內(nèi)所有流的數(shù)目。
(2)流字節(jié)數(shù)均值(Average of Bytes per Flow,ABF)
很多DDoS 攻擊者都采用短流攻擊,這樣可以在短時(shí)間內(nèi)形成大量數(shù)據(jù)包,因此選取每條流中的平均字節(jié)數(shù)作為檢測特征之一。
其中ByteNumi表示在指定周期區(qū)間內(nèi)第i條流中包含的字節(jié)數(shù)。
(3)流表項(xiàng)增速(Flow table entries Growing Speed,F(xiàn)GS)
DDoS 攻擊發(fā)生時(shí),針對目標(biāo)主機(jī)的數(shù)據(jù)包會(huì)迅速增加。這些數(shù)據(jù)包來自攻擊者控制的分布式傀儡機(jī),因此會(huì)造成關(guān)于目標(biāo)主機(jī)的流表項(xiàng)生成速度加快,流表項(xiàng)數(shù)目大量增加。
其中FlowTableEntryNum表示在interval時(shí)間間隔內(nèi)目標(biāo)交換機(jī)生成的流表項(xiàng)的數(shù)目。
(4)源IP 增速(source IP Growing Speed,IGS)
當(dāng)發(fā)生DDoS 攻擊時(shí),大量不同來源的真實(shí)或偽造的IP 地址向同一個(gè)目標(biāo)地址發(fā)送大量的數(shù)據(jù)包,因此源IP 地址的變化是DDoS攻擊發(fā)生時(shí)的一個(gè)重要特征。
其中sIPNum表示在時(shí)間間隔interval內(nèi)源IP 地址的數(shù)量。
(5)端口增速(Port Growing Speed,PGS)
在正常狀態(tài)下,服務(wù)端口增速處于一個(gè)相對平穩(wěn)的范圍,而DDoS 攻擊發(fā)生時(shí),攻擊者會(huì)隨機(jī)生成端口進(jìn)行連接,因此端口增速相較正常狀態(tài)會(huì)急劇上升。
其中PortNum表示在時(shí)間間隔interval內(nèi)所有數(shù)據(jù)包中端口的數(shù)量。
2.2.3 攻擊檢測模塊
在獲取特征提取模塊傳來的特征樣本集之后,攻擊檢測模塊采用隨機(jī)森林算法對流量樣本進(jìn)行訓(xùn)練,并用訓(xùn)練好的模型對新來的流量樣本進(jìn)行分類。采用隨機(jī)森林算法進(jìn)行流量分類的具體過程如下:
第1 步,采用Bootstrap 方法進(jìn)行重抽樣,隨機(jī)產(chǎn)生N 個(gè)流量樣本訓(xùn)練集S1,S2,…,SN;
第2 步,對N 個(gè)流量樣本訓(xùn)練集使用決策樹進(jìn)行建模,生成流量樣本決策樹C1,C2,…,CN。生成決策樹的過程中,為了保證隨機(jī)性,在每個(gè)非葉節(jié)點(diǎn)進(jìn)行分裂的時(shí)候,都從D 個(gè)特征中隨機(jī)選擇d 個(gè)作為分裂特征集,并以分裂特征集d 中的最佳分裂特征對該節(jié)點(diǎn)進(jìn)行分裂;
第3 步,每棵流量樣本決策樹都讓其自然生長,過程中不進(jìn)行剪枝;
第4 步,使用上述流量樣本決策樹對測試集中的流量樣本Y 進(jìn)行分類,相應(yīng)的分類結(jié)果為:C1(Y),C2(Y),…,CN(Y);
第5 步,采用簡單多數(shù)投票法選出輸出結(jié)果最多的類作為測試樣本Y 的最終分類結(jié)果。
為了驗(yàn)證本文提出算法的檢測效果,在Ubuntu 下使用SDN 仿真軟件mininet 搭建了如圖2 所示的實(shí)驗(yàn)環(huán)境,其中net1 為DDoS 攻擊的目標(biāo)網(wǎng)絡(luò),net2 和net3 為發(fā)起DDoS 攻擊的傀儡機(jī)所在網(wǎng)絡(luò)。
本實(shí)驗(yàn)中,正常流量和攻擊流量均通過Scapy 生成。Scapy 是一個(gè)數(shù)據(jù)包處理工具,可以偽造或解碼數(shù)據(jù)包。Scapy 已經(jīng)集成為Python 的第三方庫,通過該庫編寫發(fā)包腳本,可以生成不同速率不同來源的數(shù)據(jù)包,從而模擬不同強(qiáng)度的DDoS 攻擊。
圖2 實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)鋱D
在訓(xùn)練樣本生成階段,為了生成正常流量,使用Scapy 生成正常速率的數(shù)據(jù)包發(fā)往net1,這些數(shù)據(jù)包的源IP 地址設(shè)為net2 和net3 中的IP 地址,目的是模擬net2 和net3 中的主機(jī)對net1 進(jìn)行正常訪問。與此同時(shí),通過控制器c0 從交換機(jī)s1 中提取生成的流表項(xiàng)。正常訪問的流表項(xiàng)收集完畢之后,使用Scapy 生成速率不同且大于正常訪問速率的TCP SYN 數(shù)據(jù)包發(fā)往net1,模擬針對net1 的SYN Flood 攻擊。這些數(shù)據(jù)包的源IP 地址既包括net2 和net3 中的IP 地址,又有隨機(jī)生成的IP 地址,目的是模擬DDoS 攻擊中攻擊者使用偽造的IP地址進(jìn)行攻擊的情況。
通過訓(xùn)練樣本生成階段共收集到15000 條流量記錄,其中正常流量6543 條,攻擊流量8457 條。作為對比,除了隨機(jī)森林算法之外,本文還選擇了決策樹、KNN 以及SVM 算法同時(shí)對以上數(shù)據(jù)進(jìn)行訓(xùn)練,并采用準(zhǔn)確率、查準(zhǔn)率、召回率三個(gè)指標(biāo)進(jìn)行比較分析,其中:
(1)準(zhǔn)確率表示模型判斷正確的樣本數(shù)量占樣本總數(shù)的比例,即
(2)查準(zhǔn)率表示模型判斷為攻擊流量的樣本中實(shí)際為攻擊流量樣本的比例,即
(3)召回率表示所有攻擊流量樣本中被模型正確判斷出來的比例,即
本文實(shí)驗(yàn)按照DDoS 攻擊的強(qiáng)度分成三組進(jìn)行,三組實(shí)驗(yàn)使用的流量樣本如表1 所示:
表1 三組實(shí)驗(yàn)所使用的流量樣本
3.2.1 準(zhǔn)確率
圖3 展示了DDoS 攻擊強(qiáng)度分別為25%、50%、75%時(shí)四種分類算法的準(zhǔn)確率,從圖中可以看出,隨著攻擊強(qiáng)度的提高,隨機(jī)森林算法的準(zhǔn)確率逐步提升,最高時(shí)達(dá)到99.17%,始終高于其他三種分類算法。注意到攻擊強(qiáng)度從25%提高到50%時(shí),決策樹算法和KNN 算法的分類準(zhǔn)確率都有不同程度的下降,這與流量樣本中噪聲點(diǎn)的存在有關(guān)。但相同條件下隨機(jī)森林算法的準(zhǔn)確率卻依然有所上升,充分說明隨機(jī)森林算法作為一種集成學(xué)習(xí)算法對異常值和噪聲具有很好的容忍度,體現(xiàn)了集成學(xué)習(xí)算法的優(yōu)勢。
圖3 四種分類算法在不同DDoS 攻擊強(qiáng)度下的準(zhǔn)確率
3.2.2 查準(zhǔn)率
圖4 展示了不同DDoS 攻擊強(qiáng)度下各個(gè)分類算法查準(zhǔn)率的變化,該指標(biāo)反映的是模型對攻擊流量樣本判斷的準(zhǔn)確性。從圖中可以看出,隨著攻擊強(qiáng)度的提高,除了SVM 在攻擊強(qiáng)度為50%時(shí)查準(zhǔn)率降低了之外,其他算法的查準(zhǔn)率都有所提升。其中隨機(jī)森林算法不論在何種攻擊強(qiáng)度下,查準(zhǔn)率都好于其他算法,在攻擊強(qiáng)度最高時(shí)能達(dá)到99.69%,這說明在識別攻擊流量樣本的準(zhǔn)確性方面,隨機(jī)森林的表現(xiàn)優(yōu)于作為比較的其他算法。
圖4 四種分類算法在不同DDoS 攻擊強(qiáng)度下的查準(zhǔn)率
3.2.3 召回率
圖5 展示了不同DDoS 攻擊強(qiáng)度下各個(gè)分類算法召回率的變化,該指標(biāo)反映的是模型將所有攻擊流量樣本都檢測出來而不遺漏的能力。從圖中可以看出,隨著DDoS 攻擊強(qiáng)度的提高,各個(gè)算法的召回率都有所提升。雖然SVM 算法的召回率最高時(shí)達(dá)到了99.95%,但在攻擊強(qiáng)度較低時(shí),其召回率是各個(gè)算法中最低的,說明該算法在不同攻擊強(qiáng)度下的召回率不夠穩(wěn)定。而隨機(jī)森林算法在各個(gè)攻擊強(qiáng)度下都有著很高的召回率,綜合來看,隨機(jī)森林算法更符合本文要求。
圖5 四種分類算法在不同DDoS 攻擊強(qiáng)度下的召回率
本文提出了一種基于隨機(jī)森林的DDoS 攻擊檢測方法,通過提取SDN 交換機(jī)中的流表項(xiàng)特征,采用隨機(jī)森林算法進(jìn)行訓(xùn)練,從而構(gòu)建DDoS 攻擊檢測模型。實(shí)驗(yàn)證明,本文提出的基于隨機(jī)森林算法的DDoS 攻擊檢測在準(zhǔn)確率、查準(zhǔn)率和召回率三個(gè)指標(biāo)上總體表現(xiàn)優(yōu)于其他對比的算法。