您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何在Android Nougat中正確配置Burp Suite,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我測(cè)試一個(gè)新的Android app時(shí),遇到了一些關(guān)于Burp Suite無(wú)法正常工作的問(wèn)題。為了解決這個(gè)問(wèn)題我花了整整一下午的時(shí)間,并決定將我的解決方案分享出來(lái)。
此前我已經(jīng)在Genymotion VM或我的舊版Nexus Tablet,做過(guò)不少Android相關(guān)的測(cè)試。一直以來(lái)我都遵循Portswigger的說(shuō)明文檔,本地運(yùn)行Burp Suite,并安裝User Cert,配置一個(gè)WiFi代理。
然而,當(dāng)我對(duì)這個(gè)特定app(需要API level 24 (Android 7.0 - "Nougat"))測(cè)試時(shí),突然發(fā)現(xiàn)Burp無(wú)法正常工作。我回顧了我的配置步驟,并沒(méi)有發(fā)現(xiàn)遺漏的地方,但在Burp中只看到“connection reset(連接重置)”錯(cuò)誤:
在經(jīng)過(guò)我?guī)讉€(gè)小時(shí)的折騰后,我終于找出了問(wèn)題所在。在進(jìn)一步探討之前,我向大家推薦兩篇優(yōu)秀的文章,這也是幫我解決該問(wèn)題的關(guān)鍵信息:
https://serializethoughts.com/2016/09/10/905/
https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
從Nougat開(kāi)始,Android更改了對(duì)用戶安裝證書(shū)的默認(rèn)信任行為。這意味著,從sdcard安裝Burp CA將無(wú)法攔截應(yīng)用流量。除非另有說(shuō)明,否則應(yīng)用程序?qū)⒅粫?huì)信任系統(tǒng)級(jí)別的CA。
這里有兩種方法可以幫我們繞過(guò)它:
將Burp CA作為系統(tǒng)級(jí)CA安裝在設(shè)備上。這是我認(rèn)為最簡(jiǎn)單的解決方法,但需要一個(gè)已經(jīng)root的設(shè)備。還免去了設(shè)置鎖屏PIN碼的的麻煩:)
修改manifest清單文件并重新打包應(yīng)用程序。 操作步驟相對(duì)繁瑣,但不需要root權(quán)限。
注意:我在Windows 10上使用Burp Suite Pro完成了這些操作,使用的是Android 7.1(API25)Genymotion VM,但這些步驟應(yīng)適用于任何設(shè)置。
對(duì)我來(lái)說(shuō),我認(rèn)為最簡(jiǎn)單的解決方案就是將Burp CA安裝到系統(tǒng)可信證書(shū)中。你可以通過(guò)Settings -> Security -> Trusted Credentials來(lái)查看所有與Android設(shè)備捆綁在一起的系統(tǒng)CA。在瀏覽器捆綁中你也能看到類似的CA。
Android的受信任CA以特殊格式存儲(chǔ)在/system/etc/security/cacerts 。如果我們有root權(quán)限,可以對(duì)這個(gè)位置進(jìn)行寫(xiě)入放入Burp CA(經(jīng)過(guò)一些修改后)。
導(dǎo)出并轉(zhuǎn)換Burp CA
第一步是以正確的格式獲取Burp CA。使用Burp Suite,以DER格式導(dǎo)出CA證書(shū)。我將它保存為cacert.der
Android喜歡PEM格式證書(shū),并且文件名為subject_hash_old值并以.0結(jié)尾。
注意:如果你使用的OpenSSL <1.0,那么將是subject_hash,而不是“old”
使用openssl將DER轉(zhuǎn)換成PEM,然后輸出subject_hash_old并重命名該文件:
openssl x509 -inform DER -in cacert.der -out cacert.pem openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1 mv cacert.pem <hash>.0
例如,我的證書(shū):
將證書(shū)復(fù)制到設(shè)備
我們可以使用adb來(lái)復(fù)制證書(shū),但由于必須將其復(fù)制到/system文件系統(tǒng),所以我們需要將它重新掛載為可寫(xiě)。作為root用戶,adb remount非常簡(jiǎn)單。
adb root adb remount adb push <cert>.0 /sdcard/
進(jìn)入adb shell將文件移動(dòng)到/system/etc/security/cacerts,并將文件權(quán)限修改為644:
mv /sdcard/<cert>.0 /system/etc/security/cacerts/ chmod 644 /system/etc/security/cacerts/<cert>.0
最后,我們通過(guò)adb reboot命令重啟設(shè)備。
重啟設(shè)備后,我們?yōu)g覽到Settings -> Security -> Trusted Credentials應(yīng)該能看到新的“Portswigger CA”已成為系統(tǒng)信任的CA。
現(xiàn)在我們就可以設(shè)置代理并通過(guò)Burp來(lái)攔截所有的應(yīng)用流量了:)
如果你沒(méi)有root權(quán)限或不想修改系統(tǒng)可信證書(shū),則你也可以將Burp CA作為用戶證書(shū)安裝,然后通過(guò)修改特定的APK來(lái)實(shí)現(xiàn)MitM。
從Nougat開(kāi)始,應(yīng)用默認(rèn)會(huì)忽略用戶安裝的證書(shū)。通過(guò)查看啟動(dòng)應(yīng)用時(shí)的logcat輸出信息可以驗(yàn)證這一點(diǎn):
沒(méi)有網(wǎng)絡(luò)安全配置,該應(yīng)用程序?qū)⒅恍湃蜗到y(tǒng)CA,并直接忽視用戶安裝的Burp證書(shū)。
想要解決這個(gè)問(wèn)題,我們需要以下操作:
拆解APK
添加新的XML源來(lái)定義網(wǎng)絡(luò)安全配置文件
修改AndroidManifest.xml
重新打包并自簽名APK
拆解并修改APK
首先我們使用apktool來(lái)反匯編APK
apktool d TestApp.apk
接下來(lái),通過(guò)在res/xml目錄中創(chuàng)建文件network_security_config.xml來(lái)添加新的網(wǎng)絡(luò)安全配置:
vim TestApp\res\xml\network_security_config.xml
配置需要明確指出,用戶證書(shū)是可被接受和信任的。內(nèi)容如下:
<network-security-config> <base-config> <trust-anchors> <!-- Trust preinstalled CAs --> <certificates src="system" /> <!-- Additionally trust user added CAs --> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>
最后,我們必須在AndroidManifest.xml中定義網(wǎng)絡(luò)安全配置。在<application>標(biāo)簽中,添加指向新XML文件的android:networkSecurityConfig屬性:
<application android:allowBackup="true" android:networkSecurityConfig="@xml/network_security_config" ...etc...>
重新打包并自簽名APK
APK現(xiàn)在必須重建并簽名才能安裝。使用apktool b命令,將在dist/目錄中創(chuàng)建一個(gè)新的APK:
apktool b TestApp
為了自簽名應(yīng)用程序,我們需要使用keytool來(lái)創(chuàng)建一個(gè)新的密鑰庫(kù)和密鑰,然后使用jarsigner簽名新的APK:
keytool -genkey -v -keystore test.keystore -storepass password -alias android -keypass password -keyalg RSA -keysize 2048 -validity 10000 jarsigner.exe -verbose -keystore test.keystore -storepass password -keypass password TestApp\dist\TestApp.apk android
最后,使用adb來(lái)安裝新的APK:
adb install TestApp\dist\TestApp.apk
現(xiàn)在,當(dāng)我們啟動(dòng)應(yīng)用程序時(shí),logcat輸出將標(biāo)示正在使用的新的網(wǎng)絡(luò)安全配置:
安裝系統(tǒng)CA
# Convert DER to PEM openssl x509 -inform DER -in cacert.der -out cacert.pem # Get subject_hash_old (or subject_hash if OpenSSL < 1.0) openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1 # Rename cacert.pem to <hash>.0 mv cacert.pem 9a5ba575.0 # Remount and copy cert to device adb root adb remount adb push 9a5ba575.0 /sdcard/ adb shell vbox86p:/ # mv /sdcard/9a5ba575.0 /system/etc/security/cacerts/ vbox86p:/ # chmod 644 /system/etc/security/cacerts/9a5ba575.0 vbox86p:/ # reboot
修改APK
apktool d TestApp.apk vim TestApp\res\xml\network_security_config.xml #Content: <network-security-config> <base-config> <trust-anchors> <!-- Trust preinstalled CAs --> <certificates src="system" /> <!-- Additionally trust user added CAs --> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config> vim TestApp\AndroidManifest.xml # Add to <application > tag: android:networkSecurityConfig="@xml/network_security_config" # Rebuild and self-sign keytool -genkey -v -keystore test.keystore -storepass password -alias android -keypass password -keyalg RSA -keysize 2048 -validity 10000 apktool b TestApp jarsigner -keystore test.keystore -storepass password -keypass password TestApp\dist\TestApp.apk android # Install new APK adb install TestApp\dist\TestApp.apk # Install Burp CA to User Certs mv cacert.der cacert.cer adb push burpca.cer /mnt/sdcard Settings -> Security -> Install from SD Card
上述就是小編為大家分享的如何在Android Nougat中正確配置Burp Suite了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。