Task Hijacking
Détournement de tâche
Description
Une tâche Android est un ensemble d'activités avec lesquelles les utilisateurs interagissent lorsqu'ils effectuent une certaine action. Les activités de différentes applications peuvent résider dans la même tâche, ce qui peut être utilisé pour relocaliser une activité malveillante dans la tâche de votre application en manipulant les paramètres suivants :
- Task Affinity contrôlé par l'attribut
taskAffinity - Task Reparenting contrôlé par l'attribut
allowTaskReparenting
La Task Affinity est un attribut d'activité défini dans la balise <activity> du fichier AndroidManifest.xml.
La Task Affinity spécifie à quelle tâche l'activité souhaite se joindre. Par défaut, toutes les activités d'une application ont la même affinité, qui correspond au nom du package de l'application.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="co.secureApp.app">
<application>
<activity android:name=".ActivityA"></activity>
<activity android:name=".ActivityB" android:taskAffinity="co.ostorlab.Myapp:taskB"></activity>
</application>
</manifest>
Lorsque allowTaskReparenting est défini sur true pour une activité A, et qu'une nouvelle tâche avec la même affinité est mise au premier plan, le système déplace l'activité relocalisable A de sa tâche d'hébergement d'origine vers la nouvelle pile de tâches au premier plan.
Les attaques par détournement de tâche se présentent sous différentes formes :
-
Contrôle de l'affinité de tâche (Task Affinity Control) : l'application possède le nom de package
com.mySecureApp.appet l'activité A1. Une application malveillante possède deux activités M1 et M2 oùM2.taskAffinity = com.mySecureApp.appetM2.allowTaskReparenting = true. Si l'application malveillante est ouverte sur M2, une fois que vous démarrez votre application, M2 est ramenée au premier plan et l'utilisateur interagira avec l'application malveillante. -
Mode Single Task : l'application a défini son mode de lancement sur
singleTask. Une application malveillante avecM2.taskAffinity = com.mySecureApp.apppeut détourner la pile de tâches de l'application cible. -
Task Reparenting : l'application a défini
taskReparentingsurtrue. Une application malveillante peut déplacer la tâche de l'application cible vers la pile de l'application malveillante.
Le détournement de tâche peut être utilisé pour effectuer du hameçonnage (phishing), des attaques par déni d'utilisation, et a été exploité par le passé par des chevaux de Troie bancaires. Les nouvelles variantes d'attaques (StrandHogg 2.0) sont extrêmement difficiles à détecter, car ce sont des attaques basées sur le code.
Le détournement de tâche a été corrigé dans Android version 11 dans le cadre de la correction de CVE-2020-0267 WindowManager confused deputy.
Recommandation
Les différentes formes de vulnérabilités de détournement de tâche nécessitent des correctifs différents :
- Définissez l'affinité de tâche des activités de l'application sur
""(chaîne vide) dans la balise<activity>duAndroidManifest.xmlpour forcer les activités à utiliser une affinité de tâche générée aléatoirement, ou définissez-la au niveau de la balise<application>pour l'appliquer à toutes les activités de l'application.
OU
-
Définissez le
android:launchModesursingleInstance.singleInstancegarantit qu'aucune autre activité ne sera créée dans la même tâche. -
Ne spécifiez pas de mode de lancement défini sur
singleTaskou ajoutez la prise en charge d'un service de surveillance pour détecter la présence de tâches malveillantes au premier plan. -
Ne définissez pas l'indicateur
FLAG_ACTIVITY_NEW_TASKdans les intentions (intents) de lancement d'activité, ou utilisez-le avecFLAG_ACTIVITY_CLEAR_TASK:
Intent i = new Intent(this, AnActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
-
Ne spécifiez pas
allowReparentingavectaskAffinityou ajoutez la prise en charge d'un service de surveillance pour détecter la présence de tâches malveillantes au premier plan. -
Privilégiez l'utilisation d'une intention (intent) explicite, qui spécifie quelle application satisfera l'intention, en fournissant le nom de package de l'application cible ou un nom de classe de composant pleinement qualifié. L'intention implicite spécifie uniquement l'action générale.
Liens
- Understand Tasks and Back Stack - Android Documentation
- Towards Discovering and Understanding Task Hijacking in Android
- StrandHogg Attack
- StandHogg Attack 2.0
- Task Hijacking exploited by Mobile Banking Malware
- CVE-2020-0267: WindowManager Confused Deputy
Normes
- OWASP_MASVS_L2:
- MSTG_PLATFORM_9
- GDPR:
- ART_5
- ART_25
- ART_32
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_11_3
- HIPAA_CONTROLS:
- SECURITY221
- SECURITY212
- SECURITY213
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5