BitCracker是第一个开源的用于破解使用BitLocker加密存储设备(如硬盘,USB Pendrive,SD卡等)的工具。BitLocker是Windows Vista,7,8.1和10(Ultimate,Pro和Enterprise)上提供的加密功能。BitLocker提供了许多不同的身份验证方法来加密存储设备,如可信赖平台模块(TPM),智能卡,恢复密码,用户提供的密码。通过字典攻击,BitCracker会尝试找出正确的用户密码或恢复密码,来解密加密的存储设备。目前,已在CUDAOpenCL中实现。

注:在COMMID 7b2a6b6(CUDA版本)和 5f09d7f(OpenCL版本)中存在固定的严重错误:bad loop termination(循环终止错误)!可尝试重新运行解决。

运行环境

运行BitCracker-CUDA的最低要求如下:

CC 3.5或更高版本的 NVIDIA GPU

CUDA 7.5或更新版本

运行BitCracker-OpenCL的最低要求是,GPU或CPU支持OpenCL(查看帮助)

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

出于性能原因,我们强烈建议你在GPU上运行(具体请参阅性能部分)。

构建

运行build.sh脚本后,会在build目录中生成4个可执行文件:bitcracker_hash,bitcracker_rpgen,bitcracker_cuda,bitcracker_opencl。

为了构建与你的NVIDIA GPU和CUDA版本一致地bitcracker_cuda文件,你需要修改src_CUDA/Makefile,并选择正确的SM版本。对应可参考下表:

GPU 架构建议的 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

攻击准备

创建一个使用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攻击

检查原始存储设备哈希是否已使用用户密码或恢复密码加密

提取映像的哈希描述

如果一切正常,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"

用户密码攻击

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

687474703a2f2f6f70656e77616c6c2e696e666f2f77696b692f5f6d656469612f6a6f686e2f626974637261636b65725f696d67312e706e67.png

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 blocks的数量

-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个字符之间的输入密码。

恢复密码攻击

在加密存储设备期间,(无论身份验证方法如何)BitLocker会要求用户在某处存储恢复密码,该密码可用于在无法解锁驱动器的情况下恢复对加密存储设备的访问。恢复密码为48位的密钥,如下所示:

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

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

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

执行攻击需要:

hash_recv_pass.txt文件

可能的恢复密码列表

生成并存储所有可能的密码并不容易。出于这个原因,我们创建了一个名为bitcracker_rpgen的恢复密码生成器。使用它,你可以创建一组可用于执行恢复密码攻击的字典列表。

示例:

./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_cuda -f hash_recv_pass.txt -d bitcracker_wlrp_0.txt -t 1 -b 1 -g 0 -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验证(缺点是速度将会变慢许多)。

示例

以下是我们为大家提供的几个加密存储设备的映像:

 

imgWin7: BitLocker on Windows 7 Enteprise edition OS

imgWin8: BitLocker on Windows 8 Enteprise edition OS

imgWin10Compat.vhd: BitLocker (compatible mode) on Windows 10 Pro edition OS

imgWin10NotCompat.vhd: BitLocker (not compatible mode) on Windows 10 Pro edition OS

imgWin10NotCompatLongPsw.vhd : BitLocker (not compatible mode) on Windows 10 Pro edition OS with a longer user password

 

你可以使用存储在“Dictionary”文件夹中的密码字典,使用用户和恢复密码模式来攻击这些映像。

性能

以下我们报告了在用户密码(-u选项)快速攻击(默认)的情况下BitCracker的最佳性能。

GPU AcronimGPUArchCC# SMClockCUDA
GFTGeForce TitanKepler3.5148357.0
GTK80Tesla K80Kepler3.5138757.5
GFTXGeForce Titan XMaxwell5.22410017.5
GTP100Tesla P100Pascal6.15613288.0
GTV100Tesla V100Volta7.08012909.0
AMDMRadeon Malta-----

性能:

VersionGPU-t-bPasswords x kernelPasswords/secHash/sec
CUDAGFT813106.496303635 MH/s
CUDAGTK80814114.688370775 MH/s
CUDAGFTX824106.6089331.957 MH/s
CUDAGTP10015657.3441.4182.973 MH/s
CUDAGTV10018081.9203.2526.820 MH/s
OpenCLAMDM3264524.288241505 MH/s
OpenCLGFTX824196.6088841.853 MH/s

John The Ripper

我们在John The Ripper中发布了BitCracker作为OpenCL-BitLocker格式(–format=bitlocker-opencl)。bitcracker_hash生成的哈希文件与John格式完全兼容。

在GTV100上,密码率约为3150p/s。JtR团队开发了这种攻击的CPU版本(–format=bitlocker); 在CPU Intel(R) Xeon(R) v4 2.20GHz上,密码率约为78p/s。

Hashcat

正在开发中~

计划

实现多GPU

提供Qt界面

最后,感谢John The Ripper团队,Dislocker和LibBDE项目的支持。希望大家能积极的分享并测试我们的项目,并第一时间将问题反馈给我们!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐