網路安全

SYN 洪泛(SYN flood)

/ SIN flood /

回想一下:TCP 連線以三向交握開始:用戶端送 SYN(「來聊吧」),伺服器回 SYN-ACK(「好,我聽到了」),用戶端再以 ACK(「很好,開始」)完成。在伺服器的 SYN-ACK 與用戶端最後的 ACK 之間,伺服器持有一個半開連線,已為它保留了記憶體並在等待。SYN 洪泛正是濫用這個等待:它送出滔滔不絕的 SYN,卻從不完成交握,讓伺服器的表被永遠不會解決的半開連線塞滿。

以下是逐步的機制。攻擊者送出許多 SYN 封包,常帶著偽造(假的)來源 IP 位址。對每一個,伺服器盡責地回 SYN-ACK,並在它的連線表裡配置一個插槽,等待最後的 ACK。但那個 ACK 永遠不來——來源位址是假的,或攻擊者乾脆忽略回應。每個半開連線都綁住伺服器資源,直到它最終逾時。送 SYN 的速度比它們逾時的速度快,伺服器的半開連線表就會被完全塞滿;沒有插槽可用時,它只好回絕新的連線嘗試——包括來自真正使用者的。

為什麼重要:SYN 洪泛是一個經典、具啟發性的阻斷服務攻擊,因為它利用了協定自身的設計——伺服器必須在收到單一個 SYN 後、還不知道用戶端是否真實之前,就先保留狀態。標準防禦是 SYN cookie:伺服器不在第一個 SYN 就配置狀態,而是把所需的連線資訊編碼進它在 SYN-ACK 裡送出的序號裡,於是它能保持無狀態,直到一個有效的 ACK 真的回來、證明用戶端是真的。更深的教訓是通用的:任何在鑑別對方之前就先承諾資源的協定,都能被這樣耗盡。

攻擊者以每秒 10 萬個帶偽造來源 IP 的 SYN 朝一台伺服器開火。伺服器送出 SYN-ACK 並為每一個保留插槽,等待永遠不來的 ACK。它的半開連線表被塞滿,合法使用者的 SYN 被回絕。SYN cookie 的解法是:在真正的 ACK 回來之前不保留任何狀態。

半開連線堆積,直到表被塞滿。

SYN 洪泛利用的是伺服器在收到第一個 SYN、還不知道用戶端是否真實時就承諾記憶體。SYN cookie 的破解之道,是在一個有效的 ACK 證明用戶端為真之前,保持無狀態。

又稱
SYN flooding attackhalf-open connection attackSYN 洪泛SYN 攻擊