发布信息

BlackLotus绕过安全启动并使用MOK-2022-21894漏洞

作者:软荐小编      2023-09-22 22:03:11     209

怎样解除windows阻止无法验证软件发行者_验证解除限制以继续使用该功能_阻止证书错误

验证解除限制以继续使用该功能_怎样解除windows阻止无法验证软件发行者_阻止证书错误

绕过安全启动并构建持久性

在本节中,我们将仔细研究 BlackLotus 如何在支持 UEFISecureBoot 的系统上实现持久性。 由于我们要描述的执行链很复杂,因此我们将首先解释基本原理,然后深入探讨技术细节。

简而言之,该过程包括两个关键步骤:

绕过安全启动功能并在 CVE-2022-21894 的帮助下安装 bootkit。 这允许在初始启动阶段执行任意代码,同时平台仍由固件拥有,并且 UEFI 启动服务功能仍然可用。 这使得攻击者能够在没有数学访问的情况下在支持 UEFI SecureBoot 的设备上执行许多他们不应该执行的操作,例如更改仅用于启动服务的 NVRAM 变量。 这就是攻击者下一步所依赖的来设置 bootkit 的持久性。 持久性是通过将自己的 MOK 写入 MokList 来设置的,Boot 仅提供 NVRAM 变量。 这样,它就可以使用合法的 Microsoft 签名垫片加载其自签名(由写入 MokList 的密钥的公钥签名)UEFI bootkit,而不是在每次启动时都利用该漏洞。 有关这方面的更多信息,请参阅 Bootkit 持久性部分。

为了使接下来两部分的分析更加容易,研究人员将按照执行图(右)所示的步骤进行操作。

验证解除限制以继续使用该功能_怎样解除windows阻止无法验证软件发行者_阻止证书错误

使用 MOK 绕过安全启动并设置持久性

验证解除限制以继续使用该功能_怎样解除windows阻止无法验证软件发行者_阻止证书错误

具有 CVE-2022-21894

为了绕过安全启动,BlackLotus 使用了 batondrop 漏洞 (CVE-2022-21894):安全启动安全功能绕过漏洞。 尽管该漏洞对系统安全影响较大,但并未得到应有的重视。 尽管谷歌在2022年1月的更新中修复了该漏洞,但攻击者仍然可能利用该漏洞,因为受影响的二补码文件尚未添加到UEFI取消列表中。 为此,攻击者可以将自己的易受攻击的二进制补码文件副本带到受害者的设备上,以利用此漏洞并绕过最新 UEFI 系统上的安全启动。

据报道,针对该漏洞的概念验证(PoC)漏洞自 2022 年 8 月以来已公开。考虑到 BlackLotusVirusTotal 首次提交的日期,恶意软件开发人员有可能只是简单地根据自己的需求调整了可用的 PoC,而没有深入了解漏洞的工作原理。

我们先简单介绍一下该漏洞,主要来自GitHub上发布的文章和PoC的要点:

受影响的 Windows 启动应用程序(例如 bootmgr.efi、hvloader.efi、winload.efi...)允许在应用程序加载策略之前使用 truncatememoryBCD 启动选项从视频内存中删除序列化的安全启动策略。

这使得攻击者可以使用其他危险的 BCD 选项(例如 bootdebug、testsigning 或 nointegridchecks)来破坏安全启动。

有多种方法可以利用此漏洞 - 其中三种已在 PoC 存储库中发布。

例如,其中一个 PoC 展示了如何使用它来使合法的 hvloader.efi 加载任意自签名的 mcupdate_

现在,我们继续介绍BlackLotus如何利用该漏洞:

1.安装程序重新启动机器后,UEFI固件将继续加载第一启动选项。 对于 Windows 系统,默认情况下,第一个启动选项是 bootmgfw.efi,位于 ESP 上的 ESP:/efi/Microsoft/boot 文件夹中。 这次,固件没有执行原始受害者的 bootmgfw.efi(安装程序已将其重命名为 winload.efi),而是执行安装程序部署的易受攻击的启动。

2.执行bootmgfw.efi后,会加载BCD启动选项,该选项最初是由安装程序更改的。 右图是合法的BCD和改变后的BCD的对比。

3、如右图所示(红色下划线的路径),合法的WindowsBootManager一般会加载WindowsOS加载程序(\Windows\system32\winload.efi)作为默认启动应用程序。 但这一次,使用更改后的BCD,它继续加载有漏洞的ESP:\ system32 \ bootmgr.efi,防止显存BCD元素被设置为值0x10000000,但custom:22000023BCD指向ESP中存储的另一个漏洞:\system32\BCD 中的 BCD。

怎样解除windows阻止无法验证软件发行者_阻止证书错误_验证解除限制以继续使用该功能

合法 BCD 存储(之前)与 BlackLotus 安装程序使用的存储(之后)的比较

4. 在下一步中,执行的 ESP:\system32\bootmgr.efi 会加载位于 ESP:\system32\BCD 中的附加 BCD。 这个附加BCD的分析内容如右图所示。

验证解除限制以继续使用该功能_怎样解除windows阻止无法验证软件发行者_阻止证书错误

BlackLotus 安装程序删除的第二个 BCD - 用于利用 CVE-2022-21894

5. 由于选项是从上面所示的 BCD 文件加载的,因此 bootmgr.efi 将继续加载安装程序部署的另一个存在漏洞的 Windows 启动应用程序 ESP:\system32\hvloader.efi,即 Windows HypervisorLoader。 此外怎样解除windows阻止无法验证软件发行者,在同一个 BCD 文件中还指定了其他 BCD 选项:

截断内存,值设置为 0x10000000;

nointegridchecks 设置为“是”;

testsigning 也设置为 Yes;

这是当发生意外情况时,因为序列化的安全启动策略应该加载到 0x10000000 以上的数学地址处(由于在上述步骤中使用了voidlowmemory),并且指定 truncatmemory 元素将有效地删除它。 为此,请破坏安全启动并允许危险的 BCD 选项,例如 nointegritychecks 或 testsigning。 通过使用这些选项,攻击者可以导致 hvloader.efi 执行他们自己的自签名代码。

6. 因此,使用本PoC中描述的方法,即在执行过程中,从以下位置加载合法的hvloader.efi

怎样解除windows阻止无法验证软件发行者_验证解除限制以继续使用该功能_阻止证书错误

从合法的hvloader.efi反编译BtLoadUpdateDll函数,负责加载mcupdate_*.dll

7. 现在,当攻击者自己的自签名 mcupdate*.dll 被加载并执行时,它会继续执行链中的最后一个组件 - 嵌入式 MokInstaller(UEFI 应用程序) - 请参阅图 10 以了解它是如何完成的。

阻止证书错误_验证解除限制以继续使用该功能_怎样解除windows阻止无法验证软件发行者

Hex-Rays反编译恶意自签名mcupdate*.dll二进制补码代码

验证解除限制以继续使用该功能_怎样解除windows阻止无法验证软件发行者_阻止证书错误

Bootkit持久化

MokInstaller 现在可以通过将攻击者的 MOK 注册到 NVRAM 变量中并将合法的 Microsoft 签名的补码文件设置为默认引导加载程序来继续设置持久性。

shim 是由 Linux 开发人员开发的第一阶段 UEFI 引导加载程序,使各种 Linux 发行版能够与 UEFISecureBoot 配合使用。 它是一个简单的应用程序怎样解除windows阻止无法验证软件发行者,其目的是加载、验证和执行另一个应用程序,在Linux系统中它通常是GRUB引导加载程序。 它的工作方式是,Google 只需签署一个垫片,垫片就会处理其余的事情,它可以通过使用 dbUEFI 变量中的密钥来验证第二阶段引导加载程序的完整性,并且还可以嵌入自己的“允许”或“取消”密钥或哈希列表,以确保平台和 shim 开发人员(例如 Canonical、RedHat 等)信任的组件被允许执行。 除了这个列表之外,shim还允许使用用户管理的外部密钥数据库,即MOK列表。 该 MOK 数据库存储在名为 MokList 的仅引导 NVRAM 变量中。 在启用 UEFI SecureBoot 的系统上需要进行化学访问才能更改它,而无需诉诸上述漏洞(仅在引导期间可用,在系统加载程序调用 UEFI 引导服务函数 ExitBootServices 之前)。 然而,通过利用此漏洞,攻击者可以绕过 UEFISecureBoot 并在调用 ExitBootServices 之前执行自己的自签名代码,这样他们就可以轻松注册自己的密钥(通过更改 MokListNVRAM 变量),从而允许 shim 执行任何应用程序(签名的应用程序)通过注册密钥)不会导致安全违规。

怎样解除windows阻止无法验证软件发行者_验证解除限制以继续使用该功能_阻止证书错误

MOK启动流程

8. MokInstallerUEFI 应用程序继续为 BlackLotus UEFI bootkit 设置持久性并通过以下方式覆盖跟踪:

8.1 从安装程序创建的备份中恢复受害者的原始 BCD 存储,并将 efi 替换为安装程序最初放置在 ESP:\system32\bootload.efi 中的合法 Microsoft 签名填充程序。

8.2 创建包含攻击者自签名私钥证书的 MokListNVRAM 变量。 请注意,此变量的格式与任何其他 UEFI 签名数据库变量(例如 db 或 dbx)的格式相同,后者可以由零个或多个 EFI_signature_LIST 类型的签名列表组成,如 UEFI 规范中所定义。

8.3 从攻击者的ESP:\system32\文件夹中删除所有参与攻击的文件。

最后,它会重新启动计算机,以便部署的 shim 执行安装程序,从 \EFI\Microsoft\Boot\grub64.EFI 中删除自签名的 bootkit。 grub64.EFI 通常是在 x86-64 系统上执行的默认第二个 shim。 阶段引导加载程序。

验证解除限制以继续使用该功能_阻止证书错误_怎样解除windows阻止无法验证软件发行者

HexRays 反编译代码 - MokInstallerUEFI 应用程序为 BlackLotusbootkit 设置持久性

验证解除限制以继续使用该功能_怎样解除windows阻止无法验证软件发行者_阻止证书错误

BlackLotusUEFI启动套件

配置持久性后,每次系统启动时都会执行 BlackLotusbootkit。 bootkit 的目标是部署内核驱动程序和最终的用户模式组件 - HTTP 下载器。 在执行过程中,它会尝试禁用其他 Windows 安全功能 - 基于虚拟化的安全性 (VBS) 和 Windows Defender - 以增加成功部署和秘密操作的机会。 在详细介绍如何实现之前,我们首先了解一下内核驱动程序和HTTP下载器的基础知识:

内核驱动程序负责:

相关内容 查看全部