OWASP-Kategorie: MASVS-PLATFORM: Platform Interaction
Übersicht
Tapjacking ist das Android-App-Äquivalent zur Clickjacking-Web-Sicherheitslücke: Eine schädliche App verleitet den Nutzer dazu, auf ein sicherheitsrelevantes Steuerelement (Bestätigungsschaltfläche usw.) zu klicken, indem sie die Benutzeroberfläche mit einem Overlay oder auf andere Weise verdeckt. Auf dieser Seite unterscheiden wir zwei Angriffsvarianten: vollständige und teilweise Verdeckung. Bei einer vollständigen Verdeckung überlagert der Angreifer den Touchbereich, während der Touchbereich bei einer teilweisen Verdeckung sichtbar bleibt.
Auswirkungen
Tapjacking-Angriffe werden verwendet, um Nutzer dazu zu bringen, bestimmte Aktionen auszuführen. Die Auswirkungen hängen von der Aktion ab, die der Angreifer ausführen möchte.
Risiko: Vollständige Verdeckung
Bei einer vollständigen Verdeckung überlagert der Angreifer den Touch-Bereich, um das Touch-Event abzufangen:

Maßnahmen zur Risikominderung
Eine vollständige Verdeckung wird verhindert, indem im Code View.setFilterTouchesWhenObscured(true) festgelegt wird. Dadurch werden Berührungen blockiert, die über ein Overlay weitergegeben werden. Wenn Sie einen deklarativen Ansatz bevorzugen, können Sie android:filterTouchesWhenObscured="true" auch in der Layoutdatei für das View-Objekt hinzufügen, das Sie schützen möchten.
Risiko: Teilweise Verdeckung
Bei Angriffen mit teilweiser Verdeckung bleibt der Berührungsbereich unverdeckt:

Maßnahmen zur Risikominderung
Sie können die teilweise Verdeckung minimieren, indem Sie Touch-Events mit dem Flag FLAG_WINDOW_IS_PARTIALLY_OBSCURED manuell ignorieren. Es gibt keine Standardschutzmaßnahmen gegen dieses Szenario.
Android 14 und accessibilityDataSensitive: Unter Android 14 (API-Level 34) und höher können Sie das Flag accessibilityDataSensitive verwenden, um sensible Daten vor schädlichen Bedienungshilfen zu schützen. Wenn Sie dieses Flag für vertrauliche Ansichten wie Anmelde- oder Transaktionsbestätigungsbildschirme festlegen, können nur Dienste, die android:isAccessibilityTool="true" deklarieren, die Daten der Ansicht lesen oder Bedienungshilfen-Aktionen darauf ausführen. Unter Android 16 (API-Level 36) und höher blockiert accessibilityDataSensitive auch simulierte Touch-Gesten, die mit AccessibilityService.dispatchGesture von Diensten eingefügt werden, die android:isAccessibilityTool="true" nicht deklarieren. Dies bietet Schutz auf Systemebene vor Abhör- und Click-Injection-Angriffen, die für Szenarien mit teilweiser Verdeckung typisch sind. Sie können accessibilityDataSensitive implizit aktivieren, indem Sie android:filterTouchesWhenObscured="true" in Ihren Layoutdateien angeben.
Spezifische Risiken
In diesem Abschnitt werden Risiken aufgeführt, die nicht standardmäßige Strategien zur Risikominimierung erfordern oder auf einer bestimmten SDK-Ebene minimiert wurden. Sie werden hier der Vollständigkeit halber aufgeführt.
Risiko: android.Manifest.permission.SYSTEM_ALERT_WINDOW
Mit der Berechtigung SYSTEM_ALERT_WINDOW kann eine App ein Fenster erstellen, das über allen Apps angezeigt wird.
Maßnahmen zur Risikominderung
In neueren Android-Versionen wurden mehrere Maßnahmen zur Risikominderung eingeführt, darunter:
- Unter Android 6 (API-Level 23) und höher müssen Nutzer der App explizit die Berechtigung erteilen, ein Overlay-Fenster zu erstellen.
- Unter Android 12 (API-Level 31) und höher können Apps
trueanWindow.setHideOverlayWindows()übergeben.
Risiko: Benutzerdefinierter Toast
Ein Angreifer kann Toast.setView() verwenden, um das Erscheinungsbild einer Toast-Nachricht anzupassen. Unter Android 10 (API-Level 29) und niedriger konnten schädliche Apps solche Toasts im Hintergrund starten.
Maßnahmen zur Risikominderung
Wenn eine App auf Android 11 (API-Level 30) oder höher ausgerichtet ist, blockiert das System benutzerdefinierte Toasts im Hintergrund. Diese Maßnahme kann jedoch unter bestimmten Umständen mithilfe von Toast Burst umgangen werden. Dabei stellt der Angreifer mehrere Toasts in die Warteschlange, während er sich im Vordergrund befindet, und diese werden auch dann noch gestartet, wenn eine App in den Hintergrund wechselt.
Hintergrund-Toasts und Toast-Burst-Angriffe werden ab Android 12 (API-Level 31) vollständig abgewehrt.
Risiko: Aktivitäts-Sandwich
Wenn eine schädliche App einen Nutzer dazu bringt, sie zu öffnen, kann sie trotzdem eine Aktivität aus der Opfer-App starten und diese anschließend mit ihrer eigenen Aktivität überlagern. Dadurch entsteht ein Aktivitäts-Sandwich und ein Angriff mit teilweiser Verdeckung.
Maßnahmen zur Risikominderung
Allgemeine Maßnahmen zur Behebung von Problemen mit teilweiser Verdeckung Achten Sie im Rahmen der Defense in Depth darauf, dass Sie keine Aktivitäten exportieren, die nicht exportiert werden müssen, um zu verhindern, dass ein Angreifer sie in einen Sandwich-Angriff einbezieht.
Ressourcen
Änderungen an der Ziel-API-Level-Richtlinie im Google Play Store
UI-Redressing und Android-Angriffe, die auf Bedienungshilfen basieren
Empfehlungen für Sie
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- android:exported
- # Schlüsselverwaltung {:#key-management}
- Eingebetteten DEX-Code direkt aus dem APK ausführen