董風(fēng)雷,秦存強(qiáng)
(1.山東聯(lián)通信息化部,山東 濟(jì)南 250001; 2.中國(guó)人民解放軍66295部隊(duì),河北 涿州 072750)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,當(dāng)前網(wǎng)絡(luò)應(yīng)用程序大部分都是實(shí)時(shí)處理的,如何快速地響應(yīng)用戶請(qǐng)求非常重要。當(dāng)網(wǎng)絡(luò)被DDoS攻擊[1]時(shí),系統(tǒng)會(huì)被阻塞,用戶請(qǐng)求得不到很好地響應(yīng),甚至造成整個(gè)網(wǎng)絡(luò)癱瘓[2]。此前對(duì)DDoS攻擊的研究主要在檢測(cè)方面,沒(méi)有很好的防御方法,并且檢測(cè)速度比較慢,不能實(shí)時(shí)發(fā)現(xiàn)攻擊[3]。
軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN)是由斯坦福大學(xué)提出的一種新型網(wǎng)絡(luò)架構(gòu),目的是通過(guò)軟件的方式來(lái)控制網(wǎng)絡(luò)[4-5]。OpenFlow作為SDN的南向接口協(xié)議,通過(guò)實(shí)現(xiàn)SDN控制器與交換機(jī)的交互,實(shí)現(xiàn)數(shù)據(jù)的控制與轉(zhuǎn)發(fā)分離[6-7]。已有一些研究試圖基于OpenFlow協(xié)議解決DDoS攻擊[8-9]。
Yao[10]等人提出了虛擬源地址驗(yàn)證(VAVE)來(lái)解決spoofed IPs,但首先,假設(shè)使用的是OpenFlow設(shè)備而不是SAVI設(shè)備,文獻(xiàn)指出雖然SAVI設(shè)備能夠很好地檢測(cè)出欺騙的IPs,但每個(gè)SAVI設(shè)備獨(dú)立工作,相互沒(méi)有通信,不能進(jìn)行信息共享,導(dǎo)致每個(gè)設(shè)備都要重復(fù)計(jì)算。Mousavi[11]研究了使用控制器的攻擊檢測(cè)方法,控制器作為SDN控制器的重要部分,如果以spoofed IP數(shù)據(jù)包來(lái)對(duì)控制器進(jìn)行攻擊,那么控制器資源將被攻擊所消耗,最終導(dǎo)致服務(wù)停止,使得SDN架構(gòu)崩潰。Jun-Sang Park[12]提出了一種基于SNMP的快速、輕量級(jí)的攻擊檢測(cè)算法,最小化檢測(cè)時(shí)間的同時(shí)還能保證較高的檢測(cè)率。這種方法雖然可以檢測(cè)DDoS攻擊,但會(huì)消耗大量資源,效率不高。
以上解決方案可以有效地檢測(cè)DDoS攻擊,但是仍具有一定的缺陷。首先是對(duì)網(wǎng)絡(luò)性能影響較大,其次只能檢測(cè)特定的攻擊。因此,本文提出了一種新的解決方案,結(jié)合OpenFlow和sFlow,快速、自動(dòng)地檢測(cè)和防御DDoS攻擊。
DDoS攻擊是DoS攻擊的加強(qiáng)版,傳統(tǒng)的DoS攻擊只是利用單臺(tái)服務(wù)器進(jìn)行攻擊,攻擊力度較小,而DDoS攻擊則會(huì)利用分布在各地的“僵尸主機(jī)”(被攻擊者入侵從而被控制的主機(jī))向要攻擊的主機(jī)發(fā)送大量偽造的數(shù)據(jù)包,使得網(wǎng)絡(luò)阻塞乃至服務(wù)器癱瘓。DDoS攻擊相比DoS攻擊具有更大的破壞力[13-14]。
OpenFlow是SDN標(biāo)準(zhǔn)的南向接口協(xié)議,OpenFlow通過(guò)流表來(lái)控制數(shù)據(jù)的轉(zhuǎn)發(fā),流表的生成和下發(fā)則完全由控制器控制,這樣控制器便擁有了數(shù)據(jù)控制的能力[15]。經(jīng)過(guò)多年發(fā)展,OpenFlow已有了1. 0,1. 3,1. 5等多個(gè)版本。在OpenFlow網(wǎng)絡(luò)中用戶可以根據(jù)實(shí)際需求來(lái)對(duì)網(wǎng)絡(luò)進(jìn)行定制,而不需要受限于硬件設(shè)施和路由協(xié)議的制約,極大地增強(qiáng)了靈活性[16]。
sFlow是一種基于采樣的網(wǎng)絡(luò)監(jiān)測(cè)技術(shù)。sFlow系統(tǒng)的基本原理為:sFlow Agent內(nèi)嵌在交換機(jī)的ASIC芯片中,把數(shù)據(jù)封裝為sFlow數(shù)據(jù)報(bào)然后源源不斷地傳送給遠(yuǎn)端sFlow Collector,采集器接收到sFlow數(shù)據(jù)包后進(jìn)行解析,從而可以獲得實(shí)時(shí)豐富的、全網(wǎng)范圍的傳輸流視圖[17-18]。sFlow采樣有2種方式:Flow采樣是在指定接口上按照特定的采樣比采集網(wǎng)絡(luò)數(shù)據(jù)包;Counter采樣是在指定接口上周期性地獲取流量的統(tǒng)計(jì)信息。
Flow采樣和Counter采樣是2類不同的采樣方式,之間不會(huì)相互影響,對(duì)信息的關(guān)注點(diǎn)也不同。Flow方式關(guān)注流量的詳細(xì)信息,更專注于具體流的分析,可以監(jiān)控和分析網(wǎng)絡(luò)上的流動(dòng)行為,而Counter采樣則關(guān)注接口流量的統(tǒng)計(jì)信息,一般2種方式交換機(jī)都會(huì)啟用。
本文設(shè)計(jì)的實(shí)時(shí)網(wǎng)絡(luò)入侵防御方案采用sFlow-RT接收sFlow Agent發(fā)送的數(shù)據(jù),通過(guò)解析數(shù)據(jù),實(shí)時(shí)查看網(wǎng)絡(luò)流量狀況;控制程序通過(guò)分析sFlow-RT收到的正常環(huán)境下的網(wǎng)絡(luò)流量,向sFlow-RT設(shè)定網(wǎng)絡(luò)流量閥值,超出閥值的設(shè)定為異常流量;sFlow-RT一旦發(fā)現(xiàn)異常流量,會(huì)上報(bào)到控制程序,控制程序采用數(shù)據(jù)包長(zhǎng)度與IP地址作為流量特征為DDoS攻擊提供判斷依據(jù),對(duì)超過(guò)sFlow閥值的異常流量進(jìn)行進(jìn)一步的判斷;若判斷為攻擊流量,則會(huì)通過(guò)SDN控制器下發(fā)相應(yīng)的OpenFlow流表項(xiàng),使得交換機(jī)丟棄匹配的數(shù)據(jù)包從而阻斷異常流量,使網(wǎng)絡(luò)恢復(fù)到正常水平。
系統(tǒng)主要包含3部分:網(wǎng)絡(luò)監(jiān)控、網(wǎng)絡(luò)管理和DDoS攻擊防御,如圖1所示。
圖1 DDoS攻擊防御系統(tǒng)設(shè)計(jì)
此模塊用于網(wǎng)絡(luò)流的實(shí)時(shí)監(jiān)控和管理,是 DDoS檢測(cè)的先決條件。本文采用sFlow技術(shù)進(jìn)行流量的采集。首先在交換機(jī)上配置sFlow,將報(bào)文發(fā)送到指定sFlow Collector進(jìn)行分析。sFlow系統(tǒng)結(jié)構(gòu)如圖2所示。
圖2 sFlow系統(tǒng)結(jié)構(gòu)
sFlow-RT作為一個(gè)sFlow Collector會(huì)持續(xù)接收sFlow Agent中發(fā)送過(guò)來(lái)的數(shù)據(jù)并轉(zhuǎn)化為易于操作的數(shù)據(jù),在瀏覽器中輸入Collector的IP地址可以實(shí)時(shí)查看網(wǎng)絡(luò)流量詳細(xì)情況。同時(shí)提供REST APIs來(lái)對(duì)數(shù)據(jù)進(jìn)行操作,可以輕松地對(duì)流進(jìn)行定義和管理。其中,sFlow-RT通過(guò)Counter采樣獲得流量的統(tǒng)計(jì)信息,上報(bào)到控制程序來(lái)確定流量閥值;通過(guò)Flow采樣來(lái)判斷和上報(bào)異常流量信息,并為控制程序提供正常網(wǎng)絡(luò)流量的判斷依據(jù)。
網(wǎng)絡(luò)管理模塊主要負(fù)責(zé)管理網(wǎng)絡(luò)流,并處理攻擊流。本文采用OpenDayLight(ODL)作為SDN控制器。ODL是一個(gè)使用Java開(kāi)發(fā)的開(kāi)源SDN控制器,具有模塊化、可擴(kuò)展及支持多協(xié)議等特點(diǎn)[19]。ODL提供了豐富的REST API對(duì)網(wǎng)絡(luò)進(jìn)行多方面的控制。本方案主要通過(guò)ODL來(lái)對(duì)OpenFlow流表進(jìn)行管理,相比于傳統(tǒng)交換機(jī),其對(duì)數(shù)據(jù)包的處理方式更加靈活。
本模塊是整個(gè)系統(tǒng)最關(guān)鍵的部分,負(fù)責(zé)對(duì)DDoS攻擊進(jìn)行實(shí)時(shí)檢測(cè)及處理。方案主要分為檢測(cè)和防御2個(gè)步驟。
2. 3. 1 攻擊檢測(cè)
攻擊檢測(cè)的目的是當(dāng)網(wǎng)絡(luò)中出現(xiàn)DDoS攻擊時(shí)可以實(shí)時(shí)檢測(cè)出來(lái),攻擊檢測(cè)流程如圖3所示。主要通過(guò)內(nèi)嵌在交換機(jī)中的sFlow Agent進(jìn)行流量采集,然后將流量封裝后發(fā)送到sFlow Collector進(jìn)行分析。
圖3 攻擊檢測(cè)流程
流量分析主要有以下幾步:
(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) 部署控制
開(kāi)啟腳本進(jìn)行實(shí)時(shí)檢測(cè)控制。
(6) 攻擊判斷
當(dāng)數(shù)據(jù)流和閾值都定義好后,一旦網(wǎng)絡(luò)中的數(shù)據(jù)流大于定義的閾值就會(huì)產(chǎn)生警告信息??刂瞥绦蚪邮盏骄嫘畔⒑?,會(huì)對(duì)警告信息進(jìn)行分析,判斷是否產(chǎn)生了網(wǎng)絡(luò)攻擊。
本文采用數(shù)據(jù)包的大小和IP地址作為DDoS攻擊發(fā)生的流特征指標(biāo)。由于 DDoS攻擊為多個(gè)“僵尸主機(jī)”攻擊一臺(tái)服務(wù)器,會(huì)出現(xiàn)IP地址匯聚的現(xiàn)象,因此采用IP地址作為特征指標(biāo)。在攻擊時(shí),攻擊者通常無(wú)視受害者的響應(yīng),只是通過(guò)攻擊腳本產(chǎn)生攻擊流量,攻擊流量的數(shù)據(jù)包大小通常是相對(duì)固定的,而合法流量由于請(qǐng)求、響應(yīng)和數(shù)據(jù)的不同而具有不同的數(shù)據(jù)包大小,因此采用數(shù)據(jù)包大小作為特征指標(biāo)。由于熵表示了系統(tǒng)的混亂程度,可以使用熵值來(lái)評(píng)估IP地址的混亂程度和數(shù)據(jù)包大小的一致程度,熵值計(jì)算公式如下:
式中,pi為某特征指標(biāo)出現(xiàn)的概率,例如源IP地址x出現(xiàn)的概率為pi=count(srcIP=x)/packages,packages為統(tǒng)計(jì)的所有數(shù)據(jù)包數(shù)量,count(srcIP=x)為統(tǒng)計(jì)的數(shù)據(jù)包中源IP為x的數(shù)據(jù)包數(shù)量。目的IP的計(jì)算方法類似。
控制程序通過(guò)sFlow定期采集交換機(jī)中流量,通過(guò)分析正常流量下IP地址和數(shù)據(jù)包的熵值作為判斷依據(jù)。當(dāng)產(chǎn)生異常流量時(shí)對(duì)異常流量的IP地址與數(shù)據(jù)包熵值進(jìn)行分析,判斷異常流量是否為攻擊流量,判斷流程如下:
① 根據(jù)最近N次正常流量的采樣計(jì)算源IP地址熵值nsip、目的IP地址熵值ndip、數(shù)據(jù)包大小的熵值npkg;
② 計(jì)算異常流量的源IP地址熵值wsip、目的IP地址熵值wdip、數(shù)據(jù)包大小的熵值wpkg;
③ 分別比較最近正常流量與異常流量的熵值,若出現(xiàn)wsip ④ 出現(xiàn)wsip 2. 3. 2 DDoS攻擊防御 檢測(cè)到網(wǎng)絡(luò)流的異常后還需要對(duì)異常流量進(jìn)行過(guò)濾??刂瞥绦蛲ㄟ^(guò)向ODL控制器傳遞主機(jī)網(wǎng)絡(luò)信息使ODL更新網(wǎng)絡(luò)。OpenFlow中的流表項(xiàng)主要包含3部分:匹配域、計(jì)數(shù)器和動(dòng)作[20]。而動(dòng)作主要用于對(duì)匹配的數(shù)據(jù)包進(jìn)行處理,如轉(zhuǎn)發(fā)、丟棄及排隊(duì)等操作。因此當(dāng)檢測(cè)到攻擊時(shí),ODL控制器會(huì)下發(fā)OpenFlow流表規(guī)則指定流表項(xiàng)的動(dòng)作,丟棄所有IP為攻擊方的數(shù)據(jù)包。如使用ODL,使用如下API,提交方式為PUT: http:∥127. 0. 0. 1:8181/restconf/config/opendaylightinventory:nodes/node/openflow:1/table/0/flow/1 并且請(qǐng)求體為: 表示對(duì)于所有匹配到的來(lái)源IP地址為10. 0. 0. 1的數(shù)據(jù)包全部丟棄。這樣就可以阻斷攻擊源從網(wǎng)絡(luò)流量恢復(fù)到正常水平,有效地解決了DDoS攻擊。 使用mininet來(lái)模擬SDN網(wǎng)絡(luò)環(huán)境創(chuàng)建4臺(tái)交換機(jī)。其中,OpenvSwitch(OVS)作為虛擬交換機(jī),可以提供2層交換功能,很好地控制虛擬網(wǎng)絡(luò)中的訪問(wèn)策略、網(wǎng)絡(luò)隔離及流量監(jiān)控等,同時(shí)也支持OpenFlow和sFlow。在另一臺(tái)機(jī)器上安裝SDN控制器和sFlow-RT。選用開(kāi)源的OpenDaylight 作為SDN控制器。使用sFlow-RT作為sFlowCollector對(duì)sFlow流量進(jìn)行分析。使用開(kāi)源的Tfn2k工具進(jìn)行DDoS攻擊模擬。所有軟件均安裝在Ubuntun 12. 04 LTS環(huán)境下,如圖4所示。 圖4 DDoS攻擊檢測(cè)系統(tǒng)架構(gòu) 在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設(shè)置為s1,sFlow collector 的IP地址為192. 168. 32. 131,端口6343。采樣比設(shè)置為500,每500個(gè)數(shù)據(jù)包進(jìn)行一次采樣發(fā)送給collector。輪詢間隔設(shè)置為10 s,sFlow agent每隔10 s會(huì)把數(shù)據(jù)包發(fā)送給sFlow collector。最后,通過(guò)設(shè)置一個(gè)閾值來(lái)判斷是否發(fā)生DDoS攻擊。 sFlow-RT實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)流量,同時(shí)啟動(dòng)控制腳本,當(dāng)網(wǎng)絡(luò)流量正常情況下不會(huì)通知控制器發(fā)動(dòng)控制。一旦檢測(cè)到流量超過(guò)設(shè)定的閾值,控制程序便會(huì)進(jìn)行攻擊檢測(cè),檢測(cè)為攻擊流量時(shí),會(huì)通過(guò)ODL的API發(fā)送OpenFlow流表規(guī)則,丟棄DDoS攻擊流量,網(wǎng)絡(luò)重新恢復(fù)到正常水平,如圖5所示。 圖5 DDoS檢測(cè)流程 通過(guò)Tfn2k使用如下命令模擬常見(jiàn)的DDoS攻擊。 ./tfn -f ip.txt -c 5 -i 192. 168. 32. 135 -p 8080 DDoS攻擊檢測(cè)與解除如圖6所示。從圖6可以看到,從交換機(jī)中通過(guò)的數(shù)據(jù)流與設(shè)置的閾值1 Mbps。當(dāng)交換機(jī)中通過(guò)的數(shù)據(jù)超過(guò)1 Mbps時(shí),將會(huì)啟動(dòng)控制策略,控制器通過(guò)下發(fā)OpenFlow流表規(guī)則來(lái)丟棄攻擊數(shù)據(jù)包,網(wǎng)絡(luò)流量恢復(fù)到正常水平。 圖6 DDoS攻擊檢測(cè)與解除 攻擊檢測(cè)和防御時(shí)間與流大小、閥值的關(guān)系如表1所示。攻擊檢測(cè)時(shí)間與攻擊流大小成反比,與閾值成正比。閾值大小和攻擊流量大小是相互獨(dú)立的,沒(méi)有依賴關(guān)系。 表1 流檢測(cè)與防御時(shí)間 如表2所示,通過(guò)對(duì)不同的流量大小配置不同的sFlow采樣率,可以使得在高速網(wǎng)絡(luò)下有更好的檢測(cè)性能。 表2 sFlow采樣率設(shè)置 DDoS攻擊種類有很多,如Ping Flood,Ping of Death,SYN Flood等都是比較常見(jiàn)的攻擊方式。目前大多數(shù)DDoS攻擊檢測(cè)方案只關(guān)注了攻擊的檢測(cè),卻并沒(méi)有一個(gè)很好的實(shí)時(shí)解決方案,也并沒(méi)有關(guān)注檢測(cè)對(duì)網(wǎng)絡(luò)性能的影響。本文方案和其他解決方案的對(duì)比結(jié)果如表3所示。 表3 本方案與其他方案對(duì)比 解決方案性能影響PingfloodPing ofdeathSYNfloodSpoofIPs防御攻擊VAVE-×××√×Early detection of DDoS√×××√×Kumar extended Open-flow switch[21]√----×Cloud Watcher√----×Light weight DDoS flood-ingattack detection×√√√××本文方案×√√√×√ 本系統(tǒng)通過(guò)sFlow-RT來(lái)異步的監(jiān)控網(wǎng)絡(luò)并統(tǒng)計(jì)網(wǎng)絡(luò)流量。從表3可以看到本系統(tǒng)相比于其他系統(tǒng)對(duì)性能的影響小,且支持Ping Flood,SYN Flood,Ping of Death等多種DDoS攻擊檢測(cè),并對(duì)攻擊進(jìn)行解除。 本文設(shè)計(jì)了一種SDN環(huán)境下結(jié)合OpenFlow與sFlow流采樣技術(shù)的DDoS攻擊檢測(cè)與緩解方案。該方案通過(guò)使用sFlow的采樣技術(shù)減小高速網(wǎng)絡(luò)下采集的數(shù)據(jù)量,IP地址和數(shù)據(jù)包大小作為流量分析的特征指標(biāo),結(jié)合sFlow-RT進(jìn)行攻擊檢測(cè),最后使用SDN與OpenFlow協(xié)議解決DDoS攻擊。不僅適用于低速網(wǎng)絡(luò)下,在高速網(wǎng)絡(luò)下依然表現(xiàn)良好,并且可以做到自動(dòng)的實(shí)時(shí)網(wǎng)絡(luò)監(jiān)控與DDoS攻擊緩解。通過(guò)對(duì)比,本方案相比于其他方案更有效,可以更好地解決DDoS攻擊,有效地保障網(wǎng)絡(luò)安全。3 實(shí)驗(yàn)及分析
3. 1 實(shí)驗(yàn)環(huán)境
3. 2 實(shí)驗(yàn)流程
3. 3 實(shí)驗(yàn)結(jié)果及分析
4 結(jié)束語(yǔ)