hacktricks/mobile-pentesting/android-app-pentesting/android-task-hijacking.md

9.3 KiB

Android Task Hijacking

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

Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menace proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. Essayez-le gratuitement dès aujourd'hui.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Tâche, pile arrière et activités en premier plan

Une tâche est une collection d'activités avec lesquelles les utilisateurs interagissent lorsqu'ils effectuent une certaine tâche. Les activités sont organisées dans une pile - la pile arrière - dans l'ordre d'ouverture de chaque activité.

L'activité qui est affichée à l'écran est appelée une activité en premier plan et sa tâche est appelée la tâche en premier plan. À un moment donné, seule une tâche en premier plan est visible à l'écran.

Voici un exemple simple de flux d'activité :

  • Il n'y a que l'activité 1 en premier plan.
  • L'activité 2 est lancée, ce qui pousse l'activité 1 dans la pile arrière. Maintenant, l'activité 2 est en premier plan.
  • L'activité 3 est lancée, ce qui pousse à la fois l'activité 1 et 2 dans la pile arrière.
  • Maintenant, lorsque l'activité 3 est fermée, l'activité précédente, c'est-à-dire 2, est automatiquement ramenée en premier plan. C'est ainsi que fonctionne la navigation des tâches sur Android.

Multitâche Android - Une tâche

Une tâche est composée de plusieurs activités.

Multitâche Android - Plusieurs tâches

Android gère généralement plusieurs tâches.

Contrôle des tâches

Attaque par affinité de tâche

Affinité de tâche et modes de lancement

L'affinité de tâche est un attribut défini dans chaque balise <activity> du fichier AndroidManifest.xml. Il décrit à quelle tâche une activité préfère se joindre.
Par défaut, chaque activité a la même affinité que le nom du package.

Nous utiliserons cela lors de la création de notre application PoC.

<activity android:taskAffinity=""/>

Les modes de lancement vous permettent de définir comment une nouvelle instance d'une activité est associée à la tâche en cours. L'attribut launchMode spécifie une instruction sur la façon dont l'activité doit être lancée dans une tâche.
Il existe quatre modes de lancement différents :

  1. standard (par défaut)
  2. singleTop
  3. singleTask
  4. singleInstance

Lorsque le launchMode est défini sur singleTask, le système Android évalue trois possibilités et l'une d'entre elles est la raison pour laquelle notre attaque est possible. Les voici :

  • Si l'instance de l'activité existe déjà :
    Android reprend l'instance existante au lieu d'en créer une nouvelle. Cela signifie qu'il y a au plus une instance d'activité dans le système sous ce mode.
  • Si la création d'une nouvelle instance d'activité est nécessaire :
    Le service de gestion des activités (AMS) sélectionne une tâche pour héberger la nouvelle instance créée en recherchant une tâche "correspondante" parmi toutes les tâches existantes. Une activité "correspond" à une tâche si elles ont la même affinité de tâche. C'est la raison pour laquelle nous pouvons spécifier la même affinité de tâche que l'application vulnérable dans notre application malveillante/pirate afin qu'elle se lance dans leur tâche au lieu de créer la sienne.
  • Sans trouver de tâche "correspondante" :
    Le AMS crée une nouvelle tâche et fait de la nouvelle instance d'activité l'activité racine de la tâche nouvellement créée.

Attaque

La victime doit avoir l'application malveillante installée sur son appareil. Ensuite, elle doit l'ouvrir avant d'ouvrir l'application vulnérable. Ensuite, lorsque l'application vulnérable est ouverte, l'application malveillante sera ouverte à la place. Si cette application malveillante présente le même écran de connexion que l'application vulnérable, l'utilisateur n'aura aucun moyen de savoir qu'il saisit ses identifiants dans une application malveillante.

Vous pouvez trouver une attaque implémentée ici : https://github.com/az0mb13/Task_Hijacking_Strandhogg

Prévention du détournement de tâche

Définir taskAffinity="" peut être une solution rapide à ce problème. Le mode de lancement peut également être défini sur singleInstance si l'application ne souhaite pas que d'autres activités rejoignent les tâches qui lui appartiennent. Une fonction onBackPressed() personnalisée peut également être ajoutée pour remplacer le comportement par défaut.

Références

Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. Essayez-le gratuitement dès aujourd'hui.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

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