objection 過證書綁定抓APP數據包
前言
在做APP安全測試時,往往會遇到抓不到數據包的情況,導致這種情況的原因有很多種,其中證書綁定是經常遇到的問題之一。如果我們在抓包時,使用了流量轉發+透明代理還無法獲取APP的數據包,那么大概率他就使用了證書綁定,除了使用插件和frida腳本hook外,這里還有一種更為簡單的辦法,使用objection一個命令搞定證書綁定。
當然,由于證書綁定的功能是由開發者自定義的,因此并不存在一個通用的解決方案,Objection也只是對常見的App所使用的網絡框架中對證書進行校驗的代碼邏輯進行了Hook修改。一旦App中的代碼被混淆或者使用了未知的框架,這些App的客戶端校驗服務器的邏輯就需要自行分析了。
前置知識證書綁定
ssl Pinning 這種方式不僅校驗服務器證書是否是系統中的可信憑證,在通信過程中甚至連系統內置的證書都不信任,而只信任App指定的證書。一旦發現服務器證書為非指定證書即停止通信,最終導致即使將抓包工具的證書安裝到系統信任憑據中也無法生效。
frida
frida是一款輕量級的hook框架,專業點的說法就是動態插樁工具,可以插入一些代碼到原生App的內存空間去動態地監視和修改其行為。通俗點講通過該框架可以對android、ios、windows、linux等平臺應用進行進程注入,從而達到劫持應用的目的,通過劫持我們可以實現各種功能。
該框架從Java層Hook到Native層Hook無所不能,但是持久化還是要依靠Xposed框架,另外由于其過于火爆,一些廠商也研究了反調試的方法。
Objection
Objection是基于frida的集成工具,其主要功能支持Android和iOS兩大移動平臺。在對Android的支持中,Objection可以快速完成諸如內存搜索、類和模塊搜索、方法Hook以及打印參數、返回值、調用棧等常用功能,是一個非常方便的逆向必備工具和內存漫游神器。
流程這里相關環境安裝不在贅述,直接手機下載代理軟件
一般來講代理軟件分兩種,一種通過走VPN隧道的方式進行代理,有些APP會直接檢測VPN代理,然后不加載。另外一種通過修改手機底層的iptables進行流量轉發,從而繞過部分APP的檢測,其區別在于一個軟件開啟后,手機上方會有一個VPN圖標的提示,另一個沒有。
這里我使用的是postern進行代理配置
添加代理服務器

添加規則

這時候可以測試一下瀏覽器,抓取一下百度的流量。是可以正常抓取的,但是打開app會發現,沒有任何數據包發出。
手機使用數據線連接到電腦,開啟USB調試功能,電腦端使用adb工具連接手機

使用adb shell進入root模式,啟動frida

電腦端使用命令獲取APP的包名

使用objection工具直接對app進行繞過,因為有些APP的證書檢測是從啟動時就開了,所以這里我們使用啟動時附加命令
objection -g包名 explore -s "android sslpinning disable"
可以看到其會自動對相關函數進行hook

最后就能成功抓到數據包

總結無論使用哪種方法,能獲取數據包進行測試才是最終目的,不論是Xposed框架的JustTrustMe插件、frida的hook腳本還是objection的內置命令,其核心都是去查找app所調用的類,并對相關函數進行hook,最終解除證書綁定。如果上述相關辦法都不管用,那么說明APP可能混淆了,需要我們自己手動查找相關函數進行hook,所以掌握其相關的基本知識對我們安全測試人員還是很有必要的。