BlackLotus:首个绕过安全启动的 UEFI Bootkit(上篇)
· 2 分钟阅读 · @admin

UEFI Bootkit 是一类部署在系统固件层面的恶意软件,能够在操作系统启动之前获得完全控制权。由于其运行在启动链的最底层,Bootkit 可以禁用操作系统级别的安全机制,并在启动过程中以最高权限执行恶意代码。
BlackLotus 是首个能够成功绕过 UEFI 安全启动(Secure Boot)保护的 Bootkit。它利用编号为 CVE-2022-21894 的安全漏洞,在操作系统早期启动阶段实现任意代码执行,从而允许攻击者在已启用 UEFI 安全启动的系统上部署持久化恶意程序,而无需物理访问目标设备。
这种攻击方式突破了 Windows 安全启动机制的核心防护,对系统安全构成了严重威胁。
二、攻击流程概览
下图展示了 BlackLotus 的完整攻击流程:

三、详细技术分析
3.1 反调试技术
BlackLotus 恶意程序采用了多种反调试和反虚拟机技术,以规避安全软件的检测和安全研究人员的分析。这些防护机制贯穿多个函数,并在关键位置设置了暗桩代码进行检测。一旦检测到调试器,程序会执行无效指令,通过触发异常使自身退出。
3.1.1 ThreadHideFromDebugger 隐藏技术
恶意程序设置 ThreadHideFromDebugger 标志,将线程从调试器中隐藏。这会阻止调试器接收调试事件,导致调试器无法正常工作而卡死。

3.1.2 PEB BeingDebugged 检测
检测进程环境块(PEB)结构中的 BeingDebugged 字段是否为 0,以判断进程是否被调试器附加。
![]()
3.1.3 PEB NtGlobalFlag 检测
检测 PEB 结构中的 NtGlobalFlag 字段是否为 0x70。在调试状态下,该字段会包含特定的标志位组合(FLG_HEAP_ENABLE_TAIL_CHECK、FLG_HEAP_ENABLE_FREE_CHECK、FLG_HEAP_VALIDATE_PARAMETERS),因此可以作为调试检测指标。
![]()
3.1.4 进程调试状态查询
通过查询进程信息(ProcessDebugPort 或 ProcessDebugFlags)判断进程是否处于调试状态。

3.1.5 内核调试器检测
检测系统是否存在内核调试器(Kernel Debugger)。

3.1.6 异常处理劫持检测
恶意程序设置异常处理函数,然后主动触发 INT 异常。如果异常被调试器接管,则异常处理函数不会被执行;反之,如果异常处理函数正常执行,则表明进程未被调试。

异常处理函数执行流程如下图所示:

3.1.7 模块加载检测
检测进程是否加载了特定模块。由于模块名称被哈希化硬编码,无法直接反推出具体的模块名称,但推测可能是常见的调试工具或安全软件相关模块。

3.1.8 进程遍历检测
遍历系统中所有运行的进程,将进程名与硬编码的哈希值进行匹配,可能用于检测调试器、逆向工具或安全软件进程。

3.1.9 RDTSC 指令检测
利用 RDTSC(Read Time-Stamp Counter)指令检测代码执行的时间间隔。在调试环境下,单步执行会导致指令间隔异常增大,从而暴露调试行为。

3.2 反虚拟机技术
3.2.1 注册表检测
查询以下注册表项是否存在,以检测虚拟机环境:

3.2.2 虚拟机厂商检测
检查以下注册表键值是否包含 VMware、QEMU、VirtualBox 等虚拟机标识:
3.2.3 系统固件信息检测
检查系统固件(SMBIOS)信息中是否包含 QEMU、VirtualBox、VMware 等特征字符串。

3.2.4 ACPI 表检测
检查系统 ACPI 表中是否包含 Bochs、BXPC、VMware 等虚拟机特征标识。

3.2.5 网卡 MAC 地址检测
从注册表获取网卡的 ServiceName,然后通过发送控制码 0x170002 获取网卡的 MAC 地址,并与硬编码的虚拟机网卡 MAC 地址前缀进行比对(如 VMware 的 00:05:69、00:0C:29、00:50:56 等)。

3.3 UAC 绕过技术
当恶意程序确认未处于调试或虚拟机环境后,会检查自身是否具有足够的权限(至少需要管理员权限)来执行以下操作:
- 将 Bootkit 文件释放到 EFI 系统分区(ESP)
- 修改系统启动配置
- 禁用 HVCI(Hypervisor-Protected Code Integrity)等安全功能
恶意程序通过获取当前进程的访问令牌(Token)判断是否已具有管理员权限。如果权限不足,则使用 UAC 绕过技术进行提权。

3.3.1 程序兼容性助手(PCA)提权
BlackLotus 主要通过滥用程序兼容性助手(Program Compatibility Assistant)服务实现 UAC 绕过,具体步骤如下:
- 伪造 DLL 文件:创建恶意的
pcadm.dll文件 - 伪造环境变量:修改
windir环境变量,指向恶意 DLL 所在路径 - 确保服务运行:确保 PcaSvc 服务处于启动状态
- 触发加载事件:通过特定操作触发 PcaSvc 服务加载伪造的
pcadm.dll - 创建高权限进程:在 DLL 中创建新进程执行恶意操作,继承 PcaSvc 服务的高权限
伪造的 pcadm.dll 从被篡改的环境变量中读取恶意程序的完整路径,并利用 PcaSvc 服务的高权限创建子进程,从而绕过 UAC 提升权限。

3.4 Bootkit 部署
3.4.1 安全启动状态检测
在部署 Bootkit 之前,恶意程序首先判断系统是否启用了安全启动(Secure Boot)功能。检测方法有两种:
- 系统版本检测:通过检查 Windows 版本号判断。安全启动功能是在 Windows 8(版本号 6.2)及以后的操作系统中引入的
- 环境变量检测:读取系统环境变量
SecureBoot的值,判断该功能是否已启用

3.4.2 不同场景下的部署策略
BlackLotus 根据安全启动的启用状态采取不同的部署策略:
场景一:未启用安全启动
如果目标系统未启用或禁用了安全启动功能,部署过程相对简单。恶意程序只需使用自签名的恶意 UEFI 应用直接替换 ESP 分区中的 Windows 启动管理器(bootmgfw.efi)即可。
场景二:已启用安全启动
如果目标系统已启用安全启动,BlackLotus 会部署一系列精心设计的文件组合,利用 CVE-2022-21894 漏洞绕过安全启动验证。所有文件部署完毕后,恶意程序会等待 60 秒,然后重启系统。系统重启后,恶意的 grubx64.efi 将首先被加载执行。
3.4.3 Bootkit 文件清单
下表列出了在安全启动启用状态下部署的所有 Bootkit 相关文件:
| 目录 | 文件名 | 说明 |
|---|---|---|
ESP:\EFI\Microsoft\boot |
grubx64.efi |
自签名的恶意 UEFI 应用(主要 Bootkit 载荷) |
bootload.efi |
具有微软数字签名的合法应用(用于漏洞利用链) | |
bootmgfw.efi |
具有微软数字签名的合法应用(包含 CVE-2022-21894 漏洞) | |
BCD |
攻击者自定义的 BCD 启动配置数据 | |
BCDR |
受害者原始 BCD 启动配置的备份 | |
ESP:\system32 |
hvloader.efi |
具有微软数字签名的合法应用 |
bootmgr.efi |
具有微软数字签名的合法应用 | |
mcupdate_AuthenticAMD.dll |
自签名的恶意程序,用于 CVE-2022-21894 漏洞利用(AMD 平台) | |
mcupdate_GenuineIntel.dll |
自签名的恶意程序,用于 CVE-2022-21894 漏洞利用(Intel 平台) | |
BCD |
攻击者自定义的 BCD 启动配置数据 |
关键说明:
- 包含微软数字签名的合法文件用于构建漏洞利用链
mcupdate_*.dll文件针对不同 CPU 厂商的微码更新机制进行漏洞利用- BCD(Boot Configuration Data)配置被篡改以加载恶意 UEFI 应用
3.5 禁用虚拟机监控程序保护的代码完整性(HVCI)
3.5.1 HVCI 功能概述
为了能够在 Bootkit 安装后执行任意的未签名内核代码,BlackLotus 需要禁用 HVCI(Hypervisor-Protected Code Integrity) 功能。
HVCI 是 Windows 基于虚拟化的安全(VBS)技术的重要组成部分,它利用虚拟机监控程序(Hypervisor)在隔离环境中验证内核代码的完整性。HVCI 的主要防护机制包括:
- 检测内核代码是否被篡改
- 仅允许执行经过数字签名的代码
- 有效防止易受攻击的内核驱动被滥用
- 阻止加载未签名的恶意内核驱动
3.5.2 禁用方法
BlackLotus 通过修改注册表来禁用 HVCI 功能:

具体操作为修改以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity\Enabled = 0
3.6 社会工程学防护
3.6.1 伪造系统更新窗口
在释放 Bootkit 相关文件的过程中,为防止受害者关闭或重启计算机导致文件部署失败,BlackLotus 会显示一个伪造的系统提示窗口,诱导受害者不要进行任何操作。

该提示窗口可能伪装成:
- Windows 更新安装界面
- 系统配置进度提示
- 重要系统维护警告
这种社会工程学手段确保了恶意文件能够完整部署,提高了攻击的成功率。
小结
本文详细分析了 BlackLotus UEFI Bootkit 的初始阶段攻击流程,包括其复杂的反调试和反虚拟机机制、UAC 绕过技术、Bootkit 部署策略以及对系统安全功能的禁用操作。
在下篇文章中,我们将深入分析 BlackLotus 部署后的运行机制,包括:
- 恶意 EFI 应用的执行流程
- 安全启动绕过的具体实现
- 恶意内核驱动的注入与持久化
- HTTP 下载器的通信机制
- Bootkit 的自我保护措施
敬请期待下篇内容。

