mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/tapjacking.md'
This commit is contained in:
parent
702bdbb347
commit
1beacbcbd5
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user