BitCracker是第一个用于存储设备的开源密码破解工具(硬盘,USB Pendrive,SD卡等),该工具使用BitLocker加密,Windows Vista上可用的加密功能,7、8.1和10(Ultimate,Pro,Pro和Enterprise)版本)。 Bitlocker提供了许多不同的身份验证方法来加密诸如受信任平台模块(TPM),智能卡,恢复密码,用户提供的密码之类的存储设备。
通过字典攻击,BitCracker试图找到正确的用户密码或恢复密码来解密加密的存储设备。它已在Cuda和Opencl中实施。
几本期刊推迟了我们的BitCracker纸的发布(将近3年,经过了几次修订后的最终拒绝),其中解释了我们攻击的细节,Bitlocker驱动器加密(BDE)音量格式以及加密/解密过程中可能存在的弱点。最后,我们在此处发表了论文:https://arxiv.org/abs/1901.01337。请随时发表评论和分享。
要运行BitCracker-Cuda,最小要求是:
为了运行BitCracker-Opencl,最少的要求是任何支持OPENCL的GPU或CPU(您可以在此处找到一些帮助。
BitCracker需要至少260 MB的设备内存。
出于绩效原因,我们强烈建议您对GPU而不是CPU进行攻击(请参见部分表现)。
运行build.sh
脚本在build
目录中生成4个可执行文件: bitcracker_hash
, bitcracker_rpgen
, bitcracker_cuda
, bitcracker_opencl
。
为了与您的NVIDIA GPU和CUDA版本相干地构建bitcracker_cuda
,您需要修改src_CUDA/Makefile
选择正确的SM版本。作为参考,您可以使用下表:
GPU架构 | 建议的库达 | makefile |
---|---|---|
开普勒 | CUDA 7.5 | Arch = Compute_35,代码= SM_35 |
麦克斯韦 | CUDA 8.0 | Arch = Compute_52,代码= SM_52 |
帕斯卡 | CUDA 9.0 | Arch = Compute_60,代码= SM_60 |
Volta | CUDA 9.0 | Arch = Compute_70,代码= SM_70 |
您需要创建使用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)
然后,您需要在imageEncrypted.img
上运行bitcracker_hash
可执行文件以:
如果执行正确完成, bitcracker_hash
会产生1或2个输出文件:
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执行字典攻击,因此您需要提供可能用户密码的单词列表。
要开始攻击您需要:
hash_user_pass.txt
文件命令行示例:
./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u
在哪里:
-f
: hash_user_pass.txt
文件的路径-d
:通往您的文字列表的路径-t
:每个CUDA线程处理的密码数量-b
:cuda块的数量-g
:NVIDIA GPU设备ID-u
:指定您想要用户密码攻击对于所有可用选项,键入./build/bitcracker_cuda -h
。为了获得最佳性能,请参考性能部分的表格,以根据您的NVIDIA GPU正确设置t
和b
选项。
可以将同样的考虑用于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个字符的长度的输入密码。
在加密存储设备(无论使用身份验证方法)期间通常情况下。因此,恢复密码是所有身份验证方法的一种PASSE-PARTOUT ,它由这样的48位密钥组成:
236808-089419-192665-495704-618299-073414-538373-542366
有关更多详细信息,请参见Microsoft文档。
至于用户密码,BitCracker能够执行字典攻击,以找到Bitlocker生成的正确恢复密码来加密存储设备。请注意,当前我们只有在未使用TPM加密的存储设备时才能攻击恢复密码。
要开始攻击您需要:
hash_recv_pass.txt
文件生成并存储所有可能的密码,这是一个难题。因此,我们创建了一个名为bitcracker_rpgen
的恢复密码生成器。使用此工具,您可以创建一堆恢复密码WordLists,可以用于攻击。例如:
./build/bitcracker_rpgen -n 300 -p 10000000 -s 000000-000011-000022-000033-000044-000055-008459-015180
这会生成:
-n
:单词列表的数量-p
:每个单词列表的恢复密码数-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进行了快速攻击(对于用户和恢复密码模式),这可能会返回一些假阳性。在这种情况下,您可以使用启用MAC验证的-m
选项重新运行攻击(较慢的解决方案)。
为了在开始真正的攻击之前测试系统上的BitCracker,我们提供了几张加密存储设备的图像。
您可以使用存储在Dictionary
文件夹中的WordLists使用用户和恢复密码模式攻击这些图像。
在这里,我们将快速攻击(默认值)(-u选项)报告最好的BitCracker表演。
GPU Acronim | GPU | 拱 | CC | #SM | 钟 | 库达 |
---|---|---|---|---|---|---|
GFT | Geforce Titan | 开普勒 | 3.5 | 14 | 835 | 7.0 |
GTK80 | 特斯拉K80 | 开普勒 | 3.5 | 13 | 875 | 7.5 |
GFTX | Geforce Titan X | 麦克斯韦 | 5.2 | 24 | 1001 | 7.5 |
GTP100 | 特斯拉P100 | 帕斯卡 | 6.1 | 56 | 1328 | 8.0 |
GTV100 | 特斯拉V100 | Volta | 7.0 | 80 | 1290 | 9.0 |
AMDM | 莱登·马耳他 | - | - | - | - | - |
表现:
版本 | GPU | -t | -b | 密码X内核 | 密码/秒 | 哈希/秒 |
---|---|---|---|---|---|---|
库达 | GFT | 8 | 13 | 106.496 | 303 | 635 MH/s |
库达 | GTK80 | 8 | 14 | 114.688 | 370 | 775 MH/s |
库达 | GFTX | 8 | 24 | 106.608 | 933 | 1.957 MH/s |
库达 | GTP100 | 1 | 56 | 57.344 | 1.418 | 2.973 MH/s |
库达 | GTV100 | 1 | 80 | 81.920 | 3.252 | 6.820 MH/s |
OPENCL | AMDM | 32 | 64 | 524.288 | 241 | 505 MH/s |
OPENCL | GFTX | 8 | 24 | 196.608 | 884 | 1.853 MH/s |
NB每个密码需要约2.097.152 SHA-256
我们在开膛手约翰( --format=bitlocker-opencl
)中发布了BitCracker为Opencl-Bitlocker格式。 bitcracker_hash
生成的哈希文件(请参见如何段)与John格式完全兼容。
在GTV100上,密码率约为3150p/s。 JTR团队开发了此攻击的CPU版本( --format=bitlocker
);在CPU Intel(R)Xeon(R)V4 2.20GHz上,密码率约为78p/s。
这是一项正在进行的工作...
2021年11月:使用CUDA 11.x上的NVIDIA GPU安培上运行的代码更新了
PLASE共享并测试我们的项目:我们需要您的反馈!
特别感谢Ripper团队,Dislocker和Libbde项目。
这是一个与意大利国家研究委员会合作的研究项目,该委员会根据GPLV2许可发布。
版权(C)2013-2021 Elena前(Elena Dot of at Gmail dot com)和Massimo Bernaschi(Massimo Dot Bernaschi在Gmail dot com)
我们将在将来的论文中提供有关BitCracker攻击的一些其他信息。
尽管我们使用GPLV2许可证,但我们愿意进行协作。有关任何其他信息,协作或错误报告,请与我们联系或打开问题