
本文章将深入讲解Bitlocker的加密机制,并提供实战的思路供读者操作,基于的是windows7下未全盘加密的NTFS文件系统。
0x01 示例案例:Windows 7 SP1 x64
0x02 Bitlocker加密分析BitLocker驱动器加密(BDE)是Microsoft Windows在Vista中使用的volume加密。BitLocker驱动器加密(BDE)有多个版本:
BitLocker Windows Vista TODO: BitLocker Windows 2008 BitLocker Windows 7 BitLocker To Go BitLocker Windows 8 BitLocker Windows 10BitLocker Windows Vista和BitLocker Windows 7都旨在加密固定存储介质(如硬盘)上的NTFS卷。BitLocker To Go是在Windows 7中引入的,旨在加密可移动驱动器,例如FAT文件系统的可移动存储设备(U盘),可移动驱动器上的NTFS卷被视为固定存储介质上的NTFS卷。
BitLocker标识符(GUID):4967d63b-2e29-4ad8-8399-f6a339e3d0
BitLocker To Go标识符(GUID):4967d63b-2e29-4ad8-8399-f6a339e3d01
BitLocker使用不同类型的密钥加密存储介质。
1)卷主密钥(VMK)卷主密钥(VMK)的大小为256位,存储在多个FVE卷主密钥(VMK)结构中。VMK存储时使用恢复密钥、外部密钥或TPM加密。
VMK也可能不作为加密密钥存储,这样的VMK称为清除密钥。
2)全卷加密密钥(FVEK)全卷加密密钥(FVEK)使用卷主密钥(VMK)加密存储。FVEK的大小取决于使用的加密方法:
对于AES 128位,密钥大小为128位 对于AES 256位,密钥大小为256位当使用Elephant Diffuser时,保存FKEV结构的关键数据大小总是512位。第一个256位用于保存FVEK,另一个256位用于保留TWEAK键。当加密方法为AES 128位时,256位中只有128位被使用。
3)TWEAK密钥TWEAK使用卷主密钥(VMK)加密存储。TWEAK密钥的大小取决于使用的加密方法:
对于AES 128位,密钥是128位大小 对于AES 256位,密钥的大小为256位TWEAK密钥仅在使用Elephant Diffuser时出现。
4)恢复密钥BitLocker提供恢复(或数字)密码来解锁加密数据。恢复密码用于确定恢复密钥。
恢复密码示例:
471207-278498-422125-177177-561902-537405-468006-693451有效的恢复密码由48位数字组成,分为8组,其中每组数字都可以被11整除,余数为0。每组数字除以11的结果是一个16位的值,单独的16位值组成128位的密钥。
5)清除密钥清除密钥是存储在卷上的未受保护的256位密钥,用于解密VMK。在解密加密卷时使用它。
3.加密方法BitLocker使用不同类型的加密方法,为了加密扇区数据,它使用带有或不带有Elephant Elephant Diffuser的AES-CBC模式。为了加密密钥数据,BitLocker使用AES-CCM模式。
1)AES-CBC加密和解密都使用:
AES-CBC与FVEK解密扇区数据
加密过程:
与扇区密钥key异或 Elephant Elephant Diffuser A Elephant Elephant Diffuser B AES-CBC with FVEK解密过程:
AES-CBC with FVEK Elephant Elephant Diffuser B Elephant Elephant Diffuser A 与扇区密钥key异或 3)AES-CCM密钥数据使用初始化向量为0的AES-CCM模式加密。
BitLocker Windows 7(及更高版本)卷标题与BitLocker Windows Vista卷标题类似于NTFS卷标题。卷标头大小为512字节,包括:

5.FVE元数据块
BitLocker卷包含3个FVE元数据块。每个FVE元数据块包括:
块头 元数据标题 一组元数据条目 填充0字节值(在Windows 8中可见) 1)FVE元数据块标头大小为64字节,包括:

解密BitLocker时会从后向前解密。因此,加密的卷大小包含仍然加密(或需要解密)的卷的字节数。
2)FVE元数据标题版本1,大小为48字节,包括:

3)FVE元数据条目
版本1,大小可变,包括:

6. BitLocker外键(BEK)文件
BitLocker外键(BEK)文件通常为156字节大小,包括:
一个文件头 一组元数据条目 1)BEK文件头BEK文件头类似于FVE元数据头,大小为48字节,包括:

文件中的密钥标识符必须与FVE卷主密钥(VMK)中的密钥标识符匹配。 2)BEK元数据条目
BEK元数据条目的格式类似于FVE元数据条目的格式。
BEK文件中的元数据由FVE外部密钥组成,该外部密钥包含256位未受保护的密钥数据。
VMK的标识符应与BEK文件头中的标识符匹配。
0x03 实战思路通过上述讲解,可知成功解密的关键,是拿到bitlocker的FVEK和TWEAK,我们可以利用volatility的bitlocker插件对休眠文件、内存文件进行分析提取它。这里我用了一个win7硬盘试验,成功解密。
1)确定分区布局并识别BitLocker卷
从扇区41947136开始的最后一个分区(该硬盘原有两个分区,C分区和D分区,其中C分区未被加密,D分区是经过bitlocker加密的加密卷)是受BitLocker保护的。可以通过查看文件系统头来验证它。发现“-FVE-FS-”签名。

2)使用bitlocker插件提取FVEK
该插件扫描内存映像以查找BitLocker加密分配(内存池)并提取AES密钥(FVEK: 完整的卷加密密钥)。

我们可以看到分析出了FVEK以及TWEAK,采取的加密方式为AES-128,如果是win8以上,可能会出现AES-256。
3)解密并访问卷
解密成功!