如何使用Xposed+JustTrustMe來突破SSL Pinning

如何使用Xposed+JustTrustMe來突破SSL Pinning

0x00 前面

如果你是一干Web安全的,當你在測試目前大多數的手機APP應用程序時,你一定遇到過burpsuite無法抓到數據包的情況,開始你以為只是https的問題,但是當你使用了burpsuite偽證書也無法抓取到時,你心裡除了有句“MMP……”外,你一定也在思考這其中的蹊蹺。

為什麼https的網站使用偽證書可以抓到,而在app裡面同樣的方法就抓不到?答案是:app啟用了SSL Pinning(又叫“ssl證書綁定“).

HTTPS的原理你必然懂,在建立ssl通道的過程中,當客戶端向服務端發送了連接請求後,服務器會發送自己的證書(包括公鑰、證書有效期、服務器信息等)給客戶端,如果客戶端是普通的瀏覽器,比如IE瀏覽器,則:

1. 使用內置的CA證書去校驗服務器證書是否被信任,如果不被信任,則會彈出https的告警提示信息,由用戶自己決定是否要繼續.

2. 同樣,用戶也可以主動的將服務器證書導入到瀏覽器的受信任區,下次打開時該服務器證書將會自動被信任.

為啥中間人可以劫持https流量,以及在瀏覽器上我們為什麼可以使用burp偽造證書,正是因為上面的2點,既:

1. 瀏覽器允許用戶自行忽略證書告警,用戶在無足夠的信息安全意識時,可能會直接忽略劉瀏覽器的安全提示,在這篇文章的前2天以太坊錢包MyEtherWallet 就因為黑客使用“BGP流量劫持+HTTPS證書偽造“導致被幹的鼻青臉腫.

2. 瀏覽器允許“導入證書到瀏覽器信任區“這個操作讓瀏覽器信任burp偽造的證書.

這種偽造證書的中間人攻擊給HTTPS帶來了很大的威脅。

0x01 SSLPinning瞭解一下

如果能夠這樣做,是不是就可以解決這種“中間人劫持+偽造證書“攻擊的問題:

客戶端在收到服務器的證書後,對該證書進行強校驗,驗證該證書是不是客戶端承認的證書,如果不是,則直接斷開連接。

瀏覽器其實已經這樣做了,但是如“前面”所說,選擇權交給了用戶,且瀏覽器由於其開放性允許讓用戶自導入自己的證書到受信任區域。

但是在APP裡面就不一樣,APP是HTTPS的服務提供方自己開發的客戶端,開發者可以先將自己服務器的證書打包內置到自己的APP中,或者將證書籤名內置到APP中,當客戶端在請求服務器建立連接期間收到服務器證書後,先使用內置的證書信息校驗一下服務器證書是否合法,如果不合法,直接斷開。

當然攻擊者也可以通過把這個APP源碼給逆出來,然後找到證書校驗這段邏輯,給他幹掉,或者乾脆把證書信息換成自己的服務器證書信息,然後重新打包簽名,但是一旦APP做了代碼加密和混淆,這個操作也會變得比較難搞。

因此這樣看來,通過預先把服務器的證書信息“綁定“在APP的native端,然後建立連接時使用預先內置的綁定信息進行服務器證書校驗,同時使用足夠的代碼加密或混淆,是比較合適的解決辦法, 這個搞法就是“ssl pinning”.

補充:

不要將ssl pinning和https雙向認證搞混了,HTTPS協議本身是支持雙向認真的,既除了客戶端對服務器證書進行驗證外,服務器也可以要求客戶端提供自己的證書信息並對其進行驗證,在APP上,HTTPS雙向認真的方案也可以防止中間人劫持,但這種雙向認證開銷較大,且安全性與”ssl pinning”一致,因此目前大多數APP都採用SSL Pinning這種方案。

0x02 使用Xposed + JustTruestMe來突破SSL pinning

如果你逆向比較在行,你就自己逆源碼,然後過加密混淆,然後幹掉SSL pinning. 不過使用Xposed + JustTruestMe應該也不丟人。

Xposed是一個框架,它可以改變系統和應用程序的行為,而不接觸任何APK。

它支持很多模塊,每個模塊可以用來幫助實現不同的功能。

JustTrustMe 是一個用來禁用、繞過 SSL 證書檢查的基於 Xposed 模塊。JustTrustMe 是將 APK 中所有用於校驗 SSL 證書的 API 都進行了 Hook,從而繞過證書檢查。

n 準備工作:

1. 準備一個有root權限的andorid手機或者andorid模擬器

使用手機裝Xposed容易變磚,刷來刷去,很麻煩。個人習慣也推薦直接用andorid模擬器,現在很多andorid模擬器長又好看,廣告又少,各個是人才。

本文使用網易的MUMU模擬器,下載地址:http://mumu.163.com/baidu/ 對應的andorid版本為4.4。

2. 下載Xposed的apk安裝包,下載地址:

http://repo.xposed.info/module/de.robv.android.xposed.installer

在改頁面找到點擊下載即可,默認的版本支持Android 4.0.3 up to Android 4.4. 版本

Download: de.robv.android.xposed.installer_v33_36570c.apk (770.28 KB)

注意官方的說明,如果你的模擬器andorid版本為5.0以上,請按照如下說明操作:

For Android 5.0 or higher (Lollipop/Marshmallow), these versions don't work! Use this instead:http://forum.xda-developers.com/showthread.php?t=3034811

3. 下載JustTrustMe模塊

https://github.com/Fuzion24/JustTrustMe/releases/tag/v.2

注意下載 JustTrustMe.apk版本

n 安裝mumu模擬器

雙擊安裝即可,自己看著辦,安裝完開機,就是這個樣子的:

如何使用Xposed+JustTrustMe來突破SSL Pinning

n 安裝Xposed

點擊MUMU主界面由下角的APK+圖標,選擇下載好的Xposed installer的apk包,即可開始安裝,安裝完成後,桌面會生成對應的圖標,打開

第一次打開時,“框架”下面會有紅色字體提示更新

如何使用Xposed+JustTrustMe來突破SSL Pinning

不要管,點擊框架,進去,點擊“安裝更新”,更新完成後,會提示重啟,注意這個時候可能會卡死。

如果不卡死,說明你你比較厲害,點擊下面的重啟按鈕重啟。

如果卡死了,直接關閉模擬器,重新打開即可,再次進入框架頁面,可以看到如下信息,則說明更新完成。

如何使用Xposed+JustTrustMe來突破SSL Pinning

n 安裝JustTrustMe

點擊“模塊”,此時還沒有可用的模塊, 同樣的方法點擊apk+導入之前下載好的JustTrustMe的apk安裝包,系統會自動安裝,安裝完成後,在模塊裡面點擊“軟重啟”,再次打開“模塊”界面,即可看到JustTrustMe,勾選一下,啟用這個模塊:

如何使用Xposed+JustTrustMe來突破SSL Pinning

到這裡Xposed+JustTrustMe就安裝和啟動了。

接下來就是常規流程了:

1. 在你的MUMU模擬器所在的宿主機上打開burpsuite,並啟用代理,主要使用實際的IP地址作為監聽地址

如何使用Xposed+JustTrustMe來突破SSL Pinning

2. 給你的MUMU模擬器設置一個代理,因為MUMU模擬器做了很多裁剪,默認不提供wifi配置選項,這裡可以下載一個wifi萬能鑰匙,然後通過它呼喚出wifi設置界面:打開wifi萬能鑰匙---未登錄---設置---設置為wifi管理器---立即設置,即可看到如下選項,選擇wlan,進入wifi設置選項

如何使用Xposed+JustTrustMe來突破SSL Pinning

鼠標左鍵長安“WiredSSID”這個ssid名詞,會彈出如下選項,選擇修改網絡,進入代理配置頁面

如何使用Xposed+JustTrustMe來突破SSL Pinning

把代理選項配置成burp監聽的代理地址,保存即可。

如何使用Xposed+JustTrustMe來突破SSL Pinning

到這裡你一定會想,這個MUMU模擬器到底用的的是什麼方式與你的宿主機進行通信的,你可以使用adb shell來看一下,adb是一個連接andorid的命令行工具,windows下的安裝和使用請自行GOOGLE。Mac下的安裝和使用:

1. brew cask install android-platform-tools //安裝adb工具

brew類似linux下的yum,不會用的自己google.

安裝完成後,運行:adb shell 即可連接到mumu虛擬機

$ adb shell

cancro:/ #

cancro:/ #

cancro:/ #

在這裡可以使用大多數的linux命令,必然ls,vi等,查看IP地址使用:netcfg

通過查看ip地址以及ping命令測試,可以發現mumu虛擬機是通過127.0.0.1進行橋接到宿主機的,因此可以直接使用宿主機的IP地址進行代理。

3. Xposed+JustTrustMe只是解決了SSLpinning的問題,因為通訊本身是HTTPS的因此我們還是需要安裝burp偽證書,直接導出burp的證書,因為默認格式是.cer的,andorid不支持,需要將這個證書先導入到瀏覽器在導出成.pem(x509)格式,然後在MUMU模擬器的設置---安全—從SD卡安裝證書,通過MUMU的提供的共享文件夾將證書選擇到安裝即可,中間需要提示開啟PIN碼認真,開啟一下即可。

到這裡,你必然可以抓到啟用了SSL pinning的APP的HTTPS的數據包了。

#在網上找了一些資料,都寫的不夠完整,昨晚自己折騰了一下,算是一個筆記。勞動節快樂#


分享到:


相關文章: