1. 概述
UEFI bootkit部署在系统固件中,能够完全控制操作系统的启动过程,因此可以禁用操作系统级别的安全机制并在启动期间中以最高权限执行程序。
BlackLotus利用一个漏洞编号为CVE-2022-21894的安全漏洞来绕过UEFI安全启动保护并设置持久性。
利用该漏洞可以在操作系统的早期启动阶段执行任意代码从而允许攻击者在开启UEFI安全启动的系统上执行恶意操作而无需物理访问。
2.流程图

2.详细分析
1. 反调试
恶意程序使用了多种反调试、反虚拟机技术来绕过安全软件的查杀和安全研究人员的分析, 并在多个函数内存在多处暗桩代码检测。
当检测到调试器时执行无效指令使自身因异常而退出程序。
1. 设置ThreadHideFromDebugger隐藏来自调试器的调试事件,使其无法接收到调试事件从而无法调试导致卡死。
2. 检测PEB结构的字段BeingDebugged是否为0来检测是否为调试器。
3. 检测PEB结构的字段NtGlobalFlag是否为0x70, 因为在调试状态下,某些Flag必定会被设置。
4. 检测进程信息来判断进程是否被调试。
5. 检测是否存在内核调试器
6. 设置异常处理函数并且执行int指令触发异常, 如果异常被调试器接管则不会执行异常处理函数。
如果异常处理函数被执行,则表示该进程没有被调试器调试.
7. 检测该进程是否加载了指定的模块, 由于是硬编码的哈希值, 没法反推出加载的模块名
8. 遍历当前系统所有运行的进程并判断是否与硬编码的哈希值匹配,可能是查找调试器、安全软件相关的进程。
9. 利用RSTDC指令检测指令执行间隔
2. 反虚拟机
1. 查询如下注册表相关项是否存在来检测是否运行在虚拟机环境下。
2. 判断如下注册表对应的键值是否为VMWare、QEMU和Vbox来检测虚拟机。
3. 判断系统固件信息是否qemu、VBOX和VMWare等来判断是否为虚拟机。
4. 判断系统的ACPI信息中是否包含bochs、bxpc和vmware来检测虚拟机。
5. 从注册表中获取网卡的ServiceName,然后通过发送控制码0x170002获取网卡的mac地址并将其与硬编码的数据比较来检测虚拟机。
3. UAC Bypass
当没有检测到调试器或者虚拟机环境后, 恶意程序需要检查自身是否由足够的权限(至少是管理员权限)来释放bootkit文件到ESP目录或者执行其他需要较高权限的操作, 比如关闭HVCI功能等等。
恶意程序通过获取当前进程的Token来判断是否已经有管理员权限,如果没有则通过UAC Bypass的方式进行提权。
恶意程序主要通过使用程序兼容性助手来实现UAC bypass,实现原理如下:
1. 伪造pcadm.dll文件
2. 伪造环境变量windir
3. 确保PcaSvc服务已经启动
4. 通过某种手段触发事件, 事件触发时会加载伪造的pcadm.dll。
5. 在伪造的pcadm.dll文件创建进程来执行UAC bypass。
pcadm.dll从伪造的环境变量中读取恶意程序的完整路径,由于该文件是由PcaSvc服务加载的模块,因此具有较高的权限,同样创建的进程也继承该服务的权限。
4. Bootkit部署
在开始释放bootkit文件之前首先判断SecureBoot是否已经开启。恶意程序使用两种方法来判断:
1. 通过系统版本号来判断, 原因时SecureBoot是在win8(6.2)以后的操作系统新增的功能
2. 读取系统环境变量SecureBoot来读取该功能是否已经开启。
恶意程序会根据SecureBoot功能是否开启来部署不同的bootkit文件。如果受害者机器处于没有开启SecureBoot功能或者该功能被禁用的情况下,部署bootkit比较简单, 只需要使用自己的自签名的恶意UEFI应用替换ESP目录中的windows启动管理器(bootmgfw.efi)。
恶意程序在开启SecureBoot的情况下会释放以下几个文件到指定目录,等待所有文件都部署完毕后等待60秒后重启系统, 重启后首先加载的为恶意文件grubx64.efi。
目录 | 文件 | 描述 |
ESP:\EFI\Microsoft\boot | grubx64.efi | 自签名的恶意UEFI应用 |
bootload.efi | 有微软数字证书的合法应用 | |
bootmgfw.efi | 有微软数字证书的合法应用 | |
BCD | 攻击者自定义的BCD启动配置 | |
BCDR | 受害者的BCD启动配置的备份 | |
ESP:\system32 | hvloader.efi | 有微软数字证书的合法应用 |
bootmgr.efi | 有微软数字证书的合法应用 | |
mcupdate_AuthenticAMD.dll | 自签名的恶意程序, 用于CVE-2022-21894漏洞利用 | |
mcupdate_GenuineIntel.dll | 自签名的恶意程序, 用于CVE-2022-21894漏洞利用 | |
BCD | 攻击者自定义的BCD启动配置 |
5. 关闭虚拟机监控程序保护的代码完整性(HVCI)
为了能够在安装bootkit后执行任意的未签名内核代码,恶意程序需要将HVCI功能给关闭。
HVCI在内核中会检测执行代码是否被修改过并且只允许执行已签名的代码,这样能够有效的防止易受攻击的内核驱动被滥用来执行未签名的内核代码或者加载恶意内核驱动,禁用方法如下图:
6. 显示虚假窗口
在释放bootkit相关文件为了避免由于受害者关闭机器等其他操作导致的释放文件失败,恶意程序伪装了一个提示窗口, 提示受害者不要重启机器。
最后更新: 2023年10月17日 14:59:37
本文链接: http://shxi.cc/post/7927d76d.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!