TCP三次握手有哪些漏洞?

2022-08-31 20:09:19 字數 3789 閱讀 1642

syn flood 攻擊

syn flood 是ddos 攻擊的方式之一,這是一種利用tcp協議缺陷,傳送大量偽造的tcp連線請求,從而使得被攻擊方資源耗盡(cpu滿負荷或記憶體不足)的攻擊方式。

要明白這種攻擊的基本原理,還是要從tcp連線建立的過程開始說起:

首先,請求端(客戶端)傳送乙個包含syn標誌的tcp報文,syn即同步(synchronize),同步報文會指明客戶端使用的埠以及tcp連線的初始序號。

第二部,伺服器在收到客戶端的syn報文後,將返回乙個syn+ack的報文,表示客戶端的請求被接受,同時tcp序號被加一,ack即確認(acknowledgment)。

第三部,客戶端也返回乙個確認報文ack給伺服器端,同樣tcp序列號被加一,到此乙個tcp連線完成。

以上的連線過程在tcp協議中稱為三次握手。

問題就出在tcp連線的三次握手中,假設乙個使用者向伺服器傳送了syn報文後突然宕機或掉線,那麼伺服器在發出syn+ack應答報文後是無法收到客戶端的ack報文的(第三次握手無法完成),這種情況下伺服器端一般會不停地重試(再次傳送syn+ack給客戶端)並等待一段時間後丟棄這個未完成的連線,這段時間的長度我們稱為syn timeout(大約為30秒-2分鐘);乙個使用者出現異常導致伺服器的乙個執行緒等待1分鐘並不是什麼很大的問題,但如果有乙個惡意的攻擊者傳送大量偽造原ip位址的攻擊報文。傳送到服務端,伺服器將為了維護乙個非常大的半連線佇列而消耗非常多的cpu時間和記憶體。伺服器端也將忙於處理攻擊者偽造的tcp連線請求而無暇理睬客戶的正常需求(畢竟客戶端的正常請求比率非常之小),此時從正常客戶的角度看來,伺服器失去響應,這種情況我們稱作:伺服器端受到了syn flood攻擊(syn 洪水攻擊)。

原理:攻擊者首先偽造位址對伺服器發起syn請求,伺服器回應(syn+ack)包,而真實的ip會認為,我沒有傳送請求,不作回應。伺服器沒有收到回應,這樣的話,伺服器不知道(syn+ack)是否傳送成功,預設情況下會重試5次(tcp_syn_retries)。這樣的話,對於伺服器的記憶體,頻寬都有很大的消耗。攻擊者如果處於公網,可以偽造ip的話,對於伺服器就很難根據ip來判斷攻擊者,給防護帶來很大的困難。

解決方法:

第一種是縮短syn timeout時間;

由於syn flood 攻擊的效果取決於伺服器上保持的syn半連線數,這個值=syn攻擊的頻度 x syn timeout ,所以通過縮短從接收到syn報文到確定這個報文無效並丟棄該連線的時間,例如設定為20秒以下(過低的syn timeout 設定可能會影響客戶的正常訪問),可以成倍地降低伺服器的負荷。

第二種方法是設定 syn cookie;

就是給每乙個請求連線的ip位址分配乙個cookie,如果短時間內連續受到某個ip的重複syn報文,就認定是受到了攻擊。以後從這個ip位址來的包會被丟棄。

可是上述的兩種方法只能對付比較原始的syn flood攻擊,縮短syn timeout時間僅在對方攻擊頻度不高的情況下生效,syn cookie更依賴於對方使用真實的ip位址,如果攻擊者以數萬/秒的速度傳送syn報文,同時利用隨機改寫ip報文中的源位址,以上的方法將毫無用武之地。例如sock_raw 返回的套接字通過適當的設定可以自己完全控制ip頭的內容從而實現ip欺騙。

第三種方法是syn cache技術;

這種技術在收到syn時不急著去分配系統資源,而是先回應乙個ack報文,並在乙個專用的hash表中(cache)中儲存這種半開連線,直到收到正確的ack報文再去分配系統。

第四種方法是使用硬體防火牆;

syn flood攻擊很容易就能被防火牆攔截。

擴充套件:ddos攻擊的原理,如何防止ddos攻擊?

ddos是英文distributed denial of service 的縮寫,意即「分布式拒絕服務」。

當下主要有2種流行的ddos攻擊:

1、syn flood攻擊:這種攻擊方法是經典最有效的ddos方法。

2、tcp全連線攻擊

這種攻擊是為了繞過常規防火牆的檢查而設計的,一般情況下,常規防火牆大多具備過濾land等dos攻擊的能力,但對於正常的tcp連線時放過的,很多網路服務程式(如:iis、apache等web伺服器)能接受的tcp連線數是有限的,一旦有大量的tcp連線,則會導致**訪問非常緩慢甚至無法訪問。

tcp全連線攻擊就是通過許多殭屍主機不斷地與受害伺服器建立大量的tcp連線,直到伺服器的記憶體等資源被耗盡而被拖垮,從而造成拒絕服務。

這種攻擊的特點是可繞過一般防火牆的防護而達到攻擊目的。

缺點是需要找很多殭屍主機,並且由於殭屍主機的ip是暴露的,因此容易被追蹤。

如何防止呢?

1、限制syn流量

使用者在路由器上配置syn的最大流量來限制syn封包所能占有的最高頻寬,這樣,當出現大量的超過所限定的syn流量時,說明不是正常的網路訪問,而是有黑客入侵。

2、定期掃瞄

定期掃瞄現有的網路主節點,清查可能存在的安全漏洞,對新出現的漏洞及時進行清理。

3、在骨幹節點配置防火牆

防火牆本山能抵禦ddos攻擊和其他一些攻擊。在發現受到攻擊的時候,可以將攻擊導向一些犧牲主機,這樣可以保護真正的主機不被攻擊。當然導向的這些犧牲主機可以選擇不重要的,或者是linux以及unix等漏洞少和天生防範攻擊優秀的系統。

4、用足夠的機器承受黑客攻擊

這是一種較為理想的應對策略。如果使用者擁有足夠的容量和足夠的資源給黑客攻擊,在它不斷訪問使用者、奪取使用者資源之時,自己的能量也在逐漸耗失,或許未等使用者被攻死,黑客已無力支招了。不過此方法需要投入的資金比較多,平時大多數裝置處於空閒狀態,和目前中小企業網路實際運**況不相符。

5、過濾不必要的服務和埠

可以使用inexpress、express、forwarding等工具來過濾不必要的服務和埠,即在路由器上過濾假ip。

land攻擊

land攻擊力用了tcp連線建立的三次握手過程,通過向乙個目標主機傳送乙個用於建立請求連線的tcp syn報文而實現對目標主機的攻擊。與正常的tcp syn報文不同的是:land攻擊報文的源ip位址和目的ip位址是相同的,都是目標主機的ip位址。這樣目標主機接在收到這個syn報文後,就會向該報文的源位址傳送乙個ack報文,並建立乙個tcp連線控制結構,而該報文的源位址就是自己。由於目的ip位址和源ip位址是相同的,都是目標主機的ip位址,因此這個ack報文就發給目標主機本身。這樣如果攻擊者傳送了足夠多的syn報文,則目標計算機的tcb可能會耗盡,最終不能正常服務。

tcp存在的缺陷有哪些?

1、tcp三次握手可能會出現syn flood攻擊。

2、tcp三次握手可能會出現land攻擊。

3、connection flood攻擊。

原理是利用真實的ip位址向伺服器發起大量的連線,並且建立連線之後很長時間不釋放並定時傳送垃圾資料報給伺服器使連線得以長時間保持,占用伺服器的資源,造成伺服器上殘餘連線(wai-time狀態)過多,效率降低,甚至資源耗盡,無法響應其他客戶所發起的連線。

防範該攻擊主要有如下方法:

1、限制每個源ip的連線數

2、對惡意連線的ip進行封禁

3、主動清除殘餘連線

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

TCP 三次握手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手

1.伺服器準備好接受外來連線。passive open 被動開啟 需呼叫 socket bind listen 函式來完成。2.客戶端通過呼叫 connect 主動開啟 active open 這使得客戶 tcp傳送乙個 syn 表示同步 分節,這個分節告訴伺服器,客戶端將在待建立的連線中傳送的資料...