Tapjacking
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
Tapjacking ist ein Angriff, bei dem eine bösartige application gestartet wird und sich über einer victim application positioniert. Sobald sie die victim app sichtbar überdeckt, ist ihre Benutzeroberfläche so gestaltet, dass der Benutzer dazu verleitet wird, mit ihr zu interagieren, während die Interaktion an die victim app weitergereicht wird.
Effektiv wird der Benutzer daran gehindert zu erkennen, dass er tatsächlich Aktionen in der victim app ausführt.
Erkennung
- Suche nach exported activities im Android-Manifest (eine activity mit einem intent-filter ist standardmäßig exported). Wenn eine exported activity durch eine permission geschützt ist, benötigt die angreifende app die gleiche permission, was die Ausnutzbarkeit einschränkt.
- Prüfe die minimum SDK-Version
android:minSdkVersioninAndroidManifest.xml. Ist sie niedriger als 30, können ältere Standardverhalten tapjacking leichter ausnutzbar machen. - Zur Laufzeit
logcatverwenden, um blockierte Touches auf Android 12+ zu erkennen: Das System loggtUntrusted touch due to occlusion by <package>, wenn Overlays gefiltert werden.
Schutz
Android 12+ default blocking & compat flags
Android 12 (API 31) führte “Block untrusted touches” ein: Touches, die von einem anderen UID-Fenster des Typs TYPE_APPLICATION_OVERLAY (opacity ≥0.8) stammen, werden verworfen. Dies ist standardmäßig aktiviert. Während Tests kann man es umschalten:
# disable blocking for a specific package (for PoC crafting)
adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.victim
# re‑enable
adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.victim
Vertrauenswürdige Fenster (accessibility, IME, assistant) erhalten weiterhin Ereignisse. Unsichtbare oder vollständig transparente Overlays umgehen ebenfalls die Blockierung; Angreifer versuchen dies auszunutzen, indem sie alpha < 0.8 beibehalten.
Umgang mit teilweiser Verdeckung
Teilweise Overlays, die den Zielbereich sichtbar lassen, werden nicht automatisch blockiert. Mindern Sie dies in sensiblen Ansichten, indem Sie Ereignisse mit dem FLAG_WINDOW_IS_PARTIALLY_OBSCURED-Flag ablehnen:
@Override
public boolean onFilterTouchEventForSecurity(MotionEvent event) {
if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0) {
return false; // drop tap when anything partially obscures us
}
return super.onFilterTouchEventForSecurity(event);
}
filterTouchesWhenObscured
Wenn android:filterTouchesWhenObscured auf true gesetzt ist, erhält die View keine Touch-Ereignisse, sobald das Fenster der View von einem anderen sichtbaren Fenster überdeckt wird.
setFilterTouchesWhenObscured
Das Attribut setFilterTouchesWhenObscured, auf true gesetzt, kann die Ausnutzung dieser Schwachstelle ebenfalls verhindern, falls die Android-Version älter ist.
Wenn auf true gesetzt, kann beispielsweise ein Button automatisch deaktiviert werden, wenn er überdeckt ist:
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
Ausnutzung
Tapjacking-ExportedActivity
Die aktuellste Android application, die einen Tapjacking-Angriff durchführt (+ vorher ein exported activity der angegriffenen Anwendung aufruft), ist zu finden unter: https://github.com/carlospolop/Tapjacking-ExportedActivity.
Folgen Sie den README-Anweisungen zur Nutzung.
FloatingWindowApp
Ein Beispielprojekt, das FloatingWindowApp implementiert und dazu verwendet werden kann, über anderen Activities platziert zu werden, um einen Clickjacking-Angriff durchzuführen, ist zu finden in FloatingWindowApp (etwas alt, viel Erfolg beim Bauen der apk).
Qark
Caution
Es scheint, dass dieses Projekt inzwischen unmaintained ist und diese Funktionalität nicht mehr richtig funktioniert
Sie können qark mit den Parametern --exploit-apk –sdk-path /Users/username/Library/Android/sdk verwenden, um eine bösartige Anwendung zu erstellen, mit der Sie auf mögliche Tapjacking-Schwachstellen testen können.\
Die Mitigation ist relativ einfach, da der Entwickler wählen kann, keine Touch-Events zu empfangen, wenn eine View von einer anderen verdeckt wird. Unter Verwendung der Android Developer’s Reference:
Manchmal ist es wichtig, dass eine Anwendung überprüfen kann, ob eine Aktion mit vollem Wissen und Einverständnis des Benutzers ausgeführt wird, wie z. B. das Gewähren einer Berechtigungsanfrage, ein Kauf oder das Klicken auf eine Anzeige. Leider könnte eine bösartige Anwendung versuchen, den Benutzer dazu zu bringen, diese Aktionen unwissentlich auszuführen, indem sie den beabsichtigten Zweck der View verschleiert. Als Abhilfe bietet das Framework einen Touch-Filter-Mechanismus, der verwendet werden kann, um die Sicherheit von Views zu verbessern, die Zugriff auf sensible Funktionalität bieten.
Um Touch-Filtering zu aktivieren, rufen Sie
setFilterTouchesWhenObscured(boolean)auf oder setzen Sie das android:filterTouchesWhenObscured Layout-Attribut auf true. Wenn aktiviert, verwirft das Framework Berührungen, die empfangen werden, wann immer das Fenster der View von einem anderen sichtbaren Fenster verdeckt wird. Als Ergebnis erhält die View keine Berührungen, wann immer ein Toast, Dialog oder ein anderes Fenster über dem Fenster der View erscheint.
Recent overlay-based malware techniques
- Hook/Ermac variants verwenden nahezu transparente Overlays (z. B. gefälschte NFC-Prompts), um Gesten und Lock-Screen-PINs zu erfassen und gleichzeitig die Touches darunter weiterzuleiten, ausgeliefert über Accessibility-ATS modules.
- Anatsa/TeaBot droppers liefern Overlays für Hunderte von Banking-/Crypto-Apps und zeigen vollbildige “maintenance”-Overlays, um Opfer aufzuhalten, während ATS Transfers abschließt.
- Hidden-VNC banking RATs zeigen kurz Phishing-Overlays an, um Zugangsdaten zu erfassen, und verlassen sich dann auf covert VNC plus Accessibility, um Taps mit weniger Artefakten auf dem Gerät wiederzugeben.
Praktische Erkenntnis für Red Teams: mixen Sie ein alpha < 0.8 Overlay, um das Blocking in Android 12 zu umgehen, und eskalieren Sie dann zu einem Full-Screen accessibility Overlay, sobald der Nutzer den Service aktiviert. Instrumentieren Sie GestureDescription oder ein headless VNC, um die Kontrolle zu behalten, nachdem die Zugangsdaten erfasst wurden.
Accessibility Overlay Phishing (Banking-Trojan Variant)
Neben klassischem Tapjacking missbrauchen moderne Android-Banking-Malware-Familien (z. B. ToxicPanda, BrasDex, Sova, etc.) den Accessibility Service, um ein vollflächiges WebView overlay über der legitimen Anwendung zu platzieren und gleichzeitig weiterhin die Fähigkeit zu haben, die Benutzereingabe weiterzuleiten an die darunterliegende View. Dies erhöht die Glaubwürdigkeit dramatisch und ermöglicht es Angreifern, Zugangsdaten, OTPs zu stehlen oder sogar betrügerische Transaktionen zu automatisieren.
Wie es funktioniert
- Die bösartige APK fordert die hochsensible Berechtigung
BIND_ACCESSIBILITY_SERVICEan, meist verborgen hinter einem gefälschten Google/Chrome/PDF-Viewer-Dialog. - Sobald der Benutzer den Service aktiviert, simuliert die Malware programmgesteuert die erforderlichen Taps, um weitere gefährliche Berechtigungen zu gewähren (
READ_SMS,SYSTEM_ALERT_WINDOW,REQUEST_INSTALL_PACKAGES, …). - Ein WebView wird aufgeblasen und dem Window Manager mit dem Window-Typ
TYPE_ACCESSIBILITY_OVERLAYhinzugefügt. Das Overlay kann vollkommen undurchsichtig oder halbtransparent gerendert werden und kann als “through” markiert werden, sodass die ursprünglichen Touches weiterhin an die Hintergrund-Activity geliefert werden (die Transaktion findet somit wirklich statt, während das Opfer nur das Phishing-Formular sieht).
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 Ablauf, der von banking Trojans verwendet wird
- Installierte Pakete abfragen (
QUERY_ALL_PACKAGES), um herauszufinden, welche banking / wallet app gerade geöffnet ist. - Lade eine HTML/JS overlay template vom C2 herunter, die diese spezifische Anwendung perfekt nachahmt (Logo, colours, i18n strings…).
- Zeige das Overlay an, sammle credentials/PIN/pattern.
- Nutze die Accessibility API (
performGlobalAction,GestureDescription), um Überweisungen im Hintergrund zu automatisieren.
Erkennung & Gegenmaßnahmen
- Prüfe die Liste der installierten Apps mit
adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE. - Auf Anwendungsebene (bank / wallet):
- Aktiviere
android:accessibilityDataSensitive="accessibilityDataPrivateYes"(Android 14+) auf sensiblen Views, um non-Play-Store services zu blockieren. - Kombiniere mit
setFilterTouchesWhenObscured(true)undFLAG_SECURE.
Für zusätzliche Details zur Nutzung von Accessibility Services für vollständige Remote-Gerätesteuerung (z. B. PlayPraetor, SpyNote, etc.) siehe:
References
- Android Developers – Tapjacking risk & mitigations (updated 2024)
- Zimperium – HOOK v3 overlay expansion (Aug 2025)
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


