本文章将深入讲解Bitlocker的加密机制,并提供实战的思路供读者操作,基于的是windows7下未全盘加密的NTFS文件系统。
0x01 示例案例:
Windows 7 SP1 x64
0x02 Bitlocker加密分析
1.概述
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 10
BitLocker 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
2.密钥
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解密扇区数据
2)带有Elephant Diffuser的AES-CBC
加密过程:
- 与扇区密钥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模式加密。
4.卷头
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)解密并访问卷
解密成功!