
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. Для справки можно использовать следующую таблицу:
Вам нужно создать образ вашего зашифрованного 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
См. документацию 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_rpgen -h.
ПРИМЕЧАНИЕ: Обратите внимание, что количество возможных паролей восстановления огромно:
recovery password = 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536
Согласно нашим исследованиям, распределение паролей равномерно, и нет способа найти «более вероятные» числа. Пока мы не нашли правила для уменьшения количества возможных кандидатов. Это означает, что атака по паролю восстановления может длиться вечно (атака по паролю пользователя всегда предпочтительнее). В ближайшее время мы изменим инструмент 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 в вашей системе перед началом реальной атаки мы предоставили несколько образов зашифрованных устройств хранения.
Вы можете атаковать эти образы как в режиме пароля пользователя, так и восстановления, используя списки слов, хранящиеся в папке Dictionary.
Здесь мы приводим лучшие показатели производительности BitCracker в случае быстрой атаки (по умолчанию) на пароль пользователя (-u option).
Производительность:
N.B. Каждый пароль требует около 2.097.152 SHA-256
Мы выпустили BitCracker как формат OpenCL-BitLocker в John The Ripper (--format=bitlocker-opencl).
Файлы хэшей, сгенерированные bitcracker_hash (см. раздел How To), полностью совместимы с форматом John.
На GTV100 скорость подбора паролей составляет около 3150 p/s. Команда JtR разработала CPU-версию этой атаки (--format=bitlocker); на CPU Intel(R) Xeon(R) v4 2.20GHz скорость подбора составляет около 78 p/s.
Это в процессе разработки...
Ноябрь 2021: Код обновлён для работы на GPU NVIDIA Ampere с использованием CUDA 11.x
Пожалуйста, делитесь и тестируйте наш проект: нам нужны ваши отзывы!
Особая благодарность команде John The Ripper, проектам Dislocker и LibBDE.
Это исследовательский проект в сотрудничестве с Национальным исследовательским советом Италии, выпущенный под лицензией GPLv2.
Copyright (C) 2013-2021 Elena Ago (elena dot ago at gmail dot com) и Massimo Bernaschi (massimo dot bernaschi at gmail dot com)
В будущей статье мы предоставим дополнительную информацию об атаке BitCracker.
Хотя мы используем лицензию GPLv2, мы открыты для сотрудничества. Для получения дополнительной информации, сотрудничества или сообщения об ошибках, пожалуйста, свяжитесь с нами или откройте issue.
| Архитектура 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 |
| Сокращение GPU | GPU | Архитектура | CC | # SM | Частота | 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 | Tesla P100 | Pascal | 6.1 | 56 | 1328 | 8.0 |
| GTV100 | Tesla V100 | Volta | 7.0 | 80 | 1290 | 9.0 |
| AMDM | Radeon Malta | - | - | - | - | - |
| Версия | GPU | -t | -b | Паролей на ядро | Паролей/сек | Хэшей/сек |
|---|
| 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 | 1 | 56 | 57.344 | 1.418 | 2.973 MH/s |
| CUDA | 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 |