7.2 KiB
Tapjacking
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
{% embed url="https://websec.nl/" %}
Basic Information
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.
Detection
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. Cela est dû au fait que l'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 & 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:
<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 (+ invoquant 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 d'exemple implémentant FloatingWindowApp, qui peut être utilisé pour se superposer à d'autres activités afin d'effectuer une attaque clickjacking, peut être trouvé ici 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 éventuelles vulnérabilités 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.
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
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)
Support HackTricks
- Consultez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs aux HackTricks et HackTricks Cloud dépôts github.