BlackLotus绕过安全启动并使用MOK-2022-21894漏洞
创始人
2025-11-03 09:05:42
0

怎样解除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下载器的基础知识:

内核驱动程序负责:

相关内容

热门资讯

好... 在2024年的编程畛域,把握这10大利器,你将成为业界的佼佼者 互联网时代的节拍突飞猛进,尤其是Ch...
软... 软件开发可以属于多个专业,详细归属于哪个专业取决于不同的教育机构和学术体系。以下是一些常常出现的专业...
小... Scratch和都是适宜小在校生收费学习编程的软件。 首先,Scratch是一款由麻省理工学院(...
电... 疑问一:计算机编程软件有哪些?1. C/C++言语:Visual C++、Code::Blocks、...
编... 编程介绍经常使用Visual Studio、Eclipse或PyCharm等软件工程。 以下是关于这...
十... 1、MyEclipse——是以Eclipse为基础添加收回的一款企业级集成开发环境,用于Java、J...
不... 不属于计算机运行软件的是阅读器是失误的,应该是显示器。 计算机软件(Computer Softwar...
有... ERP中文称号为企业资源方案,是一种关键面向制作行业启生物质资源、资金资源和消息资源集成一体化治理的...
数... 数据中神思房树立规范包含装璜要求、供配电系统要求、空调新风系统要求、防雷接地系统要求、能源环境监控系...
数... 不属于。 数据库治理系统属于系统软件。 软件分为系统软件和运行软件两大类,系统软件关键包含:...
数... 数据库治理系统的关键配置如下:1、数据定义。 DBMS提供数据定义言语DDL,供用户定义数据库...
数... 数据库治理系统是系统软件,分类如下:软件系统分为系统软件和运行软件;而系统软件分为四个方面:操作系统...
计... 计算机软件系统理论被分为系统软件和运行软件两大类。 一、软件系统 1、操作系统:是系统软件的中心。 ...
电... 电脑中经常出现的英语 CPU(Center Processor Unit)中央处置单元 mainbo...
数... 对于数据库治理系统是系统软件吗,数据库治理系统有哪些这个很多人还不知道,当天来为大家解答以上的疑问,...
数... 数据库治理系统是一种能对计算机中所寄存的少量数据启动治理和控制的系统软件。 数据库治理系统的作用...
小... 作为一个国产手机喜好者,我不时都允许国产手机,目前我用的就是小米,如今手机因为app较多,所以经常会...
2... 该软件是指数据库治理系统,英文简称为DBMS,属于系统软件。 治理数据库的软件是数据库治理系统(...
卖... 卖哪些软件可以赚钱? 一、 1. 办公软件 2. 网络安保软件 3. 游戏软件 4. 软件开发工具 ...
网... 网络安保排名,居前十的有:奇安信、坚信服SANGFOR、华为HUAWEI、天融信TOPSEC、启明星...