Strandhogg漏洞:Android系统上的维京海盗

 

大家好,我是零日情报局。

当银行卡余额神秘消失,懵不。

这次跟大家说说新型Android应用漏洞,不仅能让银行卡余额消失,还会偷拍监听的那种。

昨天下午,挪威一家安全公司披露了一个Android应用漏洞,并用描述维京海盗突袭战术的单词StrandHogg对其命名。值得庆幸的是,谷歌已采取措施解决该漏洞,并暂停了受影响的应用程序。

至于银行卡余额神秘消失事件,就发生在捷克共和国的多家银行。不法攻击者利用StrandHogg漏洞,使用BankBot银行木马等恶意软件,悄无声息地盗走多家银行用户的卡内余额,引发东欧金融机构安全服务商的多方求助。

 

StrandHogg:维京海盗式Android应用漏洞

StrandHogg是一个存在于Android多任务系统中的应用漏洞。该漏洞利用则是基于一个名为“taskAffinity”的Android控件设置,允许包括恶意应用在内的任意程序,随意采用多任务处理系统中的任何身份。

从零日核实的情况来看,StrandHogg漏洞确实存在于Android的多任务系统中,一旦已安装恶意程序利用,就能让恶意程序顺利伪装合法应用,获得更高的权限,窃取信息或进行任意恶意操作。

简单来说,就是中招后,当我们点开一个正常应用程序的图标时,利用Strandhogg漏洞的恶意应用可以拦截劫持这个任务,并向用户显示一个虚假的应用界面。

这时,不明真相的你,会毫无防范的在一个虚假的界面,安心地输入账号、密码,以及进行任意操作。殊不知,那些涉及你隐私的敏感信息,输入后都会第一时间发送给攻击者,攻击者利用这些敏感信息,能做的是事情就多了。

也许登录银行账户,窃取钱财反倒是伤害相对较小的攻击。

 

利用StrandHogg能做哪些事?

访问摄像头和麦克风,获取设备的位置,读取SMS,捕获登录凭据(包括通过SMS的2FA代码),访问私人照片和视频,访问联系人……这些看似基本但关系手机安全闭环的功能,只要成功利用Strandhogg漏洞,恶意应用都可以请求上述权限。

简言之,Strandhogg漏洞让我们的手机不再对恶意应用设防,且这种不设防,我们无从得知何时开启。零日验证该漏洞时,就成功将恶意程序伪装成一合法应用,获得了测试目标的定位,当然,仅用于测试,大家不要随意尝试。

略让人恐慌的是,包括最新Android10在内的所有Android版本,都存Strandhogg漏洞。随后,零日逐一验证后发现,GooglePlay商店内可用的前500个Android应用程序,确如挪威安全公司说的那样,都可通过StrandHogg攻击劫持所有应用程序的进程以执行恶意操作。

 

维京海盗StrandHogg的独特之处

1、无需root上演复杂攻击:StrandHogg漏洞之所以独特,主要是因为它最大限度地利用了Android多任务系统弱点,无需root既可允许恶意程序伪装成设备上的任意程序,帮助黑客实施复杂且高危的攻击。

2、无法检测Stranghodd漏洞利用:有攻就有防,但很不幸的是,截至目前,针对Stranghodd漏洞利用的阻止方式,甚至是相对可靠的检测方法,都还没有出现。普通用户只能通过一些不鲜明的异常发现问题,比如已登录的应用要求登录、单击用户界面按钮链接时不起作用,或者后退按钮无法正常工作。

3、扩大UI欺骗风险:UI欺骗,很多人听说过。甚至早在2015年,宾夕法尼亚州立大学就曾以白皮书的形式,详细介绍了可用于UI欺骗的理论攻击。而StrandHogg漏洞的出现,多个程序同时遭劫持等情况,若不加以有效控制,一旦大范围扩散,都将进一步扩大UI欺骗风险。

并不是所有被发现的漏洞,都会被利用,但攻击者绝不会放过那些有价值的漏洞。

挪威安全公司就明确指出,目前已发现36个野外利用StrandHogg漏洞的应用程序,虽然这些应用都不能直接通过googlePlay商店下载安装,但并不能保证用户下载的应用程序是否曾经感染过,因为这36个应用程序作为第二阶段的有效负载,已经安装在了一些用户的设备上。

 

StrandHogg漏洞利用样本再现

不同于提权等相对熟悉的漏洞,Strandhogg漏洞的威胁层级其实并不能清晰的界定,因为它的存在更像给恶意程序开了一道门,至于被利用后带来的是小威胁,还是大震荡,关键要看恶意程序本身是威胁层级。

挪威安全公司披露StrandHogg漏洞信息时,就以第一次监测到利用StrandHogg漏洞的恶意软件为样本,复现了恶意软件利用StrandHogg漏洞的主要策略。

1、恶意程序利用GooglePlay分发

通常情况下,正常程序多数都会入驻Google Play,而利用StrandHogg漏洞的恶意程序,则通过多个恶意下载器安装,但会选择在Google Play上进行分发扩散。

从代码部分可以看到,当恶意应用在一个或多个活动上设置taskAffinity,以匹配任何第三方应用的packageName时,漏洞利用就会发挥作用。然后,通过与清单中的allowTaskReparenting=“true”组合,或通过使用Intent.FLAG_ACTIVITY_NEW_TASK的intent标志启动活动,将恶意活动置于目标任务的内部和顶部。

这时,恶意应用就成功劫持了目标,而当用户再一次点开目标应用时,恶意程序就会伪装成正常程序,显示使用界面迷惑用户。

2、伪装多个正常程序

同时开N个应用,是现代人的日常,而在StrandHogg漏洞利用威胁下,Android的多任务处理系统也给恶意程序打开方便之门。在同一时间推出两个(或更多)活动android.app.Activity#startActivities(android.content.Intent []),恶意程序就可以利用StrandHogg漏洞。在后台同时伪装成两款正常应用作恶。

同样,被攻击用户除了可能看到设备轻微闪烁外,根本无从发现恶意程序的攻击行为。只有我们查看时,输入adb shell dumpsys activity activities,才可以看到攻击活动已经存在,且一直潜伏到下次启动该应用程序为止。

3、AllowTask Reparenting(任务重编)

当伪装的正常程序再次启动后,利用StrandHogg漏洞的恶意程序曝出了一个名为allowTaskReparenting的新属性。它会让Android操作系统重新评估所有任务和活动,并在启动相关任务前,先查找标记有此属性的活动并将其移动。

这样,恶意程序就会根据新一次启动程序的情况,及时更新屏幕上显示的内容。

从样本来看,StrandHogg漏洞确实给恶意程序广开大门。

 

零日反思

Android漏洞是个老生常谈的话题,但并不能因此就忽视它的威胁。

在Android操作系统这片开源的大海上,其实不仅有StrandHogg漏洞这样的维京海盗式战术,还有各种各样已知未知的漏洞威胁,虽然经过十多年的发展,在各路技术人员的努力下,让Android操作系统漏洞威胁趋于稳定,但我们并不能掉以轻心,因为不法分子的攻击,时刻在发生。

零日情报局作品

微信公众号:lingriqingbaoju

参考资料:

Promon《StrandHogg漏洞》

(完)