简介
自带易受攻击的驱动程序 (BYOVD) 是一种越来越流行的攻击技术,其中威胁行为者将已知易受攻击的签名驱动程序与其恶意软件一起带来,将其加载到内核中,然后利用它在内核中执行一些他们原本无法执行的操作。 在获得内核访问权限后,他们可能会篡改或禁用安全软件、转储原本无法访问的凭据,或修改操作系统行为以隐藏他们的存在。 在 2018 年美国 Black Hat 大会上, Joe Desimone和我深入讨论了这一问题以及其他内核模式威胁。 十多年来,BYOVD 一直被高级威胁行为者所采用,并在勒索软件和商品恶意软件中变得越来越普遍。
驱动程序签名强制执行(DSE) 于 2007 由 Windows Vista x64 首次部署,这是微软首次尝试限制管理员的权力。 有了 DSE,管理员就无法再立即将任何代码加载到内核中。 随着Boot Guard 、 Secure Boot和Trusted Boot的推出,管理员限制逐渐增多,以保护启动链免受管理员恶意软件的侵害,这些恶意软件以前可以安装自己的引导加载程序/启动工具包。
为了进一步限制管理员的权力,微软最近从 Windows 11 22H2 开始默认部署了易受攻击的驱动程序阻止列表。 这是朝着正确方向迈出的一步,使 Windows 11 默认更加安全。 遗憾的是,黑名单的部署模型对新威胁的适应速度较慢,通常每年仅自动部署一次或两次更新。 用户可以手动更新他们的黑名单,但这种干预使我们脱离了“默认安全”的领域。
安全边界
在确定需要修复哪些漏洞时,Microsoft 安全响应中心 ( MSRC ) 使用安全边界的概念,其定义如下:
安全边界为具有不同信任级别的安全域的代码和数据提供了逻辑分离。 例如,内核模式和用户模式之间的分离是一个经典而直接的安全边界。
根据这个定义,人们可能倾向于认为在用户模式下运行的恶意软件不应该能够修改内核内存。 界限毕竟是“直接的”。 从逻辑上讲,任何违反该界限的行为都应采取补救措施,例如补丁或阻止列表更新。
不幸的是,情况从现在起变得更加模糊。 该文档后来指出,管理员到内核不是安全边界,并给出了以下解释:
管理进程和用户被视为 Windows 可信计算基 (TCB) 的一部分,因此与内核边界无法牢固隔离。
目前,我们有两种看似相互矛盾的观点。 一方面,MSRC 表示管理员到内核是一个不可防御的界限,不值得修复。 另一方面,微软正试图通过驱动程序签名强制执行、安全启动和易受攻击的驱动程序阻止列表等机制来捍卫这一边界。 由于防御不完整,MSRC 将其称为“纵深防御安全功能”。
MSRC 同样不认为管理员到PPL是安全边界,而是将其归类为纵深防御安全功能。 下一节将对此进行更多介绍。
本文的其余部分将分别提及 MSRC 和 Microsoft。 虽然 MSRC 是微软的一部分,但微软比 MSRC 规模大得多;它们不应该被等同起来。
利用漏洞
2022 年 9 月,我向 MSRC 提交了 VULN-074311,通知他们 Windows 中存在两个零日漏洞:一个是管理员到 PPL 的漏洞,另一个是 PPL 到内核的漏洞。 我提供了这两个漏洞的源代码。 回复简明扼要地表明他们了解这些漏洞并拒绝采取任何进一步行动,如下所示:
该研究描述了一种利用 PPL 绕过来获取内核代码执行的多步骤攻击。 请注意,所有提议的攻击都需要管理权限才能执行,因此报告的问题不符合我们立即提供服务的标准。 我们不希望有任何进一步的行动,并将继续结案。
按照这种说法,“服务”的意思是“修补”。 他们的回应与上述政策以及他们对管理员到内核边界的历史处理一致。 他们的行为也很一致 - 已经超过 11 个月了,他们仍然没有修补任何一个漏洞。 我发现一个有趣的现象:微软愿意阻止那些可以修改内核内存的驱动程序,但 MSRC 却不愿意修复那些可以做同样事情的漏洞。
在 MSRC 报告发布五个月后,当我在 Twitter 上宣布我的 Black Hat Asia 2023 演讲“PPLdump 已死,PPLdump 万岁”时,Windows Defender 团队很快就联系了我,以了解更多信息。 看来 MSRC 在结案时并没有告知 Defender 团队有关 PPL 绕过的问题,而 Defender 团队的产品依赖 PPL 来保护数亿台 Windows 机器。 决不能允许这种沟通不畅的情况继续下去。
交钥匙工具
EDRSandBlast是一种利用易受攻击的驱动程序来绕过 AV 和 EDR 软件的工具。 它可以修改内核内存以删除 AV 和 EDR 安装的钩子,暂时或永久地使它们对系统上的恶意活动视而不见。
正如我在 Black Hat Asia 演讲中所讨论的那样,MSRC 事实上已经表明他们不愿意为管理员到 PPL 和管理员到内核的漏洞提供服务,并且需要 GitHub 上存在交钥匙工具来促使微软采取行动。 这促使我将管理员到 PPL 漏洞利用PPLFault和管理员到内核漏洞利用链GodFault作为易于使用的工具发布在 GitHub 上。 为简洁起见,下面我们分别将它们称为“PPL 漏洞”和“内核漏洞”。
本着同样的“交钥匙工具”精神,为了强调阻止已知易受攻击的驱动程序与同时拒绝修补管理员到内核的漏洞链之间的不一致性,我发布了一个集成 PPLFault 的 EDRSandBlast 版本来展示相同的结果,但没有易受攻击的驱动程序。 您可以在此处看到禁用 Windows Defender 驱动程序。 我发布此消息的目的是促使 MSRC 更加紧急地处理 PPL 和内核漏洞。
减轻
我与 PPLFault 和 GodFault 一起发布了一个名为NoFault的小型内核驱动程序,它可以破解 PPL 漏洞。 在 Windows 修复之前,反恶意软件供应商可以使用此代码来缓解 PPL 漏洞。 我们已将 NoFault 的保护纳入了最新版本的 Elastic Endpoint/Defend - 如果您还没有更新,请更新至 8.9.0+。 一个全面的修复方法是让内存管理器对所有加载到 PPL 中的可执行映像强制执行页面哈希,此功能已在完全受保护的进程中使用。
GodFault 并不是第一个利用内核漏洞的工具。 ANGRYORCHARD首先将其与现已修补的KnownDLLs PPL 漏洞一起使用。 PPL 漏洞已修复,但内核漏洞尚未修复。 我能够轻松地重用 GodFault 中的内核漏洞——只需几行代码。 如果不修补,那么任何未来的 PPL 漏洞都会立即链接到内核。 请注意,NoFault 通过阻止其必要的 PPL 代码执行来破坏内核漏洞链,但不会修复内核漏洞本身。
讨论
使 EDRSandBlast 无需驱动程序只是利用此类漏洞可以做的事情的一个例子。 管理员到内核的漏洞可以启用一系列在用户模式下通常不可能实现的恶意软件功能,其中包括:
- 禁用内核模式遥测,包括进程、线程、对象管理器、文件系统和注册表回调。 EDRSandBlast 可以完成其中的一些任务。
- 禁用内核 ETW 记录器
- 终止和/或将恶意软件注入PPL 反恶意软件进程
- 绕过 LSA RunAsPPL 转储凭据或篡改 Credential Guard
- 读取/写入以 PPL 形式运行的屏蔽 VM 工作进程的内存
- 以比反恶意软件更高的权限运行恶意软件,这样它就无法在用户模式下被扫描或终止
- 实现 rootkit 行为,例如隐藏进程、文件和注册表项
- 获得物理内存的完全读写访问权限
这种内核驱动的功能通常由 BYOVD 启用, 经常 被 犯罪分子 用来 破坏 和 降低 安全 产品的 性能 ,从而使其能够伤害个人和企业。PPL 和内核漏洞实现了这些相同的功能,因此 MSRC 需要在威胁行为者滥用它们之前而不是之后主动对其进行维护。
我不想低估这个问题的难度——保护内核免受管理员的攻击非常困难,而且随着新的绕过方法的出现,需要不断努力。 这个问题不会得到解决,而是一场艰难且持续的军备竞赛。 幸运的是,微软最近采取了一种新的理念,“不再回避困难的事情”(带时间戳的链接)。 解决这些类型的漏洞是影响当今 Windows 安全的“难题”,微软可以采取一些措施,同时朝着无管理员未来的愿景迈进。 他们是一家资金雄厚的大型公司,拥有众多聪明人才,能够同时解决多个问题。
结论
微软创建了易受攻击的驱动程序阻止列表,以阻止管理员篡改内核,但是对于 11 个月前报告的管理员到内核漏洞链,他们却没有采取任何措施。 通过 GodFault 从 EDRSandBlast 中删除易受攻击的驱动程序要求 ,我希望证明管理员对内核的攻击与易受攻击的驱动程序一样危险,并且 MSRC 需要认真对待它们。鉴于 Windows 11 的默认安全目标以及现在默认启用易受攻击的驱动程序阻止列表的事实,MSRC 需要重新考虑其对 PPL 和内核漏洞的漠视政策。