SYN Flood是當(dāng)前最流行的DoS(拒絕服務(wù)攻擊)與DdoS(分布式拒絕服務(wù)攻擊)的方式之一,這是一種利用TCP協(xié)議缺陷,發(fā)送大量偽造的TCP連接請(qǐng)求,從而使得被攻擊方資源耗盡(CPU滿(mǎn)負(fù)荷或內(nèi)存不足)的攻擊方式。對(duì)于SYN Flood攻擊,目前尚沒(méi)有很好的監(jiān)測(cè)和防御方法,不過(guò)如果系統(tǒng)管理員熟悉攻擊方法和系統(tǒng)架構(gòu),通過(guò)一系列的設(shè)定,也能從一定程度上降低被攻擊系統(tǒng)的負(fù)荷,減輕負(fù)面的影響。
一般來(lái)說(shuō),如果一個(gè)系統(tǒng)(或主機(jī))負(fù)荷突然升高甚至失去響應(yīng),使用Netstat ming令能看到大量SYN_RCVD的半連接(數(shù)量>500或占總連接數(shù)的10%以上),可以認(rèn)定,這個(gè)系統(tǒng)(或主機(jī))遭到了SYN Flood攻擊。遭到SYN Flood攻擊后,首先要做的是取證,通過(guò)Netstat –n –p tcp >resault.txt記錄目前所有TCP連接狀態(tài)是必要的,如果有嗅探器,或者TcpDump之類(lèi)的工具,記錄TCP SYN報(bào)文的所有細(xì)節(jié)也有助于以后追查和防御,需要記錄的字段有:源地址、IP首部中的標(biāo)識(shí)、TCP首部中的序列號(hào)、TTL值等,這些信息雖然很可能是攻擊者偽造的,但是用來(lái)分析攻擊者的心理狀態(tài)和攻擊程序也不無(wú)幫助。特別是TTL值,如果大量的攻擊包似乎來(lái)自不同的IP但是TTL值卻相同,我們往往能推斷出攻擊者與我們之間的路由器距離,至少也可以通過(guò)過(guò)濾特定TTL值的報(bào)文降低被攻擊系統(tǒng)的負(fù)荷(在這種情況下TTL值與攻擊報(bào)文不同的用戶(hù)就可以恢復(fù)正常訪問(wèn))。從防御角度來(lái)說(shuō),有幾種簡(jiǎn)單的解決方法:
(1)縮短SYN Timeout時(shí)間
由于SYN Flood攻擊的效果取決于服務(wù)器上保持的SYN半連接數(shù),這個(gè)值=SYN攻擊的頻度 x SYN Timeout,所以通過(guò)縮短從接收到SYN報(bào)文到確定這個(gè)報(bào)文無(wú)效并丟棄改連接的時(shí)間,例如設(shè)置為20秒以下(過(guò)低的SYN Timeout設(shè)置可能會(huì)影響客戶(hù)的正常訪問(wèn)),可以成倍的降低服務(wù)器的負(fù)荷。
(2)設(shè)置SYN Cookie
就是給每一個(gè)請(qǐng)求連接的IP地址分配一個(gè)Cookie,如果短時(shí)間內(nèi)連續(xù)受到某個(gè)IP的重復(fù)SYN報(bào)文,就認(rèn)定是受到了攻擊,以后從這個(gè)IP地址來(lái)的包會(huì)被丟棄。可是上述的兩種方法只能對(duì)付比較原始的SYN Flood攻擊,縮短SYN Timeout時(shí)間僅在對(duì)方攻擊頻度不高的情況下生效,SYN Cookie更依賴(lài)于對(duì)方使用真實(shí)的IP地址,如果攻擊者以數(shù)萬(wàn)/秒的速度發(fā)送SYN報(bào)文,同時(shí)利用SOCK_RAW隨機(jī)改寫(xiě)IP報(bào)文中的源地址,以上的方法將毫無(wú)用武之地。
(3)負(fù)反饋策略
參考一些流行的操作系統(tǒng),如Windows2000的SYN攻擊保護(hù)機(jī)制:正常情況下,OS對(duì)TCP連接的一些重要參數(shù)有一個(gè)常規(guī)的設(shè)置: SYN Timeout時(shí)間、SYN-ACK的重試次數(shù)、SYN報(bào)文從路由器到系統(tǒng)再到Winsock的延時(shí)等等。這個(gè)常規(guī)設(shè)置針對(duì)系統(tǒng)優(yōu)化,可以給用戶(hù)提供方便快捷的服務(wù);一旦服務(wù)器受到攻擊,SYN Half link 的數(shù)量超過(guò)系統(tǒng)中TCP活動(dòng) Half Connction最大連接數(shù)的設(shè)置,系統(tǒng)將會(huì)認(rèn)為自己受到了SYN Flood攻擊,并將根據(jù)攻擊的判斷情況作出反應(yīng):減短SYN Timeout時(shí)間、減少SYN-ACK的重試次數(shù)、自動(dòng)對(duì)緩沖區(qū)中的報(bào)文進(jìn)行延時(shí)等等措施,力圖將攻擊危害減到最低。如果攻擊繼續(xù),超過(guò)了系統(tǒng)允許的最大Half Connection 值,系統(tǒng)已經(jīng)不能提供正常的服務(wù)了,為了保證系統(tǒng)不崩潰,可以將任何超出最大Half Connection 值范圍的SYN報(bào)文隨機(jī)丟棄,保證系統(tǒng)的穩(wěn)定性。
所以,可以事先測(cè)試或者預(yù)測(cè)該主機(jī)在峰值時(shí)期的Half Connction 的活動(dòng)數(shù)量上限,以其作為參考設(shè)定TCP活動(dòng) Half Connction最大連接數(shù)的值,然后再以該值的倍數(shù)(不要超過(guò)2)作為T(mén)CP最大Half Connection值,這樣可以通過(guò)負(fù)反饋的手段在一定程度上阻止SYN攻擊。
(4)退讓策略
退讓策略是基于SYN Flood攻擊代碼的一個(gè)缺陷,我們重新來(lái)分析一下SYN Flood攻擊者的流程:SYN Flood程序有兩種攻擊方式,基于IP的和基于域名的,前者是攻擊者自己進(jìn)行域名解析并將IP地址傳遞給攻擊程序,后者是攻擊程序自動(dòng)進(jìn)行域名解析,但是它們有一點(diǎn)是相同的,就是一旦攻擊開(kāi)始,將不會(huì)再進(jìn)行域名解析,我們的切入點(diǎn)正是這里:假設(shè)一臺(tái)服務(wù)器在受到SYN Flood攻擊后迅速更換自己的IP地址,那么攻擊者仍在不斷攻擊的只是一個(gè)空的IP地址,并沒(méi)有任何主機(jī),而防御方只要將DNS解析更改到新的IP地址就能在很短的時(shí)間內(nèi)(取決于DNS的刷新時(shí)間)恢復(fù)用戶(hù)通過(guò)域名進(jìn)行的正常訪問(wèn)。為了迷惑攻擊者,我們甚至可以放置一臺(tái)“犧牲”服務(wù)器讓攻擊者滿(mǎn)足于攻擊的“效果”(由于DNS緩沖的原因,只要攻擊者的瀏覽器不重起,他訪問(wèn)的仍然是原先的IP地址)。
(5)分布式DNS負(fù)載均衡
在眾多的負(fù)載均衡架構(gòu)中,基于DNS解析的負(fù)載均衡本身就擁有對(duì)SYN Flood的免疫力,基于DNS解析的負(fù)載均衡能將用戶(hù)的請(qǐng)求分配到不同IP的服務(wù)器主機(jī)上,攻擊者攻擊的永遠(yuǎn)只是其中一臺(tái)服務(wù)器,一來(lái)這樣增加了攻擊者的成本,二來(lái)過(guò)多的DNS請(qǐng)求可以幫助我們追查攻擊者的真正蹤跡(DNS請(qǐng)求不同于SYN攻擊,是需要返回?cái)?shù)據(jù)的,所以很難進(jìn)行IP偽裝)。
(6)防火墻Qos
對(duì)于防火墻來(lái)說(shuō),防御SYN Flood攻擊的方法取決于防火墻工作的基本原理,一般說(shuō)來(lái),防火墻可以工作在TCP層之上或IP層之下,工作在TCP層之上的防火墻稱(chēng)為網(wǎng)關(guān)型防火墻,網(wǎng)關(guān)型防火墻布局中,客戶(hù)機(jī)與服務(wù)器之間并沒(méi)有真正的TCP連接,客戶(hù)機(jī)與服務(wù)器之間的所有數(shù)據(jù)交換都是通過(guò)防火墻代理的,外部的DNS解析也同樣指向防火墻,所以如果網(wǎng)站被攻擊,真正受到攻擊的是防火墻,這種防火墻的優(yōu)點(diǎn)是穩(wěn)定性好,抗打擊能力強(qiáng),但是因?yàn)樗械腡CP報(bào)文都需要經(jīng)過(guò)防火墻轉(zhuǎn)發(fā),所以效率比較低由于客戶(hù)機(jī)并不直接與服務(wù)器建立連接,在TCP連接沒(méi)有完成時(shí)防火墻不會(huì)去向后臺(tái)的服務(wù)器建立新的TCP連接,所以攻擊者無(wú)法越過(guò)防火墻直接攻擊后臺(tái)服務(wù)器,只要防火墻本身做的足夠強(qiáng)壯,這種架構(gòu)可以抵抗相當(dāng)強(qiáng)度的SYN Flood攻擊。
但是由于防火墻實(shí)際建立的TCP連接數(shù)為用戶(hù)連接數(shù)的兩倍(防火墻兩端都需要建立TCP連接),同時(shí)又代理了所有的來(lái)自客戶(hù)端的TCP請(qǐng)求和數(shù)據(jù)傳送,在系統(tǒng)訪問(wèn)量較大時(shí),防火墻自身的負(fù)荷會(huì)比較高,所以這種架構(gòu)并不能適用于大型網(wǎng)站。(我感覺(jué),對(duì)于這樣的防火墻架構(gòu),使用TCP_STATE攻擊估計(jì)會(huì)相當(dāng)有效:)
工作在IP層或IP層之下的稱(chēng)為路由型防火墻,其工作原理有所不同:客戶(hù)機(jī)直接與服務(wù)器進(jìn)行TCP連接,防火墻起的是路由器的作用,它截獲所有通過(guò)的包并進(jìn)行過(guò)濾,通過(guò)過(guò)濾的包被轉(zhuǎn)發(fā)給服務(wù)器,外部的DNS解析也直接指向服務(wù)器,這種防火墻的優(yōu)點(diǎn)是效率高,可以適應(yīng)100Mbps-1Gbps的流量,但是這種防火墻如果配置不當(dāng),不僅可以讓攻擊者越過(guò)防火墻直接攻擊內(nèi)部服務(wù)器,甚至有可能放大攻擊的強(qiáng)度,導(dǎo)致整個(gè)系統(tǒng)崩潰。
在這兩種基本模型之外,有一種新的防火墻模型,它集中了兩種防火墻的優(yōu)勢(shì),這種防火墻的工作原理如下所示:
第一階段,客戶(hù)機(jī)請(qǐng)求與防火墻建立連接:
第二階段,防火墻偽裝成客戶(hù)機(jī)與后臺(tái)的服務(wù)器建立連接
第三階段,之后所有從客戶(hù)機(jī)來(lái)的TCP報(bào)文防火墻都直接轉(zhuǎn)發(fā)給后臺(tái)的服務(wù)器
這種結(jié)構(gòu)吸取了上兩種防火墻的優(yōu)點(diǎn),既能完全控制所有的SYN報(bào)文,又不需要對(duì)所有的TCP數(shù)據(jù)報(bào)文進(jìn)行代理,是一種兩全其美的方法。近來(lái),國(guó)外和國(guó)內(nèi)的一些防火墻廠商開(kāi)始研究帶寬控制技術(shù),如果能真正做到嚴(yán)ge控制、分配帶寬,就能很大程度上防御絕大多數(shù)的SYN攻擊。
|
新聞熱點(diǎn)
疑難解答