114 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tapjacking
{{#include ../../banners/hacktricks-training.md}}
## **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, 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 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.
### Ochrona
#### 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 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 będzie odbierać dotyków, gdy okno widoku jest zasłonięte przez inne widoczne okno.
#### **`setFilterTouchesWhenObscured`**
Atrybut **`setFilterTouchesWhenObscured`** ustawiony na true może również zapobiec wykorzystaniu tej podatności, jeśli wersja Androida jest niższa.\
Jeśli ustawione na **`true`**, na przykład, przycisk może być automatycznie **wyłączony, jeśli jest zasłonięty**:
```xml
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
```
## Eksploatacja
### Tapjacking-ExportedActivity
Najbardziej **najnowsza aplikacja na Androida** wykonująca atak Tapjacking (+ wywołanie przed eksportowaną aktywnością zaatakowanej aplikacji) można znaleźć w: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
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).
### Qark
> [!OSTRZEŻENIE]
> 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 **vulnerabilities Tapjacking**.\
Mitigacja jest stosunkowo prosta, 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 uprawnienie, 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 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.
---
## Phishing przez nakładkę dostępności (wariant Banking-Trojan)
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łnoekranowy WebView **nakładkę** 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/PDF-viewer.
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.
Aby uzyskać dodatkowe szczegóły dotyczące wykorzystania usług dostępności do pełnej zdalnej kontroli urządzenia (np. PlayPraetor, SpyNote itp.), zobacz:
{{#ref}}
accessibility-services-abuse.md
{{#endref}}
## Odniesienia
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
{{#include ../../banners/hacktricks-training.md}}