8-BitQuest
菜单
[恶意软件分析]

BlackLotus:首个绕过安全启动的 UEFI Bootkit(上篇)

· 2 分钟阅读 · @admin

BlackLotus UEFI bootkit 上篇像素封面

UEFI Bootkit 是一类部署在系统固件层面的恶意软件,能够在操作系统启动之前获得完全控制权。由于其运行在启动链的最底层,Bootkit 可以禁用操作系统级别的安全机制,并在启动过程中以最高权限执行恶意代码。

BlackLotus 是首个能够成功绕过 UEFI 安全启动(Secure Boot)保护的 Bootkit。它利用编号为 CVE-2022-21894 的安全漏洞,在操作系统早期启动阶段实现任意代码执行,从而允许攻击者在已启用 UEFI 安全启动的系统上部署持久化恶意程序,而无需物理访问目标设备。

这种攻击方式突破了 Windows 安全启动机制的核心防护,对系统安全构成了严重威胁。

二、攻击流程概览

下图展示了 BlackLotus 的完整攻击流程:

BlackLotus 攻击流程图

三、详细技术分析

3.1 反调试技术

BlackLotus 恶意程序采用了多种反调试和反虚拟机技术,以规避安全软件的检测和安全研究人员的分析。这些防护机制贯穿多个函数,并在关键位置设置了暗桩代码进行检测。一旦检测到调试器,程序会执行无效指令,通过触发异常使自身退出。

3.1.1 ThreadHideFromDebugger 隐藏技术

恶意程序设置 ThreadHideFromDebugger 标志,将线程从调试器中隐藏。这会阻止调试器接收调试事件,导致调试器无法正常工作而卡死。

ThreadHideFromDebugger 设置

3.1.2 PEB BeingDebugged 检测

检测进程环境块(PEB)结构中的 BeingDebugged 字段是否为 0,以判断进程是否被调试器附加。

PEB BeingDebugged 检测

3.1.3 PEB NtGlobalFlag 检测

检测 PEB 结构中的 NtGlobalFlag 字段是否为 0x70。在调试状态下,该字段会包含特定的标志位组合(FLG_HEAP_ENABLE_TAIL_CHECK、FLG_HEAP_ENABLE_FREE_CHECK、FLG_HEAP_VALIDATE_PARAMETERS),因此可以作为调试检测指标。

PEB NtGlobalFlag 检测

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)指令检测代码执行的时间间隔。在调试环境下,单步执行会导致指令间隔异常增大,从而暴露调试行为。

RDTSC 时间检测

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 等虚拟机特征标识。

ACPI 表检测

3.2.5 网卡 MAC 地址检测

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

网卡 MAC 地址检测

3.3 UAC 绕过技术

当恶意程序确认未处于调试或虚拟机环境后,会检查自身是否具有足够的权限(至少需要管理员权限)来执行以下操作:

  • 将 Bootkit 文件释放到 EFI 系统分区(ESP)
  • 修改系统启动配置
  • 禁用 HVCI(Hypervisor-Protected Code Integrity)等安全功能

恶意程序通过获取当前进程的访问令牌(Token)判断是否已具有管理员权限。如果权限不足,则使用 UAC 绕过技术进行提权。

权限检测

3.3.1 程序兼容性助手(PCA)提权

BlackLotus 主要通过滥用程序兼容性助手(Program Compatibility Assistant)服务实现 UAC 绕过,具体步骤如下:

  1. 伪造 DLL 文件:创建恶意的 pcadm.dll 文件
  2. 伪造环境变量:修改 windir 环境变量,指向恶意 DLL 所在路径
  3. 确保服务运行:确保 PcaSvc 服务处于启动状态
  4. 触发加载事件:通过特定操作触发 PcaSvc 服务加载伪造的 pcadm.dll
  5. 创建高权限进程:在 DLL 中创建新进程执行恶意操作,继承 PcaSvc 服务的高权限

伪造的 pcadm.dll 从被篡改的环境变量中读取恶意程序的完整路径,并利用 PcaSvc 服务的高权限创建子进程,从而绕过 UAC 提升权限。

PCA UAC 绕过

3.4 Bootkit 部署

3.4.1 安全启动状态检测

在部署 Bootkit 之前,恶意程序首先判断系统是否启用了安全启动(Secure Boot)功能。检测方法有两种:

  1. 系统版本检测:通过检查 Windows 版本号判断。安全启动功能是在 Windows 8(版本号 6.2)及以后的操作系统中引入的
  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 功能:

禁用 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 的自我保护措施

敬请期待下篇内容。

更多文章