Android StrandHogg 漏洞剖析 – 作者:北京链安安全实验室

Android StrandHogg 漏洞剖析

事件概述

近期,挪威一家安全公司(Promon)披露了一个 Android 任务栈劫持漏洞,并使用描述维京海盗突袭战术中的单词 StrandHogg 对其命名。该漏洞在捷克共和国攻击者已利用其盗走多家银行用户的卡内余额(这包括 2017 年发现的 BankBot 银行木马变种)从而引发东欧金融机构安全服务商的多方求助。虽然 Google 已采取缓解措施暂停了受影响应用程序的安装,但到目前为止任何版本的 Android(包括 Android10)都还没有修复该漏洞。

StrandHogg-Permission-Harvesting.jpgStrandHogg-Phishing.jpg

该漏洞使恶意应用程序有可能在伪装成合法应用程序的同时请求权限,包括 SMS、照片、麦克风和 GPS 等从而允许攻击者访问短信和通讯录、查看相册、进行窃听和跟踪受害者位置等活动。

漏洞分析

StrandHogg 是一个存在于 Android 多任务系统中的应用漏洞,此漏洞利用 App 清单文件 AndroidManifest.xml 中一个名为 android:taskAffinity 的属性设置。

android:taskAffinity 属性官方定义:

与 Activity 有着相似性的任务。从概念上讲,具有同一相似性的 Activity 归属同一任务(从用户的角度来看,则是归属同一“应用”)。任务的相似性由其根 Activity 的相似性确定。

相似性确定两点内容 — Activity 更改父项后的任务(请参阅 allowTaskReparenting 属性),以及通过 FLAG_ACTIVITY_NEW_TASK 标记启动 Activity 时,用于容纳该 Activity 的任务。

默认情况下,应用中的所有 Activity 都具有同一相似性。您可以设置该属性,以不同方式将其分组,甚至可以在同一任务内放置不同应用中定义的 Activity。如要指定 Activity 与任何任务均无相似性,请将其设置为空字符串。

如果未设置该属性,则 Activity 会继承为应用设置的相似性。应用默认相似性的名称为 <manifest> 元素所设置的软件包名称。

该属性标识着一个 Activity 所运行的任务栈名称。默认情况下,一个应用中所有 Activity 运行的任务栈名称都为该应用的包名。恶意应用程序可以通过设置该属性标识为受害者应用的包名,并配合使用 android:allowTaskReparenting="true" 将恶意活动置于目标任务栈的内部或顶部,当用户点击受害者应用图标时恶意程序会伪装成正常应用程序的界面迷惑用户进行界面劫持攻击。

20191207140649.jpg

20191207140741.jpg

缓解措施

开发者只需要在 App 清单文件中将 android:taskAffinity="" 属性设置为空即可防御此攻击。

参考

来源:freebuf.com 2019-12-11 16:42:15 by: 北京链安安全实验室

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论