mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/exploiting-a-d
This commit is contained in:
parent
ba8ef8a63d
commit
62d9188ffd
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#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)
|
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ą**
|
### **Uczynienie aplikacji debugowalną**
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ Treść oparta na https://medium.com/@shubhamsonani/hacking-with-precision-bypas
|
|||||||
1. **Dezkompilacja APK:**
|
1. **Dezkompilacja APK:**
|
||||||
|
|
||||||
- Wykorzystaj narzędzie APK-GUI do dezkompilacji 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ę.
|
- Ponownie skompiluj, podpisz i zipalignuj zmodyfikowaną aplikację.
|
||||||
|
|
||||||
2. **Zainstaluj 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.
|
- 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 <package_name>`.
|
- Polecenie: `adb shell am setup-debug-app –w <package_name>`.
|
||||||
- **Uwaga:** To polecenie musi być uruchamiane za każdym razem przed uruchomieniem aplikacji, aby upewnić się, że czeka na debuger.
|
- **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 <package_name>`.
|
- Aby uzyskać trwałość, użyj `adb shell am setup-debug-app –w ––persistent <package_name>`.
|
||||||
- Aby usunąć wszystkie flagi, użyj `adb shell am clear-debug-app <package_name>`.
|
- Aby usunąć wszystkie flagi, użyj `adb shell am clear-debug-app <package_name>`.
|
||||||
|
|
||||||
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_.
|
- Przejdź w Android Studio do _File -> Open Profile or APK_.
|
||||||
- Otwórz ponownie skompilowane 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:**
|
6. **Ustaw punkty przerwania w kluczowych plikach Java:**
|
||||||
- Umieść punkty przerwania w `MainActivity.java` (szczególnie w metodzie `onCreate`), `b.java` i `ContextWrapper.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:
|
Dla kontroli debugowalności:
|
||||||
|
|
||||||
@ -53,13 +53,13 @@ Dla kontroli debugowalności:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
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**
|
# **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**
|
## **Sprawdzanie podatności**
|
||||||
|
|
||||||
@ -75,17 +75,53 @@ Demonstrowano to przy użyciu podatnej aplikacji zawierającej przycisk i textvi
|
|||||||
|
|
||||||
## **Wstrzykiwanie kodu w czasie rzeczywistym**
|
## **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 <class_name>`, aby odkryć strukturę aplikacji.
|
- Użyto poleceń takich jak `classes` i `methods <class_name>`, aby odkryć strukturę aplikacji.
|
||||||
- Ustawiono punkt przerwania w metodzie `onClick`, a jego wykonanie było kontrolowane.
|
- 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".
|
- 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 wynik aplikacji w czasie rzeczywistym.
|
- 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:<pid>
|
||||||
|
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://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://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}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user