复现CVE-2023-21563(bitpixie)
参考资料:
https://blog.syss.com/posts/bitpixie/
https://github.com/andigandhi/bitpixie
https://www.freebuf.com/articles/database/431192.html
https://github.com/garatc/BitUnlocker
https://github.com/martanne/bitpixie
注:目前已成功在win10(19044.1741)虚拟机复现,成功泄漏出的VKM。在win11(26100.3613)中复现失败。物理机失败
bitlocker简介
这个漏洞的攻击对象主要是针对bitlocker加密的磁盘。
我们先来简单了解一下bitlocker:
BitLocker 概述——微软支持服务 — BitLocker overview - Microsoft Support微软的官方文档中说:“BitLocker 是 Windows 系统的一项安全功能,它通过加密硬盘来保护用户的数据。这种加密机制确保了,即使有人试图离线访问该硬盘,也无法读取其上的任何内容。
如果您的设备丢失或被盗,BitLocker 就显得尤为重要,因为它能确保您的敏感信息得到妥善保护。该功能设计得非常用户友好,能与 Windows 操作系统完美结合,因此很容易设置和管理。
如果您在任何驱动器上启用了 BitLocker 功能,那么务必将 BitLocker 恢复密钥备份在安全的地方。如果 BitLocker 检测到有人试图非法访问该驱动器,或者硬件发生了变化,它就会阻止对磁盘的访问,并要求输入恢复密钥。如果没有该密钥,您将无法访问该驱动器。”
如果设备登录了微软账号,BitLocker 恢复密钥通常会自动同步到账户中。若意外触发恢复界面,可以在其他设备上登录微软账号查看密钥。不过,仍建议提前确认恢复密钥是否已成功备份。
TPM
TPM(可信平台模块)在此漏洞的 VMK(卷主密钥,用于加密硬盘数据,这个漏洞的主要目的就是泄露出VMK)泄露过程中起着关键作用。TPM 通过多个 PCR(平台配置寄存器)记录系统启动过程的度量值。BitLocker 将 VMK 密封到一组指定的 PCR 上,只有当当前 PCR 值与密封时完全一致时,TPM 才会解封并释放 VMK。
注:在漏洞利用中,受害机的 TPM 2.0 保护策略必须绑定 PCR 7 /11。如果绑定了 PCR 4 或其它的PCR,则会因度量值变化导致解封失败,无法泄露 VMK。
漏洞利用简易描述
在受害机的 PXE 启动过程中,攻击者首先通过伪造 BCD,诱使系统加载一个存在漏洞的 Windows Boot Manager。由于启动路径异常,该 Bootloader 无法完成后续的正常引导,但在执行过程中,BitLocker 已经将 VMK 解密并加载到内存里。启动失败后,受害机会重新回到 PXE 启动流程,而此前残留的 VMK 仍保留在内存中。攻击者此时再提供一个附带内存扫描脚本的 Linux 启动环境,待系统进入该环境后运行脚本扫描内存,即可提取出 VMK。
漏洞利用图:
**具体流程:**
victim开启pxe boot(开启网络启动),开始广播DHCP请求attakcer运用dnsmasq(能同时提供DHCP+TFTP服务)恶意响应请求,响应内容:诱导victim去下载bootmgfw.efi文件(windows 引导管理器)victim下载完bootmgfw.efi后,按流程请求BCD配置文件;attacker再把伪造的BCD通过TFTP服务发给victim- 受害机加载上述
bootmgfw.efi与伪造 BCD后,TPM由于度量值匹配(依赖PCR 7/11且未被篡改)而解封BitLocker密钥,磁盘被自动解密,VMK(卷主密钥)加载到内存中。 - 正常情况下,
bootmgfw.efi会继续调用winload.exe启动 Windows;但伪造的 BCD将启动路径指向了不存在的文件(例如fake.exe),导致引导失败。系统随后执行软重启(不重置内存),重新回到PXE启动流程,此时VMK仍然驻留在内存中。 - 第二次启动,
attacker不再给windows bootloader,而是提供Linux的启动环境(包含扫描脚本) - victim的Linux启动后,
attacker直接用脚本扫描内存,提取VKM
实操流程:
https://github.com/andigandhi/bitpixie
运用了该bitpixie攻击库
环境配置:ubuntu22.04系统,安装virt-manage,在uup dump下载win10专业版(19044.1741)镜像文件
配置win10系统环境,包括:更改UEFI固件、开启虚拟机的bitlocker、安装TPM2.0模块、配置virtio网卡、安装virtio网卡驱动
准备win10的BCD文件,可以直接导出虚拟机的BCD文件后进行修改,也可以之间用bitpixie库中的推荐流程进行BCD修改和导出(要开启主机的./start-server.sh pxe和smb服务)
- 虚拟机重启后进入UEFI固件设置里,在boot manager中启动pxeIPv4模式
- 进入这个模式后,主机在开启pxe和smb服务后,会自动完成攻击过程,直接进入第二次启动的带有扫描脚本的linux系统,直接su就进入root
- 运行脚本:run-exploit /dev/sda3,得到VKM(标识位: 03 20 01 00)
7. window的加密盘(c盘)已经成功被解密并提取,如下图: