Tapjacking
Reading time: 6 minutes
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.
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.
In der Tat blindet es den Benutzer, sodass er nicht weiß, dass er tatsächlich Aktionen in der Opfer-App ausführt.
Erkennung
Um Apps zu erkennen, die anfällig für diesen Angriff sind, sollten Sie nach exportierten Aktivitäten im Android-Manifest suchen (beachten Sie, dass eine Aktivität mit einem Intent-Filter standardmäßig automatisch exportiert wird). Sobald Sie die exportierten Aktivitäten gefunden haben, prüfen Sie, ob sie Berechtigungen benötigen. Dies liegt daran, dass die bösartige Anwendung auch diese Berechtigung benötigt.
Sie können auch die minimale SDK-Version der App überprüfen, indem Sie den Wert von android:minSdkVersion
in der AndroidManifest.xml
-Datei überprüfen. Wenn der Wert unter 30 liegt, ist die App anfällig für Tapjacking.
Schutz
Android 12 (API 31,32) und höher
Laut dieser Quelle, werden Tapjacking-Angriffe von Android ab Android 12 (API 31 & 30) und höher automatisch verhindert. Selbst wenn die Anwendung anfällig ist, werden Sie sie nicht ausnutzen können.
filterTouchesWhenObscured
Wenn android:filterTouchesWhenObscured
auf true
gesetzt ist, erhält die View
keine Berührungen, wenn das Fenster der Ansicht von einem anderen sichtbaren Fenster verdeckt wird.
setFilterTouchesWhenObscured
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:
<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-Anwendung, die einen Tapjacking-Angriff durchführt (+ Aufruf vor einer exportierten Aktivität der angegriffenen Anwendung), ist zu finden unter: https://github.com/carlospolop/Tapjacking-ExportedActivity.
Befolgen Sie die README-Anweisungen zur Verwendung.
FloatingWindowApp
Ein Beispielprojekt, das FloatingWindowApp implementiert, welches verwendet werden kann, um über anderen Aktivitäten zu liegen und einen Clickjacking-Angriff durchzuführen, ist zu finden unter FloatingWindowApp (ein bisschen alt, viel Glück beim Erstellen der apk).
Qark
caution
Es scheint, dass dieses Projekt jetzt nicht mehr gewartet wird 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, um mögliche Tapjacking-Schwachstellen zu testen.\
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 Developer’s Reference:
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 durchzufü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)
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
- 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. - 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
, …). - 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).
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 gerade 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 befindliche Dienste zu blockieren. - Kombinieren Sie dies mit
setFilterTouchesWhenObscured(true)
undFLAG_SECURE
.
- Systemhärtung:
- Deaktivieren Sie Installieren von unbekannten Quellen & Zugänglichkeit für nicht vertrauenswürdige Apps.
- Erzwingen Sie PlayProtect & aktuelle Geräte.
Für weitere Details zur Nutzung von Accessibility Services für die vollständige Fernsteuerung von Geräten (z. B. PlayPraetor, SpyNote usw.) siehe:
Referenzen
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.