1. 程式人生 > >使用wireshark對TLS加密的資料進行實時的解密

使用wireshark對TLS加密的資料進行實時的解密

  本文講述瞭如何使用wireshark對使用TLS加密的資料進行實時的解密,這對我們的資料分析有一定的幫助,但是並不能使用其破解中間過程截獲的資料。

  在使用wireshark進行抓包的過程中,我們常常會抓到TLS報文,TLS定義為介於TCP和HTTP之間的協議,因此會隱藏HTTP的內容,在我們分析的時候比較不方便。TLS的出現是為了加密上層資料,使得資料在中間被截獲之後,如果沒有祕鑰的話,是沒有用處的。但資料傳輸到客戶端,也就是使用者的時候,無論我們使用瀏覽器還是手機客戶端都可以看到具體的內容也就是明文,那麼對於我們部署在本地客戶端wireshark抓包軟體抓到的卻是密文,這是不合理。大家都在本地,為啥你瀏覽器能看明文,我wireshark肯定也是可以的啊。

  在講述為什麼wireshark能過解密捕獲的資料之前,先了解一下SSL的原理。

http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

  這裡面需要明確的是1,握手期間使用的是非對稱加密方式交換資訊。2,握手之後的資料傳輸是使用對稱加密方式,對稱加密的祕鑰第一步通過非對稱加密的方式傳輸給伺服器。使用上所述的原因是1、非對稱加密更加安全,但是速度慢;2、對稱加密速度快。

  說了那麼多廢話的主要原因是要說明:在瀏覽器接收到資料之後,會使用祕鑰對資料進行解密,也就是說瀏覽器會在某個地方會儲存這個祕鑰。上述的是傳統方式,即整個會話過程之使用一次祕鑰加密資料。現在大部分的方式(PFS)是在一次會話之中使用多次祕鑰,即每一次的資料互動都會不同的祕鑰,也就是瀏覽器再一次會話的過程中要進行多次的解密,但是不變的是這些祕鑰還會同樣的儲存在瀏覽器某一個位置。所不同的是按照傳統的方式,我們只要能夠得到瀏覽器中的會話祕鑰,就能解密本次資料,而對於現在的PFS方式,我們需要不斷的和瀏覽器進行同步,提取其中的祕鑰,不斷的解密我們使用wireshark所捕獲的資料。

  這篇文章講述的就是怎麼樣使用wireshark1.6以上的版本來使用瀏覽器所儲存的實時祕鑰,這個是在firefox和chrome上面是好使的,其他的瀏覽器沒有測試過。

  下面講一講如何來做,你可以使用www.baidu.com來進行驗證(該網站使用了TLS加密)

  1、首先我們要匯出瀏覽器所儲存的祕鑰,上面的已經提到設定SSLKEYLOGFILE系統環境變數,我是在windows上面完成的,至於Liunx使用export命令新增即可。

 

  按照上圖新建一個名為SSLKEYLOGFILE的環境變數,變數的值填寫一個路徑,我將起命名為key.log,大家可根據自己喜好命名,這個key.log也不用自己動手建,瀏覽器會自動根據SSLKEYLOGFILE環境變數進行生成,將相關的祕鑰進行儲存(其本質是兩個隨機數)。

  2、既然祕鑰已經匯出來了,那麼下圖所說的就是wireshark1.6以上的版本怎麼實時的使用這些祕鑰。如上一篇文章所說wireshark路徑Edit→Preferences→Protocols→SSL→(Pre)-Master-Secret log filename.


  在(Pre)-Master-Secretlog filename.中填寫的路徑就是第一步中環境變數的值;而SSL debug filr 中是用於記錄解密的日誌,檔案wireshark會自動幫你建,根據個人需求配置。

  3、兩方都已經配置完畢,然後看一下效果圖:



  這幅圖是解密之後的效果,這是一個使用了TLS加密的http2.0服務,在不配置之前,看到的全是TLS1.2,這時候我們就能清晰的看到該協議使用了HTTP2.0的服務以及其分幀層。當然其中還是有TLS的資料,那是因為握手階段全是使用的TLS協議嘛。是不是和你配置之前看到的效果不一樣(你可能會說google的F12可以辦到,但畢竟那是輕量級的)

  4、我們再看一看剛才那兩個檔案中存的是什麼吧


  如果你看了SSL或者說TLS的握手過程,你一定不會陌生,這就是客戶端或者瀏覽器生成的兩個隨機數,而解密過程也是基於這兩個隨機數加上伺服器傳來的隨機數的。


  上圖就是wireshark的解密日誌,有興趣的可以看一下。

  要明確的是,這種解密本身只是對資料分析有幫助。1,如果是在網路中間截獲資料,你拿不到祕鑰,同樣沒用。2,已經抓取完的資料,由於沒有當時的實時祕鑰,同樣也是解密不了的。

  剛開始的時候,上面提到這種方法在firefox上面是可以用的google卻不可以,因為我發現抓取上述網站的報文沒有解密出http2來,我懷疑是該版本並不支援Http2.0的原因。我通過訪問www.baidu.com這個網站證實了我的猜測,訪問給網站會重定向到https://www.baidu.com;解密情況下可以看到訪問https://www.baidu.com的相關http1.1的解密資訊,不使用wireshark解密則都是TLS的相關報文。

  關於手機端抓包按照道理來說也應該有類似上述的方法,以後找到方法後,會寫出來。

PS:你會發現啟動chrome或者firefox的時候會自動建立起那個儲存隨機數的檔案,你就知道瀏覽器啟動的時候會做很多的檢查