macOS 恶意软件保护简史

2021-07-28 03:50:55

在 Mac OS X 的头六年左右的时间里,它的系统几乎没有提供任何东西来检测、删除或对抗恶意软件。似乎采取的第一步是在 2007 年左右自愿引入代码签名,该功能由仅被称为“愤世嫉俗的佩里”的 Apple 工程师推广。这些是第一个 Gatekeeper 子系统的一部分,该子系统在 2012 年正式推出之前一直在缓慢发展。与此同时,Apple 的安全工程师正忙于开发 App Sandbox,同样于 2007 年推出,但并未真正成熟直到 2012 年 6 月它成为 App Store 应用程序的一项要求,尽管从那时起一些较旧的应用程序一直享有豁免权。 Gatekeeper 提供了一种机制,用于区分从不受信任的 Internet 来源下载的应用程序,通过附加扩展属性将它们隔离。然后在首次启动时通过三种不同的机制检查被隔离的应用程序:代码签名检查,以确定签名身份和应用程序完整性,由 AMFI(Apple 移动文件完整性)等子系统进行,通常称为 Gatekeeper; XProtect 阻止软件,例如易受攻击的 Java 版本,并扫描已知恶意软件的特征;您可以在本文中阅读截至 2015 年他们的存在和行动的描述。为了解决某些形式的恶意软件行为,我们采取了额外的措施,例如应用程序易位,在某些情况下会从特殊位置启动隔离的应用程序。对代码签名的检查分为两个阶段:首先是应用程序不同部分存储的 cdhashes 的有效性,其次是用于签署应用程序的证书的有效性,以确保它没有被撤销。从 2018 年的 Mojave 开始,Apple 通过引入公证增加了另一组检查。

在 2018-19 年之前,macOS 似乎在本地存储了有关证书撤销的信息,位于 /private/var/db/gkopaque.bundle 的“Gatekeeper”数据库中,Apple 每两周更新一次。随着 macOS 10.15 Catalina 的发布,那些与最新版 macOS 保持同步的 Mac 于 2019 年 9 月停止访问该数据库。自 2019 年 8 月 26 日以来,Apple 尚未发布更新,任何全新安装 Big Sur 的人都将安装一个真正古老的版本。正如我在这里指出的那样,“Gatekeeper”数据库现在已被有效废弃。随着这个检查系统的发展,早在 High Sierra 之前,也可能在 El Capitan 之前,Gatekeeper 开始执行在线 OCSP 查询以检查代码签名证书的有效性,最初仅用于第一次运行的隔离应用程序。但是,在 2019 年 7 月左右(macOS 10.14.6),这些检查扩展到已经清除隔离的应用程序。到 2019 年 10 月发布 Catalina 时,即使未设置隔离标志,也会在加载所有可执行代码时检查证书。据我所知,这些包括对签名和 cdhashes 的系统检查,这与公证的附加要求重叠。尽管 Apple 长期以来一直认为用户仍然可以在 macOS 中运行完全未签名的代码,但随着第一批 Apple Silicon Mac 的发布,这种情况在 2020 年 11 月也发生了变化。所有在 ARM 处理器上本地运行的代码都需要签名,尽管目前这是为了提供 cdhashes 以传输到 Apple,并可能对恶意软件值进行远程检查。目前没有对首次启动隔离应用程序时使用的签名证书施加超出现有 Gatekeeper 控制的要求,其中现在也包括公证检查。 2020 年 11 月,Apple 使用在线 OCSP 检查受到抨击,促使其立即采取措施保护隐私,并声明证书吊销检查将在下一年更改为:“用户选择退出的新偏好这些安全保护”,大概意味着哈希查找和证书吊销检查。据我所知,这三个变化都还没有实施,尽管距离那一年过去只剩下四个月了。 XProtect 是一种隐藏在 macOS 安全服务中的按需服务,其中包含一组更明显的数据文件,这些文件由 Apple 定期更新。包含数据文件的 XProtect.bundle 位于 /Library/Apple/System/Library/CoreServices/,在 Catalina 系统卷上 /System/Library/CoreServices/ 的未受保护数据卷中添加;在 Mojave 及更早版本中,这只是 /System/Library/CoreServices/

它的目的是扫描文件并根据被阻止的软件列表和已知恶意软件的 Yara 签名进行检查。它与 Gatekeeper 是在同一时期发展起来的,尽管它的侧重点在那个时期发生了很大的变化。最初它用于确保不使用旧版本的 Java、Adobe Flash Player 和类似产品,对照 XProtect.meta.plist 中的列表检查它们。例如,在 2013 年 1 月底,Apple 的安全小组将 Java 1.6.0_37 列入 XProtect 的阻止列表,并且仍然安装了该版本或更旧版本的 Mac 无法运行 Java。这个功能现在似乎基本上被废弃了,这些版本号至少有几年没有更新了。 XProtect 还使用一组 Yara 定义来检测已知恶意软件。这些定义包含扫描文件时应用的规则;如果满足某个规则,XProtect 会声明该项目是恶意的,阻止其被打开,并提醒用户。直到 2018 年,Apple 使用公认的名称识别恶意软件签名;从那时起,它使用它可以检测到的恶意软件的代号来混淆恶意软件的身份。 2019 年之前,XProtect 仅检查隔离文件。苹果随后宣布,无论隔离标志如何,每个应用程序和命令工具的可执行代码在运行时都会被检查,这从 Catalina 开始就应用了。从 Big Sur 开始,XProtect 还在后期启动期间运行初始扫描,至少在 Intel Mac 上是这样。 Apple 还没有透露它当时扫描了哪些文件。近年来,随着恶意软件的激增,Apple 通常每两周推送一次 XProtect 的 Yara 定义更新,以跟上恶意软件开发人员为逃避最新签名所做的更改。虽然 XProtect 依赖 Yara 定义和阻止列表来检测易受攻击的软件和恶意软件,但恶意软件删除工具 (MRT) 包含一个例程库,这些例程尝试根据自己的不透明规则删除恶意和不需要的软件。尽管 MRT 看起来是一个应用程序,但它包含一个命令工具,该工具以两种模式运行:作为代理或守护程序。虚拟应用程序位于 /Library/Apple/System/Library/CoreServices/,在 Catalina 系统卷上 /System/Library/CoreServices/ 的未受保护数据卷添加中;在 Mojave 及更早版本中,这只是 /System/Library/CoreServices/。它是用 Swift 编写的,通常由两个 launchd 属性列表运行。 MRT 在两种情况下可预见地运行:在启动后期、用户登录后和更新后立即运行。它也可能在 Gatekeeper 检查期间短暂运行,但此时会显示为无声。不幸的是,自 2018 年以来,Apple 混淆了 MRT 可以删除的恶意软件的名称。在此之前,可以搜索其可执行文件的字符串内容并发现它声称能够“修复”的恶意软件的名称。自 Gatekeeper 早期推出以来,MRT 无疑已经发生了变化,但与 XProtect 相比,它的外形要低得多,因此更难以调查。尽管它已经两次脱颖而出。

2019 年 7 月上旬,MRT 被要求删除应用程序的一部分,该应用程序不是恶意软件,但却给用户留下了一个严重的漏洞:Zoom。旧版本的 Zoom 客户端带来的最大问题之一是,它在一个隐藏文件夹中安装了一个 Web 服务器,当您卸载其应用程序时,该服务器仍然处于活动状态。该 Web 服务器能够重新安装 Zoom 客户端,并且发现其自身也存在漏洞。然而,Zoom 对其客户端软件中的其他问题做出了回应,删除此 Web 服务器的所有副本至关重要,尤其是在用户可能忘记他们曾经安装过 Zoom 客户端的 Mac 上。这不是 Zoom 能够单独处理的事情:它需要 Apple,就像 Apple 需要在 Zoom 的网络服务器被利用之前删除它一样。解决方案在于轻轻地重新利用 MRT 来检测和破坏 Zoom 隐藏文件夹中的网络服务器,就像它对恶意软件所做的那样。因此,送货工具必须是一个紧急的“无声”安全更新,其中包含 Apple 于 2019 年 7 月 10 日推出的新版 MRT。MRT 的第二个成名时刻并不那么令人印象深刻,当时 1.68 版于 2020 年 10 月 19 日发布,导致许多 Mac 上的严重问题。十一天后,苹果在 1.69.3 版本中默默地解决了这个问题。在 Mac 安全的宏伟计划中,公证是最近出现的、有争议的并且可能在很大程度上被误解了。人们期望 Apple 的恶意软件检测系统将确保任何恶意软件都不会被公证,鉴于此类检测方案的经验,这是不现实的。相反,公证对恶意软件开发人员提出了一个重大挑战,即除最坚定的人之外的所有人,他们在公证检查期间可以用来逃避自动检测的策略受到限制。更重要的是,它为 Apple 提供了所有经过公证的软件的副本,让这只猫在鼠标方面取得了领先。如果经过公证的应用程序被证明是恶意的,可以立即吊销证书,而且 Apple 的安全工程师已经拥有该应用程序的样本及其 cdhashes,可以迅速将其合并到 XProtect 的 Yara 定义和 MRT 规则中。对某些人而言,更令人担忧的是,目前仍然是自愿的,因为 Apple 不会对开发人员强制执行公证(除非在特定情况下,例如扩展),并且用户可以选择忽略公证,这将成为强制性的。然而,“愤世嫉俗者佩里”的代码签名用了 13 年时间才成为 Apple Silicon Mac 的强制性要求。