溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在Android Nougat中正確配置Burp Suite

發(fā)布時(shí)間:2021-12-22 14:29:55 來(lái)源:億速云 閱讀:242 作者:柒染 欄目:網(wǎng)絡(luò)安全

這期內(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ò)誤:

如何在Android Nougat中正確配置Burp Suite

在經(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è)置。

將Burp CA作為系統(tǒng)級(jí)CA安裝在設(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 Nougat中正確配置Burp Suite

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ū):

如何在Android Nougat中正確配置Burp Suite

將證書(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è)備。

如何在Android Nougat中正確配置Burp Suite

重啟設(shè)備后,我們?yōu)g覽到Settings -> Security -> Trusted Credentials應(yīng)該能看到新的“Portswigger CA”已成為系統(tǒng)信任的CA。

如何在Android Nougat中正確配置Burp Suite

現(xiàn)在我們就可以設(shè)置代理并通過(guò)Burp來(lái)攔截所有的應(yīng)用流量了:)

修改并重新打包應(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):

如何在Android Nougat中正確配置Burp Suite

沒(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

如何在Android Nougat中正確配置Burp Suite

接下來(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

如何在Android Nougat中正確配置Burp Suite

最后,使用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ò)安全配置:

如何在Android Nougat中正確配置Burp Suite

cheatsheet

安裝系統(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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI