本文并不打算深入研究磁盘加密的内部运行机制,而注重的是从内存中检索 FVEK(完整的卷加密密钥)。在Windows 7中密钥恢复是一件想当简单的事情(详情参阅文尾的进一步阅读),当在处理一个Windows 7的内存镜像时,我们可以粗暴的在存在FVEK的内存中将FVEc池标签作为一个指标进行搜索,从那里我们能够继续提取到密钥。
然而从Windows 8开始,BitLocker的加密操作似乎就外包给了微软的CNG(Cryptography Next Generation)模块,这是长期替换CryptoAPI的节奏啊,而不是在fvevol驱动内部执行。
这也就意味着在Windows 8及以上版本下搜索FVEc池标签是不会产生任何效果的!
AESKeyFind仍然能够正常工作,当然尽管取决于你的内存镜像,但你还是需要调整阀值设置。
我不敢肯定你一定会发现附带一个调试器的内核,但依旧不能禁用BitLocker,检索recovery密码,或者添加你自己的密码保护装置,此时会出现一些陌生的东西。另一方面,假设你因为其他原因想要获得FVEK——比如更换持久性访问密钥保护装置(相对于内核调试,这么做更方便我们些)
然而我使用windbg来研究BitLocker 在Windows 8 / 10上的变化,用这个方法来检索FVEK,同时也能证明CNG的存在。
现在开始,这是一个在Windows 7中调用栈的例子——加密/解密函数都在fvevol中进行处理。这个例子使用默认加密方法(AES 128-bit)
另一方面,在Windows 8.1例子中CNG开始介入加密/解密函数:
事实上此时此刻,我们就可以检索FVEK,从第二个参数传递给SymCryptEcbDecrypt(它包含一个指向内存中密钥位置的指针)。rdx注册表(64-bit机器)包含一个指针指向内存中FVEK位置的指针,所以通过在cng!SymCryptEcbDecrypt设置一个断点,之后获得rdx的值,我们就可以提取FVEK了(注意,这是一个256位的密钥)
这是一个Windows 8.1例子,当在XTS-AES模式下玩耍Windows 10,跳转到cng!SymCryptXtsAesDecrypt,并检测rcx注册表(在我的测试中密钥作为第一个参数传递给XTS函数)
内存镜像向后偏移一些,我们可以看到这部分内存被标记为Cngb池标签。正如预期,检测池标签定义证实了Cngb用于CNG配置:
Cngb – ksecdd.sys – CNG kmode crypto pool tag
下面进入更实用的阶段!
正如前面提到的,大多数加密工作都是围绕着CNG驱动开展的。然而在早期的Windows版本,fvevol驱动包含了它自己的安装启用。搜索Cngb池标签会产生大量结果,因为CNG就是一洪荒野兽,太复杂了。它不仅仅作用于BitLocker,然而池大小想当一致,这也意味着我们可以将他们看作是密钥位置指示器来使用。
Cngb的池大小似乎一直是在672,不论加密的类型——Volatility的poolpeek插件可以帮助你找到这些池
虽然我尚未确定一种方法从Cngb池内容中区分BitLocker模式。这里有一个标志似乎能可靠的分辨,池中偏移位置为0×68,密钥的长度不是128-bit就是256-bi。值’10’似乎表示密钥长度为128-bit,’20’表示密钥长度为256-bit
有趣的是,除了FVEK其他的密钥都是相同的格式,这只在系统开启了Bitlocker才有效。这可能是另一个密钥在使用Bitlocker,诸如Volume Master Key (VMK),然而我没能分析出这些密钥的功能。
该插件目前还属于实验性的测试版本
根据手头的信息,我已经打开了一款能够从Windows 7(理论上还支持Windwos及其以上版本)中提取BitLocker密钥的Volatility插件。对于Windows 8到Windows 10来说这个插件并不是完全可靠的,大多数情况下会存在些许小状况:
插件操作如下:
1.从概要文件元数据中获得Windows版本
2.如果版本低于Windows 8
3.如果版本高于Windows 8
4.打印结果
Windows 7例子:
Windows 8.1例子:
Windows 10 (CBC)例子:
这张截图是上面Windows 8.1保护卷使用的FVEK数据:
优秀的 libbde library 可以在Linux下使用FVEK和TWEAK数据用来加载保护卷。
我没有说过该插件就是完美的,但是它是有可能在未来成为一款十分优秀的插件!
GitHub here: https://github.com/tribalchicken/volatility-bitlocker
*原文链接: tribalchicken ,鸢尾编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)