diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 9b09f5801..4b633a065 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -1,10 +1,11 @@ -# Testowanie aplikacji na Androida +# Pentesting aplikacji Android {{#include ../../banners/hacktricks-training.md}} -## Podstawy aplikacji na Androida +## Podstawy aplikacji Android + +Zaleca się rozpocząć od przeczytania tej strony, aby poznać **najważniejsze elementy związane z bezpieczeństwem Androida oraz najbardziej niebezpieczne komponenty w aplikacji Android**: -Zaleca się rozpoczęcie od przeczytania tej strony, aby poznać **najważniejsze aspekty związane z bezpieczeństwem Androida oraz najbardziej niebezpieczne komponenty w aplikacji na Androida**: {{#ref}} android-applications-basics.md @@ -12,24 +13,24 @@ android-applications-basics.md ## ADB (Android Debug Bridge) -To główne narzędzie, którego potrzebujesz, aby połączyć się z urządzeniem z Androidem (emulowanym lub fizycznym).\ -**ADB** umożliwia kontrolowanie urządzeń zarówno przez **USB**, jak i **sieć** z komputera. To narzędzie pozwala na **kopiowanie** plików w obu kierunkach, **instalację** i **odinstalację** aplikacji, **wykonywanie** poleceń powłoki, **tworzenie kopii zapasowych** danych, **odczytywanie** logów, wśród innych funkcji. +To główne narzędzie, którego potrzebujesz, aby połączyć się z urządzeniem Android (emulowanym lub fizycznym).\ +**ADB** pozwala kontrolować urządzenia zarówno przez **USB**, jak i przez **sieć** z komputera. To narzędzie umożliwia **kopiowanie** plików w obu kierunkach, **instalację** i **odinstalowanie** aplikacji, **wykonywanie** poleceń shell, **tworzenie kopii zapasowych** danych, **odczytywanie** logów i inne funkcje. -Zobacz poniższą listę [**poleceń ADB**](adb-commands.md), aby dowiedzieć się, jak używać adb. +Zobacz następującą listę [**ADB Commands**](adb-commands.md), aby nauczyć się używać adb. ## 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 **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ść**. +Czasami warto **modyfikować kod aplikacji**, aby uzyskać dostęp do **ukrytych informacji** (np. dobrze obfuskowane hasła lub flagi). Wówczas może być interesujące zdekompilować APK, zmodyfikować kod i ponownie go skompilować.\ +[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). To może być bardzo przydatne jako **alternatywa dla kilku testów podczas dynamic analysis**, które zostaną zaprezentowane. Zawsze miej tę możliwość na uwadze. -## Inne interesujące triki +## Other interesting tricks -- [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) -- [Nadużywanie usług dostępności (Android RAT)](accessibility-services-abuse.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) -- Ekstrakcja APK z urządzenia: +- [Spoofing your location in Play Store](spoofing-your-location-in-play-store.md) +- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md) +- [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md) +- [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md) +- **Download APKs**: [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) +- Wyodrębnij APK z urządzenia: ```bash adb shell pm list packages com.android.insecurebankv2 @@ -39,7 +40,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk ``` -- Połącz wszystkie podzielone i podstawowe pliki APK za pomocą [APKEditor](https://github.com/REAndroid/APKEditor): +- Połącz wszystkie splits i base apks za pomocą [APKEditor](https://github.com/REAndroid/APKEditor): ```bash mkdir splits adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits @@ -62,39 +63,39 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ## 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). +Przede wszystkim, aby analizować APK powinieneś **rzucić okiem na kod Java** używając decompiler'a.\ +Proszę, [**przeczytaj tutaj aby znaleźć informacje o różnych dostępnych decompilerach**](apk-decompilers.md). ### Looking for interesting Info -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). +Wystarczy spojrzeć na **strings** z APK, aby wyszukać **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** i wszystko, co interesujące... sprawdź nawet obecność backdoorów do wykonania kodu lub backdoorów uwierzytelniania (hardcoded admin credentials w 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) +Zwróć szczególną uwagę na **firebase URLs** i sprawdź, czy nie są źle skonfigurowane. [Więcej informacji o tym czym jest Firebase i jak to eksploatować znajdziesz tutaj.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) ### 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 rozpakowanie go. +**Badanie plików _Manifest.xml_ oraz _strings.xml_ aplikacji może ujawnić potencjalne luki bezpieczeństwa**. Do tych plików można uzyskać dostęp używając decompilerów lub zmieniając rozszerzenie pliku APK na .zip i rozpakowując go. **Luki** zidentyfikowane w **Manifest.xml** obejmują: -- **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 zrozumienie, 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 debugowanie USB jest włączone. -- **Bezpieczeństwo sieci**: Niestandardowe konfiguracje bezpieczeństwa sieci (`android:networkSecurityConfig="@xml/network_security_config"`) w _res/xml/_ mogą określać szczegóły bezpieczeństwa, takie jak przypinanie certyfikatów i ustawienia ruchu HTTP. Przykładem jest zezwolenie na ruch HTTP dla określonych domen. -- **Eksportowane aktywności i usługi**: Identyfikacja eksportowanych aktywności i usług w manifeście może uwydatnić komponenty, które mogą być nadużywane. Dalsza analiza podczas testów dynamicznych może ujawnić, jak wykorzystać te komponenty. -- **Dostawcy treści i FileProviders**: Odkryte dostawcy treści mogą umożliwić nieautoryzowany dostęp lub modyfikację danych. Konfiguracja FileProviders powinna być również dokładnie sprawdzona. -- **Odbiorniki rozgłoszeniowe i schematy URL**: Te komponenty mogą być wykorzystywane do eksploatacji, z szczególną uwagą na to, jak zarządzane są schematy URL w kontekście luk wejściowych. -- **Wersje SDK**: Atrybuty `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` wskazują obsługiwane wersje Androida, podkreślając znaczenie nieobsługiwania przestarzałych, podatnych wersji Androida z powodów bezpieczeństwa. +- **Debuggable Applications**: Aplikacje ustawione jako debuggable (`debuggable="true"`) w pliku _Manifest.xml_ stanowią ryzyko, ponieważ pozwalają na połączenia, które mogą prowadzić do eksploatacji. Aby lepiej zrozumieć jak eksploatować debuggable applications, odnieś się do tutoriala o znajdowaniu i wykorzystywaniu debuggable applications na urządzeniu. +- **Backup Settings**: Atrybut `android:allowBackup="false"` powinien być jawnie ustawiony dla aplikacji przetwarzających wrażliwe informacje, aby zapobiec nieautoryzowanym backupom danych przez adb, szczególnie gdy usb debugging jest włączone. +- **Network Security**: Niestandardowe konfiguracje network security (`android:networkSecurityConfig="@xml/network_security_config"`) w _res/xml/_ mogą określać szczegóły bezpieczeństwa takie jak certificate pins i ustawienia ruchu HTTP. Przykładem jest pozwolenie na HTTP traffic dla wybranych domen. +- **Exported Activities and Services**: Identyfikacja exported activities i services w manifeście może ujawnić komponenty, które mogą być nadużyte. Dalsza analiza podczas dynamic testing może pokazać jak eksploatować te komponenty. +- **Content Providers and FileProviders**: Udostępnione content providers mogą pozwolić na nieautoryzowany dostęp lub modyfikację danych. Konfiguracja FileProviders powinna być również dokładnie sprawdzona. +- **Broadcast Receivers and URL Schemes**: Te komponenty mogą być wykorzystane do eksploatacji, ze szczególnym uwzględnieniem sposobu obsługi URL schemes pod kątem podatności wejścia. +- **SDK Versions**: Atrybuty `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` wskazują wspierane wersje Androida, co podkreśla znaczenie nie wspierania przestarzałych, podatnych wersji Androida ze względów bezpieczeństwa. -Z pliku **strings.xml** można odkryć wrażliwe informacje, takie jak klucze API, niestandardowe schematy i inne notatki dewelopera, co podkreśla potrzebę starannego przeglądu tych zasobów. +Z pliku **strings.xml** można odkryć wrażliwe informacje takie jak API keys, custom schemas oraz inne notatki deweloperskie, co podkreśla potrzebę uważnego przeglądu tych zasobów. ### Tapjacking -**Tapjacking** to atak, w którym **złośliwa** **aplikacja** jest uruchamiana i **pozycjonuje się na wierzchu aplikacji ofiary**. Gdy widocznie zasłania aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika, aby z nią interagował, 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**. +**Tapjacking** to atak, w którym **malicious** **application** jest uruchamiana i **pozycjonuje się nad aplikacją ofiary**. Gdy zasłoni aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, by oszukać użytkownika, skłaniając go do interakcji, podczas gdy interakcja jest przekazywana do aplikacji ofiary.\ +W praktyce jest to **oślepianie użytkownika, przez co nie wie, że faktycznie wykonuje akcje w aplikacji ofiary**. -Znajdź więcej informacji w: +Find more information in: {{#ref}} @@ -103,9 +104,9 @@ tapjacking.md ### Task Hijacking -**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**). +Aktywność z `launchMode` ustawionym na **`singleTask` bez zdefiniowanego `taskAffinity`** jest podatna na task Hijacking. Oznacza to, że **aplikacja** może zostać zainstalowana i jeśli zostanie uruchomiona przed prawdziwą aplikacją, może **przejąć task prawdziwej aplikacji** (więc użytkownik będzie wchodził w interakcję z **malicious application myśląc, że używa prawdziwej**). -Więcej informacji w: +More info in: {{#ref}} @@ -116,113 +117,113 @@ android-task-hijacking.md **Internal Storage** -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. +W Androidzie pliki **przechowywane** w **internal** storage są **zaprojektowane** tak, aby były dostępne wyłącznie dla **app**, która je **utworzyła**. Ten mechanizm bezpieczeństwa jest **wymuszany** przez system Android i ogólnie jest wystarczający dla potrzeb bezpieczeństwa większości aplikacji. Jednak deweloperzy czasami używają trybów takich jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **pozwolić** na współdzielenie plików między różnymi aplikacjami. Te tryby **nie ograniczają jednak dostępu** do tych plików przez inne aplikacje, w tym potencjalnie malicious ones. -1. **Analiza statyczna:** -- **Upewnij się**, że użycie `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **dokładnie sprawdzane**. Te tryby **mogą potencjalnie ujawniać** pliki **niezamierzonym lub nieautoryzowanym dostępem**. -2. **Analiza dynamiczna:** -- **Zweryfikuj** **uprawnienia** ustawione na plikach utworzonych przez aplikację. W szczególności **sprawdź**, czy jakiekolwiek pliki są **ustawione na bycie czytelnymi lub zapisywalnymi na całym świecie**. Może to stanowić istotne ryzyko bezpieczeństwa, ponieważ pozwoli **jakiejkolwiek aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia czy zamiaru, na **odczyt lub modyfikację** tych plików. +1. **Static Analysis:** +- **Upewnij się**, że użycie `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **dokładnie sprawdzone**. Te tryby **mogą potencjalnie ujawnić** pliki dla **niezamierzonego lub nieautoryzowanego dostępu**. +2. **Dynamic Analysis:** +- **Zweryfikuj** uprawnienia ustawione na plikach tworzonych przez aplikację. Konkretnie **sprawdź**, czy jakieś pliki nie zostały ustawione jako czytelne lub zapisywalne dla wszystkich. To może stanowić poważne ryzyko bezpieczeństwa, ponieważ umożliwiłoby **dowolnej aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia czy intencji, **odczyt lub modyfikację** tych plików. **External Storage** -Podczas pracy z plikami na **zewnętrznej pamięci**, takiej jak karty SD, należy podjąć pewne środki ostrożności: +Przy pracy z plikami na **external storage**, takimi jak SD Cards, należy zachować następujące środki ostrożności: -1. **Dostępność**: -- 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ę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. +1. **Accessibility**: +- Pliki na external storage są **globalnie czytelne i zapisywalne**. Oznacza to, że dowolna aplikacja lub użytkownik może mieć do nich dostęp. +2. **Security Concerns**: +- Ze względu na łatwy dostęp, nie zaleca się **przechowywania wrażliwych informacji** na external storage. +- External storage może być usunięty lub dostępny dla dowolnej aplikacji, co czyni go mniej bezpiecznym. +3. **Handling Data from External Storage**: +- Zawsze **przeprowadzaj walidację wejścia** danych pobieranych z external storage. To kluczowe, ponieważ dane pochodzą z nieufnego źródła. +- Przechowywanie plików wykonywalnych lub klas na external storage do dynamicznego ładowania jest zdecydowanie odradzane. +- Jeśli aplikacja musi pobierać pliki wykonywalne z external storage, upewnij się, że są one **podpisane i zweryfikowane kryptograficznie** przed dynamicznym załadowaniem. Ten krok jest niezbędny dla zachowania integralności bezpieczeństwa aplikacji. -Zewnętrzna pamięć może być **dostępna** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` +External storage can be **accessed** in `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard` > [!TIP] -> 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 w uzyskaniu dostępu do plików innej aplikacji. +> Starting with Android 4.4 (**API 17**), the SD card has a directory structure which **limits access from an app to the directory which is specifically for that app**. This prevents malicious application from gaining read or write access to another app's files. -**Wrażliwe dane przechowywane w postaci niezaszyfrowanej** +**Sensitive data stored in clear-text** -- **Preferencje współdzielone**: Android pozwala każdej aplikacji na łatwe zapisywanie plików xml w ścieżce `/data/data//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//databases/` i czasami możliwe jest znalezienie wrażliwych informacji w postaci niezaszyfrowanej w tym folderze. +- **Shared preferences**: Android allow to each application to easily save xml files in the path `/data/data//shared_prefs/` and sometimes it's possible to find sensitive information in clear-text in that folder. +- **Databases**: Android allow to each application to easily save sqlite databases in the path `/data/data//databases/` and sometimes it's possible to find sensitive information in clear-text in that folder. ### Broken TLS **Accept All Certificates** -Z jakiegoś powodu czasami deweloperzy akceptują wszystkie certyfikaty, nawet jeśli na przykład nazwa hosta nie pasuje do linii kodu, jak w poniższym przykładzie: +Z jakiegoś powodu deweloperzy czasami akceptują wszystkie certyfikaty, nawet jeśli na przykład nazwa hosta nie pasuje, używając linii kodu takich jak poniższa: ```java SSLSocketFactory sf = new cc(trustStore); 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ć. +A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it. -### Broken Cryptography +### Błędna kryptografia **Słabe procesy zarządzania kluczami** -Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/predykcyjnym w kodzie. Nie powinno się tego robić, ponieważ pewne odwracanie może pozwolić atakującym na wydobycie poufnych informacji. +Niektórzy deweloperzy zapisują dane wrażliwe w local storage i szyfrują je kluczem zakodowanym na stałe/przewidywalnym w kodzie. Nie powinno się tego robić, ponieważ pewne techniki reversing mogą pozwolić atakującym na wyciągnięcie poufnych informacji. **Użycie niebezpiecznych i/lub przestarzałych algorytmów** -Deweloperzy nie powinni używać **przestarzałych algorytmów** do przeprowadzania **sprawdzania** **autoryzacji**, **przechowywania** lub **wysyłania** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli **hashe** są używane do przechowywania haseł, powinny być używane hashe odporne na brute-force z solą. +Deweloperzy nie powinni używać **deprecated algorithms** do wykonywania autoryzacyjnych **checks**, **store** lub **send** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli **hashes** są używane do przechowywania haseł na przykład, należy używać hashów odpornych na brute-force z salt. -### Inne kontrole +### Inne sprawdzenia -- Zaleca się **obfuskację APK**, aby utrudnić atakującym pracę inżynierii odwrotnej. -- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna przeprowadzać **własne kontrole, aby sprawdzić, czy urządzenie jest zrootowane** i działać w konsekwencji. -- Jeśli aplikacja jest wrażliwa (jak aplikacje bankowe), powinna 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. -- Użyj [**APKiD**](https://github.com/rednaga/APKiD), aby sprawdzić, który kompilator/pakiet/obfuskator został użyty do zbudowania APK. +- It's recommended to **obfuscate the APK** to difficult the reverse engineer labour to attackers. +- If the app is sensitive (like bank apps), it should perform it's **own checks to see if the mobile is rooted** and act in consequence. +- If the app is sensitive (like bank apps), it should check if an **emulator** is being used. +- If the app is sensitive (like bank apps), it should **check it's own integrity before executing** it to check if it was modified. +- Use [**APKiD**](https://github.com/rednaga/APKiD) to check which compiler/packer/obfuscator was used to build the APK -### Aplikacja React Native +### React Native Application -Przeczytaj następującą stronę, aby dowiedzieć się, jak łatwo uzyskać dostęp do kodu javascript aplikacji React: +Read the following page to learn how to easily access javascript code of React applications: {{#ref}} react-native-application.md {{#endref}} -### Aplikacje Xamarin +### Xamarin Applications -Przeczytaj następującą stronę, aby dowiedzieć się, jak łatwo uzyskać dostęp do kodu C# aplikacji xamarin: +Read the following page to learn how to easily access C# code of a xamarin applications: {{#ref}} ../xamarin-apps.md {{#endref}} -### Superzapakowane aplikacje +### Superpacked Applications -Zgodnie z tym [**postem na blogu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superzapakowane to algorytm Meta, który kompresuje zawartość aplikacji do jednego pliku. Blog mówi o możliwości stworzenia aplikacji, która dekompresuje tego rodzaju aplikacje... oraz szybszym sposobie, który polega na **wykonaniu aplikacji i zebraniu zdekompresowanych plików z systemu plików.** +According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.** -### Zautomatyzowana analiza statycznego kodu +### Automated Static Code Analysis -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) i **zasady**. Te zasady wskazują na **kombinację** **źródeł-sinków**, które wskazują na lukę. +The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability. -Dzięki tej wiedzy, **mariana-trench przejrzy kod i znajdzie możliwe luki w nim**. +With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**. -### Wycieki sekretów +### Secrets leaked -Aplikacja może zawierać sekrety (klucze API, hasła, ukryte adresy URL, subdomeny...) wewnątrz, które możesz odkryć. Możesz użyć narzędzia takiego jak [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks). +An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) -### Ominięcie uwierzytelniania biometrycznego +### Bypass Biometric Authentication {{#ref}} bypass-biometric-authentication-android.md {{#endref}} -### Inne interesujące funkcje +### Other interesting functions -- **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) +- **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()` +- **Send SMSs**: `sendTextMessage, sendMultipartTestMessage` +- **Native functions** declared as `native`: `public native, System.loadLibrary, System.load` +- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md) -### **Inne sztuczki** +### **Other tricks** {{#ref}} @@ -235,239 +236,290 @@ content-protocol.md ## Analiza dynamiczna -> Przede wszystkim potrzebujesz środowiska, w którym możesz zainstalować aplikację i całe środowisko (certyfikat Burp CA, Drozer i Frida głównie). Dlatego zaleca się użycie zrootowanego urządzenia (emulowanego lub nie). +> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended. -### Analiza dynamiczna online +### Online Dynamic analysis -Możesz założyć **darmowe konto** na: [https://appetize.io/](https://appetize.io). Ta platforma pozwala na **przesyłanie** i **wykonywanie** APK, więc jest przydatna do zobaczenia, jak zachowuje się apk. +You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving. -Możesz nawet **zobaczyć logi swojej aplikacji** w sieci i połączyć się przez **adb**. +You can even **see the logs of your application** in the web and connect through **adb**. ![](<../../images/image (831).png>) -Dzięki połączeniu ADB możesz używać **Drozer** i **Frida** wewnątrz emulatorów. +Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators. -### Analiza dynamiczna lokalna +### Local Dynamic Analysis -#### Używając emulatora +#### Using an emulator -- [**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: +- [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator). +- Learn to set it up in this page: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Darmowa wersja:** Edycja osobista, musisz założyć konto. _Zaleca się **pobranie** wersji **Z** _**VirtualBox**, aby uniknąć potencjalnych błędów._) -- [**Nox**](https://es.bignox.com) (Darmowy, ale nie obsługuje Frida ani Drozer). +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._) +- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer). > [!TIP] -> Podczas tworzenia nowego emulatora na jakiejkolwiek platformie pamiętaj, że im większy ekran, tym wolniej będzie działał emulator. Wybierz małe ekrany, jeśli to możliwe. +> When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible. -Aby **zainstalować usługi Google** (jak AppStore) w Genymotion, musisz kliknąć na czerwony oznaczony przycisk na poniższym obrazku: +To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image: ![](<../../images/image (277).png>) -Zauważ również, że w **konfiguracji Android VM w Genymotion** możesz wybrać **tryb sieci mostkowej** (to będzie przydatne, jeśli będziesz łączyć się z Android VM z innej VM z narzędziami). +Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools). -#### Użyj fizycznego urządzenia +#### Use a physical device -Musisz włączyć opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **zrootować**: +You need to activate the **debugging** options and it will be cool if you can **root** it: 1. **Ustawienia**. -2. (Od Androida 8.0) Wybierz **System**. +2. (FromAndroid 8.0) Wybierz **System**. 3. Wybierz **Informacje o telefonie**. 4. Naciśnij **Numer kompilacji** 7 razy. -5. Wróć i znajdziesz **Opcje dewelopera**. +5. Wróć i znajdziesz **Opcje programistyczne**. -> 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ć. +> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\ +> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on. -### Niezamierzony wyciek danych +### Unintended Data Leakage -**Logowanie** +**Logging** -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 z ujawnianiem informacji debugowych publicznie, ponieważ może to prowadzić do sensitive data leaks. Narzędzia [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` są rekomendowane do monitorowania logów aplikacji w celu identyfikacji i ochrony wrażliwych informacji. **Pidcat** jest preferowany ze względu na łatwość użycia i czytelność. > [!WARNING] -> Zauważ, że od **nowszych niż Android 4.0**, **aplikacje mogą uzyskiwać dostęp tylko do swoich własnych logów**. Więc aplikacje nie mogą uzyskiwać dostępu do logów innych aplikacji.\ -> Tak czy inaczej, nadal zaleca się **nie logować wrażliwych informacji**. +> Note that from **later newer than Android 4.0**, **applications are only able to access their own logs**. So applications cannot access other apps logs.\ +> Anyway, it's still recommended to **not log sensitive information**. -**Bufor kopiowania/wklejania** +**Copy/Paste Buffer Caching** -Androidowy framework **oparty na schowku** umożliwia funkcjonalność kopiowania i wklejania w aplikacjach, ale stwarza ryzyko, ponieważ **inne aplikacje** mogą **uzyskiwać dostęp** do schowka, potencjalnie ujawniając wrażliwe dane. Ważne jest, aby **wyłączyć funkcje kopiowania/wklejania** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych. +Android's **clipboard-based** framework umożliwia funkcjonalność copy-paste w aplikacjach, jednak stanowi ryzyko, ponieważ **inne aplikacje** mogą **uzyskać dostęp** do schowka, potencjalnie ujawniając wrażliwe dane. Kluczowe jest **wyłączenie funkcji copy/paste** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec data leaks. -**Logi awarii** +**Crash Logs** -Jeśli aplikacja **zawiesza się** i **zapisuje logi**, te logi mogą pomóc atakującym, szczególnie gdy aplikacja nie może być odwrócona. Aby zminimalizować to ryzyko, unikaj logowania w przypadku awarii, a jeśli logi muszą być przesyłane przez sieć, upewnij się, że są wysyłane przez kanał SSL dla bezpieczeństwa. +Jeśli aplikacja **crashuje** i **zapisuje logi**, te logi mogą pomóc atakującym, szczególnie gdy aplikacja nie może zostać łatwo reverse-engineerowana. Aby zminimalizować to ryzyko, unikaj logowania przy crashach, a jeśli logi muszą być przesyłane przez sieć, upewnij się, że są wysyłane przez kanał SSL dla bezpieczeństwa. -Jako pentester, **spróbuj spojrzeć na te logi**. +Jako pentester, **spróbuj rzucić okiem na te logi**. -**Dane analityczne wysyłane do stron trzecich** +**Analytics Data Sent To 3rd Parties** -Aplikacje często integrują usługi takie jak Google Adsense, co może nieumyślnie **ujawniać wrażliwe dane** z powodu niewłaściwej implementacji przez deweloperów. Aby zidentyfikować potencjalne wycieki danych, zaleca się **przechwycenie ruchu aplikacji** i sprawdzenie, czy jakiekolwiek wrażliwe informacje są wysyłane do usług stron trzecich. +Aplikacje często integrują usługi takie jak Google Adsense, które mogą przypadkowo leak sensitive data z powodu nieprawidłowej implementacji przez deweloperów. Aby zidentyfikować potencjalne wycieki danych, zaleca się przechwycenie ruchu aplikacji i sprawdzenie, czy jakiekolwiek wrażliwe informacje są wysyłane do usług zewnętrznych. -### Bazy danych SQLite +### SQLite DBs -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`. +Większość aplikacji używa **internal SQLite databases** do zapisywania informacji. Podczas pentestu przyjrzyj się **bazom danych** utworzonym, nazwom **tabel** i **kolumn** oraz wszystkim zapisanym **danym**, ponieważ możesz znaleźć **sensitive information** (co byłoby podatnością).\ +Bazy danych powinny znajdować się w /data/data/the.package.name/databases, np. /data/data/com.mwr.example.sieve/databases -Jeśli baza danych zapisuje poufne informacje i jest **szyfrowana**, ale możesz **znaleźć** **hasło** wewnątrz aplikacji, to nadal jest to **luka**. +Jeśli baza danych zapisuje poufne informacje i jest **encrypted** ale możesz **find** hasło wewnątrz aplikacji, to nadal jest to **vulnerability**. -Wylicz tabele używając `.tables` i wylicz kolumny tabel używając `.schema `. +Enumeruj tabele używając `.tables` i enumeruj kolumny tabel używając `.schema ` -### Drozer (Eksploatacja aktywności, dostawców treści i usług) +### Drozer (Exploit Activities, Content Providers and Services) -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 następnych sekcjach. +From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\ +Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections. -### Eksploatacja eksportowanych aktywności +### Exploiting exported Activities -[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest aktywność Androida.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -Pamiętaj również, że kod aktywności zaczyna się w metodzie **`onCreate`**. +[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\ +Also remember that the code of an activity starts in the **`onCreate`** method. -**Ominięcie autoryzacji** +**Authorisation bypass** -Gdy aktywność jest eksportowana, możesz wywołać jej ekran z zewnętrznej aplikacji. Dlatego, jeśli aktywność z **wrażliwymi informacjami** jest **eksportowana**, możesz **ominąć** mechanizmy **uwierzytelniania**, aby uzyskać do niej dostęp. +When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.** -[**Dowiedz się, jak eksploatować eksportowane aktywności za pomocą Drozer.**](drozer-tutorial/index.html#activities) +[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities) -Możesz również uruchomić eksportowaną aktywność z adb: +You can also start an exported activity from adb: -- PackageName to com.example.demo -- Exported ActivityName to com.example.test.MainActivity +- PackageName is com.example.demo +- Exported ActivityName is com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**UWAGA**: MobSF wykryje jako złośliwe użycie _**singleTask/singleInstance**_ jako `android:launchMode` w aktywności, ale z powodu [tego](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), najwyraźniej jest to niebezpieczne tylko w starych wersjach (wersje API < 21). +**NOTE**: MobSF will detect as malicious the use of _**singleTask/singleInstance**_ as `android:launchMode` in an activity, but due to [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparently this is only dangerous on old versions (API versions < 21). -> [!WSKAZÓWKA] -> Zauważ, że obejście autoryzacji nie zawsze jest luką, zależy to od tego, jak działa obejście i jakie informacje są ujawniane. +> [!TIP] +> Należy pamiętać, że authorisation bypass nie zawsze jest podatnością — zależy to od tego, jak bypass działa i jakie informacje są ujawniane. -**Wycieki wrażliwych informacji** +**Sensitive information leakage** -**Aktywności mogą również zwracać wyniki**. Jeśli uda ci się znaleźć eksportowaną i niechronioną aktywność wywołującą metodę **`setResult`** i **zwracającą wrażliwe informacje**, dochodzi do wycieku wrażliwych informacji. +Activities mogą również zwracać wyniki. Jeśli uda Ci się znaleźć eksportowaną i niezabezpieczoną activity wywołującą metodę **`setResult`** i **zwracającą poufne informacje**, istnieje sensitive information leakage. #### Tapjacking -Jeśli tapjacking nie jest zapobiegany, możesz nadużyć eksportowanej aktywności, aby **zmusić użytkownika do wykonania nieoczekiwanych działań**. Aby uzyskać więcej informacji o [**tym, czym jest Tapjacking, kliknij tutaj**](#tapjacking). +Jeśli Tapjacking nie jest zapobiegany, możesz nadużyć eksportowanej activity, aby sprawić, że **użytkownik wykona nieoczekiwane akcje**. Po więcej informacji o [**what is Tapjacking follow the link**](#tapjacking). -### Wykorzystywanie dostawców treści - Uzyskiwanie dostępu i manipulowanie wrażliwymi informacjami +### Exploiting Content Providers - Accessing and manipulating sensitive information -[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest dostawca treści.**](android-applications-basics.md#content-provider)\ -Dostawcy treści są zasadniczo używani do **dzielenia się danymi**. Jeśli aplikacja ma dostępne dostawców treści, możesz być w stanie **wyodrębnić wrażliwe** dane z nich. Interesujące jest również testowanie możliwych **SQL injection** i **Path Traversals**, ponieważ mogą być podatne. +[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest Content Provider.**](android-applications-basics.md#content-provider)\ +Content providers są zasadniczo używane do **udostępniania danych**. Jeśli aplikacja ma dostępne content providers, możesz być w stanie **wydobyć poufne** dane z nich. Warto również przetestować potencjalne **SQL injections** i **Path Traversals**, ponieważ mogą być podatne. -[**Dowiedz się, jak wykorzystywać dostawców treści za pomocą Drozer.**](drozer-tutorial/index.html#content-providers) +[**Dowiedz się, jak exploitować Content Providers przy użyciu Drozer.**](drozer-tutorial/index.html#content-providers) -### **Wykorzystywanie usług** +### **Exploiting Services** -[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest usługa.**](android-applications-basics.md#services)\ -Pamiętaj, że działania usługi zaczynają się w metodzie `onStartCommand`. +[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest Service.**](android-applications-basics.md#services)\ +Pamiętaj, że działania Service zaczynają się w metodzie `onStartCommand`. -Usługa to zasadniczo coś, co **może odbierać dane**, **przetwarzać** je i **zwracać** (lub nie) odpowiedź. Jeśli aplikacja eksportuje jakieś usługi, powinieneś **sprawdzić** **kod**, aby zrozumieć, co robi, i **testować** ją **dynamicznie** w celu wyodrębnienia poufnych informacji, omijania środków autoryzacji...\ -[**Dowiedz się, jak wykorzystywać usługi za pomocą Drozer.**](drozer-tutorial/index.html#services) +Service jest zasadniczo czymś, co **może odbierać dane**, **przetwarzać** je i **zwracać** (lub nie) odpowiedź. Zatem, jeśli aplikacja eksportuje jakieś services, powinieneś **sprawdzić** **kod**, aby zrozumieć, co robi, i **przetestować** go **dynamicznie** w celu wydobycia poufnych informacji, obejścia mechanizmów uwierzytelniania...\ +[**Dowiedz się, jak exploitować Services przy użyciu Drozer.**](drozer-tutorial/index.html#services) -### **Wykorzystywanie odbiorników rozgłoszeniowych** +### **Exploiting Broadcast Receivers** -[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest odbiornik rozgłoszeniowy.**](android-applications-basics.md#broadcast-receivers)\ -Pamiętaj, że działania odbiornika rozgłoszeniowego zaczynają się w metodzie `onReceive`. +[**Przeczytaj to, jeśli chcesz odświeżyć, czym jest Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\ +Pamiętaj, że działania Broadcast Receiver zaczynają się w metodzie `onReceive`. -Odbiornik rozgłoszeniowy będzie czekał na określony typ wiadomości. W zależności od tego, jak odbiornik obsługuje wiadomość, może być podatny.\ -[**Dowiedz się, jak wykorzystywać odbiorniki rozgłoszeniowe za pomocą Drozer.**](#exploiting-broadcast-receivers) +Broadcast Receiver będzie oczekiwał na określony typ komunikatu. W zależności od tego, jak receiver obsługuje wiadomość, może być podatny.\ +[**Dowiedz się, jak exploitować Broadcast Receivers przy użyciu Drozer.**](#exploiting-broadcast-receivers) -### **Wykorzystywanie schematów / głębokich linków** +### **Exploiting Schemes / Deep links** -Możesz ręcznie szukać głębokich linków, używając narzędzi takich jak MobSF lub skryptów jak [ten](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ -Możesz **otworzyć** zadeklarowany **schemat** za pomocą **adb** lub **przeglądarki**: +Możesz szukać deep links ręcznie, używając narzędzi takich jak MobSF lub skryptów takich jak [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ +Możesz **otworzyć** zadeklarowany **scheme** używając **adb** lub **przeglądarki**: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` -_Uwaga, że możesz **pominąć nazwę pakietu**, a urządzenie mobilne automatycznie otworzy aplikację, która powinna otworzyć ten link._ +_Zauważ, że możesz **pominąć nazwę pakietu**, a urządzenie mobilne automatycznie wywoła aplikację, która powinna otworzyć ten link._ ```html Click me with alternative ``` -**Kod wykonany** +**Kod wykonywany** -Aby znaleźć **kod, który będzie wykonany w aplikacji**, przejdź do aktywności wywoływanej przez deeplink i poszukaj funkcji **`onNewIntent`**. +Aby znaleźć **kod, który zostanie wykonany w App**, przejdź do activity wywoływanej przez deeplink i wyszukaj funkcję **`onNewIntent`**. ![](<../../images/image (436) (1) (1) (1).png>) -**Wrażliwe informacje** +**Wrażliwe dane** -Za każdym razem, gdy znajdziesz deep link, sprawdź, czy **nie odbiera wrażliwych danych (jak hasła) za pomocą parametrów URL**, ponieważ każda inna aplikacja może **podszyć się pod deep link i ukraść te dane!** +Za każdym razem, gdy znajdziesz deep link, sprawdź, czy **nie otrzymuje on wrażliwych danych (like passwords) via URL parameters**, ponieważ dowolna inna aplikacja może **impersonate the deep link and steal that data!** **Parametry w ścieżce** -Musisz również sprawdzić, czy jakikolwiek deep link używa parametru wewnątrz ścieżki URL, jak: `https://api.example.com/v1/users/{username}`, w takim przypadku możesz wymusić przejście przez ścieżkę, uzyskując dostęp do czegoś takiego jak: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\ -Zauważ, że jeśli znajdziesz poprawne punkty końcowe w aplikacji, możesz być w stanie spowodować **Open Redirect** (jeśli część ścieżki jest używana jako nazwa domeny), **przejęcie konta** (jeśli możesz modyfikować dane użytkowników bez tokena CSRF, a podatny punkt końcowy używał poprawnej metody) i inne podatności. Więcej [informacji na ten temat tutaj](http://dphoeniixx.com/2020/12/13-2/). +You **must check also if any deep link is using a parameter inside the path** of the URL like: `https://api.example.com/v1/users/{username}` , in that case you can force a path traversal accessing something like: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ +Note that if you find the correct endpoints inside the application you may be able to cause a **Open Redirect** (if part of the path is used as domain name), **account takeover** (if you can modify users details without CSRF token and the vuln endpoint used the correct method) and any other vuln. More [info about this here](http://dphoeniixx.com/2020/12/13-2/). -**Więcej przykładów** +**More examples** -Ciekawy raport o bug bounty [tutaj](https://hackerone.com/reports/855618) dotyczący linków (_/.well-known/assetlinks.json_). +An [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_). -### Inspekcja i weryfikacja warstwy transportowej +### Inspekcja warstwy transportowej i błędy weryfikacji -- **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. -- **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. +- **Certyfikaty nie zawsze są właściwie weryfikowane** przez aplikacje Android. Często aplikacje pomijają ostrzeżenia i akceptują certyfikaty samopodpisane lub, w niektórych przypadkach, wracają do używania połączeń HTTP. +- **Negocjacje podczas SSL/TLS handshake bywają czasem słabe**, używając niebezpiecznych zestawów szyfrów. Ta podatność naraża połączenie na man-in-the-middle (MITM) i pozwala atakującym odszyfrować dane. +- **Leakage of private information** jest ryzykiem, gdy aplikacje uwierzytelniają się przy użyciu secure channels, a następnie komunikują się przez non-secure channels dla innych transakcji. Takie podejście nie chroni wrażliwych danych, takich jak session cookies czy dane użytkownika, przed przechwyceniem przez złośliwe podmioty. #### Weryfikacja certyfikatu -Skupimy się na **weryfikacji certyfikatu**. Integralność certyfikatu serwera musi być weryfikowana, aby zwiększyć bezpieczeństwo. Jest to kluczowe, ponieważ niebezpieczne konfiguracje TLS i przesyłanie wrażliwych danych przez niezaszyfrowane kanały mogą stwarzać poważne ryzyko. Szczegółowe kroki dotyczące weryfikacji certyfikatów serwera i rozwiązywania podatności można znaleźć w [**tym zasobie**](https://manifestsecurity.com/android-application-security-part-10/). +Skupimy się na **weryfikacji certyfikatu**. Integralność certyfikatu serwera musi być weryfikowana, aby zwiększyć bezpieczeństwo. Jest to kluczowe, ponieważ niebezpieczne konfiguracje TLS i przesyłanie wrażliwych danych przez kanały niezabezpieczone mogą stanowić poważne ryzyko. Dla szczegółowych kroków dotyczących weryfikacji certyfikatów serwera i usuwania podatności, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) provides comprehensive guidance. #### 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. Metoda ta 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 mechanizm bezpieczeństwa, w którym aplikacja weryfikuje certyfikat serwera względem znanej kopii przechowywanej w samej aplikacji. Ta metoda jest istotna w zapobieganiu atakom MITM. Implementacja SSL Pinning jest zdecydowanie zalecana dla aplikacji przetwarzających wrażliwe informacje. #### Inspekcja ruchu -Aby zainstalować ruch HTTP, konieczne jest **zainstalowanie certyfikatu narzędzia proxy** (np. Burp). Bez zainstalowania tego certyfikatu zaszyfrowany ruch może być niewidoczny przez proxy. Aby uzyskać instrukcje dotyczące instalacji niestandardowego certyfikatu CA, [**kliknij tutaj**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). +Aby analizować ruch HTTP, konieczne jest **zainstalowanie certyfikatu narzędzia proxy** (np. Burp). Bez instalacji tego certyfikatu zaszyfrowany ruch może być niewidoczny przez proxy. For a guide on installing a custom CA certificate, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Aplikacje celujące w **API Level 24 i wyżej** wymagają modyfikacji konfiguracji bezpieczeństwa sieci, aby zaakceptować certyfikat CA proxy. Ten krok jest kluczowy do inspekcji zaszyfrowanego ruchu. Aby uzyskać instrukcje dotyczące modyfikacji konfiguracji bezpieczeństwa sieci, [**odwołaj się do tego samouczka**](make-apk-accept-ca-certificate.md). +Aplikacje targetujące **API Level 24 and above** wymagają modyfikacji Network Security Config, aby zaakceptować certyfikat CA proxy. Ten krok jest krytyczny do inspekcji zaszyfrowanego ruchu. For instructions on modifying the Network Security Config, [**refer to this tutorial**](make-apk-accept-ca-certificate.md). -Jeśli używasz **Flutter**, musisz postępować zgodnie z instrukcjami na [**tej stronie**](flutter.md). Dzieje się tak, ponieważ samo dodanie certyfikatu do magazynu nie zadziała, ponieważ Flutter ma swoją własną listę ważnych CA. +If **Flutter** is being used you need to to follow the instructions in [**this page**](flutter.md). This is because samo dodanie certyfikatu do store nie wystarczy, ponieważ Flutter ma własną listę zaufanych CAs. -#### Obejście SSL Pinning +#### Statyczne wykrywanie SSL/TLS pinning -Gdy SSL Pinning jest wdrożone, konieczne staje się jego obejście, aby zainspirować ruch HTTPS. Istnieje wiele metod w tym celu: +Przed próbami obejścia w czasie runtime szybko zmapuj miejsca, gdzie pinning jest wymuszany w APK. Odkrywanie statyczne pomaga zaplanować hooki/patchy i skupić się na właściwych ścieżkach kodu. -- 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 zadziała. -- 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) -- 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) +Tool: SSLPinDetect +- Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations. +- Reports exact file path, line number, and a code snippet for each match. +- Covers common frameworks and custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins. -#### Szukanie powszechnych podatności w sieci +Install +- Prereqs: Python >= 3.8, Java on PATH, apktool +```bash +git clone https://github.com/aancw/SSLPinDetect +cd SSLPinDetect +pip install -r requirements.txt +``` +Użycie +```bash +# Basic +python sslpindetect.py -f app.apk -a apktool.jar -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. +# Verbose (timings + per-match path:line + snippet) +python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v +``` +Przykładowe reguły wzorców (JSON) +Użyj lub rozszerz signatures, aby wykrywać proprietarne/niestandardowe style pinning. Możesz załadować własne JSON i skanować na dużą skalę. +```json +{ +"OkHttp Certificate Pinning": [ +"Lcom/squareup/okhttp/CertificatePinner;", +"Lokhttp3/CertificatePinner;", +"setCertificatePinner" +], +"TrustManager Override": [ +"Ljavax/net/ssl/X509TrustManager;", +"checkServerTrusted" +] +} +``` +Notes and tips +- Szybkie skanowanie dużych aplikacji poprzez wielowątkowość i I/O mapowane w pamięci; prekompilowane wyrażenia regularne zmniejszają narzut/fałszywe pozytywy. +- Pattern collection: https://github.com/aancw/smali-sslpin-patterns +- Typowe cele detekcji do dalszej analizy: +- OkHttp: użycie CertificatePinner, setCertificatePinner, odniesienia do pakietu okhttp3/okhttp +- Niestandardowe TrustManagers: javax.net.ssl.X509TrustManager, nadpisania checkServerTrusted +- Niestandardowe konteksty SSL: SSLContext.getInstance + SSLContext.init z niestandardowymi managerami +- Deklaratywne pins w res/xml network security config i odniesienia w manifeście +- Wykorzystaj znalezione lokalizacje do zaplanowania hooków Frida, statycznych patchy lub przeglądu konfiguracji przed testami dynamicznymi. + + + +#### Bypassing SSL Pinning + +Gdy implementowane jest SSL Pinning, jego obejście staje się konieczne do inspekcji ruchu HTTPS. Do tego celu dostępne są różne metody: + +- Automatycznie **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Największą zaletą tej opcji jest to, że nie będziesz potrzebować root, aby obejść SSL Pinning, ale będziesz musiał usunąć aplikację i zainstalować nową wersję, i nie zawsze to zadziała. +- Możesz użyć **Frida** (omówione poniżej) aby obejść tę ochronę. Tutaj jest przewodnik jak użyć 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 bypass SSL Pinning** używając [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` +- Możesz także spróbować **automatycznie bypass SSL Pinning** używając **MobSF dynamic analysis** (wyjaśnione poniżej) +- Jeśli nadal uważasz, że jakiś ruch nie jest przechwytywany, 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) + +#### Looking for Common Web Vulnerabilities + +Ważne jest również wyszukiwanie typowych podatności webowych 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 materiałach. ### Frida -[Frida](https://www.frida.re) to zestaw narzędzi do dynamicznej instrumentacji dla programistów, inżynierów odwrotnych i badaczy bezpieczeństwa.\ -**Możesz uzyskać dostęp do działającej aplikacji i podłączyć metody w czasie rzeczywistym, aby zmienić zachowanie, zmienić wartości, wyodrębnić wartości, uruchomić inny kod...**\ -Jeśli chcesz przeprowadzić pentesting aplikacji Android, musisz wiedzieć, jak używać Frida. +[Frida](https://www.frida.re) jest dynamicznym toolkitem do instrumentacji dla deweloperów, reverse-engineerów i badaczy bezpieczeństwa.\ +**Możesz uzyskać dostęp do działającej aplikacji i hookować metody w czasie wykonywania, aby zmieniać zachowanie, zmieniać wartości, wydobywać wartości, uruchamiać inny kod...**\ +Jeśli chcesz pentest aplikacje Android musisz znać Frida. -- 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) -- 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)) +- Naucz się używać Frida: [**Frida tutorial**](frida-tutorial/index.html) +- Kilka "GUI" do działań z Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) +- Ojection świetnie automatyzuje użycie Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) +- Możesz znaleźć świetne skrypty Frida tutaj: [**https://codeshare.frida.re/**](https://codeshare.frida.re) +- Spróbuj obejść mechanizmy anti-debugging / anti-frida ładując Frida zgodnie z wskazówkami 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)) -#### Workflow obejścia anty-instrumentacji i SSL pinning +#### Anti-instrumentation & SSL pinning bypass workflow {{#ref}} android-anti-instrumentation-and-ssl-pinning-bypass.md {{#endref}} -### **Zrzut pamięci - Fridump** +### **Dump Memory - Fridump** -Sprawdź, czy aplikacja przechowuje wrażliwe informacje w pamięci, których nie powinna przechowywać, takie jak hasła lub mnemoniki. +Sprawdź, czy aplikacja nie przechowuje w pamięci poufnych informacji, których nie powinna przechowywać, takich jak hasła czy mnemoniki. -Używając [**Fridump3**](https://github.com/rootbsd/fridump3), możesz zrzucić pamięć aplikacji za pomocą: +Using [**Fridump3**](https://github.com/rootbsd/fridump3) you can dump the memory of the app with: ```bash # With PID python3 fridump3.py -u @@ -476,120 +528,120 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -To będzie zrzut pamięci w folderze ./dump, a tam możesz użyć grep z czymś takim jak: +Spowoduje to zrzut pamięci do folderu ./dump, a następnie możesz tam użyć grep, np.: ```bash strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$" ``` ### **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 sprawdzać, ponieważ użytkownik root lub ktoś z fizycznym dostępem do urządzenia mógłby być w stanie ukraść te dane. +W Androidzie Keystore jest najlepszym miejscem do przechowywania wrażliwych danych, jednak przy wystarczających uprawnieniach wciąż **możliwe jest uzyskanie do niego dostępu**. Ponieważ aplikacje mają tendencję do przechowywania tutaj **wrażliwych danych w postaci jawnej**, pentests powinny to sprawdzić jako root user, ponieważ osoba z fizycznym dostępem do urządzenia mogłaby ukraść te dane. -Nawet jeśli aplikacja przechowuje dane w keystore, dane powinny być zaszyfrowane. +Nawet jeśli aplikacja zapisuje dane w Keystore, dane powinny być zaszyfrowane. -Aby uzyskać dostęp do danych wewnątrz keystore, możesz użyć tego skryptu Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) +Aby uzyskać dostęp do danych w Keystore, możesz użyć tego skryptu Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` -### **Ominięcie odcisków palców/biometrii** +### **Fingerprint/Biometrics Bypass** -Używając poniższego skryptu Frida, możliwe jest **ominięcie uwierzytelniania odcisków palców**, które aplikacje Android mogą stosować w celu **ochrony niektórych wrażliwych obszarów:** +Używając poniższego skryptu Frida, możliwe może być **bypass fingerprint authentication**, które aplikacje Android mogą stosować w celu **ochrony niektórych wrażliwych obszarów:** ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` ### **Obrazy w tle** -Gdy umieszczasz aplikację w tle, Android przechowuje **zrzut ekranu aplikacji**, aby po przywróceniu do pierwszego planu zaczęła ładować obraz przed aplikacją, co sprawia, że wygląda na to, że aplikacja została załadowana szybciej. +Kiedy umieścisz aplikację w tle, Android zapisuje **zrzut aplikacji**, dzięki czemu po przywróceniu jej na pierwszy plan najpierw ładuje ten obraz, co sprawia, że aplikacja wydaje się uruchamiać szybciej. -Jednak jeśli ten zrzut ekranu zawiera **wrażliwe informacje**, ktoś z dostępem do zrzutu może **ukraść te informacje** (zauważ, że potrzebujesz roota, aby uzyskać do niego dostęp). +Jednak jeśli ten zrzut zawiera **poufne informacje**, ktoś mający dostęp do zrzutu może **ukraść te dane** (uwaga: dostęp wymaga root). -Zrzuty ekranu są zazwyczaj przechowywane w: **`/data/system_ce/0/snapshots`** +Zrzuty są zwykle przechowywane w: **`/data/system_ce/0/snapshots`** -Android zapewnia sposób na **zapobieganie przechwytywaniu zrzutów ekranu, ustawiając parametr układu FLAG_SECURE**. Używając tej flagi, zawartość okna jest traktowana jako bezpieczna, co zapobiega jej pojawianiu się w zrzutach ekranu lub wyświetlaniu na niezabezpieczonych ekranach. +Android udostępnia sposób, by **zapobiec wykonywaniu zrzutów ekranu przez ustawienie parametru layout FLAG_SECURE**. Dzięki użyciu tej flagi zawartość okna jest traktowana jako zabezpieczona, co uniemożliwia jej pojawianie się na zrzutach ekranu lub wyświetlanie na niezabezpieczonych ekranach. ```bash getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ``` -### **Analizator Aplikacji Android** +### **Android Application Analyzer** To narzędzie może pomóc w zarządzaniu różnymi narzędziami podczas analizy dynamicznej: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) -### Wstrzykiwanie Intencji +### Intent Injection -Programiści często tworzą komponenty proxy, takie jak aktywności, usługi i odbiorniki rozgłoszeniowe, które obsługują te Intencje i przekazują je do metod takich jak `startActivity(...)` lub `sendBroadcast(...)`, co może być ryzykowne. +Programiści często tworzą komponenty pośredniczące, takie jak activities, services i broadcast receivers, które obsługują te Intents i przekazują je do metod takich jak `startActivity(...)` lub `sendBroadcast(...)`, co może być ryzykowne. -Niebezpieczeństwo polega na umożliwieniu atakującym wywoływania nieeksportowanych komponentów aplikacji lub uzyskiwania dostępu do wrażliwych dostawców treści poprzez błędne kierowanie tych Intencji. Znaczącym przykładem jest komponent `WebView`, który konwertuje adresy URL na obiekty `Intent` za pomocą `Intent.parseUri(...)`, a następnie je wykonuje, co może prowadzić do złośliwych wstrzyknięć Intencji. +Niebezpieczeństwo polega na umożliwieniu atakującym wywoływania non-exported komponentów aplikacji lub dostępu do wrażliwych content providers przez błędne skierowanie tych Intents. Dobrym przykładem jest komponent `WebView`, który konwertuje URL-e na obiekty `Intent` za pomocą `Intent.parseUri(...)` i następnie je wykonuje, co może prowadzić do złośliwych Intent injections. -### Kluczowe Wnioski +### Essential Takeaways -- **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 w `WebView` na `Intent` może ułatwiać niezamierzone działania. +- **Intent Injection** jest podobny do webowego problemu Open Redirect. +- Eksploity polegają na przekazywaniu obiektów `Intent` jako extras, które mogą zostać przekierowane do wykonania niebezpiecznych operacji. +- Może ujawnić atakującym non-exported komponenty i content providers. +- Konwersja URL-i na `Intent` przez `WebView` może ułatwiać wykonywanie niezamierzonych akcji. -### Wstrzyknięcia po stronie klienta Androida i inne +### Android Client Side Injections and others -Prawdopodobnie znasz ten rodzaj podatności z sieci. Musisz być szczególnie ostrożny z tymi podatnościami w aplikacji Android: +Prawdopodobnie znasz ten typ podatności z Web. Należy zachować szczególną ostrożność wobec tych podatności 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). -- **Eternal cookies**: W kilku przypadkach, gdy aplikacja androidowa 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) +- **SQL Injection:** Przy obsłudze dynamicznych zapytań lub Content-Providers upewnij się, że używasz zapytań parametryzowanych. +- **JavaScript Injection (XSS):** Sprawdź, czy obsługa JavaScript i Pluginów jest wyłączona dla wszystkich WebViews (wyłączone domyślnie). [More info here](webview-attacks.md#javascript-enabled). +- **Local File Inclusion:** Dostęp WebViews do systemu plików powinien być wyłączony (włączony domyślnie) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled). +- **Eternal cookies**: W wielu przypadkach po zakończeniu sesji przez aplikację Android cookie nie jest unieważniane lub może zostać zapisane na dysku +- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) --- -## Analiza Automatyczna +## Automatic Analysis ### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF) -**Analiza statyczna** +**Static analysis** ![](<../../images/image (866).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** z użyciem przyjaznego webowego frontendu. Możesz także 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), również będzie w stanie go przeanalizować. +Notice that MobSF can analyse **Android**(apk)**, IOS**(ipa) **and Windows**(apx) applications (_Windows applications must be analyzed from a MobSF installed in a Windows host_).\ +Also, if you create a **ZIP** file with the source code if an **Android** or an **IOS** app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also. -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 = ` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **przesłany** zamiast pliku. +MobSF also allows you to **diff/Compare** analysis and to integrate **VirusTotal** (you will need to set your API key in _MobSF/settings.py_ and enable it: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). You can also set `VT_UPLOAD` to `False`, then the **hash** will be **upload** instead of the file. -### Wspomagana analiza dynamiczna z MobSF +### Assisted Dynamic analysis with MobSF -**MobSF** może być również bardzo pomocny w **analizie dynamicznej** w **Android**, ale w tym przypadku będziesz musiał zainstalować MobSF i **genymotion** na swoim hoście (VM lub Docker nie zadziała). _Uwaga: Musisz **najpierw uruchomić VM w genymotion** a **potem MobSF.**_\ -**MobSF dynamic analyser** może: +**MobSF** może być również bardzo pomocny przy **dynamic analysis** w **Android**, ale w tym przypadku musisz zainstalować MobSF i **genymotion** na swoim hoście (VM lub Docker nie zadziała). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\ +The **MobSF dynamic analyser** może: -- **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** +- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). Wszystko to jest wykonywane automatycznie z wyjątkiem screenshotów — musisz nacisnąć gdy chcesz zrobić screenshot lub nacisnąć "**Exported Activity Tester**", aby uzyskać zrzuty ekranu wszystkich exported activities. +- Capture **HTTPS traffic** +- Use **Frida** to obtain **runtime** **information** -Od wersji Android **> 5**, automatycznie **uruchomi Frida** i ustawi globalne ustawienia **proxy** do **przechwytywania** ruchu. Będzie przechwytywać ruch tylko z testowanej aplikacji. +From android **versions > 5**, automatycznie uruchomi **Frida** i ustawi globalne ustawienia **proxy** aby **capture** ruch. Będzie przechwytywać ruch tylko z testowanej aplikacji. **Frida** -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. +Domyślnie użyje też kilku Frida Scripts do **bypass SSL pinning**, **root detection** i **debugger detection** oraz do **monitor interesting APIs**.\ +MobSF może także **invoke exported activities**, zrobić **screenshots** tych aktywności i **save** 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").\ -MobSF pozwala również na załadowanie własnych **skryptów Frida** (aby wysłać wyniki swoich skryptów Frida do MobSF, użyj funkcji `send()`). Ma również **kilka wcześniej napisanych skryptów**, które możesz załadować (możesz dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), wystarczy **je wybrać**, nacisnąć "**Load**" i nacisnąć "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów w "**Frida Live Logs**"). +Aby **start** testy dynamiczne naciśnij zielony przycisk: "**Start Instrumentation**". Naciśnij "**Frida Live Logs**", aby zobaczyć logi generowane przez Frida scripts oraz "**Live API Monitor**", aby zobaczyć wszystkie wywołania hooked methods, przekazane argumenty i zwracane wartości (pojawi się to po naciśnięciu "Start Instrumentation").\ +MobSF pozwala też załadować własne Frida scripts (aby wysłać wyniki swoich Frida scripts do MobSF użyj funkcji `send()`). Ma też kilka pre-napisanych skryptów, które możesz załadować (możesz dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), po prostu wybierz je, naciśnij "**Load**" i potem "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów w "**Frida Live Logs**"). ![](<../../images/image (419).png>) Ponadto masz kilka dodatkowych funkcji Frida: - **Enumerate Loaded Classes**: Wydrukuje wszystkie załadowane klasy -- **Capture Strings**: Wydrukuje wszystkie przechwycone ciągi podczas korzystania z aplikacji (bardzo hałaśliwe) -- **Capture String Comparisons**: Może być bardzo przydatne. Pokaże **2 porównywane ciągi** i czy wynik był prawdziwy czy fałszywy. -- **Enumerate Class Methods**: Podaj nazwę klasy (np. "java.io.File") i wydrukuje wszystkie metody klasy. -- **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. +- **Capture Strings**: Wydrukuje wszystkie uchwycone stringi podczas używania aplikacji (bardzo głośne) +- **Capture String Comparisons**: Może być bardzo użyteczne. Pokaże 2 porównywane stringi oraz czy wynik był True czy False. +- **Enumerate Class Methods**: Wpisz nazwę klasy (np. "java.io.File") i wypisze wszystkie metody tej klasy. +- **Search Class Pattern**: Wyszukuje klasy po wzorcu +- **Trace Class Methods**: **Trace** całej klasy (zobacz wejścia i wyjścia wszystkich metod klasy). Pamiętaj, że domyślnie MobSF śledzi kilka interesujących Android Api methods. -Gdy wybierzesz moduł pomocniczy, który chcesz użyć, musisz nacisnąć "**Start Intrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**". +Gdy wybierzesz moduł pomocniczy, którego chcesz użyć, musisz nacisnąć "**Start Intrumentation**" i zobaczysz wszystkie wyjścia w "**Frida Live Logs**". **Shell** -Mobsf oferuje również powłokę z niektórymi poleceniami **adb**, **komendami MobSF** i powszechnymi **poleceniami powłoki** na dole strony analizy dynamicznej. Niektóre interesujące polecenia: +Mobsf dostarcza też shell z kilkoma **adb** commands, **MobSF commands**, oraz typowymi **shell** **commands** na dole strony dynamic analysis. Kilka interesujących poleceń: ```bash help shell ls @@ -600,32 +652,32 @@ receivers ``` **Narzędzia HTTP** -Gdy ruch http jest przechwytywany, możesz zobaczyć brzydki widok przechwyconego ruchu na "**HTTP(S) Traffic**" na dole lub ładniejszy widok w zielonym przycisku "**Start HTTPTools**". Z drugiej opcji możesz **wysłać** **przechwycone żądania** do **proxy** takich jak Burp lub Owasp ZAP.\ -Aby to zrobić, _włącz Burp -->_ _wyłącz Intercept --> w MobSB HTTPTools wybierz żądanie_ --> naciśnij "**Send to Fuzzer**" --> _wybierz adres proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). +Gdy ruch HTTP jest przechwycony, możesz zobaczyć surowy widok przechwyconego ruchu w przycisku "**HTTP(S) Traffic**" na dole lub ładniejszy widok w zielonym przycisku "**Start HTTPTools**". Z tej drugiej opcji możesz **wysłać** **przechwycone żądania** do **proxies** takich jak Burp lub Owasp ZAP.\ +Aby to zrobić, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> naciśnij "**Send to Fuzzer**" --> _wybierz adres proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). -Po zakończeniu analizy dynamicznej z MobSF możesz nacisnąć "**Start Web API Fuzzer**", aby **fuzzować żądania http** i szukać luk. +Po zakończeniu dynamic analysis z MobSF możesz nacisnąć "**Start Web API Fuzzer**", aby **fuzz http requests** i poszukać podatności. > [!TIP] -> Po przeprowadzeniu analizy dynamicznej z MobSF ustawienia proxy mogą być źle skonfigurowane i nie będziesz w stanie ich naprawić z GUI. Możesz naprawić ustawienia proxy, wykonując: +> Po przeprowadzeniu dynamic analysis z MobSF ustawienia proxy mogą być nieprawidłowe i nie będziesz w stanie ich naprawić z poziomu GUI. Możesz naprawić ustawienia proxy, wykonując: > > ``` > adb shell settings put global http_proxy :0 > ``` -### Wspomagana analiza dynamiczna z Inspeckage +### Assisted Dynamic Analysis with Inspeckage -Możesz pobrać narzędzie z [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\ -To narzędzie użyje kilku **Hooks**, aby poinformować cię **co się dzieje w aplikacji** podczas przeprowadzania **analizy dynamicznej**. +You can get the tool from [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\ +Narzędzie to wykorzystuje **Hooks**, aby poinformować Cię **co dzieje się w aplikacji** podczas wykonywania **dynamic analysis**. ### [Yaazhini](https://www.vegabird.com/yaazhini/) -To **świetne narzędzie do przeprowadzania analizy statycznej z GUI** +To **świetne narzędzie do przeprowadzania static analysis z GUI** ![](<../../images/image (741).png>) ### [Qark](https://github.com/linkedin/qark) -To narzędzie jest zaprojektowane do wyszukiwania kilku **związanych z bezpieczeństwem luk w aplikacjach Android**, zarówno w **kodzie źródłowym**, jak i **spakowanych APK**. Narzędzie jest również **zdolne do tworzenia "Proof-of-Concept" wdrażalnego APK** oraz **komend ADB**, aby wykorzystać niektóre z wykrytych luk (ujawnione aktywności, intencje, tapjacking...). Podobnie jak w przypadku Drozer, nie ma potrzeby rootowania urządzenia testowego. +Narzędzie to zostało zaprojektowane do wyszukiwania różnych **security related Android application vulnerabilities**, zarówno w **source code**, jak i w **packaged APKs**. Narzędzie jest również **capable of creating a "Proof-of-Concept" deployable APK** oraz generować **ADB commands**, aby wykorzystać niektóre z znalezionych podatności (Exposed activities, intents, tapjacking...). Podobnie jak w przypadku Drozer, nie ma potrzeby rootowania urządzenia testowego. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -634,10 +686,10 @@ qark --java path/to/specific/java/file.java ``` ### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git) -- Wyświetla wszystkie wyodrębnione pliki dla łatwego odniesienia +- Wyświetla wszystkie wyodrębnione pliki dla szybkiego wglądu - Automatycznie dekompiluje pliki APK do formatu Java i Smali -- Analizuje AndroidManifest.xml pod kątem powszechnych luk i zachowań -- Statyczna analiza kodu źródłowego pod kątem powszechnych luk i zachowań +- Analizuje AndroidManifest.xml pod kątem typowych podatności i zachowań +- Wykonuje statyczną analizę kodu źródłowego pod kątem typowych podatności i zachowań - Informacje o urządzeniu - i więcej ```bash @@ -645,11 +697,11 @@ reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPER to aplikacja działająca w wierszu poleceń, która może być używana w systemach Windows, MacOS X i Linux, analizująca pliki _.apk_ w poszukiwaniu luk. Robi to, dekompresując APK i stosując szereg reguł w celu wykrycia tych luk. +SUPER to aplikacja wiersza poleceń, którą można używać w Windows, MacOS X i Linux, analizująca pliki _.apk_ w poszukiwaniu podatności. Robi to, rozpakowując APK i stosując serię reguł, aby wykryć te podatności. -Wszystkie reguły są zawarte w pliku `rules.json`, a każda firma lub tester może stworzyć własne reguły, aby analizować to, czego potrzebują. +Wszystkie reguły znajdują się w pliku `rules.json`, a każda firma lub tester mogą stworzyć własne reguły, aby analizować to, czego potrzebują. -Pobierz najnowsze pliki binarne z [strony pobierania](https://superanalyzer.rocks/download.html) +Pobierz najnowsze binaria z [download page](https://superanalyzer.rocks/download.html) ``` super-analyzer {apk_file} ``` @@ -657,17 +709,17 @@ super-analyzer {apk_file} ![](<../../images/image (297).png>) -StaCoAn to **narzędzie wieloplatformowe**, które wspomaga programistów, łowców błędów i etycznych hakerów w przeprowadzaniu [analizy statycznej kodu](https://en.wikipedia.org/wiki/Static_program_analysis) aplikacji mobilnych. +StaCoAn to **crossplatform** narzędzie, które pomaga deweloperom, bugbounty hunters i ethical hackers w przeprowadzaniu [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na aplikacjach mobilnych. -Koncepcja polega na tym, że przeciągasz i upuszczasz plik swojej aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, a ona wygeneruje wizualny i przenośny raport dla Ciebie. Możesz dostosować ustawienia i listy słów, aby uzyskać spersonalizowane doświadczenie. +Koncepcja polega na tym, że przeciągasz i upuszczasz plik aplikacji mobilnej (.apk or .ipa file) na aplikację StaCoAn, a ona wygeneruje dla Ciebie wizualny i przenośny raport. Możesz dostosować ustawienia i wordlists, aby uzyskać spersonalizowane doświadczenie. -Pobierz [najowszą wersję](https://github.com/vincentcox/StaCoAn/releases): +Pobierz[ latest release](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 Android.\ +AndroBugs Framework to system analizy podatności dla Androida, który pomaga deweloperom lub hackers znaleźć potencjalne luki bezpieczeństwa w aplikacjach Android.\ [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -675,11 +727,11 @@ androbugs.exe -f [APK file] ``` ### [Androwarn](https://github.com/maaaaz/androwarn) -**Androwarn** to narzędzie, którego głównym celem jest wykrywanie i ostrzeganie użytkownika o potencjalnych złośliwych zachowaniach rozwijanych przez aplikację na Androida. +**Androwarn** to narzędzie, którego głównym celem jest wykrywanie i ostrzeganie użytkownika przed potencjalnymi złośliwymi zachowaniami powodowanymi przez aplikację Android. -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ę poprzez **analizę statyczną** kodu bajtowego Dalvik aplikacji, reprezentowanego jako **Smali**, przy użyciu 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... +Narzędzie szuka **typowych zachowań "złych" aplikacji** takich jak: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -687,79 +739,82 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA** to **M**obile **A**pplication **R**everse engineering i **A**nalysis Framework. Jest to narzędzie, które łączy powszechnie używane narzędzia do inżynierii wstecznej i analizy aplikacji mobilnych, aby wspierać testowanie aplikacji mobilnych w kontekście zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie tego zadania i uczynienie go bardziej przyjaznym dla deweloperów aplikacji mobilnych i specjalistów ds. bezpieczeństwa. +**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. To narzędzie łączące często używane narzędzia do reverse engineeringu i analizy aplikacji mobilnych, aby wspomóc testowanie aplikacji mobilnych pod kątem zagrożeń bezpieczeństwa OWASP dla mobilnych aplikacji. Jego celem jest ułatwienie tej pracy i uczynienie jej bardziej przyjazną dla deweloperów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa. -Może: +Potrafi: -- Ekstrahować kod Java i Smali przy użyciu różnych narzędzi +- Wyodrębniać kod Java i Smali przy użyciu różnych narzędzi - Analizować APK za pomocą: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) -- Ekstrahować prywatne informacje z APK przy użyciu regexów. +- Wydobywać prywatne informacje z APK przy użyciu regexpów. - Analizować Manifest. -- Analizować znalezione domeny za pomocą: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) i [whatweb](https://github.com/urbanadventurer/WhatWeb) -- Deobfuskować APK za pomocą [apk-deguard.com](http://www.apk-deguard.com) +- Analizować znalezione domeny za pomocą: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) oraz [whatweb](https://github.com/urbanadventurer/WhatWeb) +- Deobfuskować APK przez [apk-deguard.com] ### Koodous -Przydatne do wykrywania złośliwego oprogramowania: [https://koodous.com/](https://koodous.com) +Przydatne do wykrywania złośliwego oprogramowania: https://koodous.com/ ## Obfuscating/Deobfuscating code -Zauważ, że w zależności od usługi i konfiguracji, której używasz do obfuskacji kodu, sekrety mogą być obfuskowane lub nie. +Zwróć uwagę, że w zależności od usługi i konfiguracji użytej do obfuskacji kodu, sekrety mogą, ale nie muszą być obfuskowane. ### [ProGuard]() -Z [Wikipedia](): **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. +Z [Wikipedia](): **ProGuard** is an open source command-line tool that shrinks, optimizes and obfuscates Java code. Potrafi optymalizować bytecode oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest wolnym oprogramowaniem i jest dystrybuowany na licencji GNU General Public License, wersja 2. -ProGuard jest dystrybuowane jako część Android SDK i działa podczas budowania aplikacji w trybie release. +ProGuard jest dostarczany jako część Android SDK i uruchamiany 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) +Znajdź przewodnik krok po kroku, jak zdeobfuskować apk w [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) -(Z tego przewodnika) Ostatnim razem, gdy sprawdzaliśmy, tryb działania Dexguard był: +(Z tego przewodnika) Ostatnio, gdy sprawdzaliśmy, tryb działania Dexguard był następujący: -- załaduj zasób jako InputStream; -- przekaż wynik do klasy dziedziczącej z FilterInputStream, aby go odszyfrować; -- wykonaj kilka bezużytecznych obfuskacji, aby zmarnować kilka minut czasu odwracającego; -- przekaż odszyfrowany wynik do ZipInputStream, aby uzyskać plik DEX; -- w końcu załaduj wynikowy DEX jako zasób, używając metody `loadDex`. +- load a resource as an InputStream; +- feed the result to a class inheriting from FilterInputStream to decrypt it; +- do some useless obfuscation to waste a few minutes of time from a reverser; +- feed the decrypted result to a ZipInputStream to get a DEX file; +- finally load the resulting DEX as a Resource using the `loadDex` method. ### [DeGuard](http://apk-deguard.com) -**DeGuard odwraca proces obfuskacji wykonywany przez narzędzia obfuskacyjne Androida. Umożliwia to liczne analizy bezpieczeństwa, w tym inspekcję kodu i przewidywanie bibliotek.** +**DeGuard odwraca proces obfuskacji wykonywany przez narzędzia do obfuskacji Androida. Umożliwia to liczne analizy bezpieczeństwa, w tym przegląd kodu i identyfikację bibliotek.** Możesz przesłać obfuskowane APK na ich platformę. -### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app) +### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app -To narzędzie LLM do znajdowania potencjalnych luk w zabezpieczeniach w aplikacjach androidowych i deobfuskacji kodu aplikacji androidowych. Używa publicznego API Gemini od Google'a. +To narzędzie LLM do znajdowania potencjalnych luk w bezpieczeństwie aplikacji Android oraz deobfuskacji kodu aplikacji Android. Korzysta z publicznego API Gemini od Google. ### [Simplify](https://github.com/CalebFenton/simplify) -To **ogólny deobfuskator androidowy.** Simplify **wirtualnie wykonuje aplikację**, aby zrozumieć jej zachowanie, a następnie **stara się zoptymalizować kod**, aby działał identycznie, ale był łatwiejszy do zrozumienia dla człowieka. Każdy typ optymalizacji jest prosty i ogólny, więc nie ma znaczenia, jaki konkretny typ obfuskacji jest używany. +Jest to **uniwersalny deobfuskator dla Androida.** Simplify **praktycznie wykonuje aplikację** aby zrozumieć jej zachowanie, a następnie **stara się zoptymalizować kod**, tak aby zachowywał się identycznie, ale był łatwiejszy do zrozumienia dla człowieka. Każdy rodzaj optymalizacji jest prosty i uniwersalny, więc nie ma znaczenia, jaki konkretny typ obfuskacji został użyty. ### [APKiD](https://github.com/rednaga/APKiD) -APKiD dostarcza informacji o **tym, jak stworzono APK**. Identyfikuje wiele **kompilatorów**, **packerów**, **obfuskatorów** i innych dziwnych rzeczy. To [_PEiD_](https://www.aldeid.com/wiki/PEiD) dla Androida. +APKiD dostarcza informacji o **tym, jak zbudowano APK**. Identyfikuje wiele **kompilatorów**, **packerów**, **obfuskatorów** i innych dziwnych rzeczy. To jest [_PEiD_] dla Androida. ### Manual -[Przeczytaj ten samouczek, aby poznać kilka sztuczek dotyczących **jak odwrócić niestandardową obfuskację**](manual-deobfuscation.md) +Przeczytaj ten tutorial, aby poznać kilka sztuczek dotyczących **odwracania niestandardowej obfuskacji** (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, samouczków i laboratoriów od różnych geeków i badaczy bezpieczeństwa do inżynierii wstecznej i analizy złośliwego oprogramowania. +AndroL4b to wirtualna maszyna bezpieczeństwa Android oparta na ubuntu-mate, zawierająca zbiór najnowszych frameworków, tutoriali i laboratoriów od różnych entuzjastów bezpieczeństwa i badaczy, przeznaczona do reverse engineeringu i analizy złośliwego oprogramowania. ## References - [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/) - [https://appsecwiki.com/#/](https://appsecwiki.com/#/) To świetna lista zasobów -- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Szybki kurs Androida +- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Krótkie wprowadzenie do Android App RE - [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/) - [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh) - [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec) +- [SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis](https://petruknisme.medium.com/sslpindetect-advanced-ssl-pinning-detection-for-android-security-analysis-1390e9eca097) +- [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect) +- [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns) ## Yet to try