简介
在本文中,我将演示如何绕过 Windows 11(版本 24H2)上的 BitLocker 加密。这是通过使用我的工具 Memory-Dump-UEFI 从内存中提取全卷加密密钥 (FVEK) 来实现的。
背景
如果攻击者可以物理访问该设备,他们可以通过突然重启计算机并转储最近运行的 Windows 实例的 RAM 来获得访问权限。可以分析捕获的内存以查找敏感信息,例如 FVEK 密钥。这种技术并非万无一失,因为断电后 RAM 的内容会迅速降级。
以上是进入 shell 后应该是什么样子的示例。内存转储将开始生成转储文件,直到内存耗尽。完成后,您可以像平常一样关闭计算机。
步骤 4:分析转储
设置
应用程序可能会生成多个转储。这是因为 FAT32 文件系统对文件大小施加了 4GB 的限制。文件系统必须是符合 UEFI 规范的 FAT32。为了方便起见,我在工具目录中包含了一个名为的程序,concatDumps 它可以按时间顺序将多个转储合并为一个。转储的内容将包括当时内存中的任何原始数据,因此我建议使用像这样的工具xxd来更轻松地读取它。为了帮助搜索转储,我包含了一个名为的程序searchMem,它允许您在转储中搜索十六进制模式。它将找到该十六进制模式实例的偏移量,然后您可以使用跳转到该偏移量xxd -s <offset> <dump>。
Pool 标签是 4 个字符长的标识符,用于指示 Windows 内核内存池的位置。这些池由 Windows 内核分配,是查找敏感信息的好地方。这些池标签数量众多,我添加了一个名为的文本文件,pooltag.txt其中包含池标签列表及其各自用途的详细信息。
在继续之前,我想对微软表示感谢,因为他们非常善良,清楚地标记了加密密钥在内存中出现的位置。回到 Windows 7,密钥恢复就像找到FVEc池标记一样简单,该标记对应于下的加密分配fvevol.sys。在 Windows 8.1 和 10 上,可以在标记为的内存池中找到密钥, Cngb该标记对应于ksecdd.sys模块。在我对 Windows 11 内存转储的整个研究过程中,我都无法在这两个地方找到密钥,但我在另外两个位置找到了它。
FVEK 密钥恢复
我找到 FVEK 密钥的第一个地方是在dFVE池标记下,它表示由分配的内存 dumpfve.sys,它属于用于 bitlocker 驱动器加密的全卷加密崩溃转储过滤器。池标记用蓝色下划线表示,而 FVEK 密钥用红色突出显示。这是我找到密钥的最简单、最一致的位置,它前面还有0x0480表示正在使用的加密类型的前缀,在我的情况下是 XTS-AES-128。
第二个位置位于None标签下,与例程调用有关ExAllocatePool。这次可以看到密钥的前半部分出现了两次,后半部分出现了一次。
下一步
需要注意的是,无论你获得什么密钥,都需要在前面说明所使用的算法。这意味着如果你的密钥是:
b2cbc06071931b7cc50b59f8789571f4dd815c2008e93c02d5c6cd98c83ef54b
您需要将0x8004(或使用的任何算法)以小端格式添加到密钥的开头,如下所示:
0480b2cbc06071931b7cc50b59f8789571f4dd815c2008e93c02d5c6cd98c83ef54b
接下来,您需要获取该十六进制并将其转储到文件中,可以像这样完成:
echo "0480b2cbc06071931b7cc50b59f8789571f4dd815c2008e93c02d5c6cd98c83ef54b" | xxd -r -p > output.fvek
我强烈建议使用这套dislocker工具来确定您需要哪种算法/值,并最终解锁驱动器。如果您正确完成了所有操作,则可以使用它output.fvek来解锁受 Bitlocker 保护的分区并访问卷上的任何数据。
最后说明
了解 Microsoft 如何实现 bitlocker 的最佳方法是使用 进行内核级调试 windbg。使用虚拟机或交叉 USB 3.0 A/A 电缆可以轻松完成此操作。我之所以能够找到密钥,首先是因为我逐步完成 Windows 启动过程并观察 bitlocker 的运行情况。Microsoft 尝试使用类似函数来销毁密钥,SymCryptSessionDestroy但它们无法销毁每个密钥,这从堆上的密钥存在就可以看出。
参考
https://tribalchicken.net/recovering-bitlocker-keys-on-windows-8-1-and-10/
https://github.com/libyal/libbde/blob/main/documentation/BitLocker%20Drive%20Encryption%20(BDE)%20format.asciidoc
https://github.com/Aorimn/dislocker
https://github.com/microsoft/SymCrypt
https://github.com/libyal/libbde
https://github.com/zodiacon/PoolMonX/blob/master/res/pooltag.txt
https://techcommunity.microsoft.com/blog/askperf/an-introduction-to-pool-tags/372983
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里