王佳佳
(泰州職業技術學院信息工程學院,江蘇泰州225300)
DDoS(Distributed Denial of Service) 攻擊是利用足夠數目的傀儡機產生數量巨大的攻擊包對一個或多個目標實施DoS攻擊,耗盡受害端的資源,最終使得受害端喪失提供正常網絡服務的能力。DDoS攻擊是目前網絡安全最嚴重的威脅之一,是對網絡可用性的嚴峻挑戰。如何準確盡快地檢測出DDoS攻擊,是當前研究的重點。
本文提出了一種基于源端網絡并適合所有類型DDoS攻擊檢測的算法,根據攻擊發生時出入流量的不對稱特性,利用Bloom Filter結構檢測出攻擊。該方法具有準確性高,能夠在線實時檢測,更適合大流量背景,并且易于追溯攻擊源等特點。本文方法主要采用了兩種技術:1)Bloom Filter數據結構,該結構使用靜態固定存儲空間和靜態存儲方法,能夠用較少的空間存儲大量的數據包信息,采用簡單加減計算避免了復雜Hash函數的選擇,不僅進一步節約了網絡資源而且提高了準確度;2)CUSUM檢測方法,CUSUM方法的特點是能夠盡快反映出攻擊發生時數據包特征的變化情況。本文方法不僅具有準確性好、檢測迅速、消耗的計算資源少等特點,而且能夠區分正常的網絡擁塞與攻擊,同時適用于所有的DDoS攻擊檢測。
所謂源端DDoS攻擊檢測指的是將檢測算法布置在發出攻擊數據包的主機所處網絡的邊界路由器上。將DDoS攻擊檢測系統部署在源端,可以使得攻擊數據流在進入網絡之前被阻止,將攻擊對網絡的威脅降到最低,是最為理想的一種方法[1]。目前針對源端檢測已經有很多的解決方案。文獻[2]提出了數據包過濾的方法,即將惡意數據包從網絡中區分出來,然后在網絡層安裝過濾工具,將惡意數據包在到達目標網段之前刪除。但該方法不能正確檢測出所有DDoS攻擊數據包,而且檢測消耗的資源較大。文獻[3]假設DDoS攻擊發生時僵尸主機都在使用帶寬的上限發送數據包,不能對其他請求及時回應,因此提出了通過向網絡中發送廣播數據包,沒有應答的即為攻擊機的方法。但攻擊發生時網絡中本身存在的數據包就已經很多,此舉無異于雪上加霜。
本文提出的方法只需要對不同來源的數據包做簡單計算即可檢測是否發生攻擊,不會對網絡性能產生較大影響。采用DDoS攻擊的基本特征,能夠檢測出所有類型的DDoS攻擊。檢測方法簡單使得本文方法可以部署在任意網絡出口設備中(即局域網和廣域網相連接的設備,如路由器等)。
文獻[4]等從不同角度分析了DDoS攻擊的特點,并給出了不同的分類標準。
攻擊的形式多種多樣,但各種DDoS攻擊在發生時都具有以下若干特征:(1)網絡流量的目的地址過于集中;(2) 網絡中出現大量涌向受害端的攻擊數據包;(3)攻擊數據包很快使得受害端網絡擁塞甚至拒絕服務;(4)網絡中的攻擊數據包會持續一段時間。
從以上描述可知,DDoS的特征就是攻擊發生時會出現數量巨大的攻擊數據包使得受害端拒絕服務[5]。因此從網絡中攻擊數據包的數量變化進行分析,就可能識別出各種DDoS攻擊。
Bloom Filter在1970年由布隆提出,是由一些二進制向量和隨機函數組成的數據結構。它的存儲空間和插入查詢時間都是常數,不會隨著存儲元素個數的增加而變化。Bloom Filter是基于一行初始值為0的m位比特(b1,b2,…,bm),再使用k個相互獨立的hash函數,每個hash函數的返回值在1到m之間,被擊中的比特位設置值為1。在DDoS攻擊發生時,數據流量較大,應用Bloom Filter則具有明顯優勢[6]。
本文算法基于Bloom Filter的數據結構,并作了一定的改進,三級向量、多比特位,增大了應用范圍;采用簡單加減計算避免了復雜Hash函數的選擇,不僅進一步節約了網絡資源而且提高了準確度。DDoS攻擊發生時,網絡中會出現大量的異常攻擊數據包,這勢必使網絡中數據包數量相關的統計特性相比正常情況發生特定的變化。因此,通過合適的算法定能檢測出攻擊的存在。首先說明如何計算網絡中出現異常數據包的次數,路由器上每個端口處理的數據包都會分成inbound和outbound兩個方向,每個端口對應于Bloom Filter中的一個計數器。我們改進了Bloom Filter結構,使得一個網絡設備端口對應于三級向量Ti、To和Ts(如圖1所示)。改進后的結構能夠方便的統計出設備各個端口數據包的流量。

圖1 算法中使用的Bloom Filter結構
由于網絡數據包的數量不能僅用單個0或者1表達,本文將單個比特位進行了擴展,一定程度上增大了存儲空間,但這和攻擊發生時進行測試所需要的數據存儲空間相比是很小的。
首先初始化Bloom Filter,使得Ti、To和Ts等一維m位向量的初始值均為0。Ti用來保存經過路由器的入數據包的數量,To用來保存經過路由器的出數據包的數量。Ti、To中的值均為大于等于0的正整數,如果Ti中的計數器為0,則說明沒有數據包從該接口進入網絡設備,如果To中的計數器為0,則說明沒有數據包從該接口被轉發出去。然后將Bloom Filter計算值加入到對應行的比特位當中,計算并存儲Ts值。
當數據包到來時,基于Bloom Filter的信息提取算法描述如下:
(1)分析該數據包所在的接口,并在Bloom Filter結構中找到對應的列Cj(1<=j<=m);
(2) 分析該數據包的接口方向,如果是入數據包則Ti對應的計數器Cj增加1;如果是出數據包則To對應的計數器Cj增加1;
(3) 計算并重置向量Ts中計數器Cj的值。Ts中計數器Cj的值等于Ti中計數器Cj的值和To中計數器Cj的值差值的絕對值。
網絡中tcp占據絕大部分流量[7]。在正常情況下,三次握手是能夠成功的,即網絡設備各個接口出入方向的數據包數量差異是限制在一定范圍內的。此外還有少量不需應答的udp數據包,在正常的網絡行為模式下,udp數據包受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制,傳輸速度要遠遠低于攻擊發生時數據包的傳輸速度。通過網絡日常行為模式的收集,調整閾值,階段性重置計數器可以消除此類影響。因此,TS中m個計數器的和可以限制在閾值范圍內。即使在正常網絡發生擁塞時,用戶正常刷新網絡數據的速度仍然要遠低于使用DDoS攻擊工具的速度,因此TS中的m個計數器的和仍然可以限制在閾值范圍內。當DDoS攻擊發生時,網絡中會不斷出現大量不能完成三次握手只能進行單向傳輸的數據包,因此TS中向量計數器的累加和會迅速超出閾值,即發生了異常。
觀察網絡數據包統計分布的微小變化很難。如果使用CUSUM算法則簡單很多。CUSUM最早用于連續分析技術,通常用于檢測變化序列,是目前已知最優的變點算法之一。原始的CUSUM序列算法描述如下:CUSUM(i=Qi-k)+CUSUMi-1。其中Qi為統計序列。由于網絡中數據流量不能用簡單的高斯或其他線性模型來描述,因此本文采用無參數的CUSUM算法,無參數的CUSUM算法不受具體參數值的影響,并且計算量較小,應用在DDoS攻擊檢測當中較為理想。具體公式如下:

本文采用TS中各計數器值的累加結果作為檢測統計序列Qi,正常情況下,這是一個接近零的序列。我們再構造一個新的隨機序列假設E(Q)i=α,則參數k是常數,且滿足α 正常情況下,Zi序列是負值且相對穩定。在發生DDoS攻擊的情況下,隨著攻擊包的產生,TS中部分計數器的值會大幅增加,經過本文第3節對數據的處理,Zi序列會迅速提升為一個正的數值。為了使得本文算法更加穩定可靠,同時避免擁塞引起的誤判,本文每隔一定時間t會對Bloom Filter中的數值進行重置,一段時間(>)t之后可以得到一個根據時間間隔t變化的序列{Zi,i=1,2,3…},其中 Zi= (Qi-k) +Zi-1。 因此本文CUSUM算法的計算結果有正值和負值之分。如果結果是負值,表明當前網絡處于正常工作狀態;如果結果是正值且以很快速度不斷增大,表明當前網絡可能已經受到DDoS攻擊。 攻擊發生時,算法結果會迅速提升為正值,但提升到什么程度才能認為發生DDoS攻擊呢?閾值N的設置就尤為重要了,通過一段時間內在正常情況下實際網絡數據包數量變化的統計可以找出合適的閾值。如果Yi沒有超過N則返回結果為0,認為網絡仍然處于正常狀態,一旦Yi超過N則返回結果為1,認為發生了攻擊,公式如下: 本文檢測采用的攻擊場景測試集是DARPA提供的數據集。m值的選取依賴于局域網直接和外網相連的網絡設備接口數量,m值太小則不利于網絡的可擴展性,m值太大則浪費存儲空間。目前,一臺路由器接口數量一般不超過20個,為了實現向上兼容,本文選取參數m的數值為100。采樣間隔如果太小,則容易影響設備性能,采樣間隔如果太大,則容易漏掉一部分攻擊包。因此實驗中,采樣間隔設置為200個數據包,每一級的向量組均設置為m=100位。正常情況下,CUSUM算法檢測序列隨時間沒有特別明顯的變化,本文實驗使用的正常數據包來源于當時實際網絡轉發的數據(包括tcp包和udp包)。通過Bloom Filter計數器對實際網絡轉發數據的計算,得出正常情況下Qi的最大值為20,同時考慮到現有設備的容錯能力,本文選取攻擊檢測閾值N=20。 圖2 本文算法檢測結果 圖2 則顯示了本文算法在攻擊檢測的過程中能夠盡快發現攻擊。橫坐標表示本文算法檢測的數據包的數量,縱坐標表示CUSUM算法的計算值。正常狀態下,CUSUM計算值都在正常范圍內(例如負值)。但是當檢測到約420000個數據包時,CUSUM檢測值突然變為較大的正值且超過了閾值,說明此時發生了攻擊。 在檢測DDoS攻擊的過程中,很多源端檢測方法往往不能檢測出所有類型的攻擊。本文提出了一種有效的可以部署在源端的DDoS攻擊檢測方法,可以在只出現少量攻擊數據包的情況下準確發現所有類型的DDoS攻擊,適用于源端檢測,也為監控攻擊數據包的來源以及通知受害端進行防御贏得了寶貴的時間。另外,在攻擊流量較小時進行檢測及監控,對網絡的性能也不會有太大的影響,為阻止后續攻擊提供了方便,具有一定的現實意義。 現有的DDoS攻擊檢測算法一般在檢測成功之后仍然無法將攻擊數據流直接過濾,因此,結合DDoS攻擊檢測的研究還需進一步做好過濾攻擊包的工作,以更好的阻止DDoS攻擊。 [1]嚴芬,王佳佳,陳軼群,等.一種輕量級的 SYN Flooding攻擊檢測方法[J].計算機科學,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]嚴芬,王佳佳,殷新春,等.一種基于 Hurst參數的 SYN Flooding攻擊實時檢測方法[J].計算機科學,2008,35(12):109-113,162. [7]張藝瀕,張志斌,趙詠,等.TCP與UDP網絡流量對比分析研究[J].計算機應用研究,2010,27(6):2192-2197.
5 實驗結果及分析

6 結語