當前位置:
首頁 > 最新 > 要點梳理:TCP 連接及常見攻擊手法分析

要點梳理:TCP 連接及常見攻擊手法分析


TCP 協議

TCP 協議是一種面向連接的、可靠的位元組流通信協議。


數據校驗:TCP 在傳輸過程中可以通過校驗和,確認和重傳機制保證可靠傳輸。

數據順序性:TCP 給數據分節進行排序,並使用累計確認保證數據的順序不變和非重複。

流量與擁塞控制:TCP 使用滑動窗口機制來實現流量控制,通過動態改變窗口的大小進行擁塞控制。


三次握手是指,建立一個 TCP 連接,需要客戶端和服務端總共發送三個包。

第一次握手(SYN=1,seq=x)

客戶端發送一個 TCP 的 SYN 標誌位置 1 的包,指明客戶端準備連接伺服器的埠,以及初始序列號 X,保存在包頭的序列號(Sequence Number)欄位里。發送完畢後,客戶端進入 SYN_SEND 狀態。

其中第一次的序列號是隨機的,這樣是為了網路安全,如果不是隨機產生初始序列號,黑客將會以很容易的方式獲取到你與其他主機之間的初始化序列號,並且偽造序列號進行攻擊。

第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1)

伺服器發回確認包(ACK)應答,即 SYN 標誌位和 ACK 標誌位均為1.伺服器端選擇自己 ISN 序列號,放到 Seq 域里,同時將確認序號(Acknowledgement Number)設置為客戶的 ISN 加1,即X+1。發送完畢後,伺服器進入 SYN_RCVD 狀態。

第三次握手(ACK=1,ACKnum=y+1)

客戶端再次發送確認包(ACK),SYN 標誌位為0,ACK 標誌位為1,並且把伺服器發來 ACK 的序號欄位+1,放在確定欄位中發送給對方。發送完畢後,客戶端發送完畢後進入 ESTABLISHED 狀態,TCP 握手結束。


四次揮手是指,TCP 連接的拆除需要發送四個包。

客戶端或伺服器均可發起揮手動作,在 socket 編程中,任何一方執行 close() 操作即可產生揮手操作。

第一次揮手(FIN=1,seq=x)

當發送 FIN 包,表示自己已經沒有數據可以發送了,但是仍然可以接受數據。發送完畢後,(假設發送方式客戶端)客戶端進入 FIN+WAIT_1 狀態。

第二次揮手(ACK=1,ACKnum=X+1)

伺服器確認客戶端的 FIN 包,發送一個確認包,表明自己接受到了客戶端關閉連接的請求,但是還沒準備好關閉連接(理論上:有可能還有數據向客戶端傳送)

第三次揮手(FIN=1, seq=y)

伺服器端準備好關閉連接時,向客戶端發送結束連接請求,FIN 置為1。發送完畢後,伺服器端進入 LAST_ACK 狀態,等待來自客戶端的最後一個 ACK 。

第四次揮手(ACK=1,ACKnum=y+1)

客戶端接受到來自伺服器的關閉請求,發送一個確認包,並進入 TIME_WAIT 狀態,等待可能出現的要求重傳 ACK 包。伺服器端接受到這個確認包後,關閉連接,進入 CLOSED 狀態。

客戶端等待 2MSL 之後,沒有收到伺服器端的 ACK ,認為伺服器端已經處於正常關閉連接,於是自己也關閉連接,進入 CLOSED 狀態。


攻擊原理

當 Server(B) 收到 Client(A) 的 SYN 請求報文時,將發送一個(ACK,SYN)應答報文,同時創建一個控制結構,將其加入到一個隊列中,等待對方的 ACK 報文。接收到 ACK 報文後,雙方都進入連接狀態。如果 Server 在一段時間內沒有收到應答消息,則控制塊將被釋放。

在 TCP 協議軟體中,通常對每個埠等待建立鏈接的數目有一定限制,當隊列長度到達設定閾值時,將丟棄後面到達的 TCP SYN 請求報文。

如果攻擊者不斷發送大量的 TCP SYN 報文,其他用戶就無法再鏈接到被攻擊者伺服器。

應對措施

通過增加連接數目、減小超時時間,可以緩解攻擊,但是無法從根本阻止攻擊,是 DOS 的一種,可通過 netstat 命令通過查看伺服器網路連接情況,如果存在大量 SYN 的連接,則有可能收到了SYN Flooding攻擊。


利用了 TCP 連接建立的三次握手過程,通過向一個目標計算機發送一個 TCP SYN 報文(連接請求報文)而完成對目標計算機的攻擊。

攻擊原理

與正常的 TCP SYN 報文不同的是,LAND 攻擊報文的源 IP 地址和目的 IP 地址是相同的,都是目標計算機地址,這樣目標計算機接受到 SYN 報文後,就會向該報文的源地址發送一個 ACK 報文,並建立一個 TCP 連接控制結構(TCB),而該報文的源地址就是自己,因此,這個 ACK 報文就發給了自己。這樣如果攻擊者發送了足夠多的 SYN 報文,則目標計算機的 TCB 可能會耗盡,最終不能正常服務。

這也是一種 DOS 攻擊。可以通過 Kali Linux 提供的如 hping3 實現偽造包的功能。

應對措施

可以通過防火牆、路由設備,建立規則,丟掉源地址和目標地址相同的 SYN、SYN+ACK 和 TCP。

利用 TCP 會話劫持,可以方便地修改、偽造數據。

攻擊原理

TCP 通過三次握手建立連接以後,主要採用滑動窗口機制來驗證對方發送的數據。如果對方發送的數據不在自己的接收窗口內,則丟棄此數據,這種發送序號不在對方接收窗口的狀態稱為非同步狀態。

當通信雙方進入非同步狀態後,攻擊者可以偽造發送序號在有效接收窗口內的報文,,也可以截獲報文,篡改內容後,再修改發送序號,而接收方會認為數據是有效數據。

TCP 劫持的關鍵在於使通信雙方進入非同步狀態。有多種方法可以達到此目的。

如四次揮手狀態圖所示,在主機 A 發送 SYN 請求後,B 發送 ACK & SYN 進行應答,則 A 認為連接已經建立。此時,攻擊者偽裝成 A 向 B 發送一個 RST 報文,則 B 釋放連接,攻擊者繼續偽裝成 A 用自己的初始序列號和 B 建立新的連接,而 A 和 B 對此毫不覺察。當攻擊者偽裝成 A 和 B 建立連接後,A 和 B 就已經進入了非同步狀態。

利用 Telnet 協議的 NOP 命令也可以使通信雙方進入非同步狀態。主機 B 接收到 NOP 命令後,並不進行任何操作,但確認序列號將會加 1。如果攻擊者偽裝成 A 向 B 發送大量的 NOP 命令,則會造成 A 和 B 的非同步狀態。

應對措施

檢測 TCP 劫持的關鍵在於檢測非同步狀態。如果不斷收到在接收窗口之外的數據或確認報文,則可以確定遭到 TCP 劫持攻擊。或者設置禁止 RST 報文。


TCP 偽裝主要是獲取其他客戶端的初始序列號進行偽裝。

攻擊原理

要進行 TCP 偽裝,就意味著在建立連接時,攻擊者需要知道被偽裝者的當前初始序列號。

序列號的生成演算法一般有三種,一是不斷增加一個常量,二是不斷增加一個與時間相關的變數,三是偽隨機數。對於前兩種演算法而言,其規律都能通過測試觀察得到。也就是說,如果攻擊者與被欺騙的目標主機處於同一網路,那麼在排除了被偽裝身份主機的干擾以後,可以比較簡單地通過網路嗅探分析出初始序列號來。

當攻擊者與可以通信的兩台主機不在同一網路時,由於攻擊者無法接收到響應包,這種攻擊較為困難。但它並非萬全,因為攻擊者仍可配合路由欺騙的方法將響應包轉發出來,從而實現上述攻擊。

應對措施

TCP 偽裝利用 TCP 協議本身的設計,最自然、直接和本質的思路是不在有安全需求的場合使用 TCP,而是考慮 TLS 等對連接雙方有認證、對網路會話有加密的協議。

也有一些其他的方法能夠從外部防止該攻擊:將序列號生成演算法換為偽隨機數能避免初始序列號被推解,或是在路由器拒絕來自外網但使用內網源 IP 地址的數據包。

文 / blank

編 / 熒聲


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 創宇前端 的精彩文章:

TAG:創宇前端 |