陳小中
[摘 要]:網絡技術的發展,由于網絡協議自身特點,常導致相關安全問題,本文主要在分析SYN Flood攻擊的基本原理的同時,詳細地描述了目前比較有效的一種御措施:地址狀態監控技術。
[關鍵詞]:SYN Flood攻擊 拒絕服務攻擊 原理 防御方法
一、SYN Flood攻擊介紹
拒絕服務攻擊(Denial of Service,DoS)是目前比較有效而又非常難于防御的一種網絡攻擊方式,它的目的就是使服務器不能夠為正常訪問的用戶提供服務。所以,DoS對一些緊密依靠互聯網開展業務的企業和組織帶來了致命的威脅。SYN Flood是最為有效和流行的一種DoS攻擊形式,它利用TCP三次握手協議的缺陷,向目標主機發送大量的偽造源地址的SYN連接請求,消耗目標主機的資源,從而不能夠為正常用戶提供服務。
1.TCP連接建立的過程
要掌握SYN Flood攻擊的基本原理,必須先了解TCP的三次握手機制。
TCP三次握手過程如下:
(1)客戶端向服務器端發送一個SYN置位的TCP同步報文,包含客戶端使用的端口號和初始序列號A;
(2)服務器端收到客戶端發送來的SYN報文后,向客戶端發送一個SYN和ACK報文,包含確認號為A+1和服務器的初始序列號B;
(3)TCP客戶端。客戶端收到服務器返回的SYN+ACK報文后,向服務器返回一個確認號為B+1序號為A+1的ACK報文,TCP連接建立完成。如圖1所示:

在SYN Flood攻擊中,黑客機器向受害主機發送大量偽造源地址的TCP SYN報文,受害主機分配必要的資源,然后向源地址返回SYN+ACK包,并等待源端返回ACK包,如圖2所示,由于源地址是偽造的,源端永遠都不會返回ACK報文,受害主機繼續發送SYN+ACK包,并將半連接放入端口的積壓隊列中,雖然一般的主機都有超時機制和默認的重傳次數,但是由于端口的半連接隊列的長度是有限的,如果不斷的向受害主機發送大量的TCP SYN報文,半連接隊列就會很快填滿,服務器拒絕新的連接,這樣將導致該端口無法響應其他機器進行的正常請求,最終使受害主機的資源耗盡而癱瘓。

二、地址狀態監控的解決方法
地址狀態監控的解決方法是利用監控工具對網絡中的有關TCP連接的數據包進行監控,并對監聽到的數據包進行處理。處理的主要依據是連接請求的源地址。
每個源地址都有一個狀態與之對應,總共有四種狀態:
初態:任何源地址剛開始的狀態;
NEW狀態:第一次出現或出現多次也不能斷定存在的源地址的狀態;
GOOD狀態:斷定存在的源地址所處的狀態;
BAD狀態:源地址不存在或不可達時所處的狀態。
具體的動作和狀態轉換根據TCP頭中的位碼值決定:
1.監聽到SYN包,如果源地址是第一次出現,則置該源地址的狀態為NEW狀態;如果是NEW狀態或BAD狀態;則將該包的RST位置1然后重新發出去,如果是GOOD狀態不作任何處理。
2.監聽到ACK或RST包,如果源地址的狀態為NEW狀態,則轉為GOOD狀態;如果是GOOD狀態則不變;如果是BAD狀態則轉為NEW狀態;如果是BAD狀態則轉為NEW狀態。
3.監聽到從服務器來的SYN ACK報文(目的地址為addr),表明服務器已經為從addr發來的連接請求建立了一個半連接,為防止建立的半連接過多,向服務器發送一個ACK包,建立連接,同時,開始計時,如果超時,還未收到ACK報文,證明addr不可達,如果此時addr的狀態為GOOD則轉為NEW狀態;如果addr的狀態為NEW狀態則轉為BAD狀態;如果為addr的狀態為BAD狀態則不變。
下面介紹基于地址狀態監控的方法如何防御SYN Flood攻擊:
1.對于一個偽造源地址的SYN報文,若源地址第一次出現,則源地址的狀態為NEW狀態,當監聽到服務器的SYN+ACK報文,表明服務器已經為該源地址的連接請求建立了半連接。此時,監控程序代源地址發送一個ACK報文完成連接。這樣,半連接隊列中的半連接數不是很多。計時器開始計時,由于源地址是偽造的,所以不會收到ACK報文,超時后,監控程序發送RST數據包,服務器釋放該連接,該源地址的狀態轉為BAD狀態。之后,對于每一個來自該源地址的SYN報文,監控程序都會主動發送一個RST報文。
2.對于一個合法的SYN報文,若源地址第一次出現,則源地址的狀態為NEW狀態,服務器響應請求,發送SYN+ACK報文,監控程序發送ACK報文,連接建立完畢。之后,來自客戶端的ACK很快會到達,該源地址的狀態轉為GOOD狀態。服務器可以很好的處理重復到達的ACK包。
通過以上分析,基于監控的方法可以很好地防御SYN Flood攻擊,而不影響正常用戶的連接。
參考文獻:
[1]范建華譯. TCP/IP詳解卷1:協議.機械工業出版社,2000,4.