SYN 洪水是 DoS 攻擊的一種形式,攻擊者向目標伺服器發送連續的SYN
請求,試圖消耗足夠的伺服器資源,使系統對合法流量無回應[1] 。
SYN
請求和SYN
封包是相同的東西
SYN 洪水攻擊是透過利用 TCP 連線的握手程序來進行。在正常情況下,TCP 會表現出三個不同的過程來建立連結(圖 1a)。
SYN
(同步)資料包來請求連線。SYN-ACK
封包進行回應,以ACK
通訊。ACK
封包以確認從伺服器收到封包並建立連線。完成這一系列資料包發送和接收後,TCP 連線就會開啟並能夠發送和接收資料。這稱為 TCP 三向握手。該技術是使用 TCP 建立的每個連線的基礎。
為了創建 DoS,攻擊者利用以下事實:在收到初始SYN
封包後,伺服器將使用一個或多個SYN-ACK
封包進行回應,並等待握手的最後一步。 Cloudflare [2]描述了它的運作方式(圖 1b):
SYN
封包,通常帶有欺騙性的 IP 位址。ACK
封包(該封包從未到達)時,攻擊者繼續發送更多SYN
封包。每個新的SYN
封包的到來都會導致伺服器在一定時間內暫時維持一個新的開放連接埠連接,一旦所有可用連接埠都被利用,伺服器就無法正常運作。 該儲存庫中的攻擊是在虛擬機器中進行的。需要三台機器來進行攻擊。一台機器作為攻擊者,另一台機器作為受害者(即伺服器),第三台機器作為觀察者(即客戶端)。
為了發動攻擊,可以在同一台主機上設定三個虛擬機器。或者,可以在一台主機上設定兩台虛擬機,並將主機本身充當第三台電腦。
此攻擊是在假設攻擊者與受害者位於同一實體網路上的情況下實施的,從而簡化了確定 TCP 序號和來源連接埠號碼的任務。嗅探器工具可用於收集必要的資訊。
該儲存庫中的攻擊是使用netwox
工具進行的。然後,使用Wireshark [3]等嗅探工具來擷取攻擊封包。當攻擊正在進行時,在受害計算機上運行netstat -na
將結果與攻擊前的結果進行比較。
# check the size of the queue for holding half-open connections
sudo sysctl -q net.ipv4.tcp_max_syn_backlog
# check the current usage of the queue;
# i.e., the number of half-open connections associated with some listening port
netstat -na
# one netwox tool that may be useful is tool number 76: synflood
netwox 76 --help
同步 Cookie:
該儲存庫中的攻擊是透過操縱 SYN cookie 進行的。
使用 SYN cookie 允許伺服器在 SYN 佇列填滿時避免丟棄連線。 SYN 佇列條目被編碼到 SYN-ACK 回應中發送的序號中,而不是儲存額外的連線。如果伺服器隨後從用戶端接收到具有遞增序號的後續 ACK 回應,則伺服器能夠使用 TCP 序號中編碼的資訊重建 SYN 佇列項目,並照常繼續連線。
雖然這種緩解措施確實會丟失一些有關 TCP 連接的信息,但它比允許 DoS 因攻擊而降臨到合法用戶身上要好。
SYN cookie 是由 DJ Bernstein [4]創建的,用於直接回應 SYN 泛洪。
使用sysctl
指令開啟/關閉SYN cookie機制:
sudo sysctl -a | grep cookie # Display the SYN cookie flag
sudo sysctl -w net.ipv4.tcp_syncookies=0 # turn off SYN cookie
sudo sysctl -w net.ipv4.tcp_syncookies=1 # turn on SYN cookie
SYN cookie 是可用於阻止 SYN 泛洪的眾多對策之一。其他緩解措施包括增加佇列的最大大小、減少SYN-RECEIVED
計時器以及回收最舊的半打開 TCP 連線。
^ “CERT Advisory CA-1996-21 TCP SYN Flooding 和 IP 欺騙攻擊”卡內基美隆大學
^“SYN 洪水攻擊” Cloudflare
^ “關於 Wireshark” Wireshark 基金會
^“SYN cookies” DJ伯恩斯坦
感謝您的興趣,這個項目既有趣又富有洞察力!