BitCracker:一个针对 BitLocker加密的密码破解工具

BitCracker介绍

BitCracker是第一个针对使用BitLocker加密的存储设备(硬盘,USB Pendrive,SD卡等)的开源密码破解工具BitLocker是Windows Vista,7,8.1和10(Ultimate,Pro和Enterprise)上提供的加密功能版本)。BitLocker提供了许多不同的身份验证方法来加密存储设备,如可信平台模块(TPM),智能卡,恢复密码,用户提供的密码。

通过字典攻击,BitCracker尝试找到正确的用户密码或恢复密码来解密加密的存储设备。它已在CUDA和OpenCL中实现。

BitCracker使用要求

要运行BitCracker-CUDA,最低要求是:

  • CC 3.5或更高版本的NVIDIA GPU
  • CUDA 7.5或更新版本

要运行BitCracker-OpenCL,最低要求是支持OpenCL的任何GPU或CPU(您可以在这里找到一些帮助。

BitCracker至少需要260 MB的设备内存。

出于性能原因,我们强烈建议您在GPU上而不是CPU上运行攻击(请参阅性能部分)。

BitCracker安装

git clone https://github.com/e-ago/bitcracker.git

运行build.sh脚本生成可执行4里面build目录:bitcracker_hashbitcracker_rpgenbitcracker_cudabitcracker_opencl

为了bitcracker_cuda与您的NVIDIA GPU和CUDA版本保持一致,您需要修改src_CUDA/Makefile选择正确的SM版本。作为参考,您可以使用下表:

GPU ArchitectureSuggested CUDAMakefile
KeplerCUDA 7.5arch=compute_35,code=sm_35
MaxwellCUDA 8.0arch=compute_52,code=sm_52
PascalCUDA 9.0arch=compute_60,code=sm_60
VoltaCUDA 9.0arch=compute_70,code=sm_70

BitCracker使用

您需要使用BitLocker创建存储设备的映像,例如使用dd命令:

sudo dd if=/dev/disk2 of=/path/to/imageEncrypted.img conv=noerror,sync
4030464+0 records in
4030464+0 records out
2063597568 bytes transferred in 292.749849 secs (7049013 bytes/sec)

然后,您需要bitcracker_hash在您的上运行可执行文件imageEncrypted.img

  • 检查图像是否具有有效格式并且可以被BitCracker攻击
  • 检查原始存储设备哈希是否已使用用户密码或恢复密码加密
  • 提取描述图像的哈希

如果执行正确完成,则bitcracker_hash生成1或2个输出文件:

  • hash_user_pass.txt:如果设备使用用户密码加密,则此文件包含启动用户密码攻击模式所需的哈希。
  • hash_recv_pass.txt:启动Recovery Password攻击模式所需的哈希值

BDE加密卷可以针对不同的身份验证方法使用不同的格式。如果bitcracker_hash无法在加密图像上找到恢复密码,请打开问题或与我联系

一个例子:

/build/bitcracker_hash -o test_hash -i ./Images/imgWin7

---------> BitCracker Hash Extractor <---------
Opening file ./Images/imgWin7

....

Signature found at 0x02208000
Version: 2 (Windows 7 or later)

VMK entry found at 0x022080bc
VMK encrypted with user password found!
VMK encrypted with AES-CCM

VMK entry found at 0x0220819c
VMK encrypted with Recovery key found!
VMK encrypted with AES-CCM

User Password hash:
$bitlocker$0$16$89a5bad722db4a729d3c7b9ee8e76a29$1048576$12$304a4ac192a2cf0103000000$60$24de9a6128e8f8ffb97ac72d21de40f63dbc44acf101e68ac0f7e52ecb1be4a8ee30ca1e69fbe98400707ba3977d5f09b14e388c885f312edc5c85c2

Recovery Key hash:
$bitlocker$2$16$8b7be4f7802275ffbdad3766c7f7fa4a$1048576$12$304a4ac192a2cf0106000000$60$6e72f6ef6ba688e72211b8cf8cc722affd308882965dc195f85614846f5eb7d9037d4d63bcc1d6e904f0030cf2e3a95b3e1067447b089b7467f86688

Output file for user password attack: "hash_user_pass.txt"
Output file for recovery password attack: "hash_recv_pass.txt"

用户密码攻击

如果存储设备已使用用户提供的密码加密,则可以该类型的攻击,如下图所示。

BitCracker:一个针对 BitLocker加密的密码破解工具

BitCracker执行字典攻击,因此您需要提供可能的用户密码的单词列表。

要开始攻击,您需要:

  • hash_user_pass.txt文件
  • 可能的用户密码的词汇表(您需要自己提供)

命令行示例:

./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u

哪里:

  • -fhash_user_pass.txt文件的路径
  • -d :单词列表的路径
  • -t :每个CUDA线程处理的密码数
  • -b :CUDA块的数量
  • -g :NVIDIA GPU设备ID
  • -u :指定您想要的用户密码攻击

对于所有可用选项,请键入./build/bitcracker_cuda -h。为了获得最佳性能,请参阅“ 性能”部分中的表格,根据您的NVIDIA GPU 正确设置tb选项。

bitcracker_opencl可执行文件可以应用相同的注意事项。

输出示例:

====================================
Selected device: GPU Tesla K80 (ID: 0)
====================================
....
Reading hash file "hash_user_pass.txt"
$bitlocker$0$16$0a8b9d0655d3900e9f67280adc27b5d7$1048576$12$b0599ad6c6a1cf0103000000$60$c16658f54140b3d90be6de9e03b1fe90033a2c7df7127bcd16cb013cf778c12072142c484c9c291a496fc0ebd8c21c33b595a9c1587acfc6d8bb9663

====================================
Attack
====================================

Type of attack: User Password
CUDA Threads: 1024
CUDA Blocks: 1
Psw per thread: 1
Max Psw per kernel: 1024
Dictionary: wordlist.txt
Strict Check (-s): No
MAC Comparison (-m): No

CUDA Kernel execution:
	Stream 0
	Effective number psw: 12
	Passwords Range:
		abcdefshhf
		.....
		blablalbalbalbla12
	Time: 28.651947 sec
	Passwords x second: 0.42 pw/sec

================================================
....
Password found: paperino
================================================

目前BitCracker能够处理长度在8到55个字符之间的输入密码。

恢复密码攻击

在加密存储设备期间,(无论身份验证方法如何)BitLocker要求用户在某处存储恢复密码,该密码可用于在无法解锁驱动器的情况下恢复对加密存储设备的访问一般。因此,恢复密码是一种过时-partout所有的认证方法,它由一个像这样的48位的关键:

236808-089419-192665-495704-618299-073414-538373-542366

有关更多详细信息,请参阅Microsoft文档

对于用户密码,BitCracker能够执行字典攻击,以找到BitLocker生成的正确恢复密码来加密存储设备。请注意,目前我们只有在存储设备未使用TPM加密时才能攻击恢复密码。

要开始攻击,您需要:

  • hash_recv_pass.txt文件
  • 可能恢复密码的词汇表

生成并存储所有可能的密码这是一个难题。出于这个原因,我们创建了一个名为的Recovery Password生成器bitcracker_rpgen。使用此工具,您可以创建一组可用于攻击的恢复密码单词列表。举个例子:

./build/bitcracker_rpgen -n 300 -p 10000000 -s 000000-000011-000022-000033-000044-000055-008459-015180

这会产生:

  • -n :单词列表的数量
  • -p :每个wordlist的恢复密码数
  • -s :从此开始生成恢复密码

您可以使用不带选项的默认配置:

./build/bitcracker_rpgen

************* BitCracker Recovery Password wordlists generator *************

Running with this configuration:
### Create 100 wordlists
### Recovery Passwords per wordlist=5000000
### Allow duplicates=No
### Generate starting from=000000-000011-000022-000033-000044-000055-000066-000077

Creating wordlist "bitcracker_wlrp_0.txt" with 5000000 passwords
First password=000000-000011-000022-000033-000044-000055-000066-000077
Last password= 000000-000011-000022-000033-000044-000055-000902-217822
...

请注意,该-s选项可用于从上次生成的恢复密码重新生成生成(而不是每次从初始密码重新启动)。该-d选项可以在同一个恢复密码中包含重复项。例如: 000000-000011-000055-000055-000044-000055-000902-217822

对于所有可用选项,请键入./build/bitcracker_rpgen -h

注意:请注意,可能的恢复密码数量巨大:
recovery password = 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536
根据我们的研究,密码分发是统一的,无法找到“更可能”的数字。到目前为止,我们没有找到减少可能候选人数量的规则。这意味着恢复密码攻击可能需要永远(用户Passwod攻击始终是首选攻击)。很快我们将修改bitcracker_rpgen工具以便以随意的方式生成恢复密码,而不是按顺序生成。

命令行示例:

./build/bitcracker_cuda -f hash_recv_pass.txt -d bitcracker_wlrp_0.txt -t 1 -b 1 -g 0 -r

其中选项与用户密码相同,但-u您不需要指定-r。输出示例:

====================================
Selected device: GPU Tesla K80 (ID: 0)
====================================

...
Reading hash file "hash_recv_pass.txt"
$bitlocker$2$16$432dd19f37dd413a88552225628c8ae5$1048576$12$a0da3fc75f6cd30106000000$60$3e57c68216ef3d2b8139fdb0ec74254bdf453e688401e89b41cae7c250739a8b36edd4fe86a597b5823cf3e0f41c98f623b528960a4bee00c42131ef


====================================
Attack
====================================

Type of attack: Recovery Password
CUDA Threads: 1024
CUDA Blocks: 1
Psw per thread: 8
Max Psw per kernel: 8192
Dictionary: wordlist.txt
Strict Check (-s): No
MAC Comparison (-m): No

CUDA Kernel execution:
	Effective passwords: 6014
	Passwords Range:
		390775-218680-136708-700645-433191-416240-153241-612216
		.....
		090134-625383-540826-613283-563497-710369-160182-661364
	Time: 193.358937 sec
	Passwords x second:31.10 pw/sec


================================================
CUDA attack completed
Passwords evaluated: 6014
Password found: 111683-110022-683298-209352-468105-648483-571252-334455
================================================

误报

默认情况下,BitCracker会对用户和恢复密码模式进行快速攻击,这可能会导致一些误报。在这种情况下,您可以使用-m启用MAC验证的选项(较慢的解决方案)重新运行攻击。

例子

为了在开始实际攻击之前在您的系统上测试BitCracker,我们提供了几个加密存储设备的图像。

  • imgWin7:Windows 7 Enteprise版操作系统上的BitLocker
  • imgWin8:Windows 8 Enteprise版操作系统上的BitLocker
  • imgWin10Compat.vhd:Windows 10 Pro版操作系统上的BitLocker(兼容模式)
  • imgWin10NotCompat.vhd:Windows 10专业版操作系统上的BitLocker(不兼容模式)
  • imgWin10NotCompatLongPsw.vhd:具有较长用户密码的Windows 10 Pro版操作系统上的BitLocker(不兼容模式)

您可以使用存储在Dictionary文件夹中的单词列表,使用用户和恢复密码模式攻击这些图像。