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:
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
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:
|
|
Örneğin, sertifikamla:
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
.
|
|
Sadece bir kabuğa düşme (adb shell
) ve dosyayı şuraya taşıyın: /system/etc/security/cacerts
ve 644’e chmod yapın:
|
|
Son olarak, cihazı ikisinden biriyle tamamen yeniden başlatmamız gerekiyor. adb reboot
veya bir güç döngüsü.
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.
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ı:
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
Daha sonra dosyayı oluşturarak yeni bir ağ güvenliği yapılandırması ekleyin. network_security_config.xml
içinde res/xml
dizin:
|
|
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:
|
|
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:
|
|
Yeniden Birleştir ve İmzala
Son olarak APK’nın yüklenebilmesi için artık yeniden oluşturulması ve imzalanması gerekiyor. Kullanma apktool b
yeni 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:
|
|
Son olarak yeni APK’yı şununla yükleyin: adb
:
|
|
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:
Kullanıcı sertifikalarına yüklenen Burp CA ile artık uygulama trafiğini MitM yapabiliyoruz!
Sistem CA’sını yükleyin
|
|
APK’yı değiştir
|
|
Umarım bu yardımcı olur! -ropnop