Tcp
如果伺服器從未收到 RST 數據包會怎樣?
最近有人決定向我展示他發現的使用 SYN/TCP 的新拒絕服務方法的 POC。我以為這完全是胡說八道,但在向他解釋了 SYN-SYN/ACK-RST 之後,他讓我無語了。他告訴我“如果你用來欺騙發送 SYN/ACK 數據包的伺服器無法接收到 RST 數據包怎麼辦?”
我不知道。他聲稱伺服器將繼續嘗試發送 SYN/ACK 數據包,並且數據包速率將繼續增加。
有沒有道理呢?誰能詳細說明?
顯然,它的工作方式是這樣的:
他將 SYN 數據包的 IP 欺騙為目標的 IP。然後,他將 SYN 數據包發送到少數隨機伺服器
,它們都用他們的 SYN/ACK 數據包回复目標 IP,當然
目標用 RST 響應,正如我們所知,
但不知何故,他阻止目標發送 RST 或保持從處理它的隨機伺服器
有了這個,顯然伺服器將繼續嘗試發送 SYN/ACK 數據包,從而產生某種“雪球”效應。
如您所知,“嘗試打開埠”數據包流應該像這樣工作:
- 同步 ->
- <- 同步/確認
- 確認->
“封閉埠”版本很簡單:
- 同步 ->
- <- RST
如果遠端不返回 RST 數據包,這是一種非常常見的防火牆配置:
- 同步 ->
- $$ time passes $$
- 同步 ->
- $$ time passes $$
- 同步 ->
- $$ time passes $$
我所說的非常普遍是指非常普遍。所有 TCP 堆棧都必須處理這種情況,因為它很常見。
您的某人提出的變體:
- $$ Spoofed source $$同步 ->
- <- 同步/確認
- $$ time passes $$
- <- 同步/確認
- $$ time passes $$
- <- 同步/確認
他巧妙地發現的“攻擊”是SYN Flood攻擊,自 1990 年代初就為人所知。由於防火牆阻止了 RST 數據包,這些伺服器不會知道關閉連接,因此它們確實會根據正常的 TCP 重試時間重新傳輸 SYN/ACK 數據包。但是,所有現代 TCP 堆棧都包含一些內置的 SYN 洪水保護的可配置措施。
這仍然是一種有效的攻擊方法,儘管它造成的主要危害是通過使用太多無法跟踪的數據包壓倒外圍安全設備。沒有 SYN 的 SYN/ACK 應該非常便宜地丟棄在地板上,但是如果它們的數量足夠多,它可能會壓倒防火牆。