賈 錕 ,王君楠 ,劉 峰
1 中國科學院大學網絡空間安全學院 北京 中國 100093
2 中國科學院信息工程研究所 北京 中國 100093
軟件定義網絡(Software-defined Network,SDN)是一種新型的網絡架構,旨在協助網絡運營商更好地管理基礎設施。基于這個目標,SDN 構建了一個中心化的結構,賦予控制器全局視角,使其得以動態化地管理旗下所有交換機。通過軟件編程的形式,控制器可以快速定義和控制路由規則、設置網絡拓撲、安裝網絡應用等。鑒于其良好的可編程性和全局性,SDN 被廣泛應用于具有大量服務設施,需要統一配置管理的環境,如云端,醫院和學校。但是其中心化的架構在網絡攻擊面前又極其脆弱。一旦核心控制器被攻陷,整個SDN 網絡都會崩塌[1]。針對這種架構最常見的攻擊手段就是分布式拒絕服務攻擊(Distributed Denial of Service,DDoS)。
傳統DDoS 一般由攻擊者控制的僵尸網絡發起。大量受控終端,通過向指定受害者發送泛洪式地應用請求,消耗目標的帶寬和計算資源,迫使目標服務器停止正常的應用服務。如果目標位于SDN 架構,帶寬耗盡時,同鏈路的其他服務器也會受到影響。
除了傳統的 DDoS,研究人員也發現了針對SDN 本身的新型DDoS 攻擊手法,如針對控制器中心架構的Packet-In 泛洪攻擊[2],針對交換機的流表溢出攻擊[2],針對流表計時器的慢速DoS 攻擊[3]及針對南向通道的CrossPath 攻擊[4]等。
為了緩解這些問題,研究人員提出了大量方案,包括基于異常檢測的方案[5-9],基于架構革新的方案[10-11]和基于負載均衡的方案[12-13]等。SDN 獨有的可編程特性和全局視角使得這些方案能夠快速地實現和應用。
SDN 環境下的DDoS 檢測方案關鍵要點在于能否保障輕量化和實時性。因為SDN 本質上是通過建立一個中心架構來實現控制層與數據層的分離,所以它的控制層需要承接旗下所有交換機的通信任務。如果檢測機制不能做到輕量化,就會占據太多寶貴的計算資源;而實時性是DDoS 防御的基本要求。現在很多主流的攻擊方式都采用間歇式爆發攻擊策略,即短時間快速發起打擊,在癱瘓目標網絡之后迅速停止。如果不能做到實時檢測,防御機制就無法從根本上阻止DDoS 的破壞。
調研發現,現行的DDoS 檢測方案大都著眼于某些特定的攻擊手段,無法在多種DDoS 攻擊場景下保持自身的輕量化與實時性;此外,研究人員常忽略了在正常工作狀態時或者檢測告警前降低SDN 工作負荷的重要性,導致SDN 極可能在檢測響應之前就被癱瘓。為改善以上問題,本文提出了兼顧輕量化與實時性,適用于廣泛場景的快速檢測方案。
本文的主要貢獻包括以下三點:
1) 提出了輕量化的SDDetector 檢測方案。該方案完全基于SDN 自身的API 實現攻擊檢測,不依賴任何外部的輔助工具;其輕量化不僅體現在攻擊發生時檢測響應的及時性,還體現在無攻擊時對SDN控制器的減負效果。
2) 創新性地提出在不同狀態下采用不同粒度的路由規則。具體來說,在沒有攻擊警報時,執行的是粗粒度的路由規則;在攻擊警報發送到控制器時,執行細粒度的路由規則。這種設定能夠過濾掉大量的重復流量和合法流量,從而極大地減輕控制器的負載,提升方案的反應速度。
3) 顯著提高多種攻擊場景下的檢測效率。SDDetector 以近似并行的方式運行Packet-In 的檢測手段和基于流表統計信息的檢測手段,依據特征提取速度最快的算法來完成攻擊檢測。實驗表明,在采用源IP 偽造技術的DDoS 攻擊場景下,SDDetector能夠比參照的單一SVM 檢測機制少用75%的反應時間。
文章結構安排如下:第二章簡要闡述SDN 的背景信息,并介紹了當前的研究現狀;第三章詳細介紹了SDDetector 的設計細節以及工作流程;第四章分別進行了熵檢測方案、SVM 檢測方案、特征有效性檢驗的相關實驗,最后在實戰場景下進行了模型的工作場景再現;第五章總結SDDetector 在多場景下提高檢測效率的方式,提出仍面臨的部分問題,并在最后說明方案未來的改進方向。
本章簡單介紹軟件定義網絡和OpenFlow協議的基礎概念,并對現有的研究工作做一個總結。
SDN 是一種顛覆傳統網絡基礎架構的新型框架。由美國斯坦福大學clean-slate 研究組率先提出,以中心化代替分布式,軟件代替硬件。通過從各設備中剝離出數據層和控制層,并整合控制層功能于高層級的控制器,將傳統的分布式拓撲變成集中管理的層級結構。并在控制層引入可編程的特性,以簡化網絡配置等操作,實現了定義路由規則,改變網絡拓撲等功能的程序化,打破了傳統架構的封閉性和僵硬性。
OpenFlow 是一種實現SDN 框架的具體協議,或者準確來說,它構建了數據層的基本運行規則,以及數據層與控制層的通信模式。OpenFlow 通過在交換機中引入流表的概念,實現傳統的路由功能。在流表與端口配置統計功能,并授予控制器請求訪問的特權,使控制器獲得全局視野。關于該協議的具體信息可參考OpenFlow Specification[14]。
SDN 大量應用在云環境和醫療環境等基礎核心產業平臺中,因而針對SDN 的DDoS 容易連帶地干擾寄生在平臺上的大量服務,造成重大網絡安全事故。為了預防這個問題,學術界提出了大量的檢測防御方案。根據檢測的方法可以分為基于統計的檢測方案和基于機器學習的檢測方案[15]。
基于統計的檢測方案:通過提取統計特征對DDoS 攻擊進行區分的方案。通常會設定一個閾值,超過閾值的流量則會判斷為DDoS.Rui Wang 等人[5]提出了一個基于熵的檢測方法,通過在交換機端部署一個數據收集器,并根據目的IP 的地址計算流的熵值。但是這個方案依賴于五元組(源IP, 目的IP,源端口,目的端口,協議)定義的流,這種檢測方案快速且高效,但它需要單獨部署一個額外的收集器,因為OpenFlow自帶的流表可能不會指定具體的某個元素,如目的IP,這種情況檢測方案就失效了。Mousavi 等[16]選擇了一個相似的算法,但他是每50個數據包計算一次熵值。這種方法在真實環境中的應用效果不是很好,因為正常數據包的流量也很大時,往往會導致誤判。Shariq[17]等人對每個數據包進行評分,評分原則基于源IP 是否在流表中,是否存在成功的TCP 連接過,協議類型,數據通信的速率。并采用動態自適應的閾值算法判定攻擊是否發生。Xiang You 等[9]選擇Packet-In 信息作為攻擊的信號。我們前面提到了當交換機遇到無法匹配的數據包時,會觸發Table-Miss選項,從而向控制器發送Packet-In信息。在攻擊發生時,因為隨機源IP 的技術,這種Table-Miss 情況會激增,從而導致大量Packet-In 消息。但是真實環境中,控制器極易在尚未來得及反應時就被瞬發的超大流量攻陷,因為這些Packet-In 信息都會通過南向接口發送到控制器。此外,采用真實源IP 的HTTP 泛洪攻擊、SSL 泛洪攻擊,因為不會激活大量Packet-In 信息,檢測器就難以觸發告警。
基于機器學習的檢測方案:通過提取流經交換機的流量特征,并用機器學習方法進行惡意流量識別。在這之中,SOM 方法、SVM 方法和神經網絡被使用得最為廣泛。Braga 等[18]應用了一個輕量級的SOM 方法,在一個設定的時間窗口提取流量規則的六維特征,包括流量規則下的平均數據包數,平均持續時間等,然后用SOM 方法判斷攻擊是否發生。Jin Ye 等[7]通過Onp_Flow_Stats 信息收集流表的統計信息,并基于此提取源IP 的增長速度,源端口的增長速度,數據包數量的標準差,數據包字節量的標準差,配對流的比例等特征,最后用SVM 算法作為分類依據。但是特征配對流的比例在面對通配符時無法得到準備的 計算結果,影響了這個方法的普適性;如果為了解決這個問題又必須明確指定五元組的信息,又容易導致Table-Miss 的情況。類似的,Mehr[19]等人也采用了SVM作為他們的分類算法,但是他們生成的攻擊流量僅僅每秒有25 個數據包。這可以在簡單的實驗環境下得到正確的檢測,但在實際環境中,結果的可信度仍值得檢驗。
基于統計的檢測方案和基于機器學習的檢測方案都繞不開對OpenFlow 環境下流量特征的提取。主流的特征提取方式分為,基于南向通道的Packet-In特征提取和基于流表統計信息的特征提取。
基于Packet-In 特征提取的方案:交換機觸發Table-Miss 選項后,會發送Packet-In 信息到控制器端。常見的SYN Flood、UDP Flood、ACK Flood 為了保護受控端,往往采用源IP 偽造的技術,因而會觸發大量的Packet-In,基于此可以提取相應的異常特征。Da Yin[8]、Xiang You[9]、Niyaz[20]等人的工作都采用的這種機制。此外針對SDN 的Packet-In 和流表溢出攻擊也有比較好的效果,因為他們本質上都需要隨機生成匹配域,從而觸發Packet-In。在以上攻擊場景下,如果采用基于流表統計信息的方案,響應時間會因為南向帶寬的堵塞以及交換機流表溢出而大幅增加。
基于流表統計信息特征提取的方案:在面對HTTP 泛洪攻擊和不采用隨機化匹配域中元素的DDoS 攻擊表現卓越。因為他們能快速獲取到流表特征,并能提取到更接近真實攻擊流量的特征,如Rodrigo Braga[18],Jin Ye[7]等人的工作。但是在MiniNet 仿真環境下實踐發現,流表中流規則數目過高時,會極大地增加流表統計信息獲取的耗時。所以,在面對Packet-In 泛洪和流表溢出等新型攻擊手段時,這種檢測效率會大大降低。

表1 SDN 環境下的DDoS 檢測研究匯總Table 1 Research of DDoS in SDN 類型
研究發現,現有的檢測方案往往存在以下問題:
1) 基于Packet-In 特征提取的方案和基于流表統計信息進行特征提取的方案都不能很好地適用于廣泛的攻擊場景。
2) 研究大多針對于提高檢測準確率而忽略了快速響應的需求,尤其是在面對不同的攻擊場景時,系統的響應時間往往出入很大。
3) 研究均假定流規則是以細粒度五元組(源IP、目的IP、源端口、目的端口、協議)的形式呈現,而實際環境中,調整流規則的匹配域本應該是SDN 的常態。
4) 有些方案實際上是從傳統DDoS 檢測方式轉移過來,沒有很好地利用SDN 自身的全局特性。配置傳統的檢測方案通常又需要額外部署數據采集器,使方案變得異常復雜還增加了額外的開銷。
5) 現有的研究方案大都著眼于在攻擊發生時進行預警,從而針對性地遏止攻擊流量以實現控制器的減負效果;忽略了正常工作狀態時對控制器的降負。
為了盡可能在廣泛的攻擊場景仍能實現快速檢測響應,并在正常工作狀態時對控制器進行降負,本文提出了融合基于Packet-In 和基于流表統計的檢測方案。方案重點考慮了如何在多種攻擊手段下實現快速響應的能力,為此,我們以近似并行的機制運行兩種檢測方案,以響應速度最快的方式來判定攻擊。推翻五元組的匹配域設定,改為在不同場景下應用不同粒度的匹配域,以盡可能降低交換機與控制器的運行負擔。此外,本文還利用了控制器的全局視野,定位攻擊源,并針對性地部署流規則以防御DDoS。
圍繞SDN 環境下的DDoS 檢測與緩解需求,本文設計了面向多攻擊場景的并行檢測框架SDDetector。
SDDetector 核心功能均部署在OpenFlow 架構的控制器端。
SDN 的中心化架構賦予控制器遙控中樞的職能,在保障交換機正常路由功能的條件下,可以多樣化定制其他的需求。開源的控制器API 又給了開發者一個很好的平臺,可以快速且不干擾SDN 基礎功能的情況下部署安全應用。
SDDetector 核心功能由五個模塊組成,分別是數據監測模塊、流規則模塊、閾值警報模塊、熵檢測模塊和SVM 檢測模塊。方案整體的工作流程如下:
1) 數據監測模塊部署在控制器端,設定固定的時間間隔發起Onp_Flow_Stats 請求,獲取交換機端的統計信息。
2) 閾值警報模塊判定是否激發細粒度的流規則。其判定的依據為正向和反向數據包數量的比例,數據包的速率以及基于MAC 地址的熵值。如果超出閾值,該模塊會嘗試定位可疑受害者的MAC 和可疑攻擊者的MAC。
3) 流規則模塊負責下發針對性的流規則。有兩種情況控制器會發送不同的流則。第一種情況,閾值警報模塊觸發,流規則模塊刪除初始的粗粒度流規則,改成細粒度的流規則。粗粒度的流規則指,只有交換機的輸入端口、目的MAC 地址為具體的值,其他匹配域均為通配符ANY;細粒度的流規則指,除了上面兩個元素以外,還有源IP 和目的IP,以及傳輸層協議為具體值。第二種情況,在進一步檢測模塊確認DDoS 攻擊發生后,流規則模塊將相應的數據流導流至流量過濾中心或簡單的丟棄該流量。
4) 熵檢測模塊負責對發送到控制器的Packet-In消息進行相應的攻擊檢測。主要適用于流表溢出攻擊和Packet-In 泛洪攻擊等隨機化源IP 的場景。
5) SVM 檢測模塊負責對可疑流量進行更多維的檢測,其依賴的特征來源于控制器對細粒度流表統計的請求。只處理針對可疑者受害者的流量,以減少系統的工作量。
OpenFlow 交換機以流表(Flow Table)的方式實現傳統交換機的路由功能。流表在SDN 架構中類似于現今傳統網絡路由器中的路由表,由很多條流規則(Flow Entry)組成。一條流規則定義一組路由指令,包括了匹配域、優先級、處理指令和統計數據等字段。當一個數據包流經交換機時,交換機根據匹配域尋找該數據包對應的流規則,如果有多個匹配的規則,則選擇最高優先級的,隨后根據該流規則的指令對數據包進行處理。
流規則的匹配域包含以下元素:

表2 流規則匹配域Table 2 Match Fields of Flow Entry
匹配域中的元素可以是具體的某個值,也可以是ANY 通配符,也就是可以根據需要定義一個寬泛的匹配域。如果數據包找到了匹配的流規則,那么它根據定義的指令進行相應處理;如果沒有匹配的規則,則會觸發一個Table-Miss 選項。這個選項會將該數據包的信息以Packet-In 模式轉發給控制層。控制層再根據需要進行適當的處理,一般是添加匹配該數據包的流規則。
SDDetector 在初始階段應用了一個粗粒度的路由規則,即匹配域中只指定In_Port 字段和目的MAC字段,分別代表從交換機的進入端口和流量的目標MAC 地址。當一個無法匹配的數據包到達SDN 交換機時,相應的Packet-In 信息會發送到控制器。如果我們初始就定義一個細粒度的流表規則的話,就可能導致大量不同源IP,不同端口信息的數據包觸發Tale-Miss 選項,從而淹沒交換機流表和控制器。粗粒度場景下的工作流程如圖4 所示。
SDN 的端口和流表都配置了相應的統計功能。端口計數器負責統計流經該端口的數據包數量以及字節數。流表計數器記錄匹配數據包的數量和字節信息之外,還需要記錄流規則存活的時間。每一條流規則都設定了一個硬性存活時間和一個軟性存活時間。在軟性存活時間內如果沒有接收到匹配數據包時,該流量規則就會自動清除;而硬性存活時間截止時,無論期間是否有匹配,都會強制清除該規則。
控制器通過Onp_Flow_Stats 指令獲取SDN 網絡的全局視野。當交換機收到這個指令后,會將所有的統計信息上傳到控制器,許多安全功能、限流功能都基于此。
統計信息請求最重要的兩個問題分別是,訪問請求的時間間隔,信息獲取之后的特征提取。
訪問請求的時間間隔:數據監測模塊基于預定義的時間間隔周期性地發起流表統計數據請求。預定義的時間間隔對于模型的運行效率具有非常大的影響。過長的時間間隔容易導致對攻擊的響應過慢,從而無法真正抵御突發性的DDoS 攻擊;而過短的時間間隔容易加重控制器和交換機的負擔。我們經過多番實驗以及參考Braga[18]等人的工作,選擇了與之相同的設計,以3s 作為預設的時間間隔。
特征提取:Dayal[23]等人在一次DDoS 仿真實驗中展示了他們總結的多個異常特征。可以看到常見的DDoS 攻擊,如Smurf,UDP flood,HTTP flood 和SYN flood 都暴露出了基于目的IP 的熵值異常。所以,相似的針對局域網內部的MAC 地址,也有這樣的異常特征。考慮到SDN 通常應用于無限網絡,移動網絡,企業網絡和校園網絡,這樣的局域網假設是符合現實情況的。
DDoS 通常應用隨機源IP、隨機目的端口的技術以躲避溯源追蹤,因而DDoS 流量通常只有很少的交互信息。我們收集的一個真實環境DDoS 流量顯示僅僅有3%~4%的下行流量,也就是服務器到眾多攻擊源的流量只占據總流量的極少數,但是在一個正常的流量集中,下行流量占到了 45%~50%,所以我們也監測在交換機端的上下行數據包數量的比率。本文用tx 數量數據包表示從交換機視角發送的數據包,用rx 表示從交換機視角接收的數據包數量。
此外流經交換機的數據包速度是反映大流量異常的最直接特征。
以上三個特征目的MAC 的熵、上下行流量的比率、數據包速度作為本文閾值檢測模塊的基本判斷依據。值得一提的是,以上三個特征均可以用來定位可疑攻擊源和可疑攻擊目標,后文提及的針對性流規則部署即依賴于此。
OpenFlow 協議的Onp_Flow_Stats 指令可以向控制器旗下的所有交換機請求端口、流表統計信息。
端口統計信息典型范例:
port"s3-eth1":rx pkts=143,bytes=11952,drop=0,errs=0,frame=0,over=0,crc=0;tx pkts=116,bytes=9844,drop=0,errs=0,coll=0
流表統計信息典型范例:
cookie=0x0,duration=101.711s,table=0,n_packets=39,n_bytes=2982,priority=1,in_port="s3-eth1",dl_dst=00:00:00:00:00:06,actions=output:"s3-eth3"
得到端口統計的數據與流表統計的數據之后,根據下面的公式即可得到目的MAC 的熵、上下行流量比率、與數據包速度。
在提取了目的IP 的熵,上下行流量的比率以及數據包頻率三個特征之后,我們對攻擊威脅作一個初步判斷。如果之中有一個特征超過了預設的閾值,就會觸發閾值警報。我們選取的閾值基于真實環境中DDoS 的流量信息和在MiniNet 環境下模擬的DDoS 流量信息得到。我們依據異常的統計信息,建立了一個簡單的攻擊定位和溯源機制。一旦后續我們的深度檢測模塊判定DDoS 事件發生,攻擊源就可以確定。
當閾值警報發出時,流規則模塊會立馬生成相應的細粒度路由規則替換原先的粗粒度規則。具體來說,控制器首先會指示交換機刪除老的(攻擊源端口,攻擊目標MAC,action=output)的流規則。這樣下一個指向受害者的流量會觸發Table-Miss選項并被發送到控制器。然后控制器會針對地定義一個新的流規則(源IP,協議,目的IP,目的MAC,action=output)。這里同樣為了避免Packet-In 泛洪,和Dayal 等[23]相比,細粒度的流規則并不考慮加入TCP 或者UDP 的端口信息,且只有針對受害者IP的流量才會適用于新的路由規則,這個措施可以大大地減少controller 的負擔。在用戶眾多、服務器眾多的云環境和校園網環境下,這種“降負”效果更明顯。
這一次的統計信息依賴于 SDN 自帶的Table-Miss 功能和流表計數器。前者會在新流到來后發送Packet-In 信息到控制器,后者同第一階段基本相同,也是通過發送Onp_Flow_Stats 指令進行請求,只不過這次只提取細粒度流表的特征與端口特征,且特征的定義也不一樣。詳細描述如下。
1) 流規則的數量:每一個不同IP 的數據包都會請求新的流規則,所以我們可以發現在一次DDoS攻擊中,流規則的數量大幅上升,我們用字符n代表流規則的數量。
2) 流規則下的數據包平均數量:OpenFlow 交換機會自動統計匹配該流規則的數據包數量。攻擊者通常會生成隨機的源IP 地址以防防御方追蹤溯源。這個方法被廣泛應用于SYN 泛洪攻擊、UDP 泛洪攻擊和ACK 泛洪攻擊。所以當匹配域擴展到包括源IP時,流規則下的平均數據包數量會急劇下降。與之相對的,如果攻擊者不采用這種源IP 偽造技術,那么流規則下的平均數據包數量又會大幅上升。
3) 流規則數據包數量的熵值:我們以一個細粒度的視角去定義熵值,而且我們只針對流向目標IP的流量,也就是我們統計符合目標IP 為受害者的流規則的離散度。
4) 目的IP 的熵:攻擊發生時,流量往往集中在受害者,而目標為其他服務器的數據包占比會較小,這就導致了目的IP 熵值的異常。
5) 上下行流量的比率:當海量的流量涌向受害者,受害者通常不能正常地進行反饋回應。此外,如果目標端口不在服務端口中,那么服務器不會響應RST 數據。這些因素都導致了DDoS 期間的上下行流量的比率異常。上下行流量都是從交換機的視角去定義,也就是從交換機到終端的流量為上行流量,從終端到交換機的流量為下行流量,所以實際上在發生DDoS 攻擊時靠近攻擊源的端口,這個比率會低于1。
與上面流表統計特征獲取同步進行的是熵檢測。熵檢測模塊部署在控制器端,在第一階段的閾值告警之后就會自動觸發,開始收集經由控制器的Packet-In 統計特征。因為我們的設計同時采用了基于Packet-In 的檢測方案和基于流表統計信息的檢測方案,我們希望盡可能突出兩種檢測方案的各自優勢,減少兩種檢測方案的重復部分,因此此處我們只針對采用隨機源IP 技術的攻擊手段,如Packet-In泛洪攻擊和流表溢出攻擊。并針對性地只選擇了兩個特征,即源IP 的熵和目的IP 的熵。Xiang You 等[9]的方案選擇了包括源IP 的熵、目的IP 的熵和目的端口的熵。并以1000 個數據包作為窗口,進行相應的熵值計算。本文的細粒度規則不涉及傳輸層端口,所以端口的熵值對于模型檢測意義不大。
熵是反映數據分布離散度的指標,熵值比較高說明分布的集中度比較低,也就是更加離散;熵值比較低說明分布比較集中。極端情況,如分布在0點的概率為1,那么該分布的熵為0。熵的數學定義如下:
根據Xiang You 等[9]的論述,數據包的熵近似滿足正態分布。正態分布具有高度對稱性和集中性,絕大多數數據分布集中在均值附近。以明確的概率方式闡述即:
——以68.2%的概率分布在均值附近一個標準差的范圍內;
——以95.4%的概率分布在均值附近兩個標準差的范圍內;
——以99.7%的概率分布在均值附近三個標準差的范圍內。
本文選擇兩個標準差作為異常判定的標準,因為隨機源IP 的攻擊策略會導致源IP 熵值急劇增大,而針對性的泛洪攻擊又會導致目的IP 熵值急劇減小,所以實際上我們只選擇單一方向作為異常判定的標準,即:
同時滿足這兩個條件時,認為發生了Packet-In泛洪攻擊。
基于Packet-In 的熵檢測方案也有它的劣勢,其一是只有在拿到1000 個Packet-In 數據包之后檢測才能進行,但是在交互式的DDoS 或者無源IP 偽造的攻擊場景下,如HTTP DDoS、HTTPS DDoS,交換機并不一定能很快觸發足夠的Packet-In 消息。此外Packet-In 消息只反映新流的報文信息,也就是說已經有相應匹配流規則的數據包,是無法通過Packet-In 進行統計特征的提取的,而數據包的數量,流規則存活時間,流規則的數目等又是反映DDoS的關鍵特征。因而單純依賴Packet-In 的熵很可能不能準確反映實際攻擊的某些特征。
為了應對上面提到的交互式DDoS 和無源IP 偽造的攻擊手段,同時選取更能代表真實流經交換機流量的特征,本文同步引入了一個SVM 檢測方案來分類正常流量和攻擊流量。這里說的正常是指在此期間不存在DDoS 行為,攻擊是指在此期間存在DDoS 行為。文中針對的流量最小單元是時間間隔內的所有流量,而不是單個數據包或單個流規則。因為在攻擊發生時,通常也會存在有正常的通信流量。得益于RYU 控制器的開源API,我們的SVM 檢測模塊可以輕松地部署在控制器端。SVM 的基本原理介紹如下。
SVM 分類模型:
SVM 最初是一種對數據進行二分類的線性分類器,通過計算得到一個超平面,以最低的誤差將數據分割到超平面的兩端。如圖6:
超平面的定義為:
判定數據所屬的分類是依賴于:
但是這種常規的SVM 模型只對線性可分割的數據有效。因而在20 世紀90 年代,一批學者提出了改進SVM 的方法,引入了核函數的概念,使得SVM 也能處理非線性可分的數據。
核函數的本質是將源數據從線性不可分的空間投影到線性可分的高維空間。常見的核函數包括高斯核函數(RBF),多項式核函數和Sigmoid 核函數。高斯核函數通過升維使原先線性不可分的數據變得線性可分,在現實場景中應用非常廣泛。相對于其他核函數,高斯核函數更適用于樣本數量可觀,而特征維度較少的場景,因而本文最終選擇了高斯核函數作為SVM 檢測方案的基礎。
根據分類結果,我們可以定制將攻擊流量丟棄還是將其引導至專業的DDoS 清洗設備。值得一提的是,因為只有針對目標地址的流量才會引導至清洗設備,所以實際上SDDetector 還能降低外置的清洗設備的工作負荷。
本文整體方案的偽代碼如下:
本文的實驗環境通過MiniNet 構建。MiniNet 是基于Linux Container 架構開發的一個進程虛擬化網絡仿真工具。可以創建包含主機,交換機,控制器和鏈路的虛擬網絡,其交換機支持OpenFlow1.1 和1.3協議。實驗構造的拓撲結構如圖7 所示。
根據傳統的路由規則,所有流經路由設備的數據包都會修改源MAC 地址為該路由設備的MAC 地址,目的MAC 地址為下一個路由設備的MAC 地址。但是通過WireShark 抓包發現,SDN 網絡內部并不會有這樣的機制,也就是說數據包在SDN 環境下傳輸時,源MAC 和目的MAC 從始至終都不會發生改變,這對于我們的檢測方案有著至關重要的作用。SDN模擬環境運行在Ubuntu 18.04.4 LTS 上。處理器為Intel core i7-8550U,2.00GHz,內存為8GB RAM。SDN 的控制器部署在另一臺虛擬機,內存為4GB RAM。Hping3 作為生成攻擊流量的工具,它可以定制從鏈路層到應用層的幾乎所有報文信息,也可以自由設置攻擊頻率,數據段長度,還能選擇是否隨機化端口和IP。實驗階段生成了SYN DDoS、UDP DDoS、ACK DDoS,RST DDoS 和混雜型的DDoS 流量。并且在某些時間階段,應用了源IP 偽造的技術。背景流量在用戶終端抓取,并通過TCPRePlay 工具在SDN 模擬環境下進行重放。
為了全面地論證本文的方案設計,我們進行了多個實驗,包括熵檢測方案的實驗,SVM 檢測方案的實驗,特征有效性檢驗的實驗,攻防實戰的實驗。
3.5 節中提到,源IP 的熵和目的IP 的熵符合正態分布,為了驗證這個結論,實驗采集了4.5GB 的合法流量,計算得到了正常流量目標IP 分布的熵均值約為3.14,標準差為0.515;源IP 分布的熵均值為3.49,標準差為0.68。
通過將數據頻次以直方圖的形式描繪,如圖8,我們可以近似看到目的IP 的熵的確呈現明顯的正態分布特性。
為了驗證SVM 檢測方案的有效性,我們進行了SVM 檢測方案的相關實驗。該環節收集的DDoS 數據集來源于MiniNet 模擬器下的模擬攻擊。其中的流量類型包括SYN DDoS、UDP DDoS、ACK DDoS、RST DDoS 和Mixed DDoS。Mixed DDoS 指混雜了以上多種DDoS 類型的攻擊流量。為了較好地模擬真實環境,實驗還在多個終端上收集了40GB 的正常通信流量作為實驗的背景流量,并通過TcpReplay 工具在實驗階段進行重放。測試的DDoS 數據集來源于真實環境下的攻擊流量和模擬環境下的攻擊流量。真實的攻擊數據采集于2018 年,包含常見的UDP DDoS,ACK DDoS 和HTTP DDoS,在17min 發出了總共22.3GB 的流量。將原始數據輸入模擬的SDN 網絡,交換機流表就會自動記錄得到統計信息,再經過一系列運算處理,控制端才正式提取出來SVM 檢測方案所需的五大特征。我們最初在選擇使用哪些特征時,確立了一個基本準則,即特征的值應該盡量不受用戶規模的影響,這樣才能增加特征在不同應用場景下的普適性。在輸入SVM 分類模型之前,提取的特征還需要經過sigmoid 函數做一個標準化處理,這能夠協助SVM 模型實現更快速的收斂速度和更高的分類準確率。方案設置了50 輪的訓練周期,直到模型達到收斂。
Jin Ye[7]等人的方案和本文的方案原理類似,均采用了基于SVM 的分類算法,但與我們不同的是,他們的模型特征從始至終都基于細粒度的路由規則。即便如此,我們的分類結果,也顯示出優于他們測試結果的特性。表3 列出了SDDetector 與Jin Ye方案的分類結果對比。

表3 SVM 檢測結果對比Table 3 Jin Ye’s Plan & Our Plan
同時也在表4 列舉了SDDetector 針對真實攻擊下的檢測結果,以此證明實驗結果的可靠性。

表4 真實環境下的檢測結果Table 4 Detection Result in Real World
檢測結果證明SVM 的檢測方案可以很好地預警DDoS 流量,無論是實驗環境下生成的模擬DDoS,還是真實環境下的DDoS。
決定檢測方案有效性的一個核心因素就是特征的區分度,為此我們分別采集了合法流量,采用源IP 偽造技術的DDoS,以及采用真實IP 的DDoS,并計算流規則的數量、流規則下的數據包平均數量、流規則數據包數量的熵值、目的IP 的熵、上下行流量的比率具體值,得到以下實例圖(圖9~圖13)。
其中綠色代表合法流量,黃色代表采用源IP 偽造技術的DDoS,紅色代表采用真實IP 的DDoS。圖10 中,因為實驗條件受限,發起DDoS 攻擊的主機數目較少,因而采用真實IP 的DDoS 與合法流量產生的流規則數目都太少,在比例尺下發生了重疊,所以只能看到一種顏色。
可以看到,在絕大多數情況下,三種特征的區分度都非常明顯,因而能夠證明其用來進行分類的有效性。
控制器在SDN 框架中扮演了核心中樞的角色。它負責監控整個網絡的流量信息,部署新的流量規則,處理異常情況等。針對SDN 的攻擊手段很多都利用其中心化的架構,達到癱瘓控制器就攻陷整個SDN 網絡的效果,比如Packet-In 泛洪攻擊。交換機的流表也是容易被針對的點,如惡意規則注入攻擊[3],對流規則算法的探測攻擊[24],以及流表溢出攻擊[3]。
相對于傳統DDoS,針對SDN 的Packet-In 泛洪攻擊和數據層流表溢出攻擊破壞力更大,也更難檢測和防御。4.4.1 和4.4.2 對這兩種新型DDoS 的原理進行詳細介紹。
4.4.1 Packet-In 泛洪攻擊
OpenFlow 作為實現SDN 框架的具體協議,針對流經交換機的數據包定義了一套完備的處理機制。首先,根據數據包的報文信息,找到優先級最高的匹配流規則,再執行流規則下定義的指令;如果沒有找到匹配的流規則,則觸發Table-Miss 選項,向控制器發送Packet-In 信息,請求控制器下發一套適用于該數據包的流規則。鑒于SDN 網絡的中心化架構,數據包流經的所有交換機都需要向控制器發送一次Packet-In 信息,這對脆弱的控制器來說是一個極大的挑戰。Packet-In 泛洪攻擊的過程如圖14。攻擊者通過偽造匹配域中的元素,生成大量激發Table-Miss的數據包,迫使交換機發送Packet-In 數據包到控制器。控制器需要響應每一個Packet-In 信息,并下發相應的流規則。這不僅會堵塞南向通道的帶寬,還會附帶耗盡控制器的計算資源。據DevoFlow 測量,HP ProCurve 5406zl 型號的交換機僅僅可以支持17Mbps 大小的南向通道帶寬[3]。
4.4.2 數據層流表溢出攻擊
OpenFlow 交換機的流表也可能成為DDoS 攻擊的目標。我們知道一個流規則必然指定某幾個具體的元素,如果新的數據包到來不能匹配這些流規則的話,控制器會通過Flow-Mod 消息下發一個新的流規則。但是交換機能夠維持的流規則數量是有限的。每個流規則本身會占據內存,同時他們還會維系一個計數器,負責統計流經的數據包數和字節數等特征;系統還需要對每個流規則進行相應的硬性存活時間和軟性存活時間檢查。每添加一個流規則都是對交換機的一次資源占用。目前大多數商用交換機都使用TCAM 存儲流表。TCAM 是一種基于硬件的表項查找方法,支持對流表的并行訪問,也就是說可以進行一次比對就完成對流表中所有規則的匹配,因而面對海量的數據流量,效率可以大大提高,且幾乎不受表項數目增加的影響。但是其高昂成本和能耗導致很多商用交換機的存儲容量極其受限。如Pica 8 商用交換機只能夠存放8192 條流規則[25]。采用隨機化數據包字段的DDoS 攻擊能夠迅速占滿交換機的流表,導致新的規則無法添加,從而無法處理到來的新的合法數據。
鑒于Packet-In 泛洪攻擊與數據層流表溢出攻擊的巨大威脅,我們在設計DDoS 檢測防御框架時,需要重點考慮盡量少地觸發Table-Miss 選項,在之前研究中只有很少人提及這個想法。
4.4.3 兩階段攻擊
為了驗證SDDetector 在多種攻擊場景下的檢測效果,實驗需要構造針對SDN 的Packet-In 泛洪攻擊和流表溢出攻擊。因為觸發Packet-In 數據包只需要修改匹配域中的某個元素即可;觸發Flow-Mod 修改流表的指令也是同樣的原理。而本文方案細粒度流規則的匹配域包括了源IP,因而實驗采用了源IP 偽造技術模擬針對SDN 的Packet-In 泛洪攻擊和流表溢出攻擊。實際上,如果匹配域包括了其他元素,實驗也可以通過偽造其他元素觸發檢測。
實驗分為兩個階段分別進行。第一個階段引入源IP 偽造技術,模擬Packet-In 泛洪和流表溢出攻擊,第二個階段,采用真實源IP,模擬傳統的ACK 泛洪攻擊。下圖15 表示的從攻擊源抓到的流量分布圖,圖16 表示從受害者端抓到的流量分布圖。圖中顯示攻擊源抓到的流量會隨著時間起伏,研究發現這是由于CPU 和網絡適配器的性能不足導致的,即使在非MiniNet 環境下測試的流量也呈現這種狀況。鑒于其不會影響整體的實驗進程,我們大可以忽略不管。圖15 展示實驗在16:32:37 的時候激活了一次隨機源IP 的SYN DDoS,與此同時,受害者端的下行流量開始迅速激增。隨后模型探測到了可疑的攻擊,刪掉了相應的流規則,這導致在圖16 中16:32:39 處流量的快速下降。緊接著,新的細粒度的流規則開始創建。引入的時間函數告知攻擊在16:32:41 的時候正式被檢測發現,并立即添加了丟棄來自攻擊源數據包的流規則。然而圖16 發現,流量并沒有在16:32:41 直接下降到0。經過多番測試和驗證,發現新的丟棄規則發送前已經進入交換機等待路由的數據包會繼續向目標終端發送,因而仍會維持一段時間的數據傳輸。可以看到在受害者端的流量16:32:46 開始趨于0,而實際上從攻擊源端看到的流量并未停止。在第二個階段,實驗采用了真實源IP 機制。流程圖參見圖17,圖18。攻擊發起于16:14:26 左右,被檢測于16:14:32,與前面情況相同,受害者端的流量持續到16:14:37 才結束。但是從攻擊源的流量可以看到實際上在16:15:02 的時候攻擊才停止。
實驗證明,本文提出的融合熵檢測算法和SVM檢測算法的方案能夠在多種DDoS 環境下有效運行。Jin Ye[7]等人的方案也采用了SVM 的檢測算法,但是他們從初始階段就以細粒度的視角去做整體的檢測,這就意味著DDoS 攻擊時,控制器需要處理比我們多得多的Packet-In 信息,交換機也會運維比我們更多的流規則。而且,經過第一階段的過濾,我們的模型只對流向目標終端的流量進行進一步檢測,這能排除掉大量不必要的流量,節省運算資源,同時提高模型的檢測準確率。
為了展示本文提到的方案在多種DDoS 攻擊場景的效率,我們復現了Jin Ye 的方案,即從初始階段就開始采用細粒度的流表規則,并直接獲取所有的流表統計信息進行檢測。同時引入計時函數,獲取從收集統計數據到輸出檢測結果的耗時。

表5 方案耗時比較Table 5 Time consuming comparison of schemes
可以看到在面對采用隨機源IP 技術的Packet-In泛洪攻擊時,Jin Ye 的方案用時大大超過了我們的模型;尤其是攻擊頻率指數級增大的情況。原因很簡單。擁塞的南向通道使得Jin Ye 等人設想的統計信息獲取階段耗時太久。實驗發現,單純算法提取特征并分類的耗時不超過0.1s,也就是說,方案的核心負荷來源于獲取流表統計信息的過程。而SDDetector 在面對Packet-In 泛洪攻擊時,優先基于熵的算法進行檢測,只需要采集到1000 個Packet-In 數據包就可以完成,并在檢測結果出來后,迅速就阻斷了攻擊源,防止持續的Packet-In 數據包沖擊控制器。這些因素共同作用就使得我們的處理時間只占到他們處理時間的四分之一。
本文提出了一個SDN 環境下的輕量級DDoS 檢測與緩解方案。特別考慮了細粒度的流規則會給交換機和控制器帶來沉重的負擔,因而在兩種不同的情形下配置了不同粒度的流規則。同時,模型也融合了適用于不同攻擊場景下的檢測方案,即針對Packet-In 泛洪攻擊的熵值檢測方案,和針對無源IP偽造的攻擊手段的SVM 檢測方案。并且,模型只針對流向可疑的攻擊受害者的流量進行相應的細粒度流規則部署。這些舉措都是為了盡可能地去降低交換機與控制器的運行負荷。通過實驗發現,常規直接檢測方案面對源IP 隨機化時影響模型運行效率的最大因素來源于流表信息的獲取,這導致檢測的速率與保留真實源IP 時大相徑庭。在這種情況下,我們的模型會優先選擇更高效的基于Packet-In 的檢測方案。但是面對如HTTP 泛洪攻擊和HTTPS 泛洪攻擊場景時,Packet-In方案又會因為需要等待足夠檢測基準的Packet-In 數據包,而浪費時間,此時SVM 檢測方案反而能脫穎而出了。而且熵檢測方案提取的特征,并不能很好地反映真實流經交換機的流量的絕大多數特性。SDDetector 還具備雙層保險,即使瞬發的正常流量,如大熱的電視劇播出時間,或者假日的網絡購物促銷,觸發了閾值警告,熵檢測模型和SVM 檢測模型也能對其進行可靠的再分類。SVM 算法中選擇的5 個特征和熵檢測算法選擇的2 個特征都能夠明顯地反映流量的異常。
1) 實驗發現如果交換機部署的是細粒度的流規則,那海量的數據極易引發Packet-In 泛洪,從而導致控制器的處理壓力巨幅上升,這是SDN 的一個巨大隱患,但是絕大多數SDN 環境下的DDoS 研究都是基于單控制器[26]。未來我們需要嘗試去解決這種由于中心化導致的單點失效的問題,通過引入多控制器的平臺,實現控制器的負載均衡,從而有效增加SDN 網絡的彈性生存能力。
2) 此外,因為RYU API 的限制,本文的兩個檢測手段實際上是以串聯的形式布局,也就是需要先按照Packet-In 的模式做檢查,如果熵檢測模塊沒有得到檢測結果,且耗時超過正常值時,我們會立馬判定不存在Packet-In 泛洪,同時掐斷Packet-In 檢測,轉而為SVM 檢測。未來需要把這個串聯的布局,改為完全并行的布局,兩個方案同時實施,并且互相通信,一方完成攻擊檢測之后,另一方立即停止,降低負荷的同時,達到快速響應的目標。
3) 隨著人們對SDN 的進一步了解,除了傳統的泛洪式DDoS 外,還有一些精巧的DoS 手段也會對SDN 造成巨大的影響,如利用流規則Duration 的慢速攻擊手段[27],因為每個流規則都定義了一個軟性存活時間,在這個時間段如果沒有匹配的數據包,則流規則會被自動刪除。攻擊者于是每次都在軟性存活時間截止前發送一個數據包,從而能夠長期維系流規則,還能減少Packet-In 和數據包數量上的異常。此外,還有針對SDN拓撲發現階段的攻擊手段[28],針對OpenFlow 處理機制漏洞buffered-packet 的攻擊手段[29]都可能會造成SDN 的拒絕服務。未來還需要補充針對這些攻擊手段的檢測機制。
致 謝在此向對本文工作提出指導的老師、同學表示感謝,以及對提出建議的評審專家表示感謝。