曹永軼,金偉正,吳 靜,羅 威,朱 博
(1.武漢大學 電子信息學院,武漢 430072; 2.中國艦船研究設(shè)計中心,武漢 430064)
分布式拒絕服務(Distributed Denial of Service,DDoS)是一種具有高破壞性的網(wǎng)絡(luò)攻擊行為。DDoS攻擊者通過多個分布式攻擊源偽造出海量虛擬IP地址,并對服務器發(fā)起訪問式攻擊,消耗大量的服務器資源,導致受害服務器崩潰而無法響應正常用戶的服務請求[1],這種在互聯(lián)網(wǎng)發(fā)展初期已存在的網(wǎng)絡(luò)安全威脅,至今仍是互聯(lián)網(wǎng)上最流行、效率最高的攻擊方式[2]。
軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN)作為一種新興的網(wǎng)絡(luò)模式[3],引起了學術(shù)界和工業(yè)界的關(guān)注。SDN從底層網(wǎng)絡(luò)設(shè)施中抽象出控制器,并解耦控制平面和數(shù)據(jù)平面,使得網(wǎng)絡(luò)狀態(tài)具有邏輯集中的特性[4]。SDN的出現(xiàn)提高了網(wǎng)絡(luò)的可管理性、可擴展性、可控性和動態(tài)性[5]。然而,隨著SDN應用的普及,SDN安全性問題成為SDN領(lǐng)域的關(guān)鍵研究課題之一。
由于SDN控制器靈活、可擴展以及集中控制的特點,在SDN下的DDoS攻擊檢測多數(shù)是在控制平面上進行的。傳統(tǒng)的經(jīng)典檢測方法是在控制平面上進行熵值計算,從而判斷流量中源IP的離散程度,并利用偽造數(shù)據(jù)包導致DDoS攻擊流量中源IP地址復雜多樣性的特點來檢測出異常流量[6]。該檢測系統(tǒng)的檢測精度取決于熵的閾值,而閾值的選擇是通過調(diào)整實驗中參數(shù)大小而得到,因此該方法具有一定的片面性。還有一類方法是利用控制平面可擴展的計算能力,在控制平面的數(shù)據(jù)包頭中提取DDoS流量的關(guān)鍵特征,利用基于概率的統(tǒng)計方法或機器學習算法進行檢測[7]。文獻[8]提出PacketScore方法,該方法對數(shù)據(jù)包包頭中的某些屬性值分布進行分析,并使用貝葉斯定理對數(shù)據(jù)包進行評分。PacketScore具有相當高的過濾精度,且易于部署,但由于其得分與攻擊強度有關(guān),因此不適用于處理大量攻擊流量。此外,它在評分方面存在一些代價高昂的計算操作,導致處理效率低下,且難以及時防御。文獻[9]提出一種基于支持向量機(Support Vector Machine,SVM)算法的網(wǎng)絡(luò)入侵檢測系統(tǒng),但該系統(tǒng)存在檢測時間較長、檢測效率低等問題。文獻[10]提出一種基于深度學習的多矢量DDoS檢測系統(tǒng),在SDN控制器上實現(xiàn)基于SAE模型的檢測,對于從網(wǎng)絡(luò)流量包頭派生出來的大量特征,利用深度學習對其進行特征降維與分類。在控制平面上基于機器學習的DDoS檢測方法可以達到較高的準確率,但普遍存在較高的控制器CPU消耗以及南向接口通信開銷。
由于上述DDoS攻擊檢測機制均是基于控制平面,每次攻擊流量到達控制器時均會產(chǎn)生大量的南向接口負荷以及系統(tǒng)開銷,因此這些方法普遍存在檢測時延長、檢測開銷大以及對新型DDoS攻擊檢測能力較弱等問題[11-12]。在數(shù)據(jù)包到達控制器之前,其轉(zhuǎn)發(fā)在數(shù)據(jù)平面上的交換機中進行,文獻[13]提出一種新的思路,即在數(shù)據(jù)平面上利用OpenFlow交換機CPU計算熵值,從而實現(xiàn)DDoS攻擊檢測,但是由于熵值僅代表源IP離散性的一個特征,因此該方法的準確率較低。
本文沒有從單平面角度解決上述問題,而是采用一種跨平面協(xié)作方法來優(yōu)化面向SDN的DDoS攻擊檢測方法。該方法提取更多的適合數(shù)據(jù)平面計算的DDoS流量特征,并將部分輕量級的DDoS檢測機制下發(fā)給數(shù)據(jù)平面,同時保留控制平面的細粒度檢測。經(jīng)過數(shù)據(jù)平面的檢測與過濾,到達控制平面檢測的流量會減少,從而降低了南向接口通信開銷。同時,本文方法除了利用數(shù)據(jù)平面以及控制平面兩級檢測之外,還采用了防御策略以及長期有效的黑白名單機制。
在SDN架構(gòu)中,數(shù)據(jù)包在被控制平面捕獲之前,其是在數(shù)據(jù)平面上轉(zhuǎn)發(fā)的,為了提高DDoS攻擊檢測的性能以及減少檢測延遲,在傳統(tǒng)的控制平面檢測基礎(chǔ)上,還應該考慮在數(shù)據(jù)平面上部署過濾功能。實際上多數(shù)支持OpenFlow協(xié)議的OpenFlow交換機或混合交換機均由一個或多個正在運行的CPU組成,且這些CPU具有豐富的計算資源,然而目前還未得到充分利用[14]??缙矫鎱f(xié)作DDoS防御系統(tǒng)體系結(jié)構(gòu)如圖1所示,根據(jù)DDoS流量的顯著特征,在交換機CPU上執(zhí)行輕量級的數(shù)據(jù)平面檢測算法。由于在數(shù)據(jù)平面上采用較為輕量的算法只能進行粗過濾,因此當數(shù)據(jù)平面檢測產(chǎn)生告警后,將數(shù)據(jù)包包頭信息發(fā)送至控制平面進行細粒度檢測,得到更加準確的結(jié)果,數(shù)據(jù)平面的提前過濾為控制平面的檢測減小了壓力,這種跨平面兩級協(xié)作的方法顯著提高了檢測準確率。在控制平面上選擇聚類K-means算法對流量進行更細粒度的檢測,該算法具有檢測速度快、準確度高的特點。本文方案的控制平面檢測基于事件觸發(fā)而非輪詢機制,只有當數(shù)據(jù)平面產(chǎn)生報警時,流量才會被發(fā)送到控制平面進行第二次檢測,因此大幅降低了南向接口的通信負荷以及系統(tǒng)開銷。在本文方案中還添加了黑白名單機制以及防誤判模塊。利用黑白名單在交換機入口過濾數(shù)據(jù)包,降低重復檢測帶來的開銷。在控制平面完成細粒度檢測之后,加入防誤判模塊,以進一步降低虛警率。下文將詳細介紹系統(tǒng)的主要模塊以及粗粒度和細粒度檢測分別是如何進行的。
圖1 跨平面協(xié)作DDoS防御系統(tǒng)體系結(jié)構(gòu)Fig.1 Architecture of cross plane cooperation DDoS defense system
OpenFlow交換機的計數(shù)器是計算通過的數(shù)據(jù)包和字節(jié)數(shù)。從OpenFlow協(xié)議1.0起[15],OpenFlow協(xié)議為每條流入口、流表和交換機端口等定義了一組計數(shù)器,并將它們的值稱為三元組。如圖1所示,計數(shù)器讀取模塊依次從交換機硬件中輪詢計數(shù)器值,并將這些值設(shè)置為流監(jiān)控器模塊的輸入。在流監(jiān)控器模塊,采用流量檢測算法對計數(shù)器值進行處理,從而過濾出異常流。
數(shù)據(jù)平面流監(jiān)控器流程如圖2所示。其中,流監(jiān)控器模塊主要負責根據(jù)DDoS攻擊流量的突出特性(如大流量和不對稱特性)對異常流進行初步過濾,且其由以下3個部分組成:
1)元組解析器。它從計數(shù)器的三元組中提取出具體的計數(shù)器值。
2)監(jiān)控線程。利用流監(jiān)控算法對流量進行檢測。
3)流狀態(tài)采集器。它負責對檢測到的異常流狀態(tài)進行管理,且圖2已經(jīng)給出了流監(jiān)控器的工作過程。
圖2 數(shù)據(jù)平面流監(jiān)控器流程Fig.2 Procedure of data plane flow monitor
元組解析器不斷地接收由計數(shù)器Reader模塊發(fā)送的三元組,然后包含在三元組中的計數(shù)器值根據(jù)其所屬流(或端口)傳遞給特定的監(jiān)控器線程,并利用流監(jiān)控算法對監(jiān)控線程進行異常流檢測。本文設(shè)計一種輕量級的流監(jiān)控算法,該算法用于數(shù)據(jù)平面的流量監(jiān)控模塊,檢測出由DDoS攻擊引起的異常流。與很多其他流監(jiān)控算法不同,該輕量級算法的目的是利用普通OpenFlow交換機中的輪詢計數(shù)器來提取DDoS攻擊流量的關(guān)鍵特性。
1.1.1 輕量級算法的特征提取
突發(fā)的泛洪流量是DDoS攻擊的一個重要特征,當DDoS攻擊時,單位時間通過交換機的數(shù)據(jù)分組量以及平均字節(jié)數(shù)都遠高于正常流量。在攻擊期間,進入受害服務器的流與從服務器流出的流之間通常存在巨大的速率差異。對于給定的2條流,如果A流的目的地址等于B流的源地址,B流的目的地址等于A流的源地址,則稱這2條流為對流。相反,如果只有一條流,且找不到它的對流,則稱為單流。DDoS常以IP欺騙的方式發(fā)起攻擊,因為它們使用假IP地址發(fā)送數(shù)據(jù)分組,所以當DDoS攻擊發(fā)生時,單流的增長率迅速增大,對流所占比例很小,其原理如圖3所示。當DDoS泛洪攻擊發(fā)生時,不同IP對應的流持續(xù)時間較短,因此流的平均持續(xù)時間也是一個重要特征。與DDoS攻擊產(chǎn)生的IP欺騙相同,攻擊者也可通過隨機生成端口進行掃描攻擊,因此DDoS流量中端口的增長率遠高于正常流量[16-18]。
圖3 DDoS流量不對稱特性示意圖Fig.3 Schematic diagram of DDoS traffic asymmetry
通過輪詢OpenFlow交換機計數(shù)器值,可由以下6個指標反映上述4個DDoS流量特性,具體表示方法為:
1)單位時間平均數(shù)據(jù)分組量(APPT)
(1)
2)單位時間平均字節(jié)數(shù)(ABPT)
(2)
3)對流所占的比例(PCPF)
PCPF=
(3)
其中,flow_numsT表示在時間周期T內(nèi)采集的流數(shù)量,T表示采集周期,nums_single_flows表示每個周期T內(nèi)采集到的流中單流的數(shù)量,nums_pair_flows表示每個周期T內(nèi)采集到的流中雙流的數(shù)量。
4)單位時間單流數(shù)目(SFPS)
(4)
5)流平均持續(xù)時間(ADPF)
(5)
其中,durationsi表示每條流表的持續(xù)時間。
6)端口增長率(GRDP)
(6)
其中,nums_different_port表示每個周期T內(nèi)采集到的流表中不同端口號的流數(shù)量。
上述6個指標中,指標1與指標2從流量的體積特征來判斷流量是否異常,指標3與指標4利用DDoS流量的不對稱特性來評估流量,指標5與指標6分別顯示了DDoS流量的短時多流以及偽造端口的特點。
1.1.2 數(shù)據(jù)平面輕量級算法描述
在監(jiān)控線程中,本文提出一種輕量級算法,該算法可用于捕獲上述6個指標的變化,從而對異常流量進行檢測。該算法利用一段時間流量的6個指標值來估計預測值,如果下一個周期的6個指標實際值都落入預測范圍內(nèi),則表示當前流正常,否則,預測值與觀測值之間的偏差代表了網(wǎng)絡(luò)行為的變化;如果6個指標觀測值都超出了可接受范圍,則將其確定為DDoS攻擊造成的異常流量。
(7)
(8)
(9)
(10)
控制平面接收到報警消息后,將異常流狀態(tài)存儲在數(shù)據(jù)庫中,觸發(fā)事件通知基于控制器的DDoS機器學習細粒度檢測模塊,對特定的異常流進行深度檢測。在系統(tǒng)中,如果接收到警報消息,控制器將向特定的交換機發(fā)出標準的OFPT_FLOW_MOD消息(從OpenFlow協(xié)議1.0開始定義)。該消息可以指示OpenFlow交換機從特定的異常流中緩沖數(shù)據(jù)包,將其發(fā)送到控制器并存儲在數(shù)據(jù)庫中進行細粒度分析。在控制平面,利用K-means聚類算法結(jié)合提取的相關(guān)特征進行細粒度檢測,該方法的流程如圖4所示,其中,虛線表示訓練過程,實線表示檢測過程。
圖4 控制平面細粒度檢測流程Fig.4 Procedure of fine-grained detection of control plane
1.2.1 特征提取
實驗可以從數(shù)據(jù)平面發(fā)送的數(shù)據(jù)包中提取各種特征,并用于聚類算法。由于DDoS流量最顯著的特征是發(fā)出大量偽造源IP和端口的數(shù)據(jù)包,五元組包含了多數(shù)DDoS特征信息,因此需要提取每個數(shù)據(jù)包的五元組信息。由于熵能夠很好地表示不確定度,基于DDoS攻擊隨機偽造源IP和端口的特點,對這些字段分別計算熵并作為輸入的特征值。根據(jù)相關(guān)工作,本文使用熵作為度量來幫助構(gòu)造特征,以檢測DDoS流量[19-20]。樣本熵可定義為:
(11)
其中,S為數(shù)據(jù)包的總數(shù),N為不同IP地址或端口的數(shù)目,其表示特定的指標(如某IP地址出現(xiàn)的次數(shù))。
特征分布越集中,熵值越低。研究發(fā)現(xiàn),DDoS流量對五元組(目的地址、目的端口、源地址、包大小與流的持續(xù)時間)的熵值有較大影響[21],這是由DDoS特性決定的。同時,使用SYN/SYN+ACK來描述DDoS引起的半連接狀態(tài)。考慮到在高速網(wǎng)絡(luò)中難以記錄所有數(shù)據(jù)包大小,本文重新定義了如表1所示的數(shù)據(jù)包大小級別。
表1 數(shù)據(jù)包大小級別定義Table 1 Definition of packet size level
由于正常的突發(fā)大流量也會改變分組大小的熵,因此對分組大小熵進行如下改進,以區(qū)別于DDoS業(yè)務,具體如式(12)所示:
(12)
其中,imax是數(shù)據(jù)包的大小以及級別,且多數(shù)數(shù)據(jù)包都包含在這些級別里面。值得注意的是,指標1~指標6代表了DDoS的基本特征。包頭信息和特征的對應關(guān)系如表2所示,雖然實驗數(shù)據(jù)集只包含DDoS種類的一部分,但是本文方法仍可以用于檢測各種類型的DDoS攻擊。
表2 包頭信息和特征對應關(guān)系Table 2 Correspondence between Baotou information and features
1.2.2 機器學習算法K-means分類及檢測
在訓練過程中,采用聚類方法對流量進行建模,并確定檢測閾值。需要說明的是,所有的訓練數(shù)據(jù)均只包含正常流量。本文使用機器學習算法K-means來滿足實時檢測的要求,因為該算法比其他機器學習分類算法快。使用歐氏距離來量化2個熵向量的相似性。此外,基于簇半徑的加權(quán)平均值[21],本文方法能夠找出最好分類的簇數(shù)k。使用上述特征組成的特征矩陣作為K-means算法的輸入,輸入處的m個節(jié)點表示具有m個特征的記錄,如X={x1,x2,…,xm}。聚類完成后需要濾去噪聲,而濾去噪聲的方法是剔除稀疏的簇,并根據(jù)統(tǒng)計中常用的規(guī)則,即如果訓練數(shù)據(jù)總共有n個點,則剔除那些不足0.05n個點的簇,且對于每個簇,實驗均記錄檢驗數(shù)據(jù)的中心C和半徑r,C由所有點的平均值決定,r由C與集群中任意點之間距離的最大值決定。
控制平面上DDoS攻擊的細粒度檢測的具體步驟為:
步驟1對于在單位時間內(nèi)檢測到的可疑流量,計算其熵值,得到預處理模塊中的熵向量X。
步驟2計算熵向量X與所有簇中心Ci之間的歐式距離,并將結(jié)果記錄為di。
步驟3選擇最小距離dt=min{di},并將樣本熵向量X分配給相應的簇。
步驟4對dt和聚類半徑rt進行比較,若dt