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

image.png

1. 前面

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

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

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

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

2. 同樣,用戶也可以主動的將服務(wù)器證書導(dǎo)入到瀏覽器的受信任區(qū),下次打開時該服務(wù)器證書將會自動被信任。

為啥中間人可以劫持https流量,以及在瀏覽器上我們?yōu)槭裁纯梢允褂胋urp偽造證書,正是因?yàn)樯厦娴?點(diǎn),即:

1. 瀏覽器允許用戶自行忽略證書告警,用戶在無足夠的信息安全意識時,可能會直接忽略劉瀏覽器的安全提示,在這篇文章的前2天以太坊錢包MyEtherWallet 就因?yàn)楹诳褪褂谩癇GP流量劫持+HTTPS證書偽造“導(dǎo)致被干的鼻青臉腫。

2. 瀏覽器允許“導(dǎo)入證書到瀏覽器信任區(qū)“這個操作讓瀏覽器信任burp偽造的證書。

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

2. SSLPinning了解一下

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

客戶端在收到服務(wù)器的證書后,對該證書進(jìn)行強(qiáng)校驗(yàn),驗(yàn)證該證書是不是客戶端承認(rèn)的證書,如果不是,則直接斷開連接。

瀏覽器其實(shí)已經(jīng)這樣做了,但是如“前面”所說,選擇權(quán)交給了用戶,且瀏覽器由于其開放性允許讓用戶自導(dǎo)入自己的證書到受信任區(qū)域。

但是在APP里面就不一樣,APP是HTTPS的服務(wù)提供方自己開發(fā)的客戶端,開發(fā)者可以先將自己服務(wù)器的證書打包內(nèi)置到自己的APP中,或者將證書簽名內(nèi)置到APP中,當(dāng)客戶端在請求服務(wù)器建立連接期間收到服務(wù)器證書后,先使用內(nèi)置的證書信息校驗(yàn)一下服務(wù)器證書是否合法,如果不合法,直接斷開。

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

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

補(bǔ)充:

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

3. 使用Xposed + JustTruestMe來突破 SSL pinning

如果你逆向比較在行,你就自己逆源碼,然后過加密混淆,然后干掉SSL pinning。不過使用Xposed + JustTruestMe應(yīng)該也不丟人。

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

它支持很多模塊,每個模塊可以用來幫助實(shí)現(xiàn)不同的功能。

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

準(zhǔn)備工作:

1. 準(zhǔn)備一個有root權(quán)限的andorid手機(jī)或者andorid模擬器

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

可以使用MUMU模擬器或夜神模擬器

2. 下載Xposed的apk安裝包,下載地址:http://repo.xposed.info/module/de.robv.android.xposed.installer

在改頁面找到點(diǎn)擊下載即可,默認(rèn)的版本支持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版本

安裝mumu模擬器

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

image

安裝Xposed

點(diǎn)擊MUMU主界面由下角的APK+圖標(biāo),選擇下載好的Xposed installer的apk包,即可開始安裝,安裝完成后,桌面會生成對應(yīng)的圖標(biāo),打開

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

image

不要管,點(diǎn)擊框架,進(jìn)去,點(diǎn)擊“安裝更新”,更新完成后,會提示重啟,注意這個時候可能會卡死。

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

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

image

安裝JustTrustMe

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

image

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

接下來就是常規(guī)流程了:

  1. 在你的MUMU模擬器所在的宿主機(jī)上打開burpsuite,并啟用代理,主要使用實(shí)際的IP地址作為監(jiān)聽地址
image
  1. 給你的MUMU模擬器設(shè)置一個代理,因?yàn)镸UMU模擬器做了很多裁剪,默認(rèn)不提供wifi配置選項(xiàng),這里可以下載一個wifi萬能鑰匙,然后通過它呼喚出wifi設(shè)置界面:打開wifi萬能鑰匙---未登錄---設(shè)置---設(shè)置為wifi管理器---立即設(shè)置,即可看到如下選項(xiàng),選擇wlan,進(jìn)入wifi設(shè)置選項(xiàng)
image

鼠標(biāo)左鍵長安“WiredSSID”這個ssid名詞,會彈出如下選項(xiàng),選擇修改網(wǎng)絡(luò),進(jìn)入代理配置頁面

image

把代理選項(xiàng)配置成burp監(jiān)聽的代理地址,保存即可。

image

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

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

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

安裝完成后,運(yùn)行:adb shell 即可連接到mumu虛擬機(jī)

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

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

Xposed+JustTrustMe只是解決了SSLpinning的問題,因?yàn)橥ㄓ嵄旧硎荋TTPS的因此我們還是需要安裝burp偽證書,直接導(dǎo)出burp的證書,因?yàn)槟J(rèn)格式是.cer的,andorid不支持,需要將這個證書先導(dǎo)入到瀏覽器在導(dǎo)出成.pem(x509)格式,然后在MUMU模擬器的設(shè)置---安全—從SD卡安裝證書,通過MUMU的提供的共享文件夾將證書選擇到安裝即可,中間需要提示開啟PIN碼認(rèn)真,開啟一下即可。

到這里,你必然可以抓到啟用了SSL pinning的APP的HTTPS的數(shù)據(jù)包了。

原文:https://bbs.pediy.com/thread-226435.htm

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容