TLS Poison - When TLS Hack you

PsgQ發表於2021-04-23

0x00 前言

本次學習的是2020 Blackhat 的一篇文章When TLS Hacks you,簡單來說,作者提出了一種新的SSRF攻擊思路:利用DNS重繫結和TLS協議的會話恢復進行攻擊。具體可參考:Blackhat - When TLS Hacks you


Lots of people try to attack the security of TLS. But, what if we use TLS to attack other things? It's a huge standard, and it turns out that features intended to make TLS fast have also made it useful as an attack vector. Among other things, these features provide a lot of flexibility for Server-Side Request Forgery (SSRF). While past work using HTTPS URLs in SSRF has relied upon platform-specific bugs such as SNI injection, we can go further. In this talk, I present a novel, cross-platform way of leveraging TLS to target internal services. By Joshua Maddux


0x01 前置知識

SSRF攻擊

SSRF全稱是伺服器端請求偽造。在各種Web應用程式中,這是一個非常普遍的漏洞,攻擊者可以在其中代表伺服器偽造網路請求。假如,具有以下URL:https://example.com/?ping=www.xxx.com我們可以從中得出什麼?它像是一個ping引數,可以通過某種方式與www.xxx.com 進行通訊。也許它下載了檔案,也許它向它傳送了其他一些HTTP請求。看到這樣的URL,攻擊者可能會檢查是否可以通過這種方式訪問其他內部檔案。

攻擊者還將檢查路徑是否可以使用完整的主機名擴充套件,例如ping=http://127.0.0.1/。這將導致伺服器去連線本地IP地址,或者去連線外界無法進行訪問的內網地址,這是由於攻擊者代表Web伺服器偽造了該請求。這種攻擊可能導致各種危害:包括執行埠探測,內網主機探測,或在本地主機上與可用的服務進行互動。

如果沒有任何防禦措施,也可以使用file:///C:/windows/win.ini語句訪問本地檔案。


TLS 會話恢復

當兩個通訊方發起TLS會話時,正在交換握手。在握手期間,雙方會相互驗證並建立加密演算法以及會話金鑰。完成後,加密的通訊將繼續。為了節省時間和資源(協商和建立會話金鑰需要佔用大量CPU資源),伺服器會傳送一個所謂的會話ID給客戶。重新連線的客戶端可以在ClientHello訊息過程中提供此會話ID,並重新使用以前建立的會話金鑰。這被稱為會話恢復,因為雙方已經協商了要使用的演算法和金鑰,因此可以顯著加快通訊的速度。重要的一點是,在握手期間,客戶端會顯示伺服器提供的會話ID值。

image-20210423120647546

詳情可參考之前的文章,TLS 1.3 與 TLS 1.2 的會話恢復


DNS重繫結攻擊

整個攻擊過程類似於之前講過的DNS重繫結攻擊,攻擊內網裝置。不同地方是在這裡利用的是TLS的會話恢復。

詳情可參考之前的文章,詳解DNS 重繫結攻擊


0x02 攻擊原理

原理圖:

image-20210423191414509


攻擊流程:

  1. 攻擊者首先誘使受害者開啟一個網站(釣魚或者廣告頁面都可以實現),會向攻擊者的TLS 伺服器 https://ssltest.jmaddux.com:11211 請求頁面。
  2. 受害者開啟網站後,客戶端發出DNS查詢,查詢 ssltest.jmaddux.com域名的IP地址,攻擊者準備的DNS權威域名伺服器接收到查詢,進行響應。
  3. 此時,返回的DNS響應報文是TLS sever的真實IP地址,並且設定TTL 為0
  4. 受害者客戶端傳送Hello 訊息嘗試進行TLS握手(在這之前進行了TCP三次握手,這裡省略沒寫,不是重點)
  5. TLS伺服器端響應Hello訊息,並將會話id設定為payload 傳送給受害者
  6. 當TLS握手全部完成之後,進行HTTPS通訊,TLS伺服器通過301重定向狀態碼,重定向到https://ssltest.jmaddux.com:11211 (重新進行再次訪問)
  7. 客戶端重新載入https://ssltest.jmaddux.com:11211 頁面。
  8. 由於之前設定的DNS快取記錄,TTL為0,在很短的時間內就失效,所以受害者客戶端會再次向攻擊者DNS伺服器請求IP地址
  9. 此時,攻擊者擁有的DNS伺服器返回解析結果為127.0.0.1,TTL為0。(127.0.0.1代表本機)
  10. 客戶端嘗試去恢復會話,帶著之前的payload 會話ID,與127.0.0.1:11211 進行會話恢復,於是payload 傳送給了客戶端本身。
  11. 此時會話重用失敗,會返回一個TLS error,但攻擊者的目的已經達成。

0x03 影響範圍

借用作者的原圖,下圖是易受攻擊的HTTPS客戶端應用:

image-20210423212412706

下圖是可以攻擊的目標,以及可利用的方式:

image-20210423213557739



0x04 參考資料


TLS-poison github

Black Hat USA 2020 Highlights: When TLS Hacks You

DNS Rebinding 攻擊繞過 ssrf 限制

從0到1認識DNS重繫結攻擊

為什麼 HTTPS 需要 7 次握手以及 9 倍時延

相關文章