TLS Poison - When TLS Hack you


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 倍時延


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM