新聞中心
在Android應(yīng)用程序進(jìn)行安全評(píng)估時(shí),通常會(huì)進(jìn)行兩方面的評(píng)估:移動(dòng)前端和后端API。為了檢查API的安全性,你將需要大量的文檔,例如Swagger或Postman文件,或者可以讓移動(dòng)應(yīng)用程序?yàn)槟闵伤辛髁?,并?jiǎn)單地通過代理(MitM攻擊)攔截和修改流量。

成都創(chuàng)新互聯(lián)長(zhǎng)期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為新豐企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),新豐網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
有時(shí)候設(shè)置代理確實(shí)很容易,在本文中,我將使用PortSwigger的Burp 套件代理,但是相同的步驟當(dāng)然可以用于任何HTTP代理。在所有示例中,代理將托管在端口8080上的192.168.1.100。檢查從最基本的開始,越到后來越復(fù)雜。
設(shè)置設(shè)備
首先,我們需要確保設(shè)備上的所有設(shè)置都是正確的。無論你嘗試使用MitM的應(yīng)用程序如何,這些步驟均適用。
(1) 是否在設(shè)備上配置了代理?
很明顯,第一步是在設(shè)備上配置代理。使用者介面會(huì)因你的Android版本而有所不同,但找起來并不難。
(2) 完整性檢查
進(jìn)入“設(shè)置”>“連接”>“Wi-Fi”,選擇你所使用Wi-Fi網(wǎng)絡(luò),點(diǎn)擊“高級(jí)”>“代理”>“手動(dòng)”,然后輸入你的代理詳細(xì)信息:
- 代理主機(jī)名:192.168.1.100;
- 代理端口:8080;
Burp是否監(jiān)聽所有接口?
默認(rèn)情況下,Burp只監(jiān)聽本地接口(127.0.0.1),但是由于我們想要從不同的設(shè)備連接,Burp需要監(jiān)聽已經(jīng)加入Wi-Fi網(wǎng)絡(luò)的特定接口。你可以監(jiān)聽所有接口,也可以監(jiān)聽特定接口(如果你知道需要哪個(gè)接口)。作為完整性檢查,我通常使用“監(jiān)聽所有接口”。請(qǐng)注意,Burp有一個(gè)API,它可以允許其他使用相同Wi-Fi網(wǎng)絡(luò)的人查詢你的代理并從中檢索信息。
(1) 完整性檢查
在你的主機(jī)上導(dǎo)航到http://192.168.1.100:8080,應(yīng)該會(huì)出現(xiàn)歡迎界面。
(2) 解決方案
在Burp中,進(jìn)入“代理”>“選項(xiàng)”>在“代理監(jiān)聽器”窗口中單擊你的代理,然后在“綁定到地址”配置上選中“所有接口”。
你的設(shè)備可以連接到代理嗎?
有些網(wǎng)絡(luò)具有主機(jī)/客戶端隔離,不允許客戶端相互通信。在這種情況下,你的設(shè)備將不能連接到代理,因?yàn)槁酚善鞑辉试S。
(1) 完整性檢查
在該設(shè)備上打開瀏覽器,導(dǎo)航到http://192.168.1.100:8080。你應(yīng)該會(huì)看到Burp的歡迎屏幕。如果你在前面的檢查中已經(jīng)配置了代理,你還應(yīng)該能夠?qū)Ш降絟ttp://burp。
(2) 解決方案
這里有一些選擇:
a.設(shè)置一個(gè)禁用主機(jī)/客戶端隔離的自定義無線網(wǎng)絡(luò);
b.將代理托管在可訪問的設(shè)備上,例如AWS ec2實(shí)例;
c.執(zhí)行一個(gè)ARP欺騙攻擊,以欺騙移動(dòng)設(shè)備,使其相信你是路由器;
d.使用adb反向代理通過USB的流量:
- 將設(shè)備上的代理配置為在端口8080上轉(zhuǎn)到127.0.0.1;
- 通過USB連接設(shè)備,并確保adb設(shè)備顯示你的設(shè)備;
- 執(zhí)行adb reverse tcp:8080 tcp:8080,它將
- 現(xiàn)在,你應(yīng)該能夠?yàn)g覽到http://127.0.0.1:8080并看到Burp的歡迎屏幕;
你可以代理HTTP流量嗎?
HTTP流量的步驟通常比HTTPS流量容易得多,因此此處的快速狀態(tài)檢查可確保你的代理正確設(shè)置且可被設(shè)備訪問。
(1) 完整性檢查
導(dǎo)航到http://neverssl.com并確保你在Burp中看到了該請(qǐng)求。 Neverssl.com是一個(gè)不使用HSTS的網(wǎng)站,并且永遠(yuǎn)不會(huì)將你發(fā)送到HTTPS版本,從而使其成為測(cè)試純文本流量的理想選擇。
(2) 解決方案
- 把以前的檢查再檢查一遍,可能有些地方不對(duì);
- Burp的攔截已啟用,請(qǐng)求正在等待你的批準(zhǔn);
設(shè)備上是否已安裝Burp證書?
為了攔截HTTPS流量,需要在設(shè)備上安裝代理的證書。
(1) 完整性檢查
進(jìn)入設(shè)置>安全性>受信任的憑據(jù)>用戶,并確保列出了你的證書。另外,你可以嘗試攔截來自設(shè)備瀏覽器的HTTPS流量。
(2) 解決方案
許多地方都有記錄,但是這里有一個(gè)簡(jiǎn)短的摘要:
- 在瀏覽器中導(dǎo)航到http://burp;
- 點(diǎn)擊右上方的“CA證書”,將開始下載;
- 使用adb或文件管理器將擴(kuò)展名從der更改為crt:adb shell mv /sdcard/Download/cacert.der /sdcard/Download/cacert.crt;
- 使用文件管理器導(dǎo)航到該文件并打開該文件以啟動(dòng)安裝;
你的Burp證書是否已安裝為根證書?
Android最新版本的應(yīng)用程序默認(rèn)不相信用戶證書,至于具體原因請(qǐng)點(diǎn)此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存儲(chǔ)中可以避免其他步驟(如第三方框架)的麻煩,因此這是我的首選方法。
(1) 完整性檢查
進(jìn)入設(shè)置>安全性>受信任的憑據(jù)>系統(tǒng),并確保列出了你的證書。
(2) 解決方案
為了將你的證書列為根證書,你的設(shè)備需要使用Magisk作為根目錄:
- 正常安裝客戶端證書(請(qǐng)參閱以前的檢查);
- 安裝MagiskTrustUser模塊;
- 重新啟動(dòng)設(shè)備以啟用模塊;
- 再次重啟以觸發(fā)文件復(fù)制;
或者,你可以:
- 確保證書的格式正確,然后將其復(fù)制/粘貼到/ system / etc / security / cacerts目錄中。但是,要使其正常工作,你的/ system分區(qū)需要是可寫的。一些根方法允許這樣做,但它非常復(fù)雜,而Magisk更好,獲得正確格式的證書也有點(diǎn)復(fù)雜。
- 修改networkSecurityConfig,以將用戶證書包括為信任錨(請(qǐng)參見下文)。不過,將你的證書作為系統(tǒng)證書會(huì)更好,所以我很少采用這種方法。
你的Burp證書有適當(dāng)?shù)挠行趩?
Google以及Android正在積極縮短leaf證書的最長(zhǎng)接受期限,如果你的leaf證書的有效日期過長(zhǎng),Android / Chrome將不會(huì)接受它。
(1) 完整性檢查
使用瀏覽器連接到你的代理,并調(diào)查根CA和leaf證書的證書有效期。如果短于1年,那就好了。如果證書的有效期較長(zhǎng),我喜歡安全一點(diǎn),創(chuàng)建一個(gè)新的CA,你也可以使用Android上最新版本的Chrome瀏覽器來驗(yàn)證證書的有效期。如果有錯(cuò)誤,Chrome將顯示以下錯(cuò)誤:ERR_CERT_VALIDITY_TOO_LONG
(2) 解決方案
這里有兩種可能的解決方案:
- 確保你安裝了最新版本的Burp,這會(huì)減少生成的leaf證書的有效期;
- 創(chuàng)建自己的根CA,它的有效期僅為365天。這個(gè)根CA生成的證書也將小于365天。這是我的首選選項(xiàng),因?yàn)樽C書可以與團(tuán)隊(duì)成員共享,并且可以安裝在約定期間使用的所有設(shè)備上。
設(shè)置應(yīng)用程序
現(xiàn)在設(shè)備可以使用了,現(xiàn)在該看看應(yīng)用程序的詳細(xì)信息了。
應(yīng)用程序代理可以識(shí)別嗎?
許多應(yīng)用程序簡(jiǎn)單地忽略了系統(tǒng)的代理設(shè)置,使用標(biāo)準(zhǔn)庫(kù)的應(yīng)用程序通常會(huì)使用系統(tǒng)代理設(shè)置,但是依賴于解釋語言的應(yīng)用程序(例如Xamarin和Unity)或本地編譯的應(yīng)用程序(例如Flutter)通常要求開發(fā)人員將代理支持明確地編程到應(yīng)用程序中。
(1) 完整性檢查
在運(yùn)行應(yīng)用程序時(shí),你應(yīng)該在Burp的Proxy選項(xiàng)卡中看到你的HTTPS數(shù)據(jù),或者應(yīng)該在儀表板面板上Burp的事件日志中看到HTTPS連接錯(cuò)誤。由于整個(gè)設(shè)備都是代理的,你會(huì)看到許多來自使用SSL鎖定的應(yīng)用程序的被阻止的請(qǐng)求(例如谷歌Play),所以看看你是否能找到一個(gè)與應(yīng)用程序相關(guān)的域。如果你沒有看到任何相關(guān)的失敗連接, 則說明你的應(yīng)用程序很可能沒有代理。
作為額外的完整性檢查,你可以查看應(yīng)用程序是否使用了第三方框架。如果應(yīng)用程序是用Flutter編寫的,它肯定沒有代理意識(shí),而如果它是用Xamarin或Unity編寫的,它很有可能會(huì)忽略系統(tǒng)的代理設(shè)置。
用apktool反編譯:apktool d myapp.apk;
通過已知的位置:
- Flutter: myapp/lib/arm64-v8a/libflutter.so
- Xamarin: myapp/unknown/assemblies/Mono.Android.dll
- Unity: myapp/lib/arm64-v8a/libunity.so
(2) 解決方案
有幾件事可以嘗試:
- 使用ProxyDroid(僅限r(nóng)oot用戶),盡管它是一個(gè)舊應(yīng)用,但仍然可以很好地運(yùn)行。 ProxyDroid使用iptables來強(qiáng)制將流量重定向到你的代理;
- 通過第二個(gè)無線接口設(shè)置自定義熱點(diǎn),并使用iptables自己重定向流量。你可以在mitmproxy文檔中找到設(shè)置,它是另一個(gè)有用的HTTP代理,同樣的設(shè)置也適用于Burp。
在這兩種情況下,你都已從“代理意識(shí)”設(shè)置轉(zhuǎn)換為“透明代理”設(shè)置。你必須做兩件事:
- 在設(shè)備上禁用代理。如果你不這樣做,那么Burp將同時(shí)收到代理請(qǐng)求和透明請(qǐng)求,二者互不兼容;
- 配置Burp以支持透明代理通過代理>選項(xiàng)>活動(dòng)代理>編輯>請(qǐng)求處理>支持不可見代理;
再次執(zhí)行完整性檢查,現(xiàn)在希望能在Burp的事件日志中看到SSL錯(cuò)誤。
在下一篇文章中,我還會(huì)詳細(xì)介紹“應(yīng)用程序是否使用了自定義端口?”,“應(yīng)用程序是否使用SSL鎖定?”等問題。
本文翻譯自:https://blog.nviso.eu/2020/11/19/proxying-android-app-traffic-common-issues-checklist/
分享文章:利用BurpSuite劫持AndroidApp的流量(一)
URL標(biāo)題:http://www.5511xx.com/article/dhdjcsg.html


咨詢
建站咨詢
