如何绕过安全启动修复 Win10 / Win11 上 BlackLotus UE
ESET 安全研究人员于今年 3 月发现了1688黄页,被认为是首个可以在 Win11 系统上绕过 Secure Boot 的 UEFI bootkit 恶意软件。
微软于今天面向 Win10、Win11、Windows Server 发布了 更新如何绕过安全启动修复 Win10 / Win11 上 BlackLotus UE,重点修复了这个追踪编号为 CVE-2023-24932 的漏洞。
附微软官方摘要信息如下:
本文介绍如何使用由 CVE-2023-24932 跟踪的 UEFI bootkit 来防止安全启动安全功能绕过公开披露,以及如何启用保护和指南来更新可启动媒体。
bootkit 是一个恶意程序,旨在尽早在设备的序列中加载,以便控制操作系统启动。
安全启动建议 通过 Windows 内核的受信任启动序列从统一可扩展固件接口 (UEFI) 创建安全且受信任的路径。
安全启动有助于防止启动序列中的 bootkit 恶意软件。禁用安全启动会使设备面临被 bootkit 恶意软件感染的风险。
修复 CVE-2023-24932 中所述的安全启动绕过需要撤销启动管理器。这可能会导致某些设备的启动配置出现问题。
2023 年 5 月 9 日的安全更新提供了配置选项,用于手动启用安全启动绕过保护,但不会自动启用这些保护。
在启用这些保护之前,必须验证设备和所有可启动媒体是否已更新并准备好进行此安全强化更改。
使用 基于云的解决方案的客户应遵循 更新可启动媒体 / Azure 云 中的指南。
绕过安全启动并建立持久性
在本部分中,我们将详细了解如何在启用UEFI Secure Boot的系统上实现持久性。由于我们将要描述的执行链非常复杂,我们将首先解释基本原理,然后深入了解技术细节。
简而言之,该过程包括两个关键步骤:
利用CVE-2022-21894绕过安全启动功能并安装 bootkit。这允许在早期启动阶段任意执行代码,此时平台仍然由固件拥有,UEFI启动服务功能仍然可用。这使得攻击者可以在没有物理访问权限的情况下,在启用了UEFI Secure Boot的设备上做许多不应该做的事情,例如修改仅用于启动服务的NVRAM变量。这就是攻击者在下一个步骤中为 bootkit设置持久性所利用的。通过将自己的MOK写入MokList来设置持久性,Boot仅服务NVRAM变量。这样,它可以使用合法的 -signed shim加载其自签名(由写入MokList的密钥的私钥签名),而不是在每次启动时利用该漏洞。有关这一点的更多信息,请参阅Bootkit持久性部分。
为了使下面两部分的分析更容易,研究人员将遵循执行图(下图)中所示的步骤。
绕过安全启动并使用MOK设置持久性
利用CVE-2022-21894
为了绕过安全启动,使用baton drop漏洞(CVE-2022-21894):安全启动安全功能绕过漏洞。尽管这个漏洞对系统安全影响很大,但它并没有得到应有的重视。尽管微软在2022年1月的更新中修复了该漏洞,但由于受影响的二进制文件仍未添加到UEFI取消列表中,因此攻击者仍有可能利用该漏洞。因此,攻击者可以将他们自己的易受攻击的二进制文件副本带到受害者的设备上,以利用此漏洞并绕过最新UEFI系统上的安全启动。
此外,自2022年8月以来,针对该漏洞的概念证明(PoC)漏洞已公开可用。考虑到第一次 提交的日期,恶意软件开发人员可能只是根据他们的需要调整了可用的PoC,而不需要深入了解此漏洞的工作原理。
让我们先简单介绍一下该漏洞,主要是与PoC一起发布在GitHub上的文章中的关键点:
受影响的Windows启动应用程序(如bootmgr.efi、.efi、winload.efi…)允许在应用程序加载序列化安全启动策略之前,使用 BCD启动选项从内存中删除该策略。
这允许攻击者使用其他危险的BCD选项,如、或,从而破坏安全启动。
有多种方法可以利用此漏洞——其中三种方法已发布在PoC存储库中。
例如,其中一个PoC显示了如何利用它使合法的.efi加载任意的自签名
现在,我们继续介绍如何利用此漏洞:
1.安装程序重新启动机器后,UEFI固件将继续加载第一个启动选项。对于Windows系统,默认情况下,第一个启动选项是位于ESP上ESP:/efi//boot文件夹中的.efi。这一次,固件没有执行原始受害者的.efi(安装程序以前将其重命名为winload.efi),而是执行安装程序部署的易受攻击的启动。
2.执行.efi后,它将加载BCD启动选项微软数字签名验证拒绝服务漏洞,该选项先前由安装程序修改。下图显示了合法BCD和修改后BCD的比较。
3.如下图所示(路径以绿色划线),合法的Windows Boot Manager通常会将Windows OS加载程序(\Windows\\winload.efi)作为默认启动应用程序加载。但这一次,使用修改后的BCD,它继续加载易受攻击的ESP:\\bootmgr.efi,避免内存BCD元素设置为值,并且custom: BCD指向另一个攻击者存储在ESP:\\BCD中的BCD。
合法BCD存储(BEFORE)与安装程序使用的存储(AFTER)的比较
4.在下一步中,执行的ESP:\\bootmgr.efi加载位于ESP:\\BCD中的附加BCD。这个附加BCD的解析内容如下图所示。
安装程序释放的第二个BCD——用于利用CVE-2022-21894
5.由于从上图所示的BCD文件加载了选项,bootmgr.efi将继续加载安装程序部署的另一个易受攻击的Windows启动应用程序ESP:\\.efi,即Windows Loader。更重要的是,在同一BCD文件中指定了其他BCD选项:
值设置为的;
设置为Yes;
也设置为Yes;
此时就会发生意想不到的事情,由于序列化的安全启动策略应该在以上的物理地址中加载(因为前面步骤中使用了),指定元素将有效地删除它。因此,中断安全启动并允许使用危险的BCD选项,如或。通过使用这些选项,攻击者可以使.efi执行自己的自签名代码。
6.为此,使用此PoC中描述的技巧,即在执行过程中微软数字签名验证拒绝服务漏洞,合法的.efi从
从合法的.efi反编译函数,负责加载*.dll
7.现在,随着攻击者自己的自签名*.dll被加载和执行,它将继续执行这个链中的最后一个组件——一个嵌入式 (UEFI应用程序)——参见图10了解它是如何完成的。
Hex-Rays反编译恶意自签名*.dll二进制代码
Bootkit持久性
现在,可以继续设置持久性,方法是将攻击者的MOK注册到NVRAM变量中,并将合法的签名的shim二进制文件设置为默认启动加载程序来继续设置持久性。
shim是由Linux开发人员开发的第一阶段UEFI启动加载程序,用于使各种Linux发行版与UEFI Secure Boot一起工作。它是一个简单的应用程序,其目的是加载、验证和执行另一个应用程序,在Linux系统中,它通常是GRUB启动加载程序。它的工作方式是,微软只签署一个shim, shim负责其余的工作,它可以通过使用db UEFI变量中的密钥来验证第二阶段启动加载器的完整性,还可以嵌入自己的“允许”或“取消”项或哈希列表,以确保平台和shim开发人员(例如, RedHat等)都信任的组件被允许执行。除了这些列表之外,shim还允许使用用户管理的外部密钥数据库,即MOK列表。该MOK数据库存储在名为MokList的仅启动NVRAM变量中。在不利用上述漏洞的情况下,需要物理访问才能在启用UEFI Secure Boot的系统上对其进行修改(仅在启动期间,在系统加载程序调用UEFI启动服务函数之前可用)。然而,通过利用此漏洞,攻击者能够绕过UEFI Secure Boot并在调用之前执行自己的自签名代码,因此他们可以轻松注册自己的密钥(通过修改MokList NVRAM变量),使填充程序执行任何应用程序(由该注册密钥签名),而不会导致安全违规。
MOK启动过程
8. UEFI应用程序继续为 UEFI bootkit设置持久性,并通过以下方式覆盖利用痕迹:
8.1 从安装程序创建的备份中恢复受害者的原始BCD存储,并将efi替换为合法的签名shim,该shim先前由安装程序放置到ESP:\\.efi中。
8.2创建包含攻击者自签名公钥证书的MokList NVRAM变量。请注意,此变量的格式与任何其他UEFI签名数据库变量(如db或dbx)的格式相同,它可以由零个或多个类型的签名列表组成,如UEFI规范中所定义。
8.3 从攻击者的ESP:\\文件夹中删除涉及攻击的所有文件。
最后,它会重新启动计算机,使部署的shim执行安装程序从\EFI\\Boot\grub64.EFI中删除自签名bootkit,grub64.EFI通常是x86-64系统上shim执行的默认第二阶段启动加载程序。
Hex Rays反编译代码—— UEFI应用程序为 bootkit设置持久性
UEFI bootkit
一旦配置了持久性,就会在每次系统启动时执行 bootkit。 bootkit的目标是部署一个内核驱动程序和一个最终的用户模式组件——HTTP下载器。在执行过程中,它试图禁用其他Windows安全功能——基于虚拟化的安全(VBS)和Windows ——以提高成功部署和隐形操作的机会。在详细介绍如何实现之前,让我们先了解一下内核驱动程序和HTTP下载器的基本知识:
内核驱动程序负责:
【本文来源于互联网转载,如侵犯您的权益或不适传播,请邮件通知我们删除】