掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在Android應(yīng)用程序進行安全評估時,通常會進行兩方面的評估:移動前端和后端API。為了檢查API的安全性,你將需要大量的文檔,例如Swagger或Postman文件,或者可以讓移動應(yīng)用程序為你生成所有流量,并簡單地通過代理(MitM攻擊)攔截和修改流量。

成都創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為新豐企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、網(wǎng)站建設(shè),新豐網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
有時候設(shè)置代理確實很容易,在本文中,我將使用PortSwigger的Burp 套件代理,但是相同的步驟當然可以用于任何HTTP代理。在所有示例中,代理將托管在端口8080上的192.168.1.100。檢查從最基本的開始,越到后來越復(fù)雜。
設(shè)置設(shè)備
首先,我們需要確保設(shè)備上的所有設(shè)置都是正確的。無論你嘗試使用MitM的應(yīng)用程序如何,這些步驟均適用。
(1) 是否在設(shè)備上配置了代理?
很明顯,第一步是在設(shè)備上配置代理。使用者介面會因你的Android版本而有所不同,但找起來并不難。
(2) 完整性檢查
進入“設(shè)置”>“連接”>“Wi-Fi”,選擇你所使用Wi-Fi網(wǎng)絡(luò),點擊“高級”>“代理”>“手動”,然后輸入你的代理詳細信息:
Burp是否監(jiān)聽所有接口?
默認情況下,Burp只監(jiān)聽本地接口(127.0.0.1),但是由于我們想要從不同的設(shè)備連接,Burp需要監(jiān)聽已經(jīng)加入Wi-Fi網(wǎng)絡(luò)的特定接口。你可以監(jiān)聽所有接口,也可以監(jiān)聽特定接口(如果你知道需要哪個接口)。作為完整性檢查,我通常使用“監(jiān)聽所有接口”。請注意,Burp有一個API,它可以允許其他使用相同Wi-Fi網(wǎng)絡(luò)的人查詢你的代理并從中檢索信息。
(1) 完整性檢查
在你的主機上導(dǎo)航到http://192.168.1.100:8080,應(yīng)該會出現(xiàn)歡迎界面。
(2) 解決方案
在Burp中,進入“代理”>“選項”>在“代理監(jiān)聽器”窗口中單擊你的代理,然后在“綁定到地址”配置上選中“所有接口”。
你的設(shè)備可以連接到代理嗎?
有些網(wǎng)絡(luò)具有主機/客戶端隔離,不允許客戶端相互通信。在這種情況下,你的設(shè)備將不能連接到代理,因為路由器不允許。
(1) 完整性檢查
在該設(shè)備上打開瀏覽器,導(dǎo)航到http://192.168.1.100:8080。你應(yīng)該會看到Burp的歡迎屏幕。如果你在前面的檢查中已經(jīng)配置了代理,你還應(yīng)該能夠?qū)Ш降絟ttp://burp。
(2) 解決方案
這里有一些選擇:
a.設(shè)置一個禁用主機/客戶端隔離的自定義無線網(wǎng)絡(luò);
b.將代理托管在可訪問的設(shè)備上,例如AWS ec2實例;
c.執(zhí)行一個ARP欺騙攻擊,以欺騙移動設(shè)備,使其相信你是路由器;
d.使用adb反向代理通過USB的流量:
你可以代理HTTP流量嗎?
HTTP流量的步驟通常比HTTPS流量容易得多,因此此處的快速狀態(tài)檢查可確保你的代理正確設(shè)置且可被設(shè)備訪問。
(1) 完整性檢查
導(dǎo)航到http://neverssl.com并確保你在Burp中看到了該請求。 Neverssl.com是一個不使用HSTS的網(wǎng)站,并且永遠不會將你發(fā)送到HTTPS版本,從而使其成為測試純文本流量的理想選擇。
(2) 解決方案
設(shè)備上是否已安裝Burp證書?
為了攔截HTTPS流量,需要在設(shè)備上安裝代理的證書。
(1) 完整性檢查
進入設(shè)置>安全性>受信任的憑據(jù)>用戶,并確保列出了你的證書。另外,你可以嘗試攔截來自設(shè)備瀏覽器的HTTPS流量。
(2) 解決方案
許多地方都有記錄,但是這里有一個簡短的摘要:
你的Burp證書是否已安裝為根證書?
Android最新版本的應(yīng)用程序默認不相信用戶證書,至于具體原因請點此https://blog.nviso.eu/2017/12/22/intercepting-https-traffic-from-apps-on-android-7-using-magisk-burp/。或者,你可以重新打包應(yīng)用程序,將相關(guān)的控件添加到network_security_policy.xml文件中,但是將根CA保存在系統(tǒng)CA存儲中可以避免其他步驟(如第三方框架)的麻煩,因此這是我的首選方法。
(1) 完整性檢查
進入設(shè)置>安全性>受信任的憑據(jù)>系統(tǒng),并確保列出了你的證書。
(2) 解決方案
為了將你的證書列為根證書,你的設(shè)備需要使用Magisk作為根目錄:
或者,你可以:
你的Burp證書有適當?shù)挠行趩?
Google以及Android正在積極縮短leaf證書的最長接受期限,如果你的leaf證書的有效日期過長,Android / Chrome將不會接受它。
(1) 完整性檢查
使用瀏覽器連接到你的代理,并調(diào)查根CA和leaf證書的證書有效期。如果短于1年,那就好了。如果證書的有效期較長,我喜歡安全一點,創(chuàng)建一個新的CA,你也可以使用Android上最新版本的Chrome瀏覽器來驗證證書的有效期。如果有錯誤,Chrome將顯示以下錯誤:ERR_CERT_VALIDITY_TOO_LONG
(2) 解決方案
這里有兩種可能的解決方案:
設(shè)置應(yīng)用程序
現(xiàn)在設(shè)備可以使用了,現(xiàn)在該看看應(yīng)用程序的詳細信息了。
應(yīng)用程序代理可以識別嗎?
許多應(yīng)用程序簡單地忽略了系統(tǒng)的代理設(shè)置,使用標準庫的應(yīng)用程序通常會使用系統(tǒng)代理設(shè)置,但是依賴于解釋語言的應(yīng)用程序(例如Xamarin和Unity)或本地編譯的應(yīng)用程序(例如Flutter)通常要求開發(fā)人員將代理支持明確地編程到應(yīng)用程序中。
(1) 完整性檢查
在運行應(yīng)用程序時,你應(yīng)該在Burp的Proxy選項卡中看到你的HTTPS數(shù)據(jù),或者應(yīng)該在儀表板面板上Burp的事件日志中看到HTTPS連接錯誤。由于整個設(shè)備都是代理的,你會看到許多來自使用SSL鎖定的應(yīng)用程序的被阻止的請求(例如谷歌Play),所以看看你是否能找到一個與應(yīng)用程序相關(guān)的域。如果你沒有看到任何相關(guān)的失敗連接, 則說明你的應(yīng)用程序很可能沒有代理。
作為額外的完整性檢查,你可以查看應(yīng)用程序是否使用了第三方框架。如果應(yīng)用程序是用Flutter編寫的,它肯定沒有代理意識,而如果它是用Xamarin或Unity編寫的,它很有可能會忽略系統(tǒng)的代理設(shè)置。
用apktool反編譯:apktool d myapp.apk;
通過已知的位置:
(2) 解決方案
有幾件事可以嘗試:
在這兩種情況下,你都已從“代理意識”設(shè)置轉(zhuǎn)換為“透明代理”設(shè)置。你必須做兩件事:
再次執(zhí)行完整性檢查,現(xiàn)在希望能在Burp的事件日志中看到SSL錯誤。
在下一篇文章中,我還會詳細介紹“應(yīng)用程序是否使用了自定義端口?”,“應(yīng)用程序是否使用SSL鎖定?”等問題。
本文翻譯自:https://blog.nviso.eu/2020/11/19/proxying-android-app-traffic-common-issues-checklist/

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流