导语:本文主要介绍了macOS浏览器扩展所采用的技术,以及恶意插件如何窃取密码、银行信息和其他敏感用户数据。
一、概述
本文主要介绍了macOS浏览器扩展所采用的技术,以及恶意插件如何窃取密码、银行信息和其他敏感用户数据。
安装浏览器扩展,实际上是用户能对安全系统做出的最为简单的第三方修改之一,但也可能是最为危险的修改之一。许多用户认为扩展就是各种各样的“小型应用程序”,能在浏览网页时提供一些简单有用的附加功能,例如阻止广告内容、允许标记、自动填写表单字段等。但是,有相当一部分用户并没有意识到这些扩展所潜藏的巨大力量。
在本文中,我们首先将了解Safari浏览器扩展的安全定义,并对恶意广告软件活动中使用的浏览器扩展进行分析。此后,我们将介绍macOS 10.14 Mojave中针对Safari扩展安全性所做出的改变,以及如何解决其仍然存在的一些安全问题。
二、安全漏洞
在这里,我们主要分析恶意软件是如何通过浏览器扩展来实现漏洞利用。首先,我们要指出目前的扩展中普遍存在的一些安全问题,即使是合法开发人员开发的扩展中,也可能会出现这些问题。
我们留意到,DuckDuckGo在今年早些时候开始,为用户提供一个扩展,用于阻止广告和其他跟踪内容。DuckDuckGo的开发团队是可以信任的,并且这个扩展是有益的。然而,扩展中存在一个致命的问题:安装过程中所授予它的权限,远远超出其实际需要的扩展权限。这样一来,就导致了安全问题的出现。
根据扩展程序关于“在搜索和浏览网页的过程中保护用户数据”的声明,我们似乎可以理解为,扩展程序将有权限获取密码等敏感数据。
不幸的是,将这些特权授予给实际上不需要的扩展程序并不在少数。正如Apple开发者文档中所写,扩展可以执行例如将产品评级和评论添加到网站、将广告插入到网站、下载并注入脚本、修改Web内容等操作。并且,扩展可以在没有获得用户明确许可的情况下发送通知,还可以在后台无声的运行。
上述的这些功能,都是恶意软件开发人员所梦寐以求的漏洞利用工具,特别是在Safari扩展中还存在着多个安全漏洞,因此这些漏洞可能被恶意人员故意利用,也可能被合法开发人员无意制造。
扩展不需要在它们的包中直接包含所需的脚本,可以通过HTTP的方式远程获取。如果开发人员没有使用安全的HTTPS协议,可能就会发生中间人攻击,从而使攻击者编写的恶意脚本替换掉原有的脚本。
这也意味着,一些恶意攻击者可以开发恶意扩展,只需更改通过HTTP(或HTTPS)请求调用的脚本内容,就可以在安装扩展后修改其扩展行为。
扩展也应该支持“私密浏览”模式,但实际上这似乎取决于开发人员的具体实现。因为Apple的文档中只进行了建议:
在私密浏览模式下,您的扩展不应该存储有关用户操作的任何信息。您可以通过查询选项卡对象的私有属性(例如:safari.application.activeBrowserWindow.activeTab.private)来检查特定选项卡是否处于‘私密浏览’模式下。
仅凭这一点,就足以吸引任何一位恶意攻击者,也难怪如今恶意扩展已经成为恶意广告开发者(例如Genieo和Spigot)所使用的主要工具之一。在没有删除关联APP的情况下,恶意软件甚至可以阻止用户的卸载操作,这为进一步诱导用户提供了一个成熟的机会。
三、分析恶意扩展Pitchofcase
近期,我们观察到一个名为Pitchofcase的Safari恶意广告扩展,其中包含一些有趣的行为。
粗略来看,Pitchofcase像是普通的恶意广告扩展,在其启用后,会将用户搜索重定向到pitchofcase.com,其中包含一些按点击计费的地址。
http://searchv.oliverto.com/?b598a1d361f67b08aeee82e41686cd1a=FVNQWlVbFAAeXFNRWAFUV1dXV1gBUl9TUFBKQFwLUQFWWwAADAADXF9QUQxQVgNYVAUKU1VXWwFRDFRbB0EE&spt=ext&q=tagSearchQuery
这些扩展在后台无声的运行,没有工具栏按钮等任何与之交互的方式。
请注意上图中扩展程序所获得的权限。需要指出的是,这些权限都是默认获得的,无需进行权限提升。无论需要什么级别的权限,每个扩展程序都会显示出相同的警告提示,而用户只需要点击“信任”即可:
该警告提示中对信任此扩展产生的后果进行了简要说明,但不幸的是,在macOS系统的Safari中,可以在不经密码验证的情况下执行这一权限级别的操作。
接下来,我们尝试卸载恶意扩展,这时发生了有趣的情况。单击“卸载”按钮后,并不会按照预期的那样删除扩展,而是弹出以下警告:
这一行为是不寻常的,但也不是闻所未闻。一些信誉良好的应用程序,也会以相同的方式强制其用户使用特定的扩展(例如,Parallels Desktop强制在Safari中安装“Open in Internet Explorer”扩展程序)。用户完全可以禁用这一扩展程序,但如果想要删除扩展,需要先将父应用程序删除。
单击“在访达中显示”(Show in Finder)即可显示应用程序的位置,有助于卸载应用程序:
此时,一些安全意识较强的用户,可能想要了解Pitchofcase.app、Safari扩展和卸载程序如何正在VirusTotal上运行。该应用程序看上去是干净无毒的,但卸载程序引发了告警:
由于我们主要需要对Safari扩展进行分析,所以不会过多的分析卸载程序的功能。简而言之,通过对卸载程序进行代码审计,我们发现它主要在安装持久化代理:
以及筛选用户的浏览器历史记录:
而不是在进行它的本职工作——卸载程序。
但是,使用卸载程序作为一个感染的代理,这是恶意软件作者的一个聪明之举,并且与“不删除应用程序就无法移除扩展”这一特点相照应。正如我们看到的那样,扩展程序自身是无害的,只不过是一个让用户运行卸载程序的诡计。
四、深入理解Safari扩展
Safari扩展自身会对VT产生一些警告,但这些并不重要,原因在于它是安装扩展程序的“干净无毒”的应用程序。接下来,让我们对这一Safari扩展进行分析,查看它的具体行为。
Safari扩展实际上是压缩文件,为了深入分析扩展内部,我们要做的第一件事就是找出它所使用的压缩类型,可以使用find命令来实现:
在本文的样本中,使用了xar格式。接下来,就可以重命名文件并对其进行解压缩:
Global.html文件是我们的第一站。这个文件在Safari扩展的体系结构中是可选的,但如果包含这个文件,就可以加载一次性资源,例如注入脚本所使用的逻辑或数据。
在这种情况下,我们可以清楚的看到应该如何利用:
而在我们的下一站,Info.plist也明确表明扩展程序可能会查看安全页面:
尽管上述内容比较令人担忧,但最值得注意的一点就是它缺少通常会打包到这些浏览器插件之中的常用组件。没有专门的JS跟踪器脚本,也没有辅助函数,更没有尝试通过eval方法来执行恶意代码。与大多数扩展(包括合法和非法的)相比,Pitchofcase非常简单。
这使我们回到了“删除应用程序后才能卸载扩展程序”和“卸载程序产生的烦人警告”这两个特点。Pitchofcase的开发显然经过了深思熟虑,安装一个略显烦人但实际没有用的扩展,然后欺骗用户运行恶意的卸载程序以删除它。
五、如何安全清除Pitchofcase
对于那些在Safari中单击“卸载”按钮后严格按照提示操作的用户来说,这里有一个好消息。确实,删除扩展程序的唯一方法就是删除关联的应用程序,但删除并不意味着卸载。
用户应该忽略其自身提供的Uninstall.app,只需要将Pitchofcase.app和所有其他组件(包括卸载程序)都直接移动到废纸篓。在这样操作后,扩展程序也会随之删除。
恶意软件的开发人员走了一条不寻常的道路,并且抓住了那些习惯性遵循提示进行操作的用户心理,让用户使用开发人员提供的卸载程序来删除应用程序。针对受信任的复杂安装,这显然是一个比较好的做法。但针对于Pitchofcase来说,这是用来窃取数据的巧妙招数。
六、新版本的改进
正如Apple在WWDC 2018所指出的那样,有一些“遗留扩展”(Legacy Extensions),也就是在Safari扩展库(Safari Extensions Gallery)内外以.safariextz文件类型分发的扩展,它们非常强大,因为它们可以访问用户的所有浏览数据。这样一来,使得这些扩展非常受欢迎,特别是对于欺诈软件和恶意软件来说。
在2016年,Apple推出了Safari App Extensions。与用户必须独立于父应用程序安装、更新、删除的旧版Safari扩展不同,Safari App Extensions作为appex插件,包含在应用程序包中:
这意味着,它们与开发者ID相关联,并且可以通过App Store来提供。换而言之,扩展的分布范围与常规macOS应用程序的使用范围相同。
最近,在最新版本的Mojave和Safari 12中,传统的.safariextz已经被阻止,除非它们直接来自Apple官方的Safari Extensions Gallery。但这只是一个暂时的缓解措施。Apple原本打算完全放弃Gallery,直到2018年年底才开始接受开发者的提交。最终,只有与应用程序捆绑在一起的扩展程序才被允许在macOS上使用Safari。
当然,合法的开发人员很快就意识到,完全可以创建一个空的“Shell”应用程序,只为扩展程序提供包装,不包含其他任何功能:
我们相信,恶意软件作者很快就会模仿。
七、前进的一小步
从安全的角度来看,App Extension模型对用户来说既有利也有弊。其优点除了使相关应用更加紧密的集成之外,另一个优势是,在Mojave中,Apple增加了开发人员使用子资源完整性(Subresource Integrity)或SRI的能力。这也就意味着,开发人员可以防范MitM攻击(例如我们在前文中提到的攻击方法),确保可以根据开发人员在App Extension包中预先定义的校验值来检查通过HTTP或HTTPS方式下载的任何脚本。
八、后退的两大步
尽管这是一个很好的安全补充,能够帮助尽责的开发人员保护其用户,但它并不会防止恶意的开发人员将一个看似无害的扩展变成一个恶意软件投放工具(Dropper)。只有Apple开始要求必须具有SRI,MitM攻击的威胁才能真正被消除。
并且,这一机制也无法防范不遵循最佳实践原则的开发人员所编写的存在问题的应用程序。2017年,有研究人员发现Safari扩展库中有高达40%左右的扩展都包含同一个安全漏洞,这个漏洞并非Apple API中的错误所导致,而是大量开发人员未能遵循最佳安全实践,导致安全Token被泄露。
后退的第二步,是指这一改进使恶意软件进程具有了枚举已安装扩展的能力。此次新版本操作系统Mojave的一个重大变化就是锁定了对用户数据的访问。其中的一个锁定区域,就是用户的Safari文件夹。在早期版本的macOS上,恶意软件进程可以访问这一文件夹,并且枚举特定用户已安装扩展的列表:
这个命令无法在Mojave上成功执行,其实是一个提升安全性的改进。但前提是,需要保证用户保护无法被绕过。列出扩展名称,有助于恶意软件开发人员对用户进行分析,并有针对性的执行攻击。举例来说,恶意软件可以筛选具有购物扩展程序或密码管理工具的用户,并将攻击者的目标缩小到那些更有可能在计算机中保存信用卡信息的用户。另一种可能是,识别主流反病毒厂商开发的扩展程序是否存在,从而针对性的提供个性化漏洞利用工具包,或者选择是否向该用户传递恶意Payload。
不幸的是,App Extensions的改进破坏了此前全部为阻止访问Safari文件夹扩展数据所做的努力。将扩展程序作为应用程序包的.appex插件,直接导致恶意软件可以使用pluginkit实用程序来枚举已经安装的扩展:
九、重新回顾Pitchofcase
我们接下来重新回顾Pitchofcase。此前分析中已经进行了说明,如果不卸载应用程序就无法删除Pitchofcase。那么现在,基于我们对Safari App Extension模型的了解,我们来看看为什么会这样。
尽管Pitchofcase安装程序实际上确实包含遗留的.safariextz版本,但它是一个新的版本,需要删除相应应用程序才能卸载,对于当前使用新架构的所有扩展来说都是如此。一旦Apple完全停止Safari扩展库(大概是在2019年的某个时间),这将成为卸载扩展的唯一方法。
而Pitchofcase既不来自Safari Extensions Gallery,也不来自App Store,但仍然由其开发人员Genieo设定在Mojave 10.14上按照预期工作。
使用Safari 12的“显示所有历史记录”视图,我们可以轻松确定Genieo软件重定向的站点:
尽管Extensions的容器体系结构已发生变化,但实现细节大致相同。“script.js”文件现在位于.appex包的Resources文件夹中:
在Mojave上,能够像早期版本的macOS一样受到影响。对开发人员来说,似乎是一种诙谐的双关语“URL Hell”。
十、安全建议
通过本文的分析,我们可以看到,macOS的新架构Mojave及其使用的新安全协议并不能阻止恶意扩展的安装。至少,目前还不能。
但是,可以公平的说,Mojave采取了一些重要的举措来防范扩展带来的风险。目前,我们还没有找到一种方法能让应用程序自动启用它们的扩展。我们非常担忧任何带有appex插件的应用程序都会注册插件架构,于是尝试通过pluginkit在Mojave上启用这些实用程序,但结果都失败了,这一点还算是令人放心。
更重要的是,尽管存在用户被欺骗运行恶意卸载程序的风险(该场景已经真实发生),但随着时间的推移,相信会有越来越多的用户习惯这一新的特性,并会更加注意防范相关风险。此外,我们还希望macOS能对所有应用程序进行统一检查,其中包含对任何捆绑插件的检查。最重要的是,我们希望Apple能对仅仅作为扩展程序外壳的应用程序进行更加严格的限制,同时能更加严格的执行SRI的政策。