移動安全-突破證書校驗

前言

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

爲什麼HTTPS的網站使用僞證書可以抓到,而在APP裏面同樣的方法就抓不到?答案是:APP啓用了SSL Pinning(又叫“SSL證書綁定”)

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

  1. 使用內置的CA證書去校驗服務器證書是否被信任,如果不被信任,則會彈出https的告警提示信息,由用戶自己決定是否要繼續;
  2. 同樣,用戶也可以主動地將服務器證書導入到瀏覽器的受信任區,下次打開時該服務器證書將會自動被信任。

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

  1. 瀏覽器允許用戶自行忽略證書告警,用戶在無足夠的信息安全意識時,可能會直接忽略劉瀏覽器的安全提示;
  2. 瀏覽器允許“導入證書到瀏覽器信任區“這個操作讓瀏覽器信任burp僞造的證書。這種僞造證書的中間人攻擊給HTTPS帶來了很大的威脅。

SSLPinning

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

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

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

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

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

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

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

突破證書校驗

如何突破APP客戶端的證書校驗?

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

  1. Xposed是一個框架,它可以改變系統和應用程序的行爲,而不接觸任何APK。它支持很多模塊,每個模塊可以用來幫助實現不同的功能。
  2. JustTrustMe 是一個用來禁用、繞過 SSL 證書檢查的基於 Xposed 模塊。JustTrustMe 是將 APK中所有用於校驗 SSL 證書的 API 都進行了 Hook,從而繞過證書檢查。
  3. 關於JustTrustMe繞過證書校驗的源碼分析,可閱讀文章 xposed+justTrustme使用與分析

【環境準備】

  1. 準備一個有root權限的andorid手機;
  2. 下載Xposed的APK安裝包,下載地址
  3. 下載JustTrustMe模塊,下載地址,注意下載 JustTrustMe.apk版本。

【安裝過程】

1、選擇下載好的Xposed installer的apk包,即可開始安裝,安裝完成後,打開xposed應用,他會提示“xposed框架未安裝”,就如他提示所言,這裏安裝需要重啓:
在這裏插入圖片描述
2、點擊“確定”,開始安裝。
在這裏插入圖片描述
3、點擊“install”,他會自動下載安裝,下載速度根據網速而定。
在這裏插入圖片描述
4、當你看到這個的時候,就是安裝好了,接着就是重啓手機了。
在這裏插入圖片描述
5、接下來就是安裝可以禁止證書驗證的模塊,安好後就可以愉快的進行抓包了,把前面所述的JustTrustMe.apk 下載之後,直接安裝就行了。這個JustTrustme是沒有界面的,但手機會提示xposed模塊沒有激活;
在這裏插入圖片描述
6、打開Xposed中的模塊,就可以找到安裝好的JustTrustme,只需勾選上,然後重啓手機就行 。在這裏插入圖片描述
7、接下來就可以直接使用Burpsuite正常抓包了,JustTrustMe會將APP中所有進行證書驗證的方法都Hook,繞過所有證書驗證,從而達到可以正常抓包的效果。

【注意】實際上,還需要在Xposed框架中同時安裝上 SSLkiller 模塊(下載地址),才能確保成功突破SSLPinning。

【測試案例】

1、對某行手機APP進行測試,未進行證書校驗且未加密的版本,可直接用BP抓包:
在這裏插入圖片描述2、使用Xposed框架突破進行了客戶端證書校驗的加密版本的APP的證書校驗,成功抓包:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章