Fiddler2 使用 man-in-the-middle (中間人) 攻擊的方式來截取 HTTPS 流量。在 Web 瀏覽器面前 Fiddler2 假裝成一個(gè) HTTPS 服務(wù)器,而 在真正的 HTTPS 服務(wù)器面前 Fiddler2 假裝成瀏覽器。Fiddler2 會(huì)動(dòng)態(tài)地生成 HTTPS 證書來偽裝服務(wù)器。
第一步,首先fiddler截獲客戶端瀏覽器發(fā)送給服務(wù)器的https請(qǐng)求, 此時(shí)還未建立握手。
第二步, fiddler向服務(wù)器發(fā)送請(qǐng)求進(jìn)行握手, 獲取到服務(wù)器的CA證書, 用根證書公鑰進(jìn)行解密, 驗(yàn)證服務(wù)器數(shù)據(jù)簽名, 獲取到服務(wù)器CA證書公鑰。
第三步, fiddler偽造自己的CA證書, 冒充服務(wù)器證書傳遞給客戶端瀏覽器, 客戶端瀏覽器做跟fiddler一樣的事。
第四步, 客戶端瀏覽器生成https通信用的對(duì)稱密鑰, 用fiddler偽造的證書公鑰加密后傳遞給服務(wù)器, 被fiddler截獲。
第五步, fiddler將截獲的密文用自己偽造證書的私鑰解開, 獲得https通信用的對(duì)稱密鑰。
第六步, fiddler將對(duì)稱密鑰用服務(wù)器證書公鑰加密傳遞給服務(wù)器, 服務(wù)器用私鑰解開后建立信任, 握手完成, 用對(duì)稱密鑰加密消息, 開始通信。
第七步, fiddler接收到服務(wù)器發(fā)送的密文, 用對(duì)稱密鑰解開, 獲得服務(wù)器發(fā)送的明文。再次加密, 發(fā)送給客戶端瀏覽器。
第八步, 客戶端向服務(wù)器發(fā)送消息, 用對(duì)稱密鑰加密, 被fidller截獲后, 解密獲得明文。
由于fiddler一直擁有通信用對(duì)稱密鑰, 所以在整個(gè)https通信過程中信息對(duì)其透明。
------------------------------------------------------------------------------------------------
其實(shí)最核心的問題是讓客戶端信任Fiddler發(fā)送過來的證書,這個(gè)證書代替了要訪問網(wǎng)站的證書;正常來說Fiddler的證書是不可能被信任的,否則中間人攻擊就太容易了(其實(shí)使用證書就是為了防御中間人攻擊,在公鑰配送時(shí)使用證書加上數(shù)字簽名,就可以通過數(shù)字簽名驗(yàn)證公鑰是否被中間人替換了)。因?yàn)樾湃巫C書只需要信任證書的簽發(fā)機(jī)構(gòu),所以如果客戶端安裝了某個(gè)CA的證書,且信任他,則該CA簽發(fā)的證書也都會(huì)被信任。所以使用Fiddler需要在設(shè)備上安裝一個(gè)Fiddler的自簽發(fā)CA根證書,而Fiddler發(fā)送過來的偽造的網(wǎng)站證書則是由這個(gè)CA簽發(fā)的。說到底這是一個(gè)信任鏈的問題。
作者:真趣
鏈接:https://www.zhihu.com/question/24484809/answer/296984160
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
原文鏈接:https://www.zhihu.com/question/24484809