hacktricks/mobile-pentesting/android-app-pentesting/android-task-hijacking.md
2023-06-03 13:10:46 +00:00

8.1 KiB

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

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 dans lequel chaque activité est ouverte.

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é, une seule tâche en premier plan est visible à l'écran.

Voici un flux d'activité simple :

  • Il n'y a que l'activité 1 en premier plan.
  • L'activité 2 est démarrée, ce qui pousse l'activité 1 vers la pile arrière. Maintenant, l'activité 2 est en premier plan.
  • L'activité 3 est démarrée, ce qui pousse les activités 1 et 2 vers 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 dans 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

Boutons de contrôle de tâche

Attaque d'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> dans le 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 mode de lancement 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 gestionnaire d'activité (AMS) sélectionne une tâche pour héberger la nouvelle instance créée en trouvant une tâche « correspondante » dans 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/attaquante afin qu'elle se lance dans leur tâche au lieu de créer la sienne.
  • Sans trouver de tâche « correspondante » :
    L'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, il 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 login que l'application vulnérable, l'utilisateur n'aura aucun moyen de savoir qu'il saisit ses informations d'identification dans une application malveillante.

Vous pouvez trouver une attaque mise en œuvre ici : https://github.com/az0mb13/Task_Hijacking_Strandhogg

Prévention du détournement de tâches

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 veut pas que d'autres activités rejoignent les tâches qui lui appartiennent. Une fonction personnalisée onBackPressed() peut également être ajoutée pour remplacer le comportement par défaut.

Références

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