Translated ['src/mobile-pentesting/android-app-pentesting/tapjacking.md'

This commit is contained in:
Translator 2025-07-30 08:28:09 +00:00
parent 63974b8e55
commit 7eed5e6c9a

View File

@ -4,7 +4,7 @@
## **Grundinformationen**
**Tapjacking** ist ein Angriff, bei dem eine **bösartige** **Anwendung** gestartet wird und sich **oberhalb einer Opferanwendung positioniert**. Sobald sie die Opfer-App sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu verleitet, mit ihr zu interagieren, während sie die Interaktion an die Opfer-App weiterleitet.\
**Tapjacking** ist ein Angriff, bei dem eine **bösartige** **Anwendung** gestartet wird und sich **über einer Opferanwendung positioniert**. Sobald sie die Opfer-App sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu verleitet, mit ihr zu interagieren, während sie die Interaktion an die Opfer-App weiterleitet.\
In der Tat **blindet es den Benutzer, sodass er nicht weiß, dass er tatsächlich Aktionen in der Opfer-App ausführt**.
### Erkennung
@ -25,7 +25,7 @@ Wenn **`android:filterTouchesWhenObscured`** auf **`true`** gesetzt ist, erhält
#### **`setFilterTouchesWhenObscured`**
Das Attribut **`setFilterTouchesWhenObscured`** kann ebenfalls verhindern, dass diese Schwachstelle ausgenutzt wird, wenn die Android-Version niedriger ist.\
Das Attribut **`setFilterTouchesWhenObscured`**, das auf true gesetzt ist, kann auch die Ausnutzung dieser Schwachstelle verhindern, wenn die Android-Version niedriger ist.\
Wenn es auf **`true`** gesetzt ist, kann beispielsweise ein Button automatisch **deaktiviert werden, wenn er verdeckt ist**:
```xml
<Button android:text="Button"
@ -56,9 +56,51 @@ Sie können [**qark**](https://github.com/linkedin/qark) mit den Parametern `--e
Die Minderung ist relativ einfach, da der Entwickler wählen kann, ob er keine Touch-Ereignisse empfangen möchte, wenn eine Ansicht von einer anderen überdeckt wird. Mit dem [Android Developers Reference](https://developer.android.com/reference/android/view/View#security):
> Manchmal ist es wichtig, dass eine Anwendung überprüfen kann, dass eine Aktion mit vollem Wissen und Einverständnis des Benutzers durchgeführt wird, wie z.B. das Gewähren einer Berechtigungsanfrage, das Tätigen eines Kaufs oder das Klicken auf eine Werbung. Leider könnte eine bösartige Anwendung versuchen, den Benutzer zu täuschen, diese Aktionen unwissentlich auszuführen, indem sie den beabsichtigten Zweck der Ansicht verbirgt. Als Abhilfe bietet das Framework einen Touch-Filtermechanismus, der verwendet werden kann, um die Sicherheit von Ansichten zu verbessern, die Zugriff auf sensible Funktionen bieten.
> Manchmal ist es wichtig, dass eine Anwendung überprüfen kann, dass eine Aktion mit vollem Wissen und Einverständnis des Benutzers durchgeführt wird, wie z.B. das Gewähren einer Berechtigungsanfrage, das Tätigen eines Kaufs oder das Klicken auf eine Werbung. Leider könnte eine bösartige Anwendung versuchen, den Benutzer zu täuschen, diese Aktionen unwissentlich auszuführen, indem sie den beabsichtigten Zweck der Ansicht verbirgt. Als Abhilfe bietet das Framework einen Touch-Filtermechanismus, der verwendet werden kann, um die Sicherheit von Ansichten zu verbessern, die Zugang zu sensibler Funktionalität bieten.
>
> Um die Touch-Filterung zu aktivieren, rufen Sie [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) auf oder setzen Sie das Layoutattribut android:filterTouchesWhenObscured auf true. Wenn aktiviert, wird das Framework Berührungen ignorieren, die empfangen werden, wenn das Fenster der Ansicht von einem anderen sichtbaren Fenster überdeckt wird. Infolgedessen erhält die Ansicht keine Berührungen, wenn ein Toast, Dialog oder ein anderes Fenster über dem Fenster der Ansicht erscheint.
> Um die Touch-Filterung zu aktivieren, rufen Sie [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) auf oder setzen Sie das Layoutattribut android:filterTouchesWhenObscured auf true. Wenn aktiviert, verwirft das Framework Berührungen, die empfangen werden, wenn das Fenster der Ansicht von einem anderen sichtbaren Fenster überdeckt wird. Infolgedessen erhält die Ansicht keine Berührungen, wenn ein Toast, Dialog oder ein anderes Fenster über dem Fenster der Ansicht erscheint.
---
## Accessibility Overlay Phishing (Banking-Trojan-Variante)
Neben klassischem Tapjacking missbrauchen moderne Android-Banking-Malware-Familien (z.B. **ToxicPanda**, BrasDex, Sova usw.) den **Accessibility Service**, um ein vollflächiges WebView-**Overlay** über der legitimen Anwendung zu platzieren, während sie weiterhin in der Lage sind, die **Benutzereingaben** an die darunterliegende Ansicht weiterzuleiten. Dies erhöht die Glaubwürdigkeit erheblich und ermöglicht es Angreifern, Anmeldeinformationen, OTPs oder sogar betrügerische Transaktionen zu stehlen.
### Wie es funktioniert
1. Die bösartige APK fordert die hochsensiblen Berechtigungen `BIND_ACCESSIBILITY_SERVICE` an, wobei die Anfrage normalerweise hinter einem gefälschten Google/Chrome/PDF-Viewer-Dialog verborgen wird.
2. Sobald der Benutzer den Dienst aktiviert, simuliert die Malware programmgesteuert die erforderlichen Taps, um zusätzliche gefährliche Berechtigungen zu gewähren (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
3. Ein **WebView** wird erstellt und dem Fenster-Manager mit dem **`TYPE_ACCESSIBILITY_OVERLAY`** Fenstertyp hinzugefügt. Das Overlay kann völlig undurchsichtig oder halbtransparent gerendert werden und kann als *„durch“* gekennzeichnet werden, sodass die ursprünglichen Berührungen weiterhin an die Hintergrundaktivität weitergeleitet werden (so findet die Transaktion tatsächlich statt, während das Opfer nur das Phishing-Formular sieht).
```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);
```
### Typischer Workflow von Banking-Trojanern
* Abfrage installierter Pakete (`QUERY_ALL_PACKAGES`), um herauszufinden, welche Banking-/Wallet-App derzeit geöffnet ist.
* Laden Sie eine **HTML/JS-Overlay-Vorlage** vom C2 herunter, die diese spezifische Anwendung perfekt imitiert (Logo, Farben, i18n-Strings…).
* Overlay anzeigen, Anmeldeinformationen/PIN/Muster erfassen.
* Verwenden Sie die **Accessibility API** (`performGlobalAction`, `GestureDescription`), um Überweisungen im Hintergrund zu automatisieren.
### Erkennung & Minderung
* Überprüfen Sie die Liste der installierten Apps mit `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
* Von der Anwendungsseite (Bank/Wallet):
- Aktivieren Sie **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) für sensible Ansichten, um nicht im Play Store verfügbare Dienste zu blockieren.
- Kombinieren Sie dies mit `setFilterTouchesWhenObscured(true)` und `FLAG_SECURE`.
* Systemhärtung:
- Deaktivieren Sie *Installieren von unbekannten Quellen* & *Zugänglichkeit für nicht vertrauenswürdige Apps*.
- Durchsetzen von PlayProtect & aktuellen Geräten.
## Referenzen
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
{{#include ../../banners/hacktricks-training.md}}