From 1beacbcbd55a077e9349d1291e6352cfca0db236 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 30 Jul 2025 09:23:00 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/android-app-pentesting/tapjacking.md' --- .../android-app-pentesting/tapjacking.md | 66 +++++++++++++++---- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/tapjacking.md b/src/mobile-pentesting/android-app-pentesting/tapjacking.md index ca9b861b6..618847217 100644 --- a/src/mobile-pentesting/android-app-pentesting/tapjacking.md +++ b/src/mobile-pentesting/android-app-pentesting/tapjacking.md @@ -5,11 +5,11 @@ ## **Podstawowe informacje** **Tapjacking** to atak, w którym **złośliwa** **aplikacja** jest uruchamiana i **pozycjonuje się na wierzchu aplikacji ofiary**. Gdy widocznie zasłania aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika do interakcji z nią, podczas gdy przekazuje interakcję do aplikacji ofiary.\ -W efekcie, **oślepia użytkownika, uniemożliwiając mu zrozumienie, że faktycznie wykonuje akcje w aplikacji ofiary**. +W efekcie, **oślepia użytkownika, aby nie wiedział, że faktycznie wykonuje akcje w aplikacji ofiary**. ### Wykrywanie -Aby wykryć aplikacje podatne na ten atak, powinieneś szukać **eksportowanych aktywności** w manifeście androida (zauważ, że aktywność z intencją-filtrującą jest automatycznie eksportowana domyślnie). Gdy znajdziesz eksportowane aktywności, **sprawdź, czy wymagają jakichkolwiek uprawnień**. Dzieje się tak, ponieważ **złośliwa aplikacja również będzie potrzebować tych uprawnień**. +Aby wykryć aplikacje podatne na ten atak, należy szukać **eksportowanych aktywności** w manifeście androida (zauważ, że aktywność z intent-filter jest automatycznie eksportowana domyślnie). Gdy znajdziesz eksportowane aktywności, **sprawdź, czy wymagają jakichkolwiek uprawnień**. Dzieje się tak, ponieważ **złośliwa aplikacja również będzie potrzebować tych uprawnień**. Możesz również sprawdzić minimalną wersję SDK aplikacji, sprawdzając wartość **`android:minSdkVersion`** w pliku **`AndroidManifest.xml`**. Jeśli wartość jest **niższa niż 30**, aplikacja jest podatna na Tapjacking. @@ -17,11 +17,11 @@ Możesz również sprawdzić minimalną wersję SDK aplikacji, sprawdzając wart #### Android 12 (API 31,32) i wyższe -[**Zgodnie z tym źródłem**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** ataki tapjacking są automatycznie zapobiegane przez Androida od Androida 12 (API 31 i 30) i wyższych. Tak więc, nawet jeśli aplikacja jest podatna, **nie będziesz w stanie jej wykorzystać**. +[**Zgodnie z tym źródłem**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** ataki tapjacking są automatycznie zapobiegane przez Androida od wersji 12 (API 31 i 30) i wyższych. Tak więc, nawet jeśli aplikacja jest podatna, **nie będziesz w stanie jej wykorzystać**. #### `filterTouchesWhenObscured` -Jeśli **`android:filterTouchesWhenObscured`** jest ustawione na **`true`**, `View` nie otrzyma dotyków, gdy okno widoku jest zasłonięte przez inne widoczne okno. +Jeśli **`android:filterTouchesWhenObscured`** jest ustawione na **`true`**, `View` nie będzie odbierać dotyków, gdy okno widoku jest zasłonięte przez inne widoczne okno. #### **`setFilterTouchesWhenObscured`** @@ -39,26 +39,68 @@ android:filterTouchesWhenObscured="true"> ### Tapjacking-ExportedActivity -Najbardziej **najnowsza aplikacja na Androida** przeprowadzająca atak Tapjacking (+ wywołując przed eksportowaną aktywnością atakowanej aplikacji) znajduje się pod adresem: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity). +Najbardziej **najnowsza aplikacja Android** przeprowadzająca atak Tapjacking (+ wywołanie przed eksportowaną aktywnością zaatakowanej aplikacji) znajduje się pod adresem: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity). -Postępuj zgodnie z **instrukcjami w README, aby z niej skorzystać**. +Postępuj zgodnie z **instrukcjami README, aby z niej skorzystać**. ### FloatingWindowApp -Przykładowy projekt implementujący **FloatingWindowApp**, który można użyć do nałożenia na inne aktywności w celu przeprowadzenia ataku clickjacking, można znaleźć w [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (trochę stary, powodzenia w budowaniu apk). +Przykładowy projekt implementujący **FloatingWindowApp**, który można użyć do umieszczenia na wierzchu innych aktywności w celu przeprowadzenia ataku clickjacking, można znaleźć w [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (trochę stary, powodzenia w budowaniu apk). ### Qark > [!OSTRZEŻENIE] -> Wygląda na to, że ten projekt jest teraz nieutrzymywany i ta funkcjonalność nie działa już poprawnie +> Wygląda na to, że ten projekt nie jest już utrzymywany i ta funkcjonalność nie działa już poprawnie -Możesz użyć [**qark**](https://github.com/linkedin/qark) z parametrami `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk`, aby stworzyć złośliwą aplikację do testowania możliwych **wrażliwości na Tapjacking**.\ +Możesz użyć [**qark**](https://github.com/linkedin/qark) z parametrami `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk`, aby stworzyć złośliwą aplikację do testowania możliwych **vulnerabilities Tapjacking**.\ -Łagodzenie jest stosunkowo proste, ponieważ deweloper może zdecydować, że nie chce odbierać zdarzeń dotykowych, gdy widok jest zasłonięty przez inny. Korzystając z [Dokumentacji dla deweloperów Androida](https://developer.android.com/reference/android/view/View#security): +Ograniczenie jest stosunkowo proste, ponieważ deweloper może zdecydować, że nie chce odbierać zdarzeń dotykowych, gdy widok jest zasłonięty przez inny. Korzystając z [Dokumentacji dla deweloperów Androida](https://developer.android.com/reference/android/view/View#security): -> Czasami istotne jest, aby aplikacja mogła zweryfikować, że akcja jest wykonywana z pełną wiedzą i zgodą użytkownika, na przykład przyznając prośbę o uprawnienia, dokonując zakupu lub klikając w reklamę. Niestety, złośliwa aplikacja mogłaby próbować oszukać użytkownika, aby wykonał te akcje, nieświadomie, ukrywając zamierzony cel widoku. W ramach remediów, framework oferuje mechanizm filtrowania dotyków, który można wykorzystać do poprawy bezpieczeństwa widoków, które zapewniają dostęp do wrażliwej funkcjonalności. +> Czasami istotne jest, aby aplikacja mogła zweryfikować, że akcja jest wykonywana z pełną wiedzą i zgodą użytkownika, na przykład przyznawanie prośby o uprawnienia, dokonywanie zakupu lub klikanie w reklamę. Niestety, złośliwa aplikacja mogłaby próbować oszukać użytkownika, aby wykonał te akcje, nieświadomie, ukrywając zamierzony cel widoku. W ramach rozwiązania, framework oferuje mechanizm filtrowania dotyków, który można wykorzystać do poprawy bezpieczeństwa widoków, które zapewniają dostęp do wrażliwej funkcjonalności. > -> Aby włączyć filtrowanie dotyków, wywołaj [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) lub ustaw atrybut layout android:filterTouchesWhenObscured na true. Po włączeniu framework odrzuci dotyki, które są odbierane, gdy okno widoku jest zasłonięte przez inne widoczne okno. W rezultacie widok nie otrzyma dotyków, gdy nad oknem widoku pojawi się toast, dialog lub inne okno. +> Aby włączyć filtrowanie dotyków, wywołaj [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) lub ustaw atrybut layout android:filterTouchesWhenObscured na true. Po włączeniu, framework odrzuci dotyki, które są odbierane, gdy okno widoku jest zasłonięte przez inne widoczne okno. W rezultacie widok nie otrzyma dotyków, gdy nad oknem widoku pojawi się toast, dialog lub inne okno. +--- + +## Phishing przez nakładkę dostępności (wariant trojana bankowego) + +Oprócz klasycznego Tapjacking, nowoczesne rodziny złośliwego oprogramowania bankowego na Androida (np. **ToxicPanda**, BrasDex, Sova itp.) nadużywają **Usługi dostępności**, aby umieścić pełnoekranową nakładkę WebView **nad** legalną aplikacją, jednocześnie będąc w stanie **przekazywać dane wejściowe użytkownika** do widoku poniżej. Zwiększa to dramatycznie wiarygodność i pozwala atakującym na kradzież danych uwierzytelniających, OTP lub nawet automatyzację oszukańczych transakcji. + +### Jak to działa +1. Złośliwy APK żąda wysoce wrażliwego uprawnienia `BIND_ACCESSIBILITY_SERVICE`, zazwyczaj ukrywając prośbę za fałszywym dialogiem Google/Chrome/podglądu PDF. +2. Gdy użytkownik włączy usługę, złośliwe oprogramowanie programowo symuluje dotknięcia wymagane do przyznania dodatkowych niebezpiecznych uprawnień (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …). +3. **WebView** jest inflatowane i dodawane do menedżera okien przy użyciu typu okna **`TYPE_ACCESSIBILITY_OVERLAY`**. Nakładka może być renderowana całkowicie nieprzezroczysta lub półprzezroczysta i może być oznaczona jako *„przez”*, aby oryginalne dotknięcia były nadal dostarczane do aktywności w tle (w ten sposób transakcja naprawdę się odbywa, podczas gdy ofiara widzi tylko formularz phishingowy). +```java +WebView phishingView = new WebView(getApplicationContext()); +phishingView.getSettings().setJavaScriptEnabled(true); +phishingView.loadUrl("file:///android_asset/bank_login.html"); + +WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); +WindowManager.LayoutParams lp = new WindowManager.LayoutParams( +WindowManager.LayoutParams.MATCH_PARENT, +WindowManager.LayoutParams.MATCH_PARENT, +WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY, // <-- bypasses SYSTEM_ALERT_WINDOW prompt +WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | +WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, // «through» flag → forward touches +PixelFormat.TRANSLUCENT); +wm.addView(phishingView, lp); +``` +### Typowy workflow używany przez trojany bankowe +* Zapytaj o zainstalowane pakiety (`QUERY_ALL_PACKAGES`), aby dowiedzieć się, która aplikacja bankowa / portfelowa jest aktualnie otwarta. +* Pobierz **szablon nakładki HTML/JS** z C2, który doskonale imituje tę konkretną aplikację (logo, kolory, ciągi i18n…). +* Wyświetl nakładkę, zbierz dane logowania/PIN/wzór. +* Użyj **API dostępności** (`performGlobalAction`, `GestureDescription`), aby zautomatyzować transfery w tle. + +### Wykrywanie i łagodzenie +* Audytuj listę zainstalowanych aplikacji za pomocą `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`. +* Z perspektywy aplikacji (bank / portfel): +- Włącz **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) na wrażliwych widokach, aby zablokować usługi spoza Sklepu Play. +- Połącz z `setFilterTouchesWhenObscured(true)` i `FLAG_SECURE`. +* Utwardzanie systemu: +- Wyłącz *Instalowanie z nieznanych źródeł* i *Dostępność dla nieznanych aplikacji*. +- Wymuś PlayProtect i aktualne urządzenia. + +## Referencje +* [Bitsight – ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study) {{#include ../../banners/hacktricks-training.md}}