SYN 洪水攻擊

SYN 洪水攻擊利用 TCP/IP 交握中的漏洞,嘗試中斷 Web 服務。

Share facebook icon linkedin icon twitter icon email icon

SYN 洪水攻擊

學習目標

閱讀本文後,您將能夠:

  • 定義 SYN 洪水 DDoS 攻擊
  • 解釋 SYN 洪水攻擊的工作原理
  • 區分不同類型的 SYN 攻擊
  • 瞭解 SYN 洪水攻擊的一些防護方法

什麼是 SYN 洪水攻擊?

SYN 洪水攻擊 (半開放式攻擊) 是一種阻斷服務 (DDoS) 攻擊,旨在透過消耗所有可用的伺服器資源,使伺服器無法用於合法流量。透過重複傳送初始連線要求 (SYN) 封包,攻擊者能夠淹沒目標伺服器上所有可用的連接埠,使目標裝置緩慢回應或完全不回應合法流量。

SYN 洪水攻擊的工作原理

SYN 洪水攻擊是利用 TCP 連線的交握程序來運作。在正常條件下,TCP 連線會呈現三個不同的程序以進行連線。

  1. 首先,用戶端向伺服器傳送一個 SYN 封包以初始化連線。
  2. 然後,伺服器回應帶有 SYN/ACK 封包的初始連線,以便確認此通訊。
  3. 最後,用戶端傳回 ACK 封包以確認收到來自該伺服器的封包。完成這個封包傳送和接收的序列後,TCP 連線將開啟並能傳送和接收資料。
TCP Three-way handshake diagram

為建立阻斷服務,攻擊者會利用這樣一個事實:當收到初始 SYN 封包後,伺服器將使用一個或多個 SYN/ACK 封包進行回應,並等待交握的最後一個步驟。其運作原理如下:

  1. 攻擊者將大量 SYN 封包傳送至通常帶有偽裝 IP 位址的目標伺服器。
  2. 隨後,伺服器回應每個連線要求,並準備好一個開啟的連接埠以接收回應。
  3. 在伺服器等待最後一個從未到達的 ACK 封包的同時,攻擊者會繼續傳送更多 SYN 封包。每一個新的 SYN 封包的到達,會使伺服器在某一段時間內臨時維護新開啟的連接埠連線,一旦利用了所有的可用連接埠,伺服器將無法正常運作。
SYN flood DDoS attack animation

在網路作業中,當伺服器維持連線開啟,但連線另一端的機器卻未開啟,則此連線可視為半開放。在此類型的 DDoS 攻擊中,目標伺服器將繼續保持連線開啟,並在連接埠再次可用之前等待每個連線逾時。結果便是此類型的攻擊可視為「半開放式攻擊」。

SYN 洪水攻擊可能以三種不同的方式發生:

  1. 直接攻擊:IP 位址未偽裝的 SYN 洪水攻擊稱為直接攻擊。此類攻擊中,攻擊者完全不會遮罩其 IP 位址。由於攻擊者使用帶有真實 IP 位址的單一來源裝置建立攻擊,攻擊者很容易被發現並受到緩解。為了在目標機器上建立半開放狀態,駭客會防止其機器回應伺服器的 SYN-ACK 封包。這通常可以透過防火牆規則來實現,該規則可阻止 SYN 封包以外的傳出封包,也可以在未到達惡意使用者機器前,預先濾除任何傳入 SYN-ACK 封包。實務上,此方法很少使用 (如有),因為緩解相當簡單 – 僅需封鎖每個惡意系統的 IP 位址即可。如果攻擊者使用殭屍網路 (例如 Mirai 殭屍網路),他們不會注重遮罩受感染裝置的 IP。
  2. 偽裝的攻擊:惡意使用者還可偽裝其傳送的每個 SYN 封包上的 IP 位址,以便阻止緩解,並使其身分識別更難以發現。儘管封包可能偽裝,但這些封包可能會被追溯到其來源。此類偵測工作比較困難,但並非沒有可能,尤其在網際網路服務提供者 (ISP) 願意提供協助的情況下。
  3. 分散式攻擊 (DDoS):如果使用殭屍網路建立攻擊,將攻擊追溯回其來源的可能性很低。對於新增的混淆層級,攻擊者可能也會讓每個分散式裝置偽裝其傳送封包的 IP 位址。如果攻擊者使用殭屍網路 (例如 Mirai 殭屍網路),他們通常不會注重遮罩受感染裝置的 IP。

透過使用 SYN 洪水攻擊,惡意執行者可嘗試在目標裝置或服務中使用比其他 DDoS 攻擊明顯較少的流量建立阻斷服務。無需使用巨流量攻擊,它旨在使目標周圍的網路基礎結構飽和,而 SYN 攻擊僅需大於目標作業系統中的可用待處理項目。如果攻擊者能確定逾時之前待處理項目的大小及每個連線維持開啟的時長,攻擊者就能針對停用此系統所需的確切參數,從而使總流量減少至建立阻斷服務所需的最小量。

如何緩解 SYN 洪水攻擊?

SYN 洪水攻擊漏洞已由來已久,並且已運用一些緩解途徑。一些方法包括:

增加待處理項目佇列

目標裝置中的每個作業系統都有其允許的特定數量的半開放式連線。一個作業系統之所以會對於大量 SYN 封包作出回應,旨在使得該作業系統允許可行的半開放式連線之最大數量增加。若要成功增加待處理項目的最大數量,該系統必須保留額外的記憶體資源以處理所有新的要求。如果系統沒有足夠的記憶體來處理增加的待處理項目佇列大小,系統效能將受到不利影響,但仍應該會優於阻斷服務。

回收最舊的半開放式 TCP 連線

另一個緩解策略是當待處理項目一旦填滿,覆寫最舊的半開放式連線。此策略要求,可以用比待處理項目填滿惡意 SYN 封包更少的時間,完全建立合法連線。當攻擊量增加時,或待處理項目大小過小而無法實行時,將無法進行此特定防禦。

SYN Cookie

此策略涉及由伺服器建立 Cookie。為避免在填滿待處理項目後發生斷開連線的風險,伺服器將回應帶有 SYN-ACK 封包的每個連線要求,但另一方面,會刪除待處理項目中的 SYN 要求,將此要求從記憶體中移除,並使連接埠保持開啟狀態以準備建立新的連線。如果連線為合法要求,最終 ACK 封包將由用戶端機器傳送回伺服器,隨後,伺服器將重新建構 (具有某些限制) SYN 待處理項目佇列項目。儘管此緩解措施確實會丟失一些有關 TCP 連線的資訊,但總比因受到攻擊而允許阻斷服務發生在合法使用者身上來得好。

Cloudflare 如何緩解 SYN 洪水攻擊?

Cloudflare 可透過介於目標伺服器與 SYN 洪水攻擊之間,在某種程度上緩解此類型的攻擊。建立初始 SYN 要求後,Cloudflare 將在雲端處理交握程序,保留與目標伺服器的連線,直到 TCP 交握完成為止。此策略將保持與假 SYN 封包連線的資源成本從目標伺服器中扣除,並將其置於 Cloudflare 的 Anycast network。瞭解更多有關 Cloudflare DDoS 保護的運作原理。

Cloudflare stops SYN Flood attacks diagram