hacktricks/mobile-pentesting/android-app-pentesting/tapjacking.md

7.9 KiB

Tapjacking

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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 empêche l'utilisateur de savoir 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 autorisation. C'est parce que l'application malveillante aura également besoin de cette autorisation.

Protection

Android 12 (API 31,32) et versions supérieures

Selon cette source, les attaques de tapjacking sont automatiquement empêchées par Android à partir d'Android 12 (API 31 et 30) et versions supérieures. 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 les touches lorsque 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.
Si défini sur true, par exemple, un bouton peut être automatiquement désactivé s'il est obscurci :

<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 plus récente application Android réalisant une attaque Tapjacking (+ invocation avant une activité exportée de l'application attaquée) peut être trouvée sur https://github.com/carlospolop/Tapjacking-ExportedActivity.

Suivez les instructions du README pour l'utiliser.

FloatingWindowApp

Un projet d'exemple implémentant FloatingWindowApp, qui peut être utilisé pour placer une fenêtre flottante au-dessus d'autres activités afin de réaliser une attaque de clickjacking, peut être trouvé sur FloatingWindowApp (un peu ancien, bonne chance pour construire l'APK).

Qark

{% hint style="danger" %} Il semble que ce projet ne soit plus maintenu et que cette fonctionnalité ne fonctionne plus correctement. {% endhint %}

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 vulnérabilités potentielles de Tapjacking.

La mitigation est relativement simple car le développeur peut choisir de ne pas recevoir les événements tactiles lorsque une vue est recouverte par une autre. En utilisant la Référence du développeur 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 d'autorisation, effectuer un achat ou cliquer sur une publicité. Malheureusement, une application malveillante pourrait essayer de tromper l'utilisateur en effectuant ces actions, sans le savoir, en dissimulant l'objectif réel de la vue. Pour remédier à cela, le framework propose un mécanisme de filtrage tactile 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 tactile, appelez setFilterTouchesWhenObscured(boolean) ou définissez l'attribut de mise en page android:filterTouchesWhenObscured sur true. Lorsqu'il est activé, le framework ignorera les touches reçues chaque fois que la fenêtre de la vue est recouverte par une autre fenêtre visible. Par conséquent, la vue ne recevra pas de touches chaque fois qu'un toast, une boîte de dialogue ou une autre fenêtre apparaît au-dessus de la fenêtre de la vue.

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥