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值。
詳情可參考之前的文章,TLS 1.3 與 TLS 1.2 的會話恢復
DNS重繫結攻擊
整個攻擊過程類似於之前講過的DNS重繫結攻擊,攻擊內網裝置。不同地方是在這裡利用的是TLS的會話恢復。
詳情可參考之前的文章,詳解DNS 重繫結攻擊
0x02 攻擊原理
原理圖:
攻擊流程:
- 攻擊者首先誘使受害者開啟一個網站(釣魚或者廣告頁面都可以實現),會向攻擊者的TLS 伺服器 https://ssltest.jmaddux.com:11211 請求頁面。
- 受害者開啟網站後,客戶端發出DNS查詢,查詢 ssltest.jmaddux.com域名的IP地址,攻擊者準備的DNS權威域名伺服器接收到查詢,進行響應。
- 此時,返回的DNS響應報文是TLS sever的真實IP地址,並且設定TTL 為0
- 受害者客戶端傳送Hello 訊息嘗試進行TLS握手(在這之前進行了TCP三次握手,這裡省略沒寫,不是重點)
- TLS伺服器端響應Hello訊息,並將會話id設定為payload 傳送給受害者
- 當TLS握手全部完成之後,進行HTTPS通訊,TLS伺服器通過301重定向狀態碼,重定向到https://ssltest.jmaddux.com:11211 (重新進行再次訪問)
- 客戶端重新載入https://ssltest.jmaddux.com:11211 頁面。
- 由於之前設定的DNS快取記錄,TTL為0,在很短的時間內就失效,所以受害者客戶端會再次向攻擊者DNS伺服器請求IP地址
- 此時,攻擊者擁有的DNS伺服器返回解析結果為127.0.0.1,TTL為0。(127.0.0.1代表本機)
- 客戶端嘗試去恢復會話,帶著之前的payload 會話ID,與127.0.0.1:11211 進行會話恢復,於是payload 傳送給了客戶端本身。
- 此時會話重用失敗,會返回一個TLS error,但攻擊者的目的已經達成。
0x03 影響範圍
借用作者的原圖,下圖是易受攻擊的HTTPS客戶端應用:
下圖是可以攻擊的目標,以及可利用的方式: