Burp Suite’i Android Nougat ile Yapılandırma


Geçen hafta sonu eğlence için yeni bir Android uygulamasını test etmeye başladım ve Burp Suite’in düzgün çalışmasını sağlamada bazı sorunlarla karşılaştım. Bütün öğleden sonrayı sorunu çözmeye harcadım ve bulduklarımı ve bunu çalıştırmanın iki farklı yolunu yazmaya karar verdim.

Geçmişte oldukça fazla Android testi yaptım ve kurulumum genellikle bir Genymotion VM’yi veya eski köklü Nexus Tabletimi içeriyor. Burp Suite’i yerel olarak çalıştırıyorum, Portswigger belgelerinde belirtildiği gibi Kullanıcı Sertifikasını yüklüyorum, bir WiFi proxy yapılandırıyorum ve yarışlardan ayrılıyorum.

Ancak test etmek istediğim bu uygulama minimum API düzeyi 24 (Android 7.0 – “Nougat”) gerektiriyordu ve aniden çalışmaz hale geldi. Her zaman yaptığım adımları takip ettim ancak Burp’ta “bağlantı sıfırlama” hatalarından başka bir şey görmedim:

Geğirme Uyarıları

Birkaç saat süren sinir bozucu sorun giderme çalışmalarının ardından nihayet sorunun Android’in en son sürümleriyle (API >= 24) ilgili olduğunu anladım. Daha ileri gitmeden önce ihtiyacım olan tüm bilgileri şu harika yazılarda buldum:

Nougat’tan başlayarak Android, kullanıcı tarafından yüklenen sertifikalara güvenmenin varsayılan davranışını değiştirdi. Uygulama trafiğini ele geçirmeye başlamak için artık Burp CA’yı sd kartından yüklemek mümkün değil. Aksi belirtilmediği sürece uygulamalar artık sadece sistem düzeyindeki CA’lara güvenin. Arıza “görünmez bir şekilde” gerçekleşiyor ve Burp Suite’te gördüğüm tüm uyarıların sorumlusu.

Bunu atlamanın iki yolu var ve ikisinden de geçeceğim.

  • Burp CA’yı cihaza sistem düzeyinde CA olarak yükleyin. Benim önerim en kolay çözümdür ancak köklü bir cihaz gerektirir. Ayrıca kilit ekranı PIN’i ayarlamanıza gerek kalmaması da ek bir avantajdır 🙂
  • Bildiriyi değiştirin ve uygulamayı yeniden paketleyin. Biraz daha fazla iş gerektirir ancak kök ayrıcalıkları gerektirmez.

Not: Tüm bunları Windows 10 makinemde Burp Suite Pro ile yaptım ve Android 7.1 (API25) Genymotion VM kullanıyorum, ancak adımların her kurulum için geçerli olması gerekir.

Kullanıcı sertifikası yüklemenin “geleneksel” yolu artık Nougat ve üzeri sürümlerde çalışmadığından, benim için en kolay çözüm Burp CA’yı sistemin güvenilen sertifikalarına yüklemektir. Bir Android cihazıyla birlikte verilen tüm sistem CA’larını şu adrese giderek görebilirsiniz: Ayarlar -> Güvenlik -> Güvenilir Kimlik Bilgileri ve sistem CA’larını görüntüleme. Bir tarayıcı paketinde göreceğiniz benzer CA’ları göreceksiniz.

Android için Güvenilir CA’lar özel bir biçimde saklanır /system/etc/security/cacerts. Kök ayrıcalıklarımız varsa, bu konuma yazmak ve Burp CA’ya bırakmak mümkündür (bazı değişikliklerden sonra).

Burp CA’yı dışa aktarın ve dönüştürün
İlk adım Burp CA’yı doğru formatta almaktır. Burp Suite’i kullanarak CA Sertifikasını DER formatında dışa aktarın. olarak kaydettim cacert.der

Burp CA'yı dışa aktar

Android, sertifikanın PEM formatında olmasını ve dosya adının şuna eşit olmasını istiyor: subject_hash_old ile eklenen değer .0.

Not: OpenSSL <1.0 kullanıyorsanız, aslında bu sadece subject_hash“eski” olanı değil

Kullanmak openssl DER’yi PEM’e dönüştürmek için, ardından çıktıyı alın subject_hash_old ve dosyayı yeniden adlandırın:

1
2
3
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 .0

Örneğin, sertifikamla:

Sertifikayı Dönüştürme

Sertifikayı cihaza kopyalayın
kullanabiliriz adb sertifikayı kopyalamak için, ancak kopyalanması gerektiğinden /system dosya sistemi, onu yazılabilir olarak yeniden bağlamamız gerekiyor. Kök olarak bu kolaydır adb remount.

1
2
3
adb root
adb remount
adb push .0 /sdcard/

Sadece bir kabuğa düşme (adb shell) ve dosyayı şuraya taşıyın: /system/etc/security/cacerts ve 644’e chmod yapın:

1
2
mv /sdcard/.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/.0

Son olarak, cihazı ikisinden biriyle tamamen yeniden başlatmamız gerekiyor. adb reboot veya bir güç döngüsü.

Sertifikanın üzerine kopyala

Cihaz yeniden başlatıldıktan sonra şuraya göz atın: Ayarlar -> Güvenlik -> Güvenilir Kimlik Bilgileri yeni “Portswigger CA”yı sistemin güvendiği CA olarak göstermelidir.

Portswigger Güvenilir

Artık proxy’yi kurup Burp ile tüm uygulama trafiğini ele geçirmeye başlamak mümkün 🙂

Kökünüz yoksa veya sistemin güvenilir sertifikalarını değiştirmek istemiyorsanız, Burp CA’yı kullanıcı sertifikası olarak yükleyebilir ve ardından MitM’ye istediğiniz belirli APK’yı değiştirebilirsiniz.

Nougat’tan başlayarak uygulamalar, varsayılan olarak kullanıcı tarafından yüklenen sertifikaları yok sayacaktır. Bakıldığında bu açıkça görülüyor logcat uygulamayı başlatırken çıktı:

Ağ güvenliği yapılandırması yok

Bir ağ güvenliği yapılandırması olmadan uygulama sadece sistem CA’larına güvenir ve kullanıcının yüklediği Burp sertifikasını kabul etmez.

Bunu aşmak için şunları içerir:

  • APK’nın sökülmesi
  • Ağ güvenliği profilini tanımlamak için yeni bir XML kaynağı ekleme
  • AndroidManifest.xml’yi değiştirme
  • APK’yı yeniden paketleme ve kendi kendine imzalama

APK’yı sökün ve değiştirin
APK’yı sökmek için apktool’u kullanarak başlayın

Apktool'u sökme

Daha sonra dosyayı oluşturarak yeni bir ağ güvenliği yapılandırması ekleyin. network_security_config.xml içinde res/xml dizin:

1
vim TestApp\res\xml\network_security_config.xml

Yapılandırmanın, kullanıcı sertifikalarına güvenmenin kabul edilebilir olduğunu açıkça belirtmesi gerekir. İçeriğin tamamı şöyle olmalıdır:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
> 
    > 
        > 
             
             src="system" /> 
             
             src="user" /> 
         
     

Son olarak ağ güvenliği yapılandırmasını tanımlamamız gerekiyor. AndroidManifest.xml. içinde etiketi ekleyin android:networkSecurityConfig yeni XML dosyasına işaret eden özellik:

1
 android:allowBackup="true" android:networkSecurityConfig="@xml/network_security_config" ...etc...>

Yeniden Birleştir ve İmzala
Son olarak APK’nın yüklenebilmesi için artık yeniden oluşturulması ve imzalanması gerekiyor. Kullanma apktool byeni bir yapı oluşturulacak dist/ dizin:

Uygulamayı kendi kendine imzalamak için şunu kullanın: keytool yeni bir anahtar deposu ve anahtar oluşturmak için, ardından jarsigner yeni APK’yı imzalamak için:

1
2
3
4
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

APK Oluşturun ve İmzalayın

Son olarak yeni APK’yı şununla yükleyin: adb:

1
adb install TestApp\dist\TestApp.apk

Artık uygulamayı başlattığımızda logcat çıktısı yeni bir ağ güvenlik yapılandırmasının kullanıldığını gösterecektir:

Logcat yeni ağ güvenliği yapılandırması

Kullanıcı sertifikalarına yüklenen Burp CA ile artık uygulama trafiğini MitM yapabiliyoruz!

Sistem CA’sını yükleyin

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 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 .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’yı değiştir

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apktool d TestApp.apk
vim TestApp\res\xml\network_security_config.xml
#Content:
         
         
         
         
         
         
         
         
         
        

vim TestApp\AndroidManifest.xml
# Add to  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

Umarım bu yardımcı olur! -ropnop


Ayrıca bakınız



Source link