Cbc

Padding Oracle Attack 在實踐中是如何工作的?

  • August 29, 2016

我已經了解填充預言攻擊在理論上是如何工作的。現在,我試圖在真實場景中將其視覺化。

有人可以給出一個真實的場景,攻擊者可以將自己插入通道並發送密文並能夠接收指示加密成功或失敗的錯誤消息?我正在努力確定這種攻擊的工作方式。

這是一個真實的範例:驗證碼服務的行為如下。首先,它會生成一些已知文本的扭曲圖像 $ t $ . 然後它將圖像發送到網路瀏覽器,並等待響應。它將響應與 $ t $ 來決定驗證碼是否成功。

在有狀態的解決方案中,驗證碼服務本身必須儲存 $ t $ 而網路瀏覽器會保留某種標識符。這導致驗證碼服務進行各種簿記。

更好的方法是使驗證碼服務無狀態。為此,您必須儲存正確的解決方案 $ t $ 到網路瀏覽器客戶端中的驗證碼拼圖!顯然這個解決方案應該被加密。這個想法是給客戶端一個圖像和一個加密解決方案的密文(在一個只有驗證碼服務知道的密鑰下)。客戶端將要求的解決方案與密文一起提供,服務只需要解密以進行驗證。

但是沒有什麼能阻止客戶端提供其他密文!這一事實(以及未經身份驗證的加密選擇不當和洩漏填充有效性的錯誤消息)導致了針對驗證碼服務的填充 oracle 攻擊。使用標準填充 oracle 攻擊,您實際上可以系統地解密密文,從而獲得驗證碼解決方案。這是一段影片(嘈雜的音樂),展示了真實驗證碼服務的概念驗證。

一種本身就易受攻擊的協議是 XML-enc,其中 enc 當然意味著加密。

早期版本不支持任何經過身份驗證的加密,預設為帶有 PKCS#7 填充的 CBC。這意味著任何使用 XML-enc 的傳輸協議都容易受到 padding oracle 攻擊。密文包含在 XML 和 base 64 編碼中沒有任何區別。

已經寫了一篇關於對該協議的廣義明文預言機攻擊的論文。

不久之後發現 Glassfish 和 Tomcat WS-Security 實現即使數據已簽名也容易受到這種攻擊。發生的事情是攻擊者可以簡單地忽略簽名。然後數據被解密,然後由於簽名失去而被上層視為無效。填充預言發生簽名被認為失去之前。

在修補此問題之前,所有依賴於這些應用程序伺服器上簽名 Web 服務的 Web 應用程序都是易受攻擊的,除非它們也使用 TLS 或 - 在我的情況下 - 他們自己的 WS-Security 實現提前檢查了簽名的存在。

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