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