Task Hijacking
任务劫持
描述
Android 任务是用户在执行特定工作时与之交互的活动的集合。来自 不同应用程序的活动可以驻留在同一个任务中,恶意应用程序可以通过操纵以下参数,将恶意活动重新定位到您的应用程序的任务中:
- 由
taskAffinity属性控制的 Task Affinity (任务关联性) - 由
allowTaskReparenting属性控制的 Task Reparenting (任务重新父级化)
Task Affinity 是在 AndroidManifest.xml 文件的 <activity> 标签中定义的活动属性。
Task Affinity 指定了该活动希望加入的任务。默认情况下,应用程序中的所有活动具有相同的关联性,即应用程序的包名。
<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>
当活动 A 的 allowTaskReparenting 设置为 true,并且具有相同关联性的新任务被带到前台时,系统会将 可重新定位 的活动 A 从其原始的托管任务移动到新的前台任务栈中。
任务劫持攻击有不同的变体:
-
Task Affinity Control:假设应用程序的包名为
com.mySecureApp.app,并具有活动 A1。恶意应用程序有两个活动 M1 和 M2,其中M2.taskAffinity = com.mySecureApp.app且M2.allowTaskReparenting = true。如果在 M2 上打开了恶意应用程序,一旦您启动您的应用程序,M2 就会被重新定位到前台,用户 将与恶意应用程序进行交互。 -
Single Task Mode:如果应用程序将启动模式设置为
singleTask。具有M2.taskAffinity = com.mySecureApp.app的恶意应用程序可以劫持目标应用程序的任务栈。 -
Task Reparenting:如果应用程序将
taskReparenting设置为true。恶意应用程序可以将目标应用程序任务移动到恶意应用程序栈。
任务劫持可用于执行网络钓鱼、拒绝使用攻击,并且在过去曾被银行恶意软件木马利用。新变体的攻击(StrandHogg 2.0)极难检测,因为它们是基于代码的攻击。
任务劫持已在 Android 11 版本中得到解决,作为修复 CVE-2020-0267 WindowManager 混淆代理(confused deputy)的一部分。
建议
不同形式的任务劫持漏洞需要不同的修复方案:
- 在
AndroidManifest.xml的<activity>标签中,将应用程序活动的任务关联性设置为""(空字符串),以强制活动使用随机生成的任务关联性,或者在<application>标签中设置以强制应用于应用程序中的所有活动。
或者
-
将
android:launchMode设置为singleInstance。singleInstance可确保不会在同一任务中创建其他活动。 -
不要将启动模式指定为
singleTask,或者添加对监控服务的支持,以检测恶意的应用程序前台任务的存在。 -
不要在活动启动的 Intent 中设置
FLAG_ACTIVITY_NEW_TASK标志,或者将其与FLAG_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);
-
不要将
allowReparenting与taskAffinity一起指定,或者添加对监控服务的支持,以检测恶意前台任务的存在。 -
优先使用显式 Intent(Explicit intent),通过提供目标应用程序包名或完全限定的组件类名来指定哪个应用程序将满足该 Intent。隐式 Intent 仅指定常规操作。
链接
- 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
标准
- 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