
BitCracker — это первый инструмент с открытым исходным кодом для подбора паролей к накопителям, зашифрованным с помощью BitLocker.
BitCracker — это первый инструмент с открытым исходным кодом для подбора паролей к зашифрованным устройствам хранения данных (жесткие диски, USB-флешки, SD-карты и т.д.), зашифрованным с помощью BitLocker — функции шифрования, доступной в Windows Vista, 7, 8.1 и 10 (издания Ultimate, Pro и Enterprise). BitLocker предлагает несколько различных методов аутентификации для шифрования устройства хранения, таких как Trusted Platform Module (TPM), Smart Card, пароль восстановления и пароль пользователя.
С помощью атаки по словарю BitCracker пытается найти правильный пароль пользователя или пароль восстановления для расшифровки зашифрованного устройства. Он реализован на CUDA и OpenCL.
Несколько журналов задерживали публикацию нашей статьи о BitCracker (почти 3 года, с окончательным отклонением после нескольких доработок), в которой объясняются детали нашей атаки, формат тома BitLocker Drive Encryption (BDE) и возможные слабости в процедуре шифрования/расшифровки. Наконец, мы опубликовали статью здесь: https://arxiv.org/abs/1901.01337 . Пожалуйста, не стесняйтесь комментировать и делиться.
Для запуска BitCracker-CUDA минимальные требования:
Для запуска BitCracker-OpenCL минимальные требования — любой GPU или CPU, поддерживающий OpenCL (некоторую помощь можно найти здесь.
BitCracker требует не менее 260 МБ памяти устройства.
Мы настоятельно рекомендуем запускать атаку на GPU, а не на CPU, по причинам производительности (см. раздел Производительность).
Запуск скрипта build.sh создаёт 4 исполняемых файла в каталоге build: bitcracker_hash, bitcracker_rpgen, bitcracker_cuda, bitcracker_opencl.
Чтобы собрать bitcracker_cuda в соответствии с вашим GPU NVIDIA и версией CUDA, необходимо изменить src_CUDA/Makefile, выбрав правильную версию SM. Для справки можно использовать следующую таблицу:
| Архитектура GPU | Рекомендуемая CUDA | Makefile |
|---|---|---|
| Kepler | CUDA 7.5 | arch=compute_35,code=sm_35 |
| Maxwell | CUDA 8.0 | arch=compute_52,code=sm_52 |
| Pascal | CUDA 9.0 | arch=compute_60,code=sm_60 |
| Volta | CUDA 9.0 | arch=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)
Затем нужно запустить исполняемый файл bitcracker_hash на вашем imageEncrypted.img, чтобы:
Если выполнение завершается успешно, bitcracker_hash создаёт 1 или 2 выходных файла:
Зашифрованные тома BDE могут иметь разные форматы для разных методов аутентификации. Если bitcracker_hash не может найти пароль восстановления на вашем зашифрованном образе, пожалуйста, откройте issue или свяжитесь со мной
Пример:
/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 : идентификатор устройства GPU NVIDIA-u : указывает на то, что требуется атака по паролю пользователяДля получения всех доступных опций введите ./build/bitcracker_cuda -h.
Для достижения наилучшей производительности, пожалуйста, обратитесь к таблице в разделе Производительность, чтобы правильно установить параметры t и b в соответствии с вашим GPU NVIDIA.
Те же соображения применимы к исполняемому файлу 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