联系我们
  • 联系人: 侯女士?

    电 话: 025-58630787?

    邮 箱: [email protected]?

    手 机: 18052008777

    公司地址:南京市雨花台区雨花大道2号邦宁科技园1-4层


在win 8.1和win 10上恢复bitlocker驱动器加密私钥
2016-3-18
来源:http://www.freebuf.com
点击数: 5238          作者:江苏天网
  • bitlocker

    本文并不打算深入研究磁盘加密的内部运行机制,而注重的是从内存中检索 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)

    fvevol1.png

    另一方面,在Windows 8.1例子中CNG开始介入加密/解密函数:

    cng811.png

    事实上此时此刻,我们就可以检索FVEK,从第二个参数传递给SymCryptEcbDecrypt(它包含一个指向内存中密钥位置的指针)。rdx注册表(64-bit机器)包含一个指针指向内存中FVEK位置的指针,所以通过在cng!SymCryptEcbDecrypt设置一个断点,之后获得rdx的值,我们就可以提取FVEK了(注意,这是一个256位的密钥)

    256keysched-768x309.png

    这是一个Windows 8.1例子,当在XTS-AES模式下玩耍Windows 10,跳转到cng!SymCryptXtsAesDecrypt,并检测rcx注册表(在我的测试中密钥作为******个参数传递给XTS函数)

    Win10BreakPoint.png

    内存镜像向后偏移一些,我们可以看到这部分内存被标记为Cngb池标签。正如预期,检测池标签定义证实了Cngb用于CNG配置:

    Cngb – ksecdd.sys – CNG kmode crypto pool tag

    下面进入更实用的阶段!

    使用内存池分配恢复密钥

    正如前面提到的,大多数加密工作都是围绕着CNG驱动开展的。然而在早期的Windows版本,fvevol驱动包含了它自己的安装启用。搜索Cngb池标签会产生大量结果,因为CNG就是一洪荒野兽,太复杂了。它不仅仅作用于BitLocker,然而池大小想当一致,这也意味着我们可以将他们看作是密钥位置指示器来使用。

    Cngb的池大小似乎一直是在672,不论加密的类型——Volatility的poolpeek插件可以帮助你找到这些池poolpeek.png

    虽然我尚未确定一种方法从Cngb池内容中区分BitLocker模式。这里有一个标志似乎能可靠的分辨,池中偏移位置为0×68,密钥的长度不是128-bit就是256-bi。值’10’似乎表示密钥长度为128-bit,’20’表示密钥长度为256-bit

    有趣的是,除了FVEK其他的密钥都是相同的格式,这只在系统开启了Bitlocker才有效。这可能是另一个密钥在使用Bitlocker,诸如Volume Master Key (VMK),然而我没能分析出这些密钥的功能。

    Volatility插件

    该插件目前还属于实验性的测试版本

    根据手头的信息,我已经打开了一款能够从Windows 7(理论上还支持Windwos及其以上版本)中提取BitLocker密钥的Volatility插件。对于Windows 8到Windows 10来说这个插件并不是完全可靠的,大多数情况下会存在些许小状况:

    • 除了FVEK,返回AES Keys(见前文,这些密钥只存在于受Bitlocker保护的系统)
    • 对于Windows 10 XTS-AES加密并不是每次都能成功
    • 不能确定Windows 7以上版本中BitLocker操作方式

    插件操作如下:

    1.从概要文件元数据中获得Windows版本

    2.如果版本低于Windows 8

    • 搜索FVEc池标签
    • 分析BitLocker模式
    • 适当长度提取FVEK

    3.如果版本高于Windows 8

    • 在池大小672搜索 Cngb池标签
    • 尝试分析密钥长度(在Winodws 10 XTS-AES模式下不能正常工作)
    • 提取128-bit或者256-bit密钥
    • 不能保证它是BitLocker FVEK.

    4.打印结果

    Windows 7例子:

    win7fvek-768x50.png

    Windows 8.1例子:

    Win81256.png

    Windows 10 (CBC)例子:

    Win10CBC.png

    这张截图是上面Windows 8.1保护卷使用的FVEK数据:

    Win81Moun.png

    优秀的libbde library 可以在Linux下使用FVEK和TWEAK数据用来加载保护卷。

    我没有说过该插件就是完美的,但是它是有可能在未来成为一款十分优秀的插件!

    GitHub here: https://github.com/tribalchicken/volatility-bitlocker

    引用文献

     

版权所有 Copyright(C)2009-2013 江苏天网计算机技术有限公司 苏ICP备16029720号

玄机二句是2019