石利平
(廣東女子職業(yè)技術(shù)學(xué)院 應(yīng)用技術(shù)系,廣東 廣州510450)
SYN flood攻擊是一種當(dāng)前流行的DoS與DDoS的方式之一,主要是利用TCP協(xié)議的三次握手的缺陷,造成服務(wù)器上TCP連接表溢出[1],而攻擊服務(wù)器響應(yīng)TCP連接請求的能力。TCP是TCP/IP體系中的運輸層協(xié)議,是面向連接的,其三次握手過程數(shù)據(jù)包都通過IP協(xié)議傳輸。而IP協(xié)議是一種不可靠、盡力而為的網(wǎng)絡(luò)協(xié)議,缺乏認(rèn)證和保密措施,因此為否認(rèn)、拒絕等欺瞞行為開了方便之門[2]。目前,DDos攻擊中約有90%是SYN flood攻擊[3],研究 SYN flood攻擊檢測技術(shù)對網(wǎng)絡(luò)安全意義重大。
TCP連接的建立是通過三次握手來初始化[4]。三次握手建立TCP連接如圖1所示。
在TCP連接的三次握手中,若用戶向服務(wù)器發(fā)送了SYN報文后突然死機或掉線,則服務(wù)器在發(fā)出SYN+ACK應(yīng)答報文后將無法收到客戶端的ACK報文,導(dǎo)致第三次握手無法完成。這時,服務(wù)器端的TCP/IP棧中會保留這個半連接狀態(tài),然后再次發(fā)送SYN+ACK給客戶端,并等待一段時間后丟棄這個未完成的連接。這段時間稱為 SYN Timeout(一般約為 30 s~2 min)[4]。 但如有攻擊者大量模擬這種情況,產(chǎn)生大量的半連接,服務(wù)器將為維護(hù)這些半連接而消耗大量的資源,進(jìn)而導(dǎo)致服務(wù)器的TCP/IP堆棧溢出,使服務(wù)器無法響應(yīng)正常用戶的請求。SYN flood攻擊就是利用這種行為發(fā)動攻擊。
正常情況下,連接超時后,服務(wù)器會清理出TCP連接表中已超時連接的相關(guān)信息。但攻擊者不斷給服務(wù)器發(fā)送大量的欺騙的TCP連接請求,使TCP連接表一直處于被填滿狀態(tài),導(dǎo)致服務(wù)器無法響應(yīng)大多數(shù)合法的連接請求。
根據(jù)攻擊源的IP地址,SYN flood攻擊可分為以下三種:(1)使用本機的 IP發(fā)送 SYN欺騙包;(2)假冒本網(wǎng)段中未在線的多臺主機IP發(fā)送SYN欺騙包;(3)隨機產(chǎn)生偽造的IP地址發(fā)送SYN欺騙包。為增加攻擊的力度、隱蔽性和效率,使用隨機源地址進(jìn)行SYN flood攻擊是攻擊者常使用的方法[5]。
根據(jù)檢測的位置SYN flood攻擊檢測主要分為4種:被攻擊的服務(wù)器端、攻擊源端、攻擊源和被攻擊服務(wù)器間以及正常的主機端。最受關(guān)注的是服務(wù)器端的檢測和防護(hù)[6];
這種方法檢測的是連接終端主機的路由器端,是基于 TCP協(xié)議 SYN-FIN(RST)包對特征和連續(xù)變化點的檢測[6]。首先收集IP數(shù)據(jù)包,然后分類數(shù)據(jù)包。根據(jù)IP訪問包的TCP頭部來識別TCP SYN、FIN和RST。關(guān)鍵是找出IP數(shù)據(jù)包片偏移中TCP數(shù)據(jù)位,計算依據(jù)公式為IPoffset=Hdr_LengthIP+TCPoffset。接著利用非參數(shù)的CUSUM(Cumulative Sum)算法分析 SYN-FIN(RST)行為對。CUSUM算法公式如下:
xn為一個隨機序列模型。如果測試統(tǒng)計yn大于攻擊門限N,則表示有SYN flood攻擊發(fā)生,否則網(wǎng)絡(luò)正常運作。該檢測方法的優(yōu)點是準(zhǔn)確性高,在線檢測速度較快,消耗系統(tǒng)資源少;其缺點是檢測在攻擊發(fā)生后才起作用,攻擊對系統(tǒng)已造成一定的危害,且易產(chǎn)生誤報警。但作為較早的SYN flood攻擊檢測方法,其檢測思路還是值得借鑒的。
此檢測是在服務(wù)器端[7],主要思路是檢測TCP半開連接數(shù)是否正常,如異常,則檢查半開連接數(shù)是否超過服務(wù)器容納最大的半開連接數(shù)目,如超出則發(fā)出報警。該檢測方法的主要步驟為:(1)分析因正常網(wǎng)絡(luò)擁塞和因DDoS攻擊造成的半連接的區(qū)別。這種區(qū)別是第2步中DARB(延遲探測)算法的基礎(chǔ)。(2)利用DARB估計客戶端與服務(wù)器之間的延遲時長。DARB算法類似于Traceroute技術(shù),是在 IP層發(fā)送帶有 TTL(time-to-live)字段的數(shù)據(jù)包到目標(biāo)網(wǎng)站,測得客戶端和服務(wù)器之間的延遲時長。算法中有兩個重要量:far-hop是探測到最遠(yuǎn)的路由的TTL值;near_hop是探測到最近的路由的TTL值。(3)概率估計。首先計算一個T時間段內(nèi)平均延遲x=其中xi是DARB中第i個半連接的延遲時間,S是時間T內(nèi)在服務(wù)器上收集的半連接樣本;然后再用函數(shù)f(x)來估算檢測的延遲概率。
基于Patricia樹的檢測是基于SYN flood攻擊的最為本質(zhì)的兩點特征[8]:(1)短時期內(nèi)一個服務(wù)(一組 IP、端口號)接收到大量的SYN包。(2)這些SYN包發(fā)起的連接處于半開狀態(tài)。以Patricia樹作為流量統(tǒng)計手段,利用Patricia樹記錄所有的半開連接及其數(shù)量,每個葉節(jié)點對應(yīng)一個發(fā)起連接的IP源地址。Patricia樹是一棵滿二叉樹,Patricia樹的每一個節(jié)點的關(guān)鍵字是二進(jìn)制字符串。算法主要是維護(hù)服務(wù)器Patricia樹的半開連接表,周期性地進(jìn)行檢查和刷新。如果有攻擊產(chǎn)生,Patricia樹中將會明顯地顯示出發(fā)動攻擊的主機IP地址。此方法的優(yōu)點是消耗系統(tǒng)資源少,檢效率高,但是一種被動檢測。
該檢測方法的主要思想是以出入網(wǎng)絡(luò)的TCP業(yè)務(wù)量的平衡性為判斷依據(jù)來檢測攻擊[9]。此檢測分兩步:(1)用粗粒度檢測引擎對出/入網(wǎng)絡(luò)的TCP業(yè)務(wù)進(jìn)行監(jiān)控,發(fā)現(xiàn)異常就預(yù)報警,預(yù)警啟動細(xì)粒度檢測引擎、關(guān)閉粗粒度引擎。(2)由細(xì)粒度檢測引擎監(jiān)控終端網(wǎng)絡(luò)向外發(fā)送的SYN包和接收的SYN/ACK包的數(shù)量差,當(dāng)兩種包的數(shù)量差迅速增大時,認(rèn)為有SYN flood攻擊,報警啟動邊界路由器中的過濾引擎,封鎖攻擊源發(fā)送的包。細(xì)粒度檢測算法主要計算公式為:
其中:Δn為第n個抽樣間隔內(nèi)終端網(wǎng)絡(luò)向外發(fā)送的SYN包與接收到的SYN/ACK包的數(shù)量差。隨機序列{Δn,n=0,1}的均值依賴于網(wǎng)絡(luò)的規(guī)模,并隨抽樣時刻變化;k是抽樣間隔內(nèi) SYN/ACK包數(shù)量的平均值,可進(jìn)行實時估計和周期性更新,k的遞歸估計定義如下:
此檢測方法與參考文獻(xiàn)[6]的檢測思想類似,都是以TCP協(xié)議的SYN/ACK包數(shù)量為檢測基礎(chǔ),均需對IP數(shù)據(jù)包進(jìn)行分類。優(yōu)點是兩個粒度檢測引擎采用不同的檢測機制,檢測高效、高速、虛警率低。其缺點主要有:檢測效果會隨著攻擊組規(guī)模的增大而衰減。當(dāng)網(wǎng)絡(luò)中攻擊流與網(wǎng)絡(luò)正常業(yè)務(wù)相差不大時,也不易檢測出來。
基于重尾特性的檢測方法是基于網(wǎng)絡(luò)流量的檢測[10]。主要思想是將統(tǒng)計閾值(以SYN/TCP的值為參數(shù))和流量的重尾特性相結(jié)合。研究表明,當(dāng)SYN/TCP的值β≤0.05時,網(wǎng)絡(luò)正常;當(dāng)β≥0.15時,網(wǎng)絡(luò)存在SYN flood攻擊;當(dāng) β∈(0.05,0.15)時,可能是正常流量,也可能是 SYN flood攻擊。這時對網(wǎng)絡(luò)流量進(jìn)行重尾特征檢測,當(dāng)參數(shù)a≤2時,認(rèn)為網(wǎng)絡(luò)流量為正常流量;當(dāng)a>2時,認(rèn)為網(wǎng)絡(luò)發(fā)生了SYN洪流攻擊。a可從重重尾分布中計算得到。一般正常網(wǎng)絡(luò)流量呈重尾分布特性,若將瀏覽器描述成on/off信息源,則其生成的數(shù)據(jù)剛好符合Pareto分布。
Pareto分布的概率密度函數(shù)(PDF)為:
它的和余累積分布函數(shù)(CDF)為:
其中,X是一個隨機變量,常數(shù)k表示隨機變量最小的取值。
此檢測方法的優(yōu)點是在網(wǎng)絡(luò)有強SYN洪流時檢測效率高,但在發(fā)生弱SYN Flood攻擊時,其漏報率稍高,約為9%。
表1 映射表結(jié)構(gòu)
表2 存儲表結(jié)構(gòu)
這種檢測方法是在路由器邊緣檢測SYN flood攻擊,是基于正常的網(wǎng)絡(luò)流量下路由器實際轉(zhuǎn)發(fā)的 SYN、SYN/ACK和 ACK報文的數(shù)量進(jìn)行檢測[11]。主要包括兩部分:存儲模塊和檢查模塊。(1)存儲部有兩個表:映射表和存儲表。表結(jié)構(gòu)如表1和表2所示。存儲表記錄SYN包源和目的地址,通過構(gòu)建的HASH函數(shù)(HASHa=hash(i),a 表示地址)計算映射,為了防止哈希沖突,為連續(xù)的哈希函數(shù)分配不同的權(quán)重 wi。(2)檢查模塊檢測和處理兩個模塊組成。在檢測模塊通過檢查映射表是否有異常情況,方法是選擇數(shù)據(jù)庫中的源地址作為嗅探數(shù)據(jù)包的目的地地址,選擇邊界路由器的IP地址為嗅探包的源地址。然后這個嗅探數(shù)據(jù)包被發(fā)送到目標(biāo)主機。如果有應(yīng)答包返回,則說明無SYN flood攻擊,否則說明有SYN flood攻擊。通過檢測結(jié)果,如推斷有一個無辜的主機,處理模塊發(fā)送RST包使受害者服務(wù)器釋放受攻擊產(chǎn)生的半開連接。此檢測方法的優(yōu)點是存儲保證數(shù)據(jù)的持久性和容錯性。如系統(tǒng)出現(xiàn)任何故障,當(dāng)再次進(jìn)入系統(tǒng)時,數(shù)據(jù)仍然存在,可以直接恢復(fù)正常連接。檢查過程是主動的,不依賴于其他網(wǎng)絡(luò)設(shè)備。不僅能檢測SYN flood攻擊,還有一定的消除SYN flood攻擊的功能。
表3對上面介紹的SYN flood攻擊檢測的防御所采用的方法進(jìn)行簡單總結(jié)。通過分析和比較已有的SYN flood攻擊檢測和防御方法發(fā)現(xiàn),對于SYN flood攻擊檢測和防御目前還沒有完美的解決方案。常規(guī)的SYN flood防御方法因?qū)崿F(xiàn)容易,已得到廣泛應(yīng)用,但防御力度不強,不能從根本上避免SYN flood攻擊的發(fā)生。SYN-cookie技術(shù)已得到廠商的支持,已在一些防火墻中使用。輸入過濾器在理論上可以徹底避免SYN flood攻擊的發(fā)生,但因其會使路由器處理數(shù)據(jù)量加大,影響路由器的性能,實施難度較大,還需進(jìn)一步研究。
表3 SYN flood攻擊檢測方法比較
本文分析了TCP的三次握手協(xié)議,并針對SYN flood攻擊的原理,對其檢測方法進(jìn)行了探討。未來的檢測和防御,應(yīng)趨向于如何綜合應(yīng)用上述幾種檢測方法,取長補短,以達(dá)到互相補充和彌補,提高檢測精度和效率。
[1]黃發(fā)文,徐濟仁,陳家松.計算機網(wǎng)絡(luò)安全技術(shù)初探[J].計算機應(yīng)用研究,2002,19(5):46-48.
[2]賈春福,劉春波,高敏芬,等.計算機安全原理與實踐[M].北京:機械工業(yè)出版社,2008.7.
[3]李海偉,張大方,劉俊,等.一種基于主動探測機制的SYNFlood 攻擊檢測方 法[J].計 算 機科學(xué),2010,37(3):117-120.
[4]SYN Flood 攻 擊 的 基本原理 及 防 御[EB/OL].http∶//www.bitscn.com/network/hack/200705/102673.html,2007.
[5]謝希仁.計算機網(wǎng)絡(luò)[M].北京:電子工業(yè)出版社,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,F(xiàn)ukuoka,Japan,2005.07.
[8]陳杰,薛質(zhì),單蓉勝.一種基于Patricia樹的檢測SynFlood 攻擊的方法[J].計算機工程,2004,30(13):26-28.
[9]林白,李鷗,趙樺.基于源端網(wǎng)絡(luò)的 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.