Tapjacking

Reading time: 7 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Tapjacking est une attaque oĂč une application malveillante est lancĂ©e et se positionne au-dessus d'une application victime. Une fois qu'elle obscurcit visiblement l'application victime, son interface utilisateur est conçue de maniĂšre Ă  tromper l'utilisateur pour qu'il interagisse avec elle, tout en transmettant l'interaction Ă  l'application victime.
En effet, cela aveugle l'utilisateur sur le fait qu'il effectue réellement des actions sur l'application victime.

Détection

Pour détecter les applications vulnérables à cette attaque, vous devez rechercher des activités exportées dans le manifeste android (notez qu'une activité avec un intent-filter est automatiquement exportée par défaut). Une fois que vous avez trouvé les activités exportées, vérifiez si elles nécessitent une permission. Cela est dû au fait que l'application malveillante aura également besoin de cette permission.

Vous pouvez également vérifier la version SDK minimale de l'application, en vérifiant la valeur de android:minSdkVersion dans le fichier AndroidManifest.xml. Si la valeur est inférieure à 30, l'application est vulnérable au Tapjacking.

Protection

Android 12 (API 31,32) et supérieur

Selon cette source, les attaques de tapjacking sont automatiquement empĂȘchĂ©es par Android Ă  partir d'Android 12 (API 31 & 30) et supĂ©rieur. Donc, mĂȘme si l'application est vulnĂ©rable, vous ne pourrez pas l'exploiter.

filterTouchesWhenObscured

Si android:filterTouchesWhenObscured est dĂ©fini sur true, la View ne recevra pas de touches chaque fois que la fenĂȘtre de la vue est obscurcie par une autre fenĂȘtre visible.

setFilterTouchesWhenObscured

L'attribut setFilterTouchesWhenObscured dĂ©fini sur true peut Ă©galement empĂȘcher l'exploitation de cette vulnĂ©rabilitĂ© si la version d'Android est infĂ©rieure.
S'il est dĂ©fini sur true, par exemple, un bouton peut ĂȘtre automatiquement dĂ©sactivĂ© s'il est obscurci :

xml
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>

Exploitation

Tapjacking-ExportedActivity

La derniĂšre application Android effectuant une attaque Tapjacking (+ invocation avant une activitĂ© exportĂ©e de l'application attaquĂ©e) peut ĂȘtre trouvĂ©e ici : https://github.com/carlospolop/Tapjacking-ExportedActivity.

Suivez les instructions du README pour l'utiliser.

FloatingWindowApp

Un projet exemple implĂ©mentant FloatingWindowApp, qui peut ĂȘtre utilisĂ© pour se superposer Ă  d'autres activitĂ©s afin d'effectuer une attaque clickjacking, peut ĂȘtre trouvĂ© dans FloatingWindowApp (un peu ancien, bonne chance pour construire l'apk).

Qark

caution

Il semble que ce projet ne soit plus maintenu et que cette fonctionnalité ne fonctionne plus correctement

Vous pouvez utiliser qark avec les paramÚtres --exploit-apk --sdk-path /Users/username/Library/Android/sdk pour créer une application malveillante afin de tester les éventuelles vulnérabilités de Tapjacking.\

L'atténuation est relativement simple car le développeur peut choisir de ne pas recevoir d'événements tactiles lorsqu'une vue est recouverte par une autre. En utilisant la Référence des développeurs Android:

Parfois, il est essentiel qu'une application puisse vĂ©rifier qu'une action est effectuĂ©e avec la pleine connaissance et le consentement de l'utilisateur, comme accorder une demande de permission, effectuer un achat ou cliquer sur une publicitĂ©. Malheureusement, une application malveillante pourrait essayer de tromper l'utilisateur pour qu'il effectue ces actions, Ă  son insu, en dissimulant le but prĂ©vu de la vue. En remĂšde, le framework offre un mĂ©canisme de filtrage des touches qui peut ĂȘtre utilisĂ© pour amĂ©liorer la sĂ©curitĂ© des vues qui fournissent un accĂšs Ă  des fonctionnalitĂ©s sensibles.

Pour activer le filtrage des touches, appelez setFilterTouchesWhenObscured(boolean) ou dĂ©finissez l'attribut de mise en page android:filterTouchesWhenObscured sur true. Lorsqu'il est activĂ©, le framework rejettera les touches reçues chaque fois que la fenĂȘtre de la vue est obscurcie par une autre fenĂȘtre visible. En consĂ©quence, la vue ne recevra pas de touches chaque fois qu'un toast, un dialogue ou une autre fenĂȘtre apparaĂźt au-dessus de la fenĂȘtre de la vue.


Phishing par superposition d'accessibilité (variante de Trojan bancaire)

En plus du Tapjacking classique, les familles de logiciels malveillants bancaires Android modernes (par exemple, ToxicPanda, BrasDex, Sova, etc.) abusent du Service d'accessibilitĂ© pour placer une superposition WebView en plein Ă©cran au-dessus de l'application lĂ©gitime tout en Ă©tant capable de transmettre l'entrĂ©e utilisateur Ă  la vue en dessous. Cela augmente considĂ©rablement la crĂ©dibilitĂ© et permet aux attaquants de voler des identifiants, des OTP ou mĂȘme d'automatiser des transactions frauduleuses.

Comment ça fonctionne

  1. L'APK malveillant demande la permission trÚs sensible BIND_ACCESSIBILITY_SERVICE, cachant généralement la demande derriÚre un faux dialogue Google/Chrome/visualiseur PDF.
  2. Une fois que l'utilisateur active le service, le logiciel malveillant simule programmatique les taps nécessaires pour accorder des permissions supplémentaires dangereuses (READ_SMS, SYSTEM_ALERT_WINDOW, REQUEST_INSTALL_PACKAGES, 
).
  3. Un WebView est gonflĂ© et ajoutĂ© au gestionnaire de fenĂȘtres en utilisant le type de fenĂȘtre TYPE_ACCESSIBILITY_OVERLAY. La superposition peut ĂȘtre rendue totalement opaque ou semi-transparente et peut ĂȘtre marquĂ©e comme “à travers” afin que les touches d'origine soient toujours livrĂ©es Ă  l'activitĂ© en arriĂšre-plan (ainsi la transaction se produit rĂ©ellement pendant que la victime ne voit que le formulaire de phishing).
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);

Workflow typique utilisé par les chevaux de Troie bancaires

  • Interroger les packages installĂ©s (QUERY_ALL_PACKAGES) pour dĂ©terminer quelle application bancaire / portefeuille est actuellement ouverte.
  • TĂ©lĂ©charger un modĂšle de superposition HTML/JS depuis le C2 qui imite parfaitement cette application spĂ©cifique (logo, couleurs, chaĂźnes i18n
).
  • Afficher la superposition, rĂ©colter les identifiants/numĂ©ros PIN/motif.
  • Utiliser l'API d'accessibilitĂ© (performGlobalAction, GestureDescription) pour automatiser les transferts en arriĂšre-plan.

Détection et atténuation

  • Auditer la liste des applications installĂ©es avec adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE.
  • Du cĂŽtĂ© de l'application (banque / portefeuille) :
  • Activer android:accessibilityDataSensitive="accessibilityDataPrivateYes" (Android 14+) sur les vues sensibles pour bloquer les services non Play Store.
  • Combiner avec setFilterTouchesWhenObscured(true) et FLAG_SECURE.
  • Renforcement du systĂšme :
  • DĂ©sactiver Installer Ă  partir de sources inconnues et AccessibilitĂ© pour les applications non fiables.
  • Appliquer PlayProtect et des appareils Ă  jour.

Pour des détails supplémentaires sur l'utilisation des services d'accessibilité pour un contrÎle total à distance de l'appareil (par exemple, PlayPraetor, SpyNote, etc.) voir :

Accessibility Services Abuse

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks