董風雷,秦存強
(1.山東聯通信息化部,山東 濟南 250001; 2.中國人民解放軍66295部隊,河北 涿州 072750)
隨著網絡技術的發展,當前網絡應用程序大部分都是實時處理的,如何快速地響應用戶請求非常重要。當網絡被DDoS攻擊[1]時,系統會被阻塞,用戶請求得不到很好地響應,甚至造成整個網絡癱瘓[2]。此前對DDoS攻擊的研究主要在檢測方面,沒有很好的防御方法,并且檢測速度比較慢,不能實時發現攻擊[3]。
軟件定義網絡(Software Defined Network,SDN)是由斯坦福大學提出的一種新型網絡架構,目的是通過軟件的方式來控制網絡[4-5]。OpenFlow作為SDN的南向接口協議,通過實現SDN控制器與交換機的交互,實現數據的控制與轉發分離[6-7]。已有一些研究試圖基于OpenFlow協議解決DDoS攻擊[8-9]。
Yao[10]等人提出了虛擬源地址驗證(VAVE)來解決spoofed IPs,但首先,假設使用的是OpenFlow設備而不是SAVI設備,文獻指出雖然SAVI設備能夠很好地檢測出欺騙的IPs,但每個SAVI設備獨立工作,相互沒有通信,不能進行信息共享,導致每個設備都要重復計算。Mousavi[11]研究了使用控制器的攻擊檢測方法,控制器作為SDN控制器的重要部分,如果以spoofed IP數據包來對控制器進行攻擊,那么控制器資源將被攻擊所消耗,最終導致服務停止,使得SDN架構崩潰。Jun-Sang Park[12]提出了一種基于SNMP的快速、輕量級的攻擊檢測算法,最小化檢測時間的同時還能保證較高的檢測率。這種方法雖然可以檢測DDoS攻擊,但會消耗大量資源,效率不高。
以上解決方案可以有效地檢測DDoS攻擊,但是仍具有一定的缺陷。首先是對網絡性能影響較大,其次只能檢測特定的攻擊。因此,本文提出了一種新的解決方案,結合OpenFlow和sFlow,快速、自動地檢測和防御DDoS攻擊。
DDoS攻擊是DoS攻擊的加強版,傳統的DoS攻擊只是利用單臺服務器進行攻擊,攻擊力度較小,而DDoS攻擊則會利用分布在各地的“僵尸主機”(被攻擊者入侵從而被控制的主機)向要攻擊的主機發送大量偽造的數據包,使得網絡阻塞乃至服務器癱瘓。DDoS攻擊相比DoS攻擊具有更大的破壞力[13-14]。
OpenFlow是SDN標準的南向接口協議,OpenFlow通過流表來控制數據的轉發,流表的生成和下發則完全由控制器控制,這樣控制器便擁有了數據控制的能力[15]。經過多年發展,OpenFlow已有了1. 0,1. 3,1. 5等多個版本。在OpenFlow網絡中用戶可以根據實際需求來對網絡進行定制,而不需要受限于硬件設施和路由協議的制約,極大地增強了靈活性[16]。
sFlow是一種基于采樣的網絡監測技術。sFlow系統的基本原理為:sFlow Agent內嵌在交換機的ASIC芯片中,把數據封裝為sFlow數據報然后源源不斷地傳送給遠端sFlow Collector,采集器接收到sFlow數據包后進行解析,從而可以獲得實時豐富的、全網范圍的傳輸流視圖[17-18]。sFlow采樣有2種方式:Flow采樣是在指定接口上按照特定的采樣比采集網絡數據包;Counter采樣是在指定接口上周期性地獲取流量的統計信息。
Flow采樣和Counter采樣是2類不同的采樣方式,之間不會相互影響,對信息的關注點也不同。Flow方式關注流量的詳細信息,更專注于具體流的分析,可以監控和分析網絡上的流動行為,而Counter采樣則關注接口流量的統計信息,一般2種方式交換機都會啟用。
本文設計的實時網絡入侵防御方案采用sFlow-RT接收sFlow Agent發送的數據,通過解析數據,實時查看網絡流量狀況;控制程序通過分析sFlow-RT收到的正常環境下的網絡流量,向sFlow-RT設定網絡流量閥值,超出閥值的設定為異常流量;sFlow-RT一旦發現異常流量,會上報到控制程序,控制程序采用數據包長度與IP地址作為流量特征為DDoS攻擊提供判斷依據,對超過sFlow閥值的異常流量進行進一步的判斷;若判斷為攻擊流量,則會通過SDN控制器下發相應的OpenFlow流表項,使得交換機丟棄匹配的數據包從而阻斷異常流量,使網絡恢復到正常水平。
系統主要包含3部分:網絡監控、網絡管理和DDoS攻擊防御,如圖1所示。

圖1 DDoS攻擊防御系統設計
此模塊用于網絡流的實時監控和管理,是 DDoS檢測的先決條件。本文采用sFlow技術進行流量的采集。首先在交換機上配置sFlow,將報文發送到指定sFlow Collector進行分析。sFlow系統結構如圖2所示。

圖2 sFlow系統結構
sFlow-RT作為一個sFlow Collector會持續接收sFlow Agent中發送過來的數據并轉化為易于操作的數據,在瀏覽器中輸入Collector的IP地址可以實時查看網絡流量詳細情況。同時提供REST APIs來對數據進行操作,可以輕松地對流進行定義和管理。其中,sFlow-RT通過Counter采樣獲得流量的統計信息,上報到控制程序來確定流量閥值;通過Flow采樣來判斷和上報異常流量信息,并為控制程序提供正常網絡流量的判斷依據。
網絡管理模塊主要負責管理網絡流,并處理攻擊流。本文采用OpenDayLight(ODL)作為SDN控制器。ODL是一個使用Java開發的開源SDN控制器,具有模塊化、可擴展及支持多協議等特點[19]。ODL提供了豐富的REST API對網絡進行多方面的控制。本方案主要通過ODL來對OpenFlow流表進行管理,相比于傳統交換機,其對數據包的處理方式更加靈活。
本模塊是整個系統最關鍵的部分,負責對DDoS攻擊進行實時檢測及處理。方案主要分為檢測和防御2個步驟。
2. 3. 1 攻擊檢測
攻擊檢測的目的是當網絡中出現DDoS攻擊時可以實時檢測出來,攻擊檢測流程如圖3所示。主要通過內嵌在交換機中的sFlow Agent進行流量采集,然后將流量封裝后發送到sFlow Collector進行分析。

圖3 攻擊檢測流程
流量分析主要有以下幾步:
(1) 定義流
Curl -H"Content-Type:application/json"-X PUT -data"{keys:'ipsource,ipdestination',value:'frame',filter:'sourcegroup=external&destinationgroup=internal'}" http:∥localhost:8080/flow/incoming/json
(2) 定義閾值
curl -H "Content-Type:application/json" -X --data "{metric:ddos,value:1000}" http:∥localhost:8080/threshold/incoming/json
(3) 查看閾值事件
[{"agent":"192. 168. 32. 131","dataSource":"4","eventID":5,"metric"}:"ddos","threshold":1000,"thresholdID":"ddos","timestamp":150806382000,"value":1531. 14941883324]
(4) 查看流信息
[{"agent":"192. 168. 32. 131","dataSource":"4","metricName":"ddos","metricValue":1582. 939650453271,"topKeys":[{"key":10. 0. 0. 1,10. 0. 0. 2","updateTime":152806433000,"value":1582. 93965044338071}],"updateTime":1552064324321}]
(5) 部署控制
開啟腳本進行實時檢測控制。
(6) 攻擊判斷
當數據流和閾值都定義好后,一旦網絡中的數據流大于定義的閾值就會產生警告信息。控制程序接收到警告信息后,會對警告信息進行分析,判斷是否產生了網絡攻擊。
本文采用數據包的大小和IP地址作為DDoS攻擊發生的流特征指標。由于 DDoS攻擊為多個“僵尸主機”攻擊一臺服務器,會出現IP地址匯聚的現象,因此采用IP地址作為特征指標。在攻擊時,攻擊者通常無視受害者的響應,只是通過攻擊腳本產生攻擊流量,攻擊流量的數據包大小通常是相對固定的,而合法流量由于請求、響應和數據的不同而具有不同的數據包大小,因此采用數據包大小作為特征指標。由于熵表示了系統的混亂程度,可以使用熵值來評估IP地址的混亂程度和數據包大小的一致程度,熵值計算公式如下:
式中,pi為某特征指標出現的概率,例如源IP地址x出現的概率為pi=count(srcIP=x)/packages,packages為統計的所有數據包數量,count(srcIP=x)為統計的數據包中源IP為x的數據包數量。目的IP的計算方法類似。
控制程序通過sFlow定期采集交換機中流量,通過分析正常流量下IP地址和數據包的熵值作為判斷依據。當產生異常流量時對異常流量的IP地址與數據包熵值進行分析,判斷異常流量是否為攻擊流量,判斷流程如下:
① 根據最近N次正常流量的采樣計算源IP地址熵值nsip、目的IP地址熵值ndip、數據包大小的熵值npkg;
② 計算異常流量的源IP地址熵值wsip、目的IP地址熵值wdip、數據包大小的熵值wpkg;
③ 分別比較最近正常流量與異常流量的熵值,若出現wsip ④ 出現wsip 2. 3. 2 DDoS攻擊防御 檢測到網絡流的異常后還需要對異常流量進行過濾。控制程序通過向ODL控制器傳遞主機網絡信息使ODL更新網絡。OpenFlow中的流表項主要包含3部分:匹配域、計數器和動作[20]。而動作主要用于對匹配的數據包進行處理,如轉發、丟棄及排隊等操作。因此當檢測到攻擊時,ODL控制器會下發OpenFlow流表規則指定流表項的動作,丟棄所有IP為攻擊方的數據包。如使用ODL,使用如下API,提交方式為PUT: http:∥127. 0. 0. 1:8181/restconf/config/opendaylightinventory:nodes/node/openflow:1/table/0/flow/1 并且請求體為: 表示對于所有匹配到的來源IP地址為10. 0. 0. 1的數據包全部丟棄。這樣就可以阻斷攻擊源從網絡流量恢復到正常水平,有效地解決了DDoS攻擊。 使用mininet來模擬SDN網絡環境創建4臺交換機。其中,OpenvSwitch(OVS)作為虛擬交換機,可以提供2層交換功能,很好地控制虛擬網絡中的訪問策略、網絡隔離及流量監控等,同時也支持OpenFlow和sFlow。在另一臺機器上安裝SDN控制器和sFlow-RT。選用開源的OpenDaylight 作為SDN控制器。使用sFlow-RT作為sFlowCollector對sFlow流量進行分析。使用開源的Tfn2k工具進行DDoS攻擊模擬。所有軟件均安裝在Ubuntun 12. 04 LTS環境下,如圖4所示。 圖4 DDoS攻擊檢測系統架構 在OVS中使用如下命令配置sFlow。 sudo ovs-vsctl -- --id=@sflow create sflow agent=s1 target=”192. 168. 32. 131:6343” header=128 sampling=500 polling=20 -set-bridge s1 sflow=@sflow sFlow agent設置為s1,sFlow collector 的IP地址為192. 168. 32. 131,端口6343。采樣比設置為500,每500個數據包進行一次采樣發送給collector。輪詢間隔設置為10 s,sFlow agent每隔10 s會把數據包發送給sFlow collector。最后,通過設置一個閾值來判斷是否發生DDoS攻擊。 sFlow-RT實時監控網絡流量,同時啟動控制腳本,當網絡流量正常情況下不會通知控制器發動控制。一旦檢測到流量超過設定的閾值,控制程序便會進行攻擊檢測,檢測為攻擊流量時,會通過ODL的API發送OpenFlow流表規則,丟棄DDoS攻擊流量,網絡重新恢復到正常水平,如圖5所示。 圖5 DDoS檢測流程 通過Tfn2k使用如下命令模擬常見的DDoS攻擊。 ./tfn -f ip.txt -c 5 -i 192. 168. 32. 135 -p 8080 DDoS攻擊檢測與解除如圖6所示。從圖6可以看到,從交換機中通過的數據流與設置的閾值1 Mbps。當交換機中通過的數據超過1 Mbps時,將會啟動控制策略,控制器通過下發OpenFlow流表規則來丟棄攻擊數據包,網絡流量恢復到正常水平。 圖6 DDoS攻擊檢測與解除 攻擊檢測和防御時間與流大小、閥值的關系如表1所示。攻擊檢測時間與攻擊流大小成反比,與閾值成正比。閾值大小和攻擊流量大小是相互獨立的,沒有依賴關系。 表1 流檢測與防御時間 如表2所示,通過對不同的流量大小配置不同的sFlow采樣率,可以使得在高速網絡下有更好的檢測性能。 表2 sFlow采樣率設置 DDoS攻擊種類有很多,如Ping Flood,Ping of Death,SYN Flood等都是比較常見的攻擊方式。目前大多數DDoS攻擊檢測方案只關注了攻擊的檢測,卻并沒有一個很好的實時解決方案,也并沒有關注檢測對網絡性能的影響。本文方案和其他解決方案的對比結果如表3所示。 表3 本方案與其他方案對比 解決方案性能影響PingfloodPing ofdeathSYNfloodSpoofIPs防御攻擊VAVE-×××√×Early detection of DDoS√×××√×Kumar extended Open-flow switch[21]√----×Cloud Watcher√----×Light weight DDoS flood-ingattack detection×√√√××本文方案×√√√×√ 本系統通過sFlow-RT來異步的監控網絡并統計網絡流量。從表3可以看到本系統相比于其他系統對性能的影響小,且支持Ping Flood,SYN Flood,Ping of Death等多種DDoS攻擊檢測,并對攻擊進行解除。 本文設計了一種SDN環境下結合OpenFlow與sFlow流采樣技術的DDoS攻擊檢測與緩解方案。該方案通過使用sFlow的采樣技術減小高速網絡下采集的數據量,IP地址和數據包大小作為流量分析的特征指標,結合sFlow-RT進行攻擊檢測,最后使用SDN與OpenFlow協議解決DDoS攻擊。不僅適用于低速網絡下,在高速網絡下依然表現良好,并且可以做到自動的實時網絡監控與DDoS攻擊緩解。通過對比,本方案相比于其他方案更有效,可以更好地解決DDoS攻擊,有效地保障網絡安全。3 實驗及分析
3. 1 實驗環境

3. 2 實驗流程

3. 3 實驗結果及分析




4 結束語