在檢視tcp標識位syn時,順便關注了一下syn flood,從網上查閱一些資料加以整理,syn洪水攻擊利用tcp三次握手。
1.syn洪水介紹
當乙個系統(客戶端c)嘗試和乙個提供了服務的系統(伺服器s)建立tcp連線,客戶端c和服務端s會交換一系列報文。
正常的3次握手連線:首先是c傳送乙個syn報文給服務端s,然後這個服務端傳送乙個syn-ack包以回應c,接著,c就返回乙個ack包來實現一次完整的tcp連線。就這樣,c到服務端的連線就建立了,這時c和服務端就可以互相交換資料了。
syn洪水:在s返回乙個確認的syn-ack包的時候,s可能由於各種原因不會接到c回應的ack包。這個也就是所謂的半開放連線,s需要 耗費一定的數量的系統記憶體來等待這個未決的連線,雖然這個數量是受限,但是惡意者可以通過建立很多的半開放式連線來發動syn洪水攻擊 。
攻擊者可以通過ip欺騙傳送syn包給受害者系統,這個看起來是合法的,但事實上所謂的c根本不會進行ack回應服務端s的syn-ack報文,這意味著受害者將永遠不會接到ack報文。 而此時,半開放連線將最終耗用受害者所有的系統資源(即使等待ack包有超時限制),受害者將不能再接收任何其他的請求。
2.syn cookie
syn cookie用乙個cookie來響應tcp syn請求的tcp實現,在正常的tcp實現中,當s接收到乙個syn資料報,他返回 乙個syn-ack包來應答,然後進入tcp-syn-recv(半開放連線)狀態來等待最後返回的ack包。s用乙個資料空間來描述所有未決的連線, 然而這個資料空間的大小是有限的,所以攻擊者將塞滿這個空間。 在tcp syn cookie的執行過程中,當s接收到乙個syn包的時候,他返回乙個syn-ack包,這個資料報的ack序列號是經過加密的,也就是說,它由源位址,埠源次序,目標位址,目標埠和乙個加密種子計算得出。然後s釋放所有的狀態。如果乙個ack包從c返回, s將重新計算它來判斷它是不是上個syn-ack的返回包。如果這樣,s就可以直接進入tcp連線狀態並開啟連線。這樣,s就可以避免守侯半開放連線。(檢驗加密資料可能會帶來一定的cpu運算)
以上只是syn cookie的基本思路,它在應用過程中仍然有許多技巧,本人也沒有具體的實戰經驗。
3.syn cookie 防火牆
syn cookie 防火牆是syn cookie的乙個擴充套件,syn cookie是建立在tcp堆疊上的,他為linux作業系統提供保護。syn cookie防火牆是linux的一大特色,可以使用乙個防火牆來保護你的網路以避免遭受syn洪水攻擊。
syn cookie防火牆的原理:
client firewall server
------ ------------------------------
1. syn----------- - - - - - - - - - ->
2. <------------syn-ack(cookie)
3. ack----------- - - - - - - - - - ->
4. - - - - - - -syn--------------->
5. <- - - - - - - - - ------------syn-ack
6. - - - - - - -ack--------------->
7. -----------> relay the ------->
<----------- connection <-------
####################c與防火牆建立連線開始####################
1:syn包從c傳送到s(計畫建立連線)
2:防火牆在這裡扮演s的角色來回應乙個帶syn cookie的syn-ack包給c
3:如果c傳送ack包,接著防火牆和c的連線就建立了
####################c與防火牆建立連線結束###################
####################防火牆與s建立連線開始####################
4:防火牆這個時候扮演c的角色傳送乙個syn給s
5:s返回乙個syn給c
6:防火牆扮演c傳送乙個ack確認包給s,這個時候防火牆和s的連線也就建立了
###################防火牆與s建立連線結束####################
7:防火牆**c和s間的資料
如果系統遭受syn flood,那麼第三步就不會有,s不會收到相應在第一步的syn包,所以擊退了這次syn洪水攻擊。
Linux網路程式設計 ICMP洪水攻擊
一 icmp洪水攻擊的原理 icmp flood 是一種在ping基礎上形成的,但是用ping程式很少能造成目標機宕機的問題,這裡邊最大的問題是提高處理的速度,icmp洪水攻擊主要有以下3種方式。1 直接洪水攻擊 這樣做需要本地主機的頻寬與目標主機之間頻寬進行比拼,可以採用多執行緒的方法一次性得傳送...
Linux網路程式設計 UDP洪水攻擊
udp攻擊,又稱udp洪水攻擊或udp淹沒攻擊 英文 udp flood attack 是導致基於主機的服務拒絕攻擊的一種。udp 是一種無連線的協議,而且它不需要用任何程式建立連線來傳輸資料。當受害系統接收到乙個 udp 資料報的時候,它會確定目的埠正在等待中的 應用程式。當它發現該埠中並不存在正...
Linux網路程式設計之UDP洪水攻擊
1.概述 udp攻擊向目標主機的udp埠傳送大量的udp報文,造成目標主機的埠堵塞,達到攻擊的目的。建立多執行緒,利用原始套接字封裝udp與ip的首部,然後傳送udp報文,攻擊目標主機.2.udp攻擊例項 include include include include include include...