<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami nagród za błędy!
Zaleca się zapoznanie się z tą stroną, aby dowiedzieć się o **najważniejszych częściach związanych z bezpieczeństwem Androida i najbardziej niebezpiecznych komponentach w aplikacji Android**:
To jest główne narzędzie, które potrzebujesz do połączenia się z urządzeniem Android (emulowanym lub fizycznym).\
**ADB** umożliwia kontrolowanie urządzeń zarówno przez **USB**, jak i przez **sieć** z komputera. Narzędzie to umożliwia **kopiowanie** plików w obie strony, **instalowanie** i **odinstalowywanie** aplikacji, **wykonywanie** poleceń powłoki, **tworzenie kopii zapasowych** danych, **odczytywanie** logów i wiele innych funkcji.
Czasami interesujące jest **modyfikowanie kodu aplikacji**, aby uzyskać dostęp do **ukrytych informacji** (może to być dobrze zaszyfrowane hasła lub flagi). W takim przypadku warto zdekompilować plik apk, zmodyfikować kod i ponownie go skompilować.\
[**W tym samouczku** możesz **nauczyć się, jak zdekompilować APK, zmodyfikować kod Smali i ponownie skompilować 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 zostaną przedstawione. Pamiętaj zawsze o tej możliwości.
Po prostu przeglądając **ciągi znaków** w pliku APK, możesz szukać **haseł**, **adresów URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **kluczy API**, **szyfrowania**, **identyfikatorów UUID Bluetooth**, **tokenów** i wszystkiego, co może być interesujące... poszukaj nawet **tylnych drzwi** do wykonania kodu lub tylnych drzwi uwierzytelniania (domyślne dane uwierzytelniania dla aplikacji).
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)
**Badanie plików _Manifest.xml_ i _strings.xml_ aplikacji może ujawnić potencjalne podatności bezpieczeństwa**. Te pliki można uzyskać za pomocą dekompilatorów lub zmieniając rozszerzenie pliku APK na .zip, a następnie rozpakowując go.
* **Aplikacje debugowalne**: Aplikacje oznaczone jako debugowalne (`debuggable="true"`) w pliku _Manifest.xml_ stanowią ryzyko, ponieważ pozwalają na połączenia, które mogą prowadzić do wykorzystania. Aby lepiej zrozumieć, jak wykorzystać aplikacje debugowalne, zapoznaj się z samouczkiem dotyczącym wyszukiwania i wykorzystywania aplikacji debugowalnych na urządzeniu.
* **Ustawienia kopii zapasowych**: Atrybut `android:allowBackup="false"` powinien być jawnie ustawiony dla aplikacji zajmujących się wrażliwymi informacjami, aby zapobiec nieautoryzowanym kopiom zapasowym danych za pomocą adb, zwłaszcza gdy włączone jest debugowanie USB.
* **Bezpieczeństwo sieci**: Niestandardowe konfiguracje bezpieczeństwa sieciowego (`android:networkSecurityConfig="@xml/network_security_config"`) w _res/xml/_ mogą określać szczegóły dotyczące zabezpieczeń, takie jak piny 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 wskazać na komponenty, które mogą być nadużywane. Dalsza analiza podczas testów dynamicznych może ujawnić, jak wykorzystać te komponenty.
* **Dostawcy treści i dostawcy plików**: Ujawnione dostawcy treści mogą umożliwiać nieautoryzowany dostęp lub modyfikację danych. Konfiguracja dostawców plików powinna również być dokładnie przeanalizowana.
* **Odbiorniki rozgłoszeniowe i schematy URL**: Te komponenty mogą być wykorzystane do wykorzystania, szczególną uwagę należy zwrócić na zarządzanie schematami URL w celu wykrycia podatności wejściowych.
Z pliku **strings.xml** można odkryć wrażliwe informacje, takie jak klucze API, niestandardowe schematy i inne notatki dla programistów, co podkreśla konieczność dokładnego przeglądu tych zasobów.
**Tapjacking** to atak, w którym **złośliwa aplikacja** jest uruchamiana i **umieszcza się na wierzchu aplikacji ofiary**. Gdy zasłania ona widocznie aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika do interakcji z nią, podczas gdy przekazuje interakcję do aplikacji ofiary.\
W efekcie, **ślepi użytkownika, aby nie wiedział, że faktycznie wykonuje czynności na aplikacji ofiary**.
Aktywność z ustawionym **`launchMode`** na **`singleTask` bez zdefiniowanego `taskAffinity`** jest podatna na przechwytywanie zadań. Oznacza to, że **aplikacja** może zostać zainstalowana i jeśli zostanie uruchomiona przed prawdziwą aplikacją, może **przechwycić zadanie prawdziwej aplikacji** (użytkownik będzie więc korzystał z **złośliwej aplikacji, myśląc, że korzysta z prawdziwej**).
W systemie Android pliki **przechowywane** w **wewnętrznym** przechowywaniu są **przeznaczone** do **dostępu** wyłącznie przez **aplikację**, która je **utworzyła**. Ta środek bezpieczeństwa jest **egzekwowany** przez system operacyjny Android i jest zazwyczaj wystarczający dla większości aplikacji. Jednak programiści czasami korzystają z trybów takich jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **umożliwić** udostępnianie plików między różnymi aplikacjami. Niemniej jednak te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe.
- **Upewnij się**, że korzystanie z `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **dokładnie sprawdzane**. Te tryby **mogą potencjalnie ujawnić** pliki **niezamierzonego lub nieautoryzowanego dostępu**.
- **Zweryfikuj** uprawnienia ustawione dla plików utworzonych przez aplikację. W szczególności **sprawdź**, czy jakiekolwiek pliki są **ustawione jako czytelne lub zapisywalne dla wszystkich**. Może to stanowić poważne ryzyko bezpieczeństwa, ponieważ pozwoliłoby to **dowolnej aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia lub intencji, na **odczytanie lub modyfikację** tych plików.
- Pliki na zewnętrznym przechowywaniu są **globalnie czytelne i zapisywalne**. Oznacza to, że dowolna aplikacja lub użytkownik może uzyskać do nich dostęp.
Dobrym sposobem na przetestowanie tego jest próba przechwycenia ruchu za pomocą takiego proxy jak Burp, bez autoryzacji certyfikatu CA Burp w urządzeniu. Można również wygenerować za pomocą Burp certyfikat dla innego hosta i go użyć.
Niektórzy programiści zapisują wrażliwe dane w lokalnym magazynie i szyfrują je kluczem wpisanym/wykrywalnym w kodzie. Nie powinno się tego robić, ponieważ odwrócenie tego może umożliwić atakującym wydobycie poufnych informacji.
Programiści nie powinni używać **przestarzałych algorytmów** do wykonywania **sprawdzeń** autoryzacji, **przechowywania** lub **wysyłania** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli używane są **skróty** do przechowywania haseł na przykład, powinny być używane odporne na ataki brute-force skróty z solą.
* Zaleca się **zaciemnienie APK**, aby utrudnić odwrócenie inżynierii przez atakujących.
* Jeśli aplikacja jest wrażliwa (np. aplikacje bankowe), powinna sprawdzać, czy urządzenie mobilne jest zrootowane i działać odpowiednio.
* Jeśli aplikacja jest wrażliwa (np. aplikacje bankowe), powinna sprawdzać, czy używany jest emulator.
* Jeśli aplikacja jest wrażliwa (np. aplikacje bankowe), powinna **sprawdzać swoją integralność przed wykonaniem**, aby sprawdzić, czy nie została zmodyfikowana.
* Użyj [**APKiD**](https://github.com/rednaga/APKiD), aby sprawdzić, jakiego kompilatora/pakera/zaciemniacza użyto do budowy APK.
Według tego [**postu na blogu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked to metaalgorytm, który kompresuje zawartość aplikacji do jednego pliku. Blog omawia możliwość stworzenia aplikacji, która dekompresuje tego rodzaju aplikacje... oraz szybszy sposób, który polega na **wykonaniu aplikacji i zebraniu zdekompresowanych plików z systemu plików**.
Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest zdolne do znajdowania **podatności** poprzez **skanowanie** kodu aplikacji. Narzędzie to zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, w których **wejście** jest **kontrolowane przez użytkownika**), **ujść** (które wskazują narzędziu **niebezpieczne miejsca**, w których złośliwe wejście użytkownika może spowodować szkody) i **reguł**. Te reguły wskazują **kombinację źródeł-ujść**, która wskazuje na podatność.
Aplikacja może zawierać poufne informacje (klucze API, hasła, ukryte adresy URL, subdomeny...), które można odkryć. Można użyć narzędzia takiego jak [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
> Przede wszystkim potrzebujesz środowiska, w którym możesz zainstalować aplikację i całe środowisko (certyfikat CA Burp, Drozer i Frida przede wszystkim). Dlatego też zaleca się korzystanie z zrootowanego urządzenia (emulowanego lub nie).
Możesz założyć **darmowe konto** na stronie: [https://appetize.io/](https://appetize.io). Ta platforma pozwala na **przesyłanie** i **wykonywanie** APK, więc jest przydatna do sprawdzania zachowania aplikacji.
* [**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 wolnego emulatora arm).
* Dowiedz się, jak go skonfigurować na tej stronie:
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Wersja darmowa:** Personal Edition, musisz założyć konto. _Zaleca się **pobranie** wersji **Z**__**VirtualBoxem**_, aby uniknąć potencjalnych błędów._)
* [**Nox**](https://es.bignox.com) (Darmowy, ale nie obsługuje Fridy ani Drozera).
Tworząc nowy emulator na dowolnej platformie, pamiętaj, że im większy jest ekran, tym wolniej będzie działał emulator. Wybieraj więc małe ekrany, jeśli to możliwe.
> Po zainstalowaniu aplikacji, pierwszą rzeczą, którą powinieneś zrobić, to przetestować ją i zbadać, co robi, jak działa i zapoznać się z nią.\
> Sugeruję **wykonać tę początkową analizę dynamiczną za pomocą analizy dynamicznej MobSF + pidcat**, dzięki czemu będziemy mogli **zrozumieć, jak działa aplikacja**, podczas gdy MobSF **przechwytuje** wiele **ciekawych** **danych**, które można później przejrzeć.
Deweloperzy powinni być ostrożni przy publicznym ujawnianiu informacji **debugowania**, ponieważ może to prowadzić do wycieku poufnych danych. Zaleca się korzystanie z narzędzi [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` do monitorowania logów aplikacji w celu identyfikacji i ochrony poufnych informacji. **Pidcat** jest preferowany ze względu na łatwość użycia i czytelność.
Zauważ, że od **nowszych wersji Androida niż 4.0**, **aplikacje mogą uzyskać dostęp tylko do swoich własnych logów**. Aplikacje nie mogą uzyskać dostępu do logów innych aplikacji.\
W każdym przypadku zaleca się **nie logować poufnych informacji**.
Androidowa struktura oparta na **schowku** umożliwia funkcję kopiuj-wklej w aplikacjach, ale stanowi ryzyko, ponieważ **inne aplikacje** mogą **uzyskać dostęp** do schowka, co może prowadzić do ujawnienia poufnych danych. Ważne jest **wyłączenie funkcji kopiuj-wklej** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych.
Jeśli aplikacja **zawiesi się** i **zapisze logi**, te logi mogą pomóc atakującym, zwłaszcza gdy aplikacja nie może być zreversowana. Aby zmniejszyć to ryzyko, unikaj logowania podczas awarii, a jeśli logi muszą być przesyłane przez sieć, upewnij się, że są wysyłane za pomocą kanału SSL w celu zapewnienia bezpieczeństwa.
Aplikacje często integrują usługi takie jak Google Adsense, które nieumyślnie mogą **wyciekać poufne dane** z powodu niewłaściwej implementacji przez deweloperów. Aby zidentyfikować potencjalne wycieki danych, zaleca się **przechwycenie ruchu aplikacji** i sprawdzenie, czy wysyłane są jakiekolwiek poufne informacje do usług stron trzecich.
Większość aplikacji korzysta z **wewnętrznych baz danych SQLite** do przechowywania informacji. Podczas pentestu **sprawdź** utworzone **bazy danych**, nazwy **tabel** i **kolumny** oraz wszystkie **dane**, ponieważ możesz znaleźć **wrażliwe informacje** (co stanowiłoby podatność).\
Bazy danych powinny znajdować się w lokalizacji `/data/data/nazwa.pakietu/bazydanych`, na przykład `/data/data/com.mwr.example.sieve/bazydanych`
Jeśli baza danych przechowuje poufne informacje i jest **zaszyfrowana**, ale możesz **znaleźć** hasło **wewnątrz aplikacji**, to wciąż jest to **podatność**.
Z [Dokumentacji Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** pozwala ci **przyjąć rolę aplikacji Androidowej** i współdziałać z innymi aplikacjami. Może robić **wszystko, co może zrobić zainstalowana aplikacja**, takie jak korzystanie z mechanizmu komunikacji międzyprocesowej (IPC) Androida i współdziałanie z podstawowym systemem operacyjnym.\
Drozer jest przydatnym narzędziem do **wykorzystywania działań, dostawców treści i usług eksportowanych**, o czym dowiesz się w kolejnych sekcjach.
Gdy aktywność jest eksportowana, można ją wywołać z zewnętrznej aplikacji. Dlatego jeśli aktywność zawiera **wrażliwe informacje** i jest **eksportowana**, można **ominąć** mechanizmy **uwierzytelniania**, aby uzyskać do niej dostęp.
**UWAGA**: MobSF wykryje jako złośliwe użycie _**singleTask/singleInstance**_ jako `android:launchMode` w aktywności, ale ze względu na [to](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), wydaje się, że jest to niebezpieczne tylko w starych wersjach (wersje API <21).
**Aktywności mogą również zwracać wyniki**. Jeśli uda ci się znaleźć eksportowaną i niechronioną aktywność, która wywołuje metodę **`setResult`** i **zwraca wrażliwe informacje**, mamy do czynienia z wyciekiem wrażliwych informacji.
Jeśli nie jest zapobiegane tapjackingowi, możesz wykorzystać eksportowaną aktywność, aby **użytkownik wykonał nieoczekiwane czynności**. Aby uzyskać więcej informacji na temat [**czym jest Tapjacking, kliknij tutaj**](./#tapjacking).
[**Przeczytaj to, jeśli chcesz odświeżyć sobie, czym jest dostawca treści.**](android-applications-basics.md#content-provider)\
Dostawcy treści są używani do **udostępniania danych**. Jeśli aplikacja udostępnia dostawców treści, możesz próbować **wydobyć wrażliwe** dane z nich. Warto również przetestować możliwe **wstrzyknięcia SQL** i **przechodzenie ścieżek**, ponieważ mogą być podatne na ataki.
Usługa to podstawowo coś, co **może otrzymywać dane**, **przetwarzać** je i **zwracać** (lub nie) odpowiedź. Jeśli aplikacja eksportuje jakieś usługi, powinieneś **sprawdzić** kod, aby zrozumieć, co robi, i **testować** go **dynamicznie**, aby wydobywać poufne informacje, omijać środki autoryzacji...\
[**Dowiedz się, jak wykorzystać usługi za pomocą Drozera.**](drozer-tutorial/#services)
Odbiornik rozgłoszeń będzie oczekiwał na określony typ wiadomości. W zależności od tego, jak odbiornik obsługuje wiadomość, może być podatny na ataki.\
[**Dowiedz się, jak wykorzystać odbiorniki rozgłoszeń za pomocą Drozera.**](./#exploiting-broadcast-receivers)
Możesz ręcznie szukać głębokich linków, używając narzędzi takich jak MobSF lub skryptów, na przykład [ten](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Możesz **otworzyć** deklarowany **schemat** za pomocą **adb** lub **przeglądarki**:
Zawsze, gdy znajdziesz deep link, sprawdź, czy **nie otrzymuje on wrażliwych danych (takich jak hasła) za pomocą parametrów URL**, ponieważ inna aplikacja może **udawać deep link i kraść te dane!**
Musisz również sprawdzić, czy jakikolwiek deep link używa parametru wewnątrz ścieżki URL, na przykład: `https://api.example.com/v1/users/{username}`, w takim przypadku możesz wymusić przechodzenie ścieżki, 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 spowodować **przekierowanie otwarte** (jeśli część ścieżki jest używana jako nazwa domeny), **przejęcie konta** (jeśli możesz modyfikować dane użytkowników bez tokenu CSRF i 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/).
- **Certyfikaty nie są zawsze odpowiednio sprawdzane** przez aplikacje Android. Często te aplikacje pomijają ostrzeżenia i akceptują samopodpisane certyfikaty lub, w niektórych przypadkach, wracają do korzystania z połączeń HTTP.
- **Negocjacje podczas ustanawiania połączenia SSL/TLS są czasami słabe**, korzystając z niebezpiecznych zestawów szyfrów. Ta podatność sprawia, że połączenie jest podatne na ataki typu man-in-the-middle (MITM), umożliwiając atakującym odszyfrowanie danych.
- **Wyciek prywatnych informacji** stanowi ryzyko, gdy aplikacje uwierzytelniają się za pomocą bezpiecznych kanałów, a następnie komunikują się za pomocą niezabezpieczonych kanałów w przypadku innych transakcji. Taki sposób postępowania nie chroni wrażliwych danych, takich jak ciasteczka sesji lub dane użytkownika, przed przechwyceniem przez złośliwe podmioty.
Skupimy się na **weryfikacji certyfikatu**. Aby zwiększyć bezpieczeństwo, konieczne jest sprawdzenie integralności certyfikatu serwera. Jest to istotne, ponieważ niebezpieczne konfiguracje TLS i przesyłanie wrażliwych danych przez niezaszyfrowane kanały może stanowić znaczne ryzyko. Szczegółowe kroki dotyczące weryfikacji certyfikatów serwera i usuwania podatności znajdziesz w **[tym źródle](https://manifestsecurity.com/android-application-security-part-10/)**.
SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfikat serwera w stosunku do znanego egzemplarza przechowywanego w samej aplikacji. Ta metoda jest niezbędna do zapobiegania atakom typu man-in-the-middle (MITM). Zaleca się zdecydowanie implementację SSL Pinning w aplikacjach obsługujących wrażliwe informacje.
Aby inspirować ruch HTTP, konieczne jest **zainstalowanie certyfikatu narzędzia proxy** (np. Burp). Bez zainstalowania tego certyfikatu, zaszyfrowany ruch może nie być widoczny przez proxy. Przewodnik dotyczący instalacji niestandardowego certyfikatu CA znajdziesz **[tutaj](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)**.
Aplikacje docelowe **API Level 24 i wyższe** wymagają modyfikacji konfiguracji zabezpieczeń sieciowych w celu zaakceptowania certyfikatu CA proxy. Ten krok jest kluczowy dla inspekcji zaszyfrowanego ruchu. Instrukcje dotyczące modyfikacji konfiguracji zabezpieczeń sieciowych znajdziesz **[w tym samouczku](make-apk-accept-ca-certificate.md)**.
* Automatyczne **modyfikowanie****apk** w celu **ominięcia** SSL Pinning za pomocą [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Największą zaletą tej opcji jest to, że nie będziesz potrzebować uprawnień root do ominięcia SSL Pinning, ale będziesz musiał usunąć aplikację i zainstalować nową, a to nie zawsze zadziała.
* Możesz użyć **Frida** (omówione poniżej), aby ominąć tę ochronę. Oto przewodnik dotyczący korzystania z 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 również spróbować **automatycznego omijania 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ć **automatycznego omijania 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)
Ważne jest również wyszukiwanie powszechnych podatności sieciowych w aplikacji. Szczegółowe informacje dotyczące identyfikacji i łagodzenia tych podatności wykraczają poza zakres tego podsumowania, ale są szeroko omówione w innych miejscach.
[Frida](https://www.frida.re) to dynamiczne narzędzie do instrumentacji dla programistów, inżynierów odwracających i badaczy zabezpieczeń.\
**Możesz uzyskać dostęp do działającej aplikacji i podłączyć się do metod w czasie rzeczywistym, aby zmienić zachowanie, zmienić wartości, wyodrębnić wartości, uruchomić inny kod...**\
Jeśli chcesz przeprowadzać testy penetracyjne aplikacji Android, musisz wiedzieć, jak korzystać z Fridy.
* Dowiedz się, jak korzystać z Fridy: [**Samouczek Frida**](frida-tutorial/)
* Kilka "GUI" do działań z Fridą: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
* Ojection jest świetne do automatyzacji korzystania z Fridy: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
* Kilka niesamowitych skryptów Frida znajdziesz tutaj: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
W systemie Android Keystore jest najlepszym miejscem do przechowywania wrażliwych danych, jednakże, przy odpowiednich uprawnieniach wciąż jest **możliwe uzyskanie do nich dostępu**. Ponieważ aplikacje mają tendencję do przechowywania tutaj **wrażliwych danych w postaci tekstu jawnego**, testy penetracyjne powinny to sprawdzić, ponieważ użytkownik z uprawnieniami root lub osoba mająca fizyczny dostęp do urządzenia może je ukraść.
Aby uzyskać dostęp do danych wewnątrz keystore, można 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)
Za pomocą poniższego skryptu Frida można próbować **ominąć uwierzytelnianie odciskiem palca** wykonywane przez aplikacje Android w celu **ochrony określonych obszarów o dużej wrażliwości:**
Gdy przenosisz aplikację do tła, Android przechowuje **zdjęcie aplikacji**, więc gdy zostanie przywrócona do pierwszego planu, zaczyna ładować obraz przed aplikacją, dzięki czemu wydaje się, że aplikacja została wczytana szybciej.
Jednak jeśli to zdjęcie zawiera **wrażliwe informacje**, osoba mająca dostęp do tego zdjęcia może je **ukraść** (zauważ, że potrzebujesz uprawnień roota, aby uzyskać do niego dostęp).
Android umożliwia **zapobieganie przechwytywaniu zrzutów ekranu poprzez ustawienie parametru układu FLAG\_SECURE**. Korzystając z tej flagi, zawartość okna jest traktowana jako bezpieczna, co uniemożliwia jej pojawienie się na zrzutach ekranu lub wyświetlanie na niezabezpieczonych ekranach.
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)
Programiści często tworzą komponenty pośredniczące, takie jak aktywności, usługi i odbiorniki nadawcze, które obsługują te Intencje i przekazują je do metod takich jak `startActivity(...)` lub `sendBroadcast(...)`, co może być ryzykowne.
Niebezpieczeństwo polega na umożliwieniu atakującym wywołania nieeksportowanych komponentów aplikacji lub dostępu do wrażliwych dostawców treści poprzez przekierowanie tych Intencji. Znaczącym przykładem jest komponent `WebView`, który konwertuje adresy URL na obiekty `Intent` za pomocą `Intent.parseUri(...)` i następnie je wykonuje, co potencjalnie prowadzi do złośliwego wstrzykiwania Intencji.
* **Wstrzykiwanie SQL:** Podczas pracy z dynamicznymi zapytaniami lub dostawcami treści upewnij się, że używasz zapytań z parametrami.
* **Wstrzykiwanie JavaScript (XSS):** Sprawdź, czy obsługa JavaScriptu i wtyczek jest wyłączona dla wszystkich WebView (domyślnie wyłączone). [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
* **Lokalne włączenie plików:** WebView powinien mieć wyłączony dostęp do systemu plików (domyślnie włączony) - `(webview.getSettings().setAllowFileAccess(false);)`. [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
* **Wieczne ciasteczka**: W wielu przypadkach, gdy aplikacja Android kończy sesję, ciasteczko nie jest unieważniane lub może być nawet zapisane na dysku.
* [**Flaga bezpieczeństwa** w ciasteczkach](../../pentesting-web/hacking-with-cookies/#cookies-flags)
Zauważ, że MobSF może analizować aplikacje **Android** (apk), **IOS** (ipa) i **Windows** (apx) (_aplikacje Windows muszą być analizowane z zainstalowanym MobSF na hoście z systemem Windows_).\
Dodatkowo, jeśli utworzysz plik **ZIP** z kodem źródłowym aplikacji **Android** lub **IOS** (przejdź do głównego folderu aplikacji, zaznacz wszystko i utwórz plik ZIP), będzie można go również zanalizować.
MobSF umożliwia również **porównywanie** analizy i integrację z **VirusTotal** (musisz ustawić swój klucz API w _MobSF/settings.py_ i włączyć go: `VT_ENABLED = TRUE``VT_API_KEY = <Twój klucz API>``VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **skrót** zostanie **przesłany**, a nie plik.
MobSF może być również bardzo pomocny przy **analizie dynamicznej** w systemie **Android**, ale w tym przypadku musisz zainstalować MobSF i **genymotion** na swoim hoście (maszyna wirtualna lub Docker nie będą działać). _Uwaga: Najpierw musisz **uruchomić maszynę wirtualną w genymotion**, a następnie MobSF._\
* **Zrzucić dane aplikacji** (adresy URL, 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 zrobić zrzut ekranu, lub musisz nacisnąć "**Exported Activity Tester**", aby uzyskać zrzuty ekranu wszystkich wyeksportowanych aktywności.
* Przechwytywać **ruch HTTPS**
* Używać **Frida** do uzyskiwania **informacji o działaniu w czasie rzeczywistym**
Od wersji **Android > 5**, automatycznie uruchomi Fridę i ustawia globalne ustawienia **proxy** do przechwytywania ruchu. Będzie przechwytywać tylko ruch z testowanej aplikacji.
Domyślnie używa również niektórych skryptów Fridy do **omijania weryfikacji SSL**, **wykrywania roota** i **wykrywania debugera**, a także do **monitorowania interesujących interfejsów API**.\
MobSF może również **wywoływać wyeksportowane aktywności**, przechwytywać **zrzuty ekranu** z nich i **zapisywać** je do raportu.
Aby **rozpocząć** testowanie dynamiczne, naciśnij zielony przycisk: "**Start Instrumentation**". Naciśnij "**Frida Live Logs**", aby zobaczyć logi generowane przez skrypty Fridy, a "**Live API Monitor**", aby zobaczyć wszystkie wywołania podłączonych metod, przekazane argumenty i zwracane wartości (to pojawi się po naciśnięciu "Start Instrumentation").\
MobSF umożliwia również ładowanie własnych **skryptów Fridy** (aby przesłać wyniki swoich skryptów Fridy do MobSF, użyj funkcji `send()`). Posiada również **kilka gotowych skryptów**, które można załadować (można dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), po prostu **wybierz je**, naciśnij "**Load**" i naciśnij "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów wewnątrz "**Frida Live Logs**").
* **Wypisz załadowane klasy**: Wyświetli wszystkie załadowane klasy
* **Przechwyć ciągi**: Wyświetli wszystkie przechwycone ciągi podczas korzystania z aplikacji (bardzo głośne)
* **Przechwyć porównania ciągów**: Może być bardzo przydatne. Pokaże **dwa porównywane ciągi** i wynik True lub False.
* **Wypisz metody klasy**: Wprowadź nazwę klasy (np. "java.io.File") i wyświetli wszystkie metody klasy.
* **Wyszukaj wzorzec klasy**: Wyszukaj klasy według wzorca
* **Śledź metody klasy**: **Śledź** całą **klasę** (zobacz wejścia i wyjścia wszystkich metod klasy). Pamiętaj, że domyślnie MobSF śledzi kilka interesujących metod Android Api.
Po wybraniu modułu pomocniczego, którego chcesz użyć, musisz nacisnąć "**Start Intrumentation**", a wszystkie wyniki zostaną wyświetlone w "**Frida Live Logs**".
Mobsf oferuje również powłokę z niektórymi poleceniami **adb**, **poleceniami MobSF** i powszechnymi **poleceniami powłoki** na dole strony analizy dynamicznej. Kilka interesujących poleceń:
Gdy przechwytujesz ruch HTTP, możesz zobaczyć nieestetyczne widoki przechwyconego ruchu na dole "**Ruch HTTP(S)**" lub ładniejszy widok w zielonym przycisku "**Uruchom narzędzia HTTP**". Z drugiej opcji możesz **wysył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 "**Wyślij do 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ąć "**Uruchom Fuzzer interfejsu API sieciowego**" aby **fuzzować żądania HTTP** i szukać podatności.
Po wykonaniu analizy dynamicznej z MobSF ustawienia proxy mogą być źle skonfigurowane i nie będziesz w stanie ich naprawić z poziomu interfejsu graficznego. Możesz naprawić ustawienia proxy wykonując:
To narzędzie zostało zaprojektowane w celu wyszukiwania kilku **związanych z bezpieczeństwem podatności aplikacji Android**, zarówno w **kodzie źródłowym**, jak i w **pakietowanych APK**. Narzędzie to jest również **zdolne do tworzenia "Proof-of-Concept" APK** i **komend ADB**, aby wykorzystać niektóre z odnalezionych podatności (narażone aktywności, intencje, tapjacking...). Podobnie jak w przypadku Drozera, nie ma potrzeby rootowania urządzenia testowego.
SUPER to aplikacja wiersza poleceń, która może być używana w systemach Windows, MacOS X i Linux do analizy plików _.apk_ w poszukiwaniu podatności. Robi to poprzez dekompresję plików APK i zastosowanie serii reguł w celu wykrycia tych podatności.
StaCoAn to **platformowo-niezależne** narzędzie, które pomaga programistom, łowcom błędów i etycznym hackerom w przeprowadzaniu [statycznej analizy kodu](https://en.wikipedia.org/wiki/Static\_program\_analysis) aplikacji mobilnych.
Idea polega na przeciągnięciu i upuszczeniu pliku aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, która wygeneruje dla Ciebie raport wizualny i przenośny. Możesz dostosować ustawienia i listy słów, aby uzyskać spersonalizowane doświadczenie.
AndroBugs Framework to system analizy podatności Androida, który pomaga programistom lub hakerom znaleźć potencjalne luki w zabezpieczeniach aplikacji Androidowych.\
[Wersje dla systemu Windows](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
Wykrywanie odbywa się poprzez **statyczną analizę** kodu bajtowego Dalvik aplikacji, reprezentowanego jako **Smali**, przy użyciu biblioteki [`androguard`](https://github.com/androguard/androguard).
**MARA** to narzędzie do **odwracania inżynierii i analizy aplikacji mobilnych**. Jest to narzędzie, które łączy popularne narzędzia do odwracania inżynierii i analizy aplikacji mobilnych, aby pomóc w testowaniu aplikacji mobilnych pod kątem zagrożeń związanych z bezpieczeństwem OWASP. Jego celem jest ułatwienie i przyjazne dla programistów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa.
* Wyodrębnianie prywatnych informacji z plików APK za pomocą wyrażeń regularnych.
* Analizowanie manifestu.
* Analizowanie znalezionych domen za pomocą: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) i [whatweb](https://github.com/urbanadventurer/WhatWeb)
* Deobfuskacja plików APK za pomocą [apk-deguard.com](http://www.apk-deguard.com)
Z [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** to narzędzie wiersza poleceń o otwartym kodzie źródłowym, które zmniejsza, optymalizuje i obfuskuje kod Java. Potrafi optymalizować kod bajtowy oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest oprogramowaniem darmowym i jest dystrybuowany na licencji GNU General Public License, wersja 2.
**DeGuard odwraca proces obfuskacji wykonywanej przez narzędzia do obfuskacji Androida. Umożliwia to wiele analiz związanych z bezpieczeństwem, w tym inspekcję kodu i przewidywanie bibliotek.**
Jest to **ogólny deobfuskator Androida**. Simplify **wirtualnie wykonuje aplikację**, aby zrozumieć jej zachowanie, a następnie **stara się zoptymalizować kod**, aby zachowywał się identycznie, ale był łatwiejszy do zrozumienia dla człowieka. Każdy rodzaj optymalizacji jest prosty i ogólny, więc nie ma znaczenia, jaki konkretny rodzaj obfuskacji jest używany.
APKiD dostarcza informacje na temat **sposobu tworzenia pliku APK**. Rozpoznaje wiele **kompilatorów**, **pakowaczy**, **obfuskatorów** i innych dziwnych rzeczy. To jest [_PEiD_](https://www.aldeid.com/wiki/PEiD) dla Androida.
AndroL4b to wirtualna maszyna z systemem Android oparta na ubuntu-mate, zawierająca najnowsze frameworki, samouczki i laboratoria od różnych ekspertów ds. bezpieczeństwa i badaczy do odwracania inżynierii i analizy złośliwego oprogramowania.
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!