Protocol-Design

對 UDP 數據包的 Bellovin ESP 攻擊

  • March 30, 2018

Bellovin 的 ESP Attack中,指出:

如果 $ L_A $ , $ L_B $ 使用UDP,攻擊更容易:

  • 等到會話結束
  • 分配 $ L_B $ 的 UDP 埠到 $ X_B $
  • 重放所有數據包

那麼,攻擊者如何知道合法使用者的UDP埠 $ L $ ? 它不是加密的嗎(因為 UDP 標頭加密了)?攻擊者如何獲得它?

另外,如果攻擊者知道合法使用者的UDP埠號,他為什麼要等到會話結束呢?他可以嗅探數據包並更改 UDP 埠號。然後他可以在會話期間在另一個埠接收包裹。我的假設是錯誤的嗎?

另外,如果攻擊者知道合法使用者的UDP埠號,他為什麼要等到會話結束呢?他可以嗅探數據包並更改 UDP 埠號。然後他可以在會話期間在另一個埠接收包裹。我的假設是錯誤的嗎?

實際上,如果:

  • 加密是 CBC 模式或 CTR 模式(實際的分組密碼無關緊要)
  • SA 處於傳輸模式(對於 CBC 模式;對於 CTR 模式無關緊要)
  • SA 未被協商為特定的 UDP 目標埠

那麼是的,你可以修改UDP埠號。您需要做的就是翻轉 IV 的第 16-31 位(對於 CBC 模式)或翻轉密文的第 16-31 位(對於 CTR 模式和傳輸)中的一些位,這將翻轉相應的位解密後的 UDP 目標埠,沒有其他更改。例如,如果 SA 使用 CBC,而合法使用者使用 UDP 埠 2000,並且您打開了 UDP 埠 2001,則可以只取原始數據包,翻轉加密數據包 IV 的第 31 位,重放該數據包,然後這將為您提供您選擇的目標埠上的原始數據包。

不使用完整性轉換的另一個原因是一個壞主意……

所有 UDP 資訊(包括埠號)均已加密: https ://www.rfc-editor.org/rfc/rfc1827#section-3

(請注意,上面的連結指向 ESP 的規範,就像 Steven Bellovin 發表他的 USENIX 論文時一樣。這個 RFC 現在已經過時了。)

猜測埠號應該很容易:使用netstat命令列出正在使用的 UDP 埠,忽略對等地址不匹配的埠以及已知服務使用的埠。

實際上,答案可以在原始論文下面幾行討論 TCP 案例的地方找到。

儘管如此,在現代高速網路上,使序列號迴繞並不難,攻擊者可以通過在任一機器上通過 netstat 輪詢來了解必要的埠號。

簡單:攻擊不需要攻擊者非常複雜。所需要的只是網路擷取和 UNIX 系統實用程序(例如psnetstat.

這是貝洛文的觀點:在這種情況下,甚至不需要篡改傳輸的數據來發起攻擊。這就是為什麼提到等待過程結束的原因。在程序仍在執行時可以執行的攻擊需要更多的工作或更專業的工具。(正如 Poncho 在評論中指出的那樣,Bellovin 的主要攻擊涉及篡改未經身份驗證的 CBC 加密數據。)

引用自:https://crypto.stackexchange.com/questions/57931