1. TCP中的SYN
Flooding攻擊原理:
要明白這種攻擊的基本原理,還是要從TCP串連建立的過程開始說起。由於 TCP基於串連的,為了在服務端和用戶端之間傳送TCP資料,必須先建立一個虛擬電路,也就是TCP串連,建立TCP串連的過程也就是我們熟悉的“三向交握”過程:首先,請求端(用戶端)發送一個包含SYN標誌的TCP報文,表示用戶端欲發起通訊串連;第二步,伺服器在收到用戶端的SYN報文後,將返回一個SYN+ACK的報文,表示用戶端的請求被接受;第三步,用戶端也返回一個確認報文ACK給伺服器端,到此一個TCP串連完成。問題就出在TCP串連的三向交握中,假設一個使用者向伺服器發送了SYN報文後突然死機或掉線,那麼伺服器在發出SYN+ACK應答報文後是無法收到用戶端的ACK報文的,這種情況下伺服器端一般會重試(再次發送SYN+ACK給用戶端)並等待一段時間後丟棄這個未完成的串連,這段時間的長度我們稱為SYN
Timeout,一般來說這個時間是分鐘的數量級(大約為30秒-2分鐘);如果有一個惡意的攻擊者大量類比這種情況,伺服器端將為了維護一個非常大的半串連列表而消耗非常多的資源,最終導致伺服器端忙於處理攻擊者偽造的TCP串連請求而無暇理睬客戶的正常請求,此時從正常客戶的角度看來,伺服器失去響應,這種情況我們稱作:伺服器端受到了SYN
Flooding攻擊。
2. SCTP是如何防止SYN
Flooding攻擊的:
SCTP是通過“四次握手”的方法來建立一個SCTP連結的。具體過程如下:首先請求端發送一個INIT訊息到服務端;服務端收到這個INIT訊息後,準備好建立本次串連所需要的相關資訊,並將這些資訊放在一個叫“State
Cookie”的資料區塊中,接下來服務端給請求端發送一個INIT_ACK的訊息,INIT_ACK中包含了這個“State
Cookie”,同時服務端會把和本次連結相關的所有資源釋放掉,不維護任何資源和狀態;請求端收到INIT_ACK後會把裡面的“State
Cookie”資訊取出來重新封裝一個COOKIE_ECHO發往服務端;服務端收到COOKIE_ECHO訊息後再次去除其中的“State
Cookie”,依據“State Cookie”中儲存的資訊建立本次連結,並向請求端發送COOKIE_ACK訊息。由此可見SCTP為了避免SYN
Flooding攻擊採用了一種比較聰明的辦法就是:服務端不維護半連結資訊,而是把半連結資訊發送給請求端(存放在“State Cookie”中),如果請求端確實需要建立這個連結,那麼請求端需要再把半連結資訊回送給服務端,這時服務端便可以根據返回的半連結資訊建立串連了。
3. TCP和SCTP建立串連過程:
轉自 http://blog.csdn.net/minico/article/details/5706861