从内存中提取 BitLocker 密码是基于 内存取证 的原理。以下是详细说明:
提取原理
1. 核心原理
- 密钥常驻内存:当 BitLocker 加密的驱动器被解锁并挂载时,加密密钥会一直保留在内存中
- 冷启动攻击:RAM 中的数据在断电后不会立即消失,可以维持数秒到数分钟
- 内存转储:通过物理访问或软件工具获取系统内存的完整副本
2. 密钥在内存中的位置
- FVEK (Full Volume Encryption Key):全卷加密密钥,用于实际的数据加解密
- VMK (Volume Master Key):卷主密钥,用于加密 FVEK
- TPM 状态:如果使用 TPM,相关的验证数据也会在内存中
提取方法
方法1:使用 Volatility 框架
步骤1:获取内存转储
bash
1 2 3 4 5
| # 使用DumpIt工具获取内存转储 DumpIt.exe # Windows环境下
# 或使用WinPmem winpmem_minimal_x64_rc2.exe memory.dmp
|
步骤2:使用 Volatility 分析
bash
1 2 3 4 5 6 7 8 9 10 11
| # 识别镜像信息 volatility -f memory.dmp imageinfo
# 搜索BitLocker相关密钥 volatility -f memory.dmp --profile=Win10x64_19041 bitlocker
# 提取BitLocker密钥 volatility -f memory.dmp --profile=Win10x64_19041 bitlocker -O bitlocker_keys.txt
# 搜索内存中的密码和密钥 volatility -f memory.dmp --profile=Win10x64_19041 yarascan -Y "bitlocker"
|
方法2:使用 Elcomsoft Forensic Disk Decryptor
bash
1 2
| # 使用EFDD直接处理内存转储 efdd --memory-dump=memory.dmp --output=keys.txt
|
方法3:手动搜索内存模式
bash
1 2 3
| # 使用hex编辑器搜索特定模式 hexdump -C memory.dmp | grep -i "FVEK" strings memory.dmp | grep -i "bitlocker"
|
具体操作步骤
完整工作流程
bash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 1. 获取内存转储(需要在目标系统上运行) # 使用工具:DumpIt、WinPmem、Belkasoft RAM Capturer
# 2. 使用Volatility分析 volatility -f memory.dmp imageinfo # 确定正确的profile,如:Win10x64_19041
# 3. 提取BitLocker密钥 volatility -f memory.dmp --profile=Win10x64_19041 bitlocker -O recovery_key.txt
# 4. 如果上述方法失败,尝试搜索内存模式 volatility -f memory.dmp --profile=Win10x64_19041 yarascan -Y "FVEK|VMK|BitLocker"
# 5. 使用提取的密钥解密驱动器 manage-bde -unlock C: -RecoveryKey recovery_key.txt
|
技术细节
BitLocker 密钥链结构
text
1 2 3 4 5 6 7
| 用户输入/TPM/恢复密钥 ↓ VMK (Volume Master Key) ↓ FVEK (Full Volume Encryption Key) ↓ 数据加解密
|
内存中的密钥特征
- FVEK:通常以特定模式出现,长度通常为 256/512 位
- VMK:用于加密 FVEK 的密钥
- 元数据:包含加密算法、密钥强度等信息