您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何在Android Nougat中正確配置Burp Suite,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我測試一個新的Android app時,遇到了一些關于Burp Suite無法正常工作的問題。為了解決這個問題我花了整整一下午的時間,并決定將我的解決方案分享出來。
此前我已經在Genymotion VM或我的舊版Nexus Tablet,做過不少Android相關的測試。一直以來我都遵循Portswigger的說明文檔,本地運行Burp Suite,并安裝User Cert,配置一個WiFi代理。
然而,當我對這個特定app(需要API level 24 (Android 7.0 - "Nougat"))測試時,突然發現Burp無法正常工作。我回顧了我的配置步驟,并沒有發現遺漏的地方,但在Burp中只看到“connection reset(連接重置)”錯誤:
在經過我幾個小時的折騰后,我終于找出了問題所在。在進一步探討之前,我向大家推薦兩篇優秀的文章,這也是幫我解決該問題的關鍵信息:
https://serializethoughts.com/2016/09/10/905/
https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
從Nougat開始,Android更改了對用戶安裝證書的默認信任行為。這意味著,從sdcard安裝Burp CA將無法攔截應用流量。除非另有說明,否則應用程序將只會信任系統級別的CA。
這里有兩種方法可以幫我們繞過它:
將Burp CA作為系統級CA安裝在設備上。這是我認為最簡單的解決方法,但需要一個已經root的設備。還免去了設置鎖屏PIN碼的的麻煩:)
修改manifest清單文件并重新打包應用程序。 操作步驟相對繁瑣,但不需要root權限。
注意:我在Windows 10上使用Burp Suite Pro完成了這些操作,使用的是Android 7.1(API25)Genymotion VM,但這些步驟應適用于任何設置。
對我來說,我認為最簡單的解決方案就是將Burp CA安裝到系統可信證書中。你可以通過Settings -> Security -> Trusted Credentials來查看所有與Android設備捆綁在一起的系統CA。在瀏覽器捆綁中你也能看到類似的CA。
Android的受信任CA以特殊格式存儲在/system/etc/security/cacerts 。如果我們有root權限,可以對這個位置進行寫入放入Burp CA(經過一些修改后)。
導出并轉換Burp CA
第一步是以正確的格式獲取Burp CA。使用Burp Suite,以DER格式導出CA證書。我將它保存為cacert.der
Android喜歡PEM格式證書,并且文件名為subject_hash_old值并以.0結尾。
注意:如果你使用的OpenSSL <1.0,那么將是subject_hash,而不是“old”
使用openssl將DER轉換成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
例如,我的證書:
將證書復制到設備
我們可以使用adb來復制證書,但由于必須將其復制到/system文件系統,所以我們需要將它重新掛載為可寫。作為root用戶,adb remount非常簡單。
adb root adb remount adb push <cert>.0 /sdcard/
進入adb shell將文件移動到/system/etc/security/cacerts,并將文件權限修改為644:
mv /sdcard/<cert>.0 /system/etc/security/cacerts/ chmod 644 /system/etc/security/cacerts/<cert>.0
最后,我們通過adb reboot命令重啟設備。
重啟設備后,我們瀏覽到Settings -> Security -> Trusted Credentials應該能看到新的“Portswigger CA”已成為系統信任的CA。
現在我們就可以設置代理并通過Burp來攔截所有的應用流量了:)
如果你沒有root權限或不想修改系統可信證書,則你也可以將Burp CA作為用戶證書安裝,然后通過修改特定的APK來實現MitM。
從Nougat開始,應用默認會忽略用戶安裝的證書。通過查看啟動應用時的logcat輸出信息可以驗證這一點:
沒有網絡安全配置,該應用程序將只信任系統CA,并直接忽視用戶安裝的Burp證書。
想要解決這個問題,我們需要以下操作:
拆解APK
添加新的XML源來定義網絡安全配置文件
修改AndroidManifest.xml
重新打包并自簽名APK
拆解并修改APK
首先我們使用apktool來反匯編APK
apktool d TestApp.apk
接下來,通過在res/xml目錄中創建文件network_security_config.xml來添加新的網絡安全配置:
vim TestApp\res\xml\network_security_config.xml
配置需要明確指出,用戶證書是可被接受和信任的。內容如下:
<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中定義網絡安全配置。在<application>標簽中,添加指向新XML文件的android:networkSecurityConfig屬性:
<application android:allowBackup="true" android:networkSecurityConfig="@xml/network_security_config" ...etc...>
重新打包并自簽名APK
APK現在必須重建并簽名才能安裝。使用apktool b命令,將在dist/目錄中創建一個新的APK:
apktool b TestApp
為了自簽名應用程序,我們需要使用keytool來創建一個新的密鑰庫和密鑰,然后使用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來安裝新的APK:
adb install TestApp\dist\TestApp.apk
現在,當我們啟動應用程序時,logcat輸出將標示正在使用的新的網絡安全配置:
安裝系統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了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。