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客戶端應用:
下圖是可以攻擊的目標,以及可利用的方式: