王佳佳
(泰州職業(yè)技術(shù)學(xué)院信息工程學(xué)院,江蘇泰州225300)
DDoS(Distributed Denial of Service) 攻擊是利用足夠數(shù)目的傀儡機(jī)產(chǎn)生數(shù)量巨大的攻擊包對一個或多個目標(biāo)實施DoS攻擊,耗盡受害端的資源,最終使得受害端喪失提供正常網(wǎng)絡(luò)服務(wù)的能力。DDoS攻擊是目前網(wǎng)絡(luò)安全最嚴(yán)重的威脅之一,是對網(wǎng)絡(luò)可用性的嚴(yán)峻挑戰(zhàn)。如何準(zhǔn)確盡快地檢測出DDoS攻擊,是當(dāng)前研究的重點。
本文提出了一種基于源端網(wǎng)絡(luò)并適合所有類型DDoS攻擊檢測的算法,根據(jù)攻擊發(fā)生時出入流量的不對稱特性,利用Bloom Filter結(jié)構(gòu)檢測出攻擊。該方法具有準(zhǔn)確性高,能夠在線實時檢測,更適合大流量背景,并且易于追溯攻擊源等特點。本文方法主要采用了兩種技術(shù):1)Bloom Filter數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)使用靜態(tài)固定存儲空間和靜態(tài)存儲方法,能夠用較少的空間存儲大量的數(shù)據(jù)包信息,采用簡單加減計算避免了復(fù)雜Hash函數(shù)的選擇,不僅進(jìn)一步節(jié)約了網(wǎng)絡(luò)資源而且提高了準(zhǔn)確度;2)CUSUM檢測方法,CUSUM方法的特點是能夠盡快反映出攻擊發(fā)生時數(shù)據(jù)包特征的變化情況。本文方法不僅具有準(zhǔn)確性好、檢測迅速、消耗的計算資源少等特點,而且能夠區(qū)分正常的網(wǎng)絡(luò)擁塞與攻擊,同時適用于所有的DDoS攻擊檢測。
所謂源端DDoS攻擊檢測指的是將檢測算法布置在發(fā)出攻擊數(shù)據(jù)包的主機(jī)所處網(wǎng)絡(luò)的邊界路由器上。將DDoS攻擊檢測系統(tǒng)部署在源端,可以使得攻擊數(shù)據(jù)流在進(jìn)入網(wǎng)絡(luò)之前被阻止,將攻擊對網(wǎng)絡(luò)的威脅降到最低,是最為理想的一種方法[1]。目前針對源端檢測已經(jīng)有很多的解決方案。文獻(xiàn)[2]提出了數(shù)據(jù)包過濾的方法,即將惡意數(shù)據(jù)包從網(wǎng)絡(luò)中區(qū)分出來,然后在網(wǎng)絡(luò)層安裝過濾工具,將惡意數(shù)據(jù)包在到達(dá)目標(biāo)網(wǎng)段之前刪除。但該方法不能正確檢測出所有DDoS攻擊數(shù)據(jù)包,而且檢測消耗的資源較大。文獻(xiàn)[3]假設(shè)DDoS攻擊發(fā)生時僵尸主機(jī)都在使用帶寬的上限發(fā)送數(shù)據(jù)包,不能對其他請求及時回應(yīng),因此提出了通過向網(wǎng)絡(luò)中發(fā)送廣播數(shù)據(jù)包,沒有應(yīng)答的即為攻擊機(jī)的方法。但攻擊發(fā)生時網(wǎng)絡(luò)中本身存在的數(shù)據(jù)包就已經(jīng)很多,此舉無異于雪上加霜。
本文提出的方法只需要對不同來源的數(shù)據(jù)包做簡單計算即可檢測是否發(fā)生攻擊,不會對網(wǎng)絡(luò)性能產(chǎn)生較大影響。采用DDoS攻擊的基本特征,能夠檢測出所有類型的DDoS攻擊。檢測方法簡單使得本文方法可以部署在任意網(wǎng)絡(luò)出口設(shè)備中(即局域網(wǎng)和廣域網(wǎng)相連接的設(shè)備,如路由器等)。
文獻(xiàn)[4]等從不同角度分析了DDoS攻擊的特點,并給出了不同的分類標(biāo)準(zhǔn)。
攻擊的形式多種多樣,但各種DDoS攻擊在發(fā)生時都具有以下若干特征:(1)網(wǎng)絡(luò)流量的目的地址過于集中;(2) 網(wǎng)絡(luò)中出現(xiàn)大量涌向受害端的攻擊數(shù)據(jù)包;(3)攻擊數(shù)據(jù)包很快使得受害端網(wǎng)絡(luò)擁塞甚至拒絕服務(wù);(4)網(wǎng)絡(luò)中的攻擊數(shù)據(jù)包會持續(xù)一段時間。
從以上描述可知,DDoS的特征就是攻擊發(fā)生時會出現(xiàn)數(shù)量巨大的攻擊數(shù)據(jù)包使得受害端拒絕服務(wù)[5]。因此從網(wǎng)絡(luò)中攻擊數(shù)據(jù)包的數(shù)量變化進(jìn)行分析,就可能識別出各種DDoS攻擊。
Bloom Filter在1970年由布隆提出,是由一些二進(jìn)制向量和隨機(jī)函數(shù)組成的數(shù)據(jù)結(jié)構(gòu)。它的存儲空間和插入查詢時間都是常數(shù),不會隨著存儲元素個數(shù)的增加而變化。Bloom Filter是基于一行初始值為0的m位比特(b1,b2,…,bm),再使用k個相互獨立的hash函數(shù),每個hash函數(shù)的返回值在1到m之間,被擊中的比特位設(shè)置值為1。在DDoS攻擊發(fā)生時,數(shù)據(jù)流量較大,應(yīng)用Bloom Filter則具有明顯優(yōu)勢[6]。
本文算法基于Bloom Filter的數(shù)據(jù)結(jié)構(gòu),并作了一定的改進(jìn),三級向量、多比特位,增大了應(yīng)用范圍;采用簡單加減計算避免了復(fù)雜Hash函數(shù)的選擇,不僅進(jìn)一步節(jié)約了網(wǎng)絡(luò)資源而且提高了準(zhǔn)確度。DDoS攻擊發(fā)生時,網(wǎng)絡(luò)中會出現(xiàn)大量的異常攻擊數(shù)據(jù)包,這勢必使網(wǎng)絡(luò)中數(shù)據(jù)包數(shù)量相關(guān)的統(tǒng)計特性相比正常情況發(fā)生特定的變化。因此,通過合適的算法定能檢測出攻擊的存在。首先說明如何計算網(wǎng)絡(luò)中出現(xiàn)異常數(shù)據(jù)包的次數(shù),路由器上每個端口處理的數(shù)據(jù)包都會分成inbound和outbound兩個方向,每個端口對應(yīng)于Bloom Filter中的一個計數(shù)器。我們改進(jìn)了Bloom Filter結(jié)構(gòu),使得一個網(wǎng)絡(luò)設(shè)備端口對應(yīng)于三級向量Ti、To和Ts(如圖1所示)。改進(jìn)后的結(jié)構(gòu)能夠方便的統(tǒng)計出設(shè)備各個端口數(shù)據(jù)包的流量。
圖1 算法中使用的Bloom Filter結(jié)構(gòu)
由于網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)量不能僅用單個0或者1表達(dá),本文將單個比特位進(jìn)行了擴(kuò)展,一定程度上增大了存儲空間,但這和攻擊發(fā)生時進(jìn)行測試所需要的數(shù)據(jù)存儲空間相比是很小的。
首先初始化Bloom Filter,使得Ti、To和Ts等一維m位向量的初始值均為0。Ti用來保存經(jīng)過路由器的入數(shù)據(jù)包的數(shù)量,To用來保存經(jīng)過路由器的出數(shù)據(jù)包的數(shù)量。Ti、To中的值均為大于等于0的正整數(shù),如果Ti中的計數(shù)器為0,則說明沒有數(shù)據(jù)包從該接口進(jìn)入網(wǎng)絡(luò)設(shè)備,如果To中的計數(shù)器為0,則說明沒有數(shù)據(jù)包從該接口被轉(zhuǎn)發(fā)出去。然后將Bloom Filter計算值加入到對應(yīng)行的比特位當(dāng)中,計算并存儲Ts值。
當(dāng)數(shù)據(jù)包到來時,基于Bloom Filter的信息提取算法描述如下:
(1)分析該數(shù)據(jù)包所在的接口,并在Bloom Filter結(jié)構(gòu)中找到對應(yīng)的列Cj(1<=j<=m);
(2) 分析該數(shù)據(jù)包的接口方向,如果是入數(shù)據(jù)包則Ti對應(yīng)的計數(shù)器Cj增加1;如果是出數(shù)據(jù)包則To對應(yīng)的計數(shù)器Cj增加1;
(3) 計算并重置向量Ts中計數(shù)器Cj的值。Ts中計數(shù)器Cj的值等于Ti中計數(shù)器Cj的值和To中計數(shù)器Cj的值差值的絕對值。
網(wǎng)絡(luò)中tcp占據(jù)絕大部分流量[7]。在正常情況下,三次握手是能夠成功的,即網(wǎng)絡(luò)設(shè)備各個接口出入方向的數(shù)據(jù)包數(shù)量差異是限制在一定范圍內(nèi)的。此外還有少量不需應(yīng)答的udp數(shù)據(jù)包,在正常的網(wǎng)絡(luò)行為模式下,udp數(shù)據(jù)包受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機(jī)性能的限制,傳輸速度要遠(yuǎn)遠(yuǎn)低于攻擊發(fā)生時數(shù)據(jù)包的傳輸速度。通過網(wǎng)絡(luò)日常行為模式的收集,調(diào)整閾值,階段性重置計數(shù)器可以消除此類影響。因此,TS中m個計數(shù)器的和可以限制在閾值范圍內(nèi)。即使在正常網(wǎng)絡(luò)發(fā)生擁塞時,用戶正常刷新網(wǎng)絡(luò)數(shù)據(jù)的速度仍然要遠(yuǎn)低于使用DDoS攻擊工具的速度,因此TS中的m個計數(shù)器的和仍然可以限制在閾值范圍內(nèi)。當(dāng)DDoS攻擊發(fā)生時,網(wǎng)絡(luò)中會不斷出現(xiàn)大量不能完成三次握手只能進(jìn)行單向傳輸?shù)臄?shù)據(jù)包,因此TS中向量計數(shù)器的累加和會迅速超出閾值,即發(fā)生了異常。
觀察網(wǎng)絡(luò)數(shù)據(jù)包統(tǒng)計分布的微小變化很難。如果使用CUSUM算法則簡單很多。CUSUM最早用于連續(xù)分析技術(shù),通常用于檢測變化序列,是目前已知最優(yōu)的變點算法之一。原始的CUSUM序列算法描述如下:CUSUM(i=Qi-k)+CUSUMi-1。其中Qi為統(tǒng)計序列。由于網(wǎng)絡(luò)中數(shù)據(jù)流量不能用簡單的高斯或其他線性模型來描述,因此本文采用無參數(shù)的CUSUM算法,無參數(shù)的CUSUM算法不受具體參數(shù)值的影響,并且計算量較小,應(yīng)用在DDoS攻擊檢測當(dāng)中較為理想。具體公式如下:
本文采用TS中各計數(shù)器值的累加結(jié)果作為檢測統(tǒng)計序列Qi,正常情況下,這是一個接近零的序列。我們再構(gòu)造一個新的隨機(jī)序列假設(shè)E(Q)i=α,則參數(shù)k是常數(shù),且滿足α 正常情況下,Zi序列是負(fù)值且相對穩(wěn)定。在發(fā)生DDoS攻擊的情況下,隨著攻擊包的產(chǎn)生,TS中部分計數(shù)器的值會大幅增加,經(jīng)過本文第3節(jié)對數(shù)據(jù)的處理,Zi序列會迅速提升為一個正的數(shù)值。為了使得本文算法更加穩(wěn)定可靠,同時避免擁塞引起的誤判,本文每隔一定時間t會對Bloom Filter中的數(shù)值進(jìn)行重置,一段時間(>)t之后可以得到一個根據(jù)時間間隔t變化的序列{Zi,i=1,2,3…},其中 Zi= (Qi-k) +Zi-1。 因此本文CUSUM算法的計算結(jié)果有正值和負(fù)值之分。如果結(jié)果是負(fù)值,表明當(dāng)前網(wǎng)絡(luò)處于正常工作狀態(tài);如果結(jié)果是正值且以很快速度不斷增大,表明當(dāng)前網(wǎng)絡(luò)可能已經(jīng)受到DDoS攻擊。 攻擊發(fā)生時,算法結(jié)果會迅速提升為正值,但提升到什么程度才能認(rèn)為發(fā)生DDoS攻擊呢?閾值N的設(shè)置就尤為重要了,通過一段時間內(nèi)在正常情況下實際網(wǎng)絡(luò)數(shù)據(jù)包數(shù)量變化的統(tǒng)計可以找出合適的閾值。如果Yi沒有超過N則返回結(jié)果為0,認(rèn)為網(wǎng)絡(luò)仍然處于正常狀態(tài),一旦Yi超過N則返回結(jié)果為1,認(rèn)為發(fā)生了攻擊,公式如下: 本文檢測采用的攻擊場景測試集是DARPA提供的數(shù)據(jù)集。m值的選取依賴于局域網(wǎng)直接和外網(wǎng)相連的網(wǎng)絡(luò)設(shè)備接口數(shù)量,m值太小則不利于網(wǎng)絡(luò)的可擴(kuò)展性,m值太大則浪費存儲空間。目前,一臺路由器接口數(shù)量一般不超過20個,為了實現(xiàn)向上兼容,本文選取參數(shù)m的數(shù)值為100。采樣間隔如果太小,則容易影響設(shè)備性能,采樣間隔如果太大,則容易漏掉一部分攻擊包。因此實驗中,采樣間隔設(shè)置為200個數(shù)據(jù)包,每一級的向量組均設(shè)置為m=100位。正常情況下,CUSUM算法檢測序列隨時間沒有特別明顯的變化,本文實驗使用的正常數(shù)據(jù)包來源于當(dāng)時實際網(wǎng)絡(luò)轉(zhuǎn)發(fā)的數(shù)據(jù)(包括tcp包和udp包)。通過Bloom Filter計數(shù)器對實際網(wǎng)絡(luò)轉(zhuǎn)發(fā)數(shù)據(jù)的計算,得出正常情況下Qi的最大值為20,同時考慮到現(xiàn)有設(shè)備的容錯能力,本文選取攻擊檢測閾值N=20。 圖2 本文算法檢測結(jié)果 圖2 則顯示了本文算法在攻擊檢測的過程中能夠盡快發(fā)現(xiàn)攻擊。橫坐標(biāo)表示本文算法檢測的數(shù)據(jù)包的數(shù)量,縱坐標(biāo)表示CUSUM算法的計算值。正常狀態(tài)下,CUSUM計算值都在正常范圍內(nèi)(例如負(fù)值)。但是當(dāng)檢測到約420000個數(shù)據(jù)包時,CUSUM檢測值突然變?yōu)檩^大的正值且超過了閾值,說明此時發(fā)生了攻擊。 在檢測DDoS攻擊的過程中,很多源端檢測方法往往不能檢測出所有類型的攻擊。本文提出了一種有效的可以部署在源端的DDoS攻擊檢測方法,可以在只出現(xiàn)少量攻擊數(shù)據(jù)包的情況下準(zhǔn)確發(fā)現(xiàn)所有類型的DDoS攻擊,適用于源端檢測,也為監(jiān)控攻擊數(shù)據(jù)包的來源以及通知受害端進(jìn)行防御贏得了寶貴的時間。另外,在攻擊流量較小時進(jìn)行檢測及監(jiān)控,對網(wǎng)絡(luò)的性能也不會有太大的影響,為阻止后續(xù)攻擊提供了方便,具有一定的現(xiàn)實意義。 現(xiàn)有的DDoS攻擊檢測算法一般在檢測成功之后仍然無法將攻擊數(shù)據(jù)流直接過濾,因此,結(jié)合DDoS攻擊檢測的研究還需進(jìn)一步做好過濾攻擊包的工作,以更好的阻止DDoS攻擊。 [1]嚴(yán)芬,王佳佳,陳軼群,等.一種輕量級的 SYN Flooding攻擊檢測方法[J].計算機(jī)科學(xué),2008,35(9):72-75. [2]X.Liu,X.Yang,and Y.Lu.To filter or authorize:network-layer DoSdefense against multimillion-node botnets[C].Seattle Washington USA,2008. [3]M Walfish,M Vutukuru,H Balakrishan,D Karger,S Shenker.DDoSdefense by offense[C].SIGCOMM,2006. [4]CHANGRKC.Defendingagainst flooding-based distributed denial-of-service attacks:Atutoria1[J].IEEE Communications Magazine,2002,40(10):42—51. [5]J Jung,B Krishnamurthy,M Rabinovich.Flash Crowds and Denial of Service Attacks:Characterization and Implications for CDNs and Web Sites[C].Honolulu,Hawaii,USA,2002. [6]嚴(yán)芬,王佳佳,殷新春,等.一種基于 Hurst參數(shù)的 SYN Flooding攻擊實時檢測方法[J].計算機(jī)科學(xué),2008,35(12):109-113,162. [7]張藝瀕,張志斌,趙詠,等.TCP與UDP網(wǎng)絡(luò)流量對比分析研究[J].計算機(jī)應(yīng)用研究,2010,27(6):2192-2197.5 實驗結(jié)果及分析
6 結(jié)語