BitCracker is the first open source password cracking tool for memory units encrypted with BitLocker
Go to file
2017-11-14 12:34:17 +01:00
CUDA_version README, options and getopts 2017-11-14 12:24:17 +01:00
Dictionary Max input password size: 27 chars, minor fixes, new win10 image 2017-08-07 17:23:20 -07:00
Hash_Extractor Minor fixes, MAC option added (CUDA version only) 2017-11-14 12:00:39 +01:00
Images Typo fix, code cleanup 2017-09-29 19:59:12 +02:00
OpenCL_version README, options and getopts 2017-11-14 12:24:17 +01:00
build.sh Hash extractor (fully compatbile with JtR hash format), both CUDA and OpenCL versions changed: they no longer accept an encrypted memory unit, instead they require the hash extractor output. Strict check added (-s option) to avoid false positives (empirically verified, it works with this repo images encrypted with Windows 7, 8.1 and 10). 2017-09-19 10:59:03 +02:00
LICENSE Initial commit 2017-08-03 11:20:54 -07:00
README.md README, options and getopts 2017-11-14 12:24:17 +01:00
run_tests.sh MAC test added in run_tests.sh 2017-11-14 12:34:17 +01:00

BitCracker

BitCracker is the first open source password cracking tool for memory units encrypted with BitLocker (using the password authentication method).

Introduction

BitLocker (formerly BitLocker Drive Encryption) is a full-disk encryption feature available in recent Windows versions (Ultimate and Enterprise editions of Windows Vista and Windows 7, the Pro and Enterprise editions of Windows 8, 8.1 and 10). BitCracker is a mono-GPU (OpenCL and CUDA) password cracking tool for memory units encrypted with the password authentication method of BitLocker (see picture below).

alt text

Our attack has been tested on several memory units encrypted with BitLocker running on Windows 7, Window 8.1, Windows 10 (compatible and not compatible mode) and BitLocker To Go.

Requirements

Minimum requirements for CUDA implementation:

  • CUDA 7.5
  • NVIDIA GPU with CC 3.5 or later
  • NVIDIA GPU with Kepler arch or later

Minimum memory requirement is 256 Mb; it may increase depending on the number of passwords processed by each kernel.

How To

Use the build.sh script to build 3 executables:

  • Hash extractor
  • BitCracker CUDA version
  • BitCracker OpenCL version

The script stores the executables in the build directory.

Step 1: Extract the image

You need to extract the image of your memory device encrypted with BitLocker. For example, you can use the dd command:

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

Step 2: Extract the hash

Use bitcracker_hash to extract an hash describing your target image. It also verifies if the target memory unit satisfies BitCracker's requirements.

./build/bitcracker_hash -o hashFile.txt -i path/to/imageEncrypted

Opening file path/to/imageEncrypted

Signature found at 0x00010003
Version: 8 
Invalid version, looking for a signature with valid version...

Signature found at 0x02110000
Version: 2 (Windows 7 or later)
VMK entry found at 0x021100c2
VMK encrypted with user password found!

path/to/imageEncrypted result hash:
$bitlocker$0$16$91a4ec232ab95bbb8e8ef964308c6b47$1048576$12$306af9dca50fd30103000000$60$00000000000000000000000000000000509aab04f2161082ed6153d6ea8ad51d45c1ae6ae77cdc470789472640f409a1c2ede715ea5a6bbc320e2312

The resulting hash is printed inside the hashFile.txt.

Step 3: Start the attack

Now you can start the BitCracker attack; use the -h to see all the options.

./build/bitcracker_cuda -f hashFile.txt -d dictionary.txt -t 1 -b 1 -g 0

====================================
Selected device: GPU Tesla K80 (ID: 0) properties
====================================
…………
Hash file hashFile.txt: $bitlocker$0$16$91a4ec232ab95bbb8e8ef964308c6b47$1048576$12$306af9dca50fd30103000000$60$00000000000000000000000000000000509aab04f2161082ed6153d6ea8ad51d45c1ae6ae77cdc470789472640f409a1c2ede715ea5a6bbc320e2312 ====================================
Dictionary attack
====================================

Starting CUDA attack:
  CUDA Threads: 1024
  CUDA Blocks: 1
  Psw per thread: 1
  Max Psw per kernel: 1024
  Dictionary: dictionary.txt

CUDA Kernel execution:
  Stream 0
  Effective number psw: 7
  Time: 28.583404 sec
  Passwords x second: 0.24 pw/sec

================================================
CUDA attack completed
Passwords evaluated: 7
Password found: [donaldduck]
================================================

False Positives

In case of false positives you can use the following options:

  • option '-s' (faster): more restrictive check on the correctness of the final result. Empirically verified with all the encrypted images in this repo, we can't guarantee that it doesn't lead to false negatives.

  • option '-m' (slower, CUDA version only): MAC verification

For performance reasons, use those options only if BitCracker returns several false positives.

Notes

Currently, BitCracker accepts passwords between 8 (minimum password length) and 27 characters (implementation reasons).

BitCracker doesn't provide any mask attack, cache mechanism or smart dictionary creation; therefore you need to provide your own input dictionary.

Examples

In the the run_test.sh script there are several attack examples using the images (of encrypted memory devices)provided in this repo:

  • imgWin7: BitLocker on Windows 7 Enteprise edition OS
  • imgWin8: BitLocker on Windows 8 Enteprise edition OS
  • imgWin10Compatible.vhd: BitLocker (compatible mode) on Windows 10 Enteprise edition OS,
  • imgWin10NotCompatible.vhd: BitLocker (not compatible mode) on Windows 10 Enteprise edition OS,
  • imgWin10NotCompatibleLong27.vhd: BitLocker (not compatible mode) on Windows 10 Enteprise edition OS with the longest possible password (27 characters)

Performance

Here we report the best performance of BitCracker implementations tested on different GPUs.

GPU Acronim GPU Arch CC # SM Clock CUDA
GFT GeForce Titan Kepler 3.5 14 835 7.0
GTK80 Tesla K80 Kepler 3.5 13 875 7.5
GFTX GeForce Titan X Maxwell 5.2 24 1001 7.5
GTP100 Telsa P100 Pascal 6.1 56 1328 8.0
AMDM Radeon Malta - - - - -

Performance:

Version GPU -t -b Passwords x kernel Passwords/sec Hash/sec
CUDA GFT 8 13 106.496 303 635 MH/s
CUDA GTK80 8 14 114.688 370 775 MH/s
CUDA GFTX 8 24 106.608 933 1.957 MH/s
CUDA GTP100 8 56 458.752 1.363 2.858 MH/s
OpenCL AMDM 32 64 524.288 241 505 MH/s
OpenCL GFTX 8 24 196.608 884 1.853 MH/s

John The Ripper

We released the OpenCL version as a format of John The Ripper (bleeding jumbo):

Next Release

In the next relese:

  • New attack mode to the recovery key
  • The maximum password length will be dynamic

References, credits and contacts

This is a research project in collaboration with the National Research Council of Italy released under GPLv2 license.
Copyright (C) 2013-2017 Elena Ago (elena dot ago at gmail dot com) and Massimo Bernaschi (massimo dot bernaschi at gmail dot com)
We will provide some additional info about BitCracker's attack in a future paper.

Although we use the GPLv2 licence, we are open to collaborations. For any additional info, collaborations or bug report please contact elena dot ago at gmail dot com