SYN Flood攻擊


概述

本文主要介紹SYN Flood攻擊的原理,以及防火牆設備的防御手段;

 

TCP三次握手

TCP建立連接過程需要經過三次握手,在三次握手成功之后,建立連接,進而進行數據傳輸;假設有客戶端和服務器,客戶端向服務器發起連接請求:

(1) 客戶端向服務器發送SYN報文;

(2) 服務器收到SYN之后向客戶端回復SYN-ACK報文

(3)客戶端收到SYN-ACK之后向服務器發送ACK報文;

經過上述三個步驟,整個連接建立過程結束;

上述過程中,在服務器收到SYN報文之后,會在內部建立連接請求控制塊,該控制塊用於跟蹤連接建立過程和狀態,控制塊的生命周期如下:

(1) 如果收到最后一個握手ACK報文,該控制塊會轉換成為正式的連接控制塊;

(2) 如果遲遲未收到最后的那個ACK報文,服務器會通過定時器重發SYN-ACK,直至超時,銷毀請求控制塊;

明確了上述流程之后,來看SYN Flood的產生;

 

SYN Flood產生

SYN Flood正是利用了上面的服務器收到SYN報文之后,立即就會建立控制塊的設計,發起攻擊;攻擊者通過多台攻陷的“肉機”或者偽造的IP地址,大量的向服務器發送SYN報文,服務器不斷的申請資源建立控制塊,從而大量占用資源直至資源耗盡,使正常請求服務變慢,或者完全停止服務;

 

SYN Flood檢測
1. 新建連接請求數檢測

防火牆等中間設備記錄SYN報文的速率,如果超過配置的閾值,則認為存在SYN Flood;

2. 服務器半開連接數檢測

防火牆等中間設備統計半開連接數目與建立連接數的相對比例,如果發現半開連接數相對於建立連接數有大比例的增加,超過了配置的閾值,則認為存在SYN Flood;

 

SYN Flood防御
1. 完全阻斷新連接

直接徹底的不允許任何SYN報文建立連接請求,直接做丟包處理;

 
2. 釋放無效的半開連接

當產生大量的半開連接時,防火牆設備需要檢測出無效的半開連接,並模擬客戶端與服務器的五元組向服務器發送RST報文,通知服務器釋放連接資源;

 
3. SYN Cookie技術

該技術實際是在客戶端和服務器之間建立了TCP Proxy;其過程如下:

(1) 客戶端發送SYN報文;

(2) 防火牆收到客戶端發來的SYN報文,模擬服務器向客戶端發送SYN-ACK報文,其中該報文中的序號為防火牆根據客戶端信息按一定規則計算出的Cookie值,作為序號發給客戶端;

(3) 客戶端在收到SYN-ACK報文之后,正常會回復ACK報文;服務器可能會做如下處理;

a. 防火牆接收這個ACK報文之后,對其中的需要根據客戶端信息進行Cookie計算,如果與序號匹配,則認為是一個合法連接,進而執行步驟(4)以下的步驟;

b. 如果客戶端未回應ACK報文,則認為是攻擊請求,丟包處理;此時未建立控制塊;

c. 如果客戶端回復了ACK,但是其中的Cookie值檢測無法通過,則認為是攻擊請求,丟包處理;此時為建立控制塊;

(4) 通過Cookie檢測之后,防火牆模擬客戶端向服務器發送SYN請求,並建立連接控制塊,保存於客戶端與防火牆的連接狀態和防火牆與服務器的連接狀態;

(5) 服務器回復SYN-ACK給防火牆;

(6) 防火牆模擬客戶端向服務器回復ACK,此時防火牆與服務器之間連接建立完成;

(7) 經過上述步驟,客戶端與防火牆直接建立了連接,防火牆與服務器之間建立了連接,后面交互的數據,全部由防火牆進行代理;

 

4. Safe Reset技術

該技術實際上是對正常的TCP連接建立過程進行了干預性的校驗;過程如下:

(1) 客戶端發送SYN報文;

(2) 防火牆模擬服務器向客戶端回復SYN-ACK,其中的確認序號設置為一個錯誤的序號,並且通過客戶端信息計算一個Cookie值作為SYN-ACK的序號發給客戶端;

(3) 客戶端收到錯誤的SYN-ACK之后,正常會發送RST結束連接;

(4) 防火牆收到RST后,檢測其Cookie,如果檢測通過,則后續請求放行,進入流程(5);如果未收到RST或者Cookie校驗未通過,則做丟包處理;

(5) 客戶端重新發送SYN報文; 防火牆放行狀態,不會干預連接建立請求;客戶端與服務器正常完成三次握手建立連接;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM