Tapjacking

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)!

Autres façons de 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 interagir 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 les activités exportées dans le manifeste Android (notez qu'une activité avec un filtre d'intention est automatiquement exportée par défaut). Une fois que vous avez trouvé les activités exportées, vérifiez si elles nécessitent des autorisations. Cela est nécessaire car la application malveillante aura également besoin de cette autorisation.

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 et 30) et supérieur. Ainsi, 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 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. S'il est 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 effectuant une attaque Tapjacking (+ invoquant 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 se superposer à d'autres activités afin d'effectuer une attaque de clickjacking, peut être trouvé sur FloatingWindowApp (un peu ancien, bonne chance pour construire l'apk).

Qark

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

La mitigation 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 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 de permission, effectuer un achat ou cliquer sur une publicité. Malheureusement, une application malveillante pourrait essayer de tromper l'utilisateur en lui faisant effectuer ces actions, sans le savoir, en cachant le but prévu de la vue. En guise de remède, le framework offre 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 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, une boîte de dialogue ou une autre fenêtre apparaît au-dessus de la fenêtre de la vue.

Dernière mise à jour