一、前言
2009年12月,Chrome正式推出了扩展程序(extension),使用HTML、JavaScript以及CSS来扩展Chrome的功能。扩展可以使用Chrome API来阻止广告(ad)、改变浏览器UI、管理cookie,甚至能与桌面应用配合使用。用户可以在扩展安装过程中授予扩展一些权限,限制扩展行为。Chrome扩展可以使用许多原生API,因此也是隐藏恶意代码的潜在目标。随着EDR(端点检测与响应)产品的兴起以及macOS、Windows 10新引入的安全功能,端点安全性也得到了不少提升。然而对于macOS上的恶意Chrome扩展,现在仍然缺乏较好的检测机制。因此,Chrome扩展已经成为一种非常诱人的入侵及持久化载荷。本文介绍了macOS上利用Chrome扩展实现的一种载荷投递机制,介绍了自动更新功能在攻击过程中的应用,也介绍了使用Apfell的一个实际攻击样例,最后提出了一些基本但实际可操作的检测指南。
二、载荷投递
在macOS上,我们可以使用一些方法来合法地安装扩展程序。Google要求开发者通过web商店来投放扩展程序。最近Google修改了相关政策,导致用户无法从第三方网站安装扩展。攻击者虽然可以继续在web商店上托管扩展程序,但这个策略的推出的确限制了不少潜在风险。此外,我们在macOS上也可以使用移动配置描述文件(mobile configuration profile,.mobileconfig
文件)来安装扩展。配置描述文件是macOS及iOS上的一种机制,可以用来管理各种设置,如壁纸、应用(如Google Chrome)等。用户可以通过鼠标双击或者在命令行中通过profiles命令来安装描述文件。移动配置描述文件采用XML格式并遵循相对简单的格式。为了创建移动配置描述文件,我们需要输入PayloadUUID、应用程序ID以及更新url(下文会介绍这一点)。如果想了解配置描述文件的更多信息,大家可以参考这两篇文章(1、2),也可以参考这个模板文件。在配置文件中,ExtensionInstallSources
键指定了URL值,表示可以从哪些源安装扩展。在URL的协议、主机以及URI字段中我们都可以使用通配符。ExtensionInstallForceList
值表示可以未经用户同意就能安装且无法卸载的扩展列表。PayloadRemovalDisallowed
键可以阻止非管理员用户卸载该描述文件。大家可以参考此处资料了解可用来管理扩展及Google Chrome其他设置的一些键值。配置描述文件可以用来管理macOS的各种设置,我们可进一步深入分析,研究其在攻击场景中的应用。
关于配置描述文件有一点非常有趣,这些配置文件可以通过电子邮件来发送,并且Gatekeeper不会向终端用户提示任何警告(Gatekeeper是MacOS的代码签名强制验证工具)。然而系统将弹出一个提示窗口,请求用户确认安装描述文件。
如果描述文件未经签名,则用户