石利平
(廣東女子職業技術學院 應用技術系,廣東 廣州510450)
SYN flood攻擊是一種當前流行的DoS與DDoS的方式之一,主要是利用TCP協議的三次握手的缺陷,造成服務器上TCP連接表溢出[1],而攻擊服務器響應TCP連接請求的能力。TCP是TCP/IP體系中的運輸層協議,是面向連接的,其三次握手過程數據包都通過IP協議傳輸。而IP協議是一種不可靠、盡力而為的網絡協議,缺乏認證和保密措施,因此為否認、拒絕等欺瞞行為開了方便之門[2]。目前,DDos攻擊中約有90%是SYN flood攻擊[3],研究 SYN flood攻擊檢測技術對網絡安全意義重大。
TCP連接的建立是通過三次握手來初始化[4]。三次握手建立TCP連接如圖1所示。
在TCP連接的三次握手中,若用戶向服務器發送了SYN報文后突然死機或掉線,則服務器在發出SYN+ACK應答報文后將無法收到客戶端的ACK報文,導致第三次握手無法完成。這時,服務器端的TCP/IP棧中會保留這個半連接狀態,然后再次發送SYN+ACK給客戶端,并等待一段時間后丟棄這個未完成的連接。這段時間稱為 SYN Timeout(一般約為 30 s~2 min)[4]。 但如有攻擊者大量模擬這種情況,產生大量的半連接,服務器將為維護這些半連接而消耗大量的資源,進而導致服務器的TCP/IP堆棧溢出,使服務器無法響應正常用戶的請求。SYN flood攻擊就是利用這種行為發動攻擊。

正常情況下,連接超時后,服務器會清理出TCP連接表中已超時連接的相關信息。但攻擊者不斷給服務器發送大量的欺騙的TCP連接請求,使TCP連接表一直處于被填滿狀態,導致服務器無法響應大多數合法的連接請求。
根據攻擊源的IP地址,SYN flood攻擊可分為以下三種:(1)使用本機的 IP發送 SYN欺騙包;(2)假冒本網段中未在線的多臺主機IP發送SYN欺騙包;(3)隨機產生偽造的IP地址發送SYN欺騙包。為增加攻擊的力度、隱蔽性和效率,使用隨機源地址進行SYN flood攻擊是攻擊者常使用的方法[5]。
根據檢測的位置SYN flood攻擊檢測主要分為4種:被攻擊的服務器端、攻擊源端、攻擊源和被攻擊服務器間以及正常的主機端。最受關注的是服務器端的檢測和防護[6];
這種方法檢測的是連接終端主機的路由器端,是基于 TCP協議 SYN-FIN(RST)包對特征和連續變化點的檢測[6]。首先收集IP數據包,然后分類數據包。根據IP訪問包的TCP頭部來識別TCP SYN、FIN和RST。關鍵是找出IP數據包片偏移中TCP數據位,計算依據公式為IPoffset=Hdr_LengthIP+TCPoffset。接著利用非參數的CUSUM(Cumulative Sum)算法分析 SYN-FIN(RST)行為對。CUSUM算法公式如下:

xn為一個隨機序列模型。如果測試統計yn大于攻擊門限N,則表示有SYN flood攻擊發生,否則網絡正常運作。該檢測方法的優點是準確性高,在線檢測速度較快,消耗系統資源少;其缺點是檢測在攻擊發生后才起作用,攻擊對系統已造成一定的危害,且易產生誤報警。但作為較早的SYN flood攻擊檢測方法,其檢測思路還是值得借鑒的。
此檢測是在服務器端[7],主要思路是檢測TCP半開連接數是否正常,如異常,則檢查半開連接數是否超過服務器容納最大的半開連接數目,如超出則發出報警。該檢測方法的主要步驟為:(1)分析因正常網絡擁塞和因DDoS攻擊造成的半連接的區別。這種區別是第2步中DARB(延遲探測)算法的基礎。(2)利用DARB估計客戶端與服務器之間的延遲時長。DARB算法類似于Traceroute技術,是在 IP層發送帶有 TTL(time-to-live)字段的數據包到目標網站,測得客戶端和服務器之間的延遲時長。算法中有兩個重要量:far-hop是探測到最遠的路由的TTL值;near_hop是探測到最近的路由的TTL值。(3)概率估計。首先計算一個T時間段內平均延遲x=其中xi是DARB中第i個半連接的延遲時間,S是時間T內在服務器上收集的半連接樣本;然后再用函數f(x)來估算檢測的延遲概率。

基于Patricia樹的檢測是基于SYN flood攻擊的最為本質的兩點特征[8]:(1)短時期內一個服務(一組 IP、端口號)接收到大量的SYN包。(2)這些SYN包發起的連接處于半開狀態。以Patricia樹作為流量統計手段,利用Patricia樹記錄所有的半開連接及其數量,每個葉節點對應一個發起連接的IP源地址。Patricia樹是一棵滿二叉樹,Patricia樹的每一個節點的關鍵字是二進制字符串。算法主要是維護服務器Patricia樹的半開連接表,周期性地進行檢查和刷新。如果有攻擊產生,Patricia樹中將會明顯地顯示出發動攻擊的主機IP地址。此方法的優點是消耗系統資源少,檢效率高,但是一種被動檢測。
該檢測方法的主要思想是以出入網絡的TCP業務量的平衡性為判斷依據來檢測攻擊[9]。此檢測分兩步:(1)用粗粒度檢測引擎對出/入網絡的TCP業務進行監控,發現異常就預報警,預警啟動細粒度檢測引擎、關閉粗粒度引擎。(2)由細粒度檢測引擎監控終端網絡向外發送的SYN包和接收的SYN/ACK包的數量差,當兩種包的數量差迅速增大時,認為有SYN flood攻擊,報警啟動邊界路由器中的過濾引擎,封鎖攻擊源發送的包。細粒度檢測算法主要計算公式為:

其中:Δn為第n個抽樣間隔內終端網絡向外發送的SYN包與接收到的SYN/ACK包的數量差。隨機序列{Δn,n=0,1}的均值依賴于網絡的規模,并隨抽樣時刻變化;k是抽樣間隔內 SYN/ACK包數量的平均值,可進行實時估計和周期性更新,k的遞歸估計定義如下:

此檢測方法與參考文獻[6]的檢測思想類似,都是以TCP協議的SYN/ACK包數量為檢測基礎,均需對IP數據包進行分類。優點是兩個粒度檢測引擎采用不同的檢測機制,檢測高效、高速、虛警率低。其缺點主要有:檢測效果會隨著攻擊組規模的增大而衰減。當網絡中攻擊流與網絡正常業務相差不大時,也不易檢測出來。
基于重尾特性的檢測方法是基于網絡流量的檢測[10]。主要思想是將統計閾值(以SYN/TCP的值為參數)和流量的重尾特性相結合。研究表明,當SYN/TCP的值β≤0.05時,網絡正常;當β≥0.15時,網絡存在SYN flood攻擊;當 β∈(0.05,0.15)時,可能是正常流量,也可能是 SYN flood攻擊。這時對網絡流量進行重尾特征檢測,當參數a≤2時,認為網絡流量為正常流量;當a>2時,認為網絡發生了SYN洪流攻擊。a可從重重尾分布中計算得到。一般正常網絡流量呈重尾分布特性,若將瀏覽器描述成on/off信息源,則其生成的數據剛好符合Pareto分布。
Pareto分布的概率密度函數(PDF)為:

它的和余累積分布函數(CDF)為:

其中,X是一個隨機變量,常數k表示隨機變量最小的取值。

此檢測方法的優點是在網絡有強SYN洪流時檢測效率高,但在發生弱SYN Flood攻擊時,其漏報率稍高,約為9%。

表1 映射表結構

表2 存儲表結構
這種檢測方法是在路由器邊緣檢測SYN flood攻擊,是基于正常的網絡流量下路由器實際轉發的 SYN、SYN/ACK和 ACK報文的數量進行檢測[11]。主要包括兩部分:存儲模塊和檢查模塊。(1)存儲部有兩個表:映射表和存儲表。表結構如表1和表2所示。存儲表記錄SYN包源和目的地址,通過構建的HASH函數(HASHa=hash(i),a 表示地址)計算映射,為了防止哈希沖突,為連續的哈希函數分配不同的權重 wi。(2)檢查模塊檢測和處理兩個模塊組成。在檢測模塊通過檢查映射表是否有異常情況,方法是選擇數據庫中的源地址作為嗅探數據包的目的地地址,選擇邊界路由器的IP地址為嗅探包的源地址。然后這個嗅探數據包被發送到目標主機。如果有應答包返回,則說明無SYN flood攻擊,否則說明有SYN flood攻擊。通過檢測結果,如推斷有一個無辜的主機,處理模塊發送RST包使受害者服務器釋放受攻擊產生的半開連接。此檢測方法的優點是存儲保證數據的持久性和容錯性。如系統出現任何故障,當再次進入系統時,數據仍然存在,可以直接恢復正常連接。檢查過程是主動的,不依賴于其他網絡設備。不僅能檢測SYN flood攻擊,還有一定的消除SYN flood攻擊的功能。
表3對上面介紹的SYN flood攻擊檢測的防御所采用的方法進行簡單總結。通過分析和比較已有的SYN flood攻擊檢測和防御方法發現,對于SYN flood攻擊檢測和防御目前還沒有完美的解決方案。常規的SYN flood防御方法因實現容易,已得到廣泛應用,但防御力度不強,不能從根本上避免SYN flood攻擊的發生。SYN-cookie技術已得到廠商的支持,已在一些防火墻中使用。輸入過濾器在理論上可以徹底避免SYN flood攻擊的發生,但因其會使路由器處理數據量加大,影響路由器的性能,實施難度較大,還需進一步研究。

表3 SYN flood攻擊檢測方法比較
本文分析了TCP的三次握手協議,并針對SYN flood攻擊的原理,對其檢測方法進行了探討。未來的檢測和防御,應趨向于如何綜合應用上述幾種檢測方法,取長補短,以達到互相補充和彌補,提高檢測精度和效率。
[1]黃發文,徐濟仁,陳家松.計算機網絡安全技術初探[J].計算機應用研究,2002,19(5):46-48.
[2]賈春福,劉春波,高敏芬,等.計算機安全原理與實踐[M].北京:機械工業出版社,2008.7.
[3]李海偉,張大方,劉俊,等.一種基于主動探測機制的SYNFlood 攻擊檢測方 法[J].計 算 機科學,2010,37(3):117-120.
[4]SYN Flood 攻 擊 的 基本原理 及 防 御[EB/OL].http∶//www.bitscn.com/network/hack/200705/102673.html,2007.
[5]謝希仁.計算機網絡[M].北京:電子工業出版社,2003.
[6]WANG H,ZHANG D,SHIN K G.Detecting SYN flood attacks[J/OL].Proceedings of the Annual Joint Conference of the IEEE Computer Society and Communications Society(INFOCOM),New York,NY,USA,2002,3:1530-1539.
[7]Xiao Bin,Chen Wei,He Yanxiang,et al.An active detecting method against SYN flood attack[J/OL].The 11th International Conference on Parallel and Distributed Systems(ICPADS′05),Volume I,709-715,Fukuoka,Japan,2005.07.
[8]陳杰,薛質,單蓉勝.一種基于Patricia樹的檢測SynFlood 攻擊的方法[J].計算機工程,2004,30(13):26-28.
[9]林白,李鷗,趙樺.基于源端網絡的 SYN Flood攻擊雙粒度檢測[J].計算機工程,2005,31(10):132-134.
[10]許曉東,楊海量,朱士瑞.基于重尾特性的 SYN洪流檢瀏方法[J].計算機工程,2008,34(22):179-181.
[11]Ling Yun,Gu Ye,Wei Guiyi.Detect SYN flood attack in edge routers[J].International Journal of Security and its Applications,2009,3(1):32-45.