BitCracker es la primera herramienta de agrietamiento de contraseña de código abierto para dispositivos de almacenamiento (disco duro, pendrive usb, tarjeta SD, etc.) encriptada con BitLocker, una función de cifrado disponible en Windows Vista, 7, 8.1 y 10 (Ultimate, Pro y Enterprise ediciones). BitLocker ofrece varios métodos de autenticación diferentes para cifrar un dispositivo de almacenamiento como el módulo de plataforma de confianza (TPM), la tarjeta inteligente, la contraseña de recuperación, la contraseña suministrada por el usuario.
Por medio de un ataque de diccionario, BitCracker intenta encontrar la contraseña de usuario correcta o la contraseña de recuperación para descifrar el dispositivo de almacenamiento cifrado. Se ha implementado en CUDA y OpenCl.
Varias revistas retrasaron la publicación de nuestro documento de BitCracker (casi 3 años, con rechazo final después de varias revisiones) que explica los detalles de nuestro ataque, el formato de volumen de cifrado de bitlocker Drive (BDE) y posibles debilidades en el procedimiento de cifrado/descifrado. Finalmente, publicamos el artículo aquí: https://arxiv.org/abs/1901.01337. No dude en comentar y compartir.
Para ejecutar bitcracker-cuda, los requisitos mínimos son:
Para ejecutar BitCracker-Opencl, los requisitos mínimos son cualquier GPU o CPU que admite OpenCL (puede encontrar ayuda aquí.
BitCracker requiere al menos 260 MB de memoria del dispositivo.
Recomendamos encarecidamente ejecutar su ataque a una GPU en lugar de una CPU por razones de rendimiento (consulte el rendimiento de la sección).
Ejecutar el script build.sh
genera 4 ejecutables dentro del directorio build
: bitcracker_hash
, bitcracker_rpgen
, bitcracker_cuda
, bitcracker_opencl
.
Para construir bitcracker_cuda
coherentemente con su versión NVIDIA GPU y CUDA, debe modificar la src_CUDA/Makefile
eligiendo la versión SM correcta. Como referencia, puede usar la siguiente tabla:
Arquitectura de GPU | CUDA sugerido | Makfile |
---|---|---|
Kepler | CUDA 7.5 | Arch = Compute_35, código = 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, código = SM_70 |
Debe crear la imagen de su dispositivo de almacenamiento encriptado con BitLocker usando, como ejemplo, el comando 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)
Luego debe ejecutar el ejecutable de bitcracker_hash
en su imageEncrypted.img
para:
Si la ejecución se completa correctamente, bitcracker_hash
produce 1 o 2 archivos de salida:
Los volúmenes cifrados de BDE podrían tener diferentes formatos para diferentes métodos de autenticación. Si bitcracker_hash
no puede encontrar la contraseña de recuperación en su imagen cifrada, abra un problema o contácteme
Un ejemplo:
/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"
Puede usar este tipo de ataque si el dispositivo de almacenamiento ha sido encriptado con una contraseña suministrada por el usuario como se muestra en la siguiente imagen. BitCracker realiza un ataque de diccionario, por lo tanto, debe proporcionar una lista de palabras de contraseñas de usuarios de posibilidades.
Para comenzar el ataque que necesitas:
hash_user_pass.txt
Un ejemplo de línea de comando:
./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u
Dónde:
-f
: ruta al archivo hash_user_pass.txt
-d
: camino a tu lista de palabras-t
: número de contraseñas procesadas por cada hilo CUDA-b
: Número de bloques CUDA-g
: ID del dispositivo NVIDIA GPU-u
: especifique su ataque de contraseña de deseo de usuario Para todas las opciones disponibles, escriba ./build/bitcracker_cuda -h
. Para tener el mejor rendimiento, consulte la sección Tabla en el rendimiento para establecer correctamente las opciones t
y b
de acuerdo con su GPU NVIDIA.
Las mismas consideraciones se pueden aplicar para el ejecutable bitcracker_opencl
.
Un ejemplo de salida:
====================================
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
================================================
Actualmente, BitCracker puede procesar contraseñas de entrada con una longitud entre 8 y 55 caracteres.
Durante el cifrado de un dispositivo de almacenamiento, (independientemente del método de autenticación) BitLocker le pide al usuario que almacene en algún lugar una contraseña de recuperación que se pueda utilizar para restaurar el acceso al dispositivo de almacenamiento cifrado en caso de que no pueda desbloquear la unidad normalmente. Por lo tanto, la contraseña de recuperación es un tipo de PASSE-PartOut para todos los métodos de autenticación y consiste en una clave de 48 dígitos como esta:
236808-089419-192665-495704-618299-073414-538373-542366
Consulte los documentos de Microsoft para obtener más detalles.
En cuanto a la contraseña del usuario, BitCracker puede realizar un ataque de diccionario para encontrar la contraseña de recuperación correcta generada por BitLocker para cifrar el dispositivo de almacenamiento. Tenga en cuenta que actualmente podemos atacar la contraseña de recuperación solo si el dispositivo de almacenamiento no ha sido encriptado con el TPM.
Para comenzar el ataque que necesitas:
hash_recv_pass.txt
Genere y almacene todas las contraseñas de posibilidad, es un problema difícil. Por esta razón, creamos un generador de contraseña de recuperación llamado bitcracker_rpgen
. Con esta herramienta, puede crear un montón de contraseñas de recuperación listas de palabras que puede usar para sus ataques. Como ejemplo:
./build/bitcracker_rpgen -n 300 -p 10000000 -s 000000-000011-000022-000033-000044-000055-008459-015180
Esto genera:
-n
: número de listas de palabras-p
: Número de contraseñas de recuperación por lista de palabras-s
: generar contraseñas de recuperación a partir de estePuede usar la configuración predeterminada en ejecución sin opciones:
./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
...
Tenga en cuenta que la opción -s
se puede usar para reiniciar la generación de su última contraseña de recuperación generada (en lugar de reiniciar cada vez desde la inicial). La opción -d
permite la posibilidad de tener duplicados en la misma contraseña de recuperación. Por ejemplo: 000000-000011-000055-000055-000044-000055-000902-217822
Para todas las opciones disponibles, escriba ./build/bitcracker_rpgen -h
.
Nota: Tenga en cuenta que la cantidad de posibles contraseñas de recuperación es enorme:
recovery password = 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536
Según nuestra investigación, la distribución de contraseña es uniforme y no hay forma de encontrar números "más probables". Hasta ahora, no encontramos una regla para reducir la cantidad de posibles candidatos. Esto significa que el ataque de contraseña de recuperación podría llevar una eternidad (el ataque de usuario del usuario es siempre el preferido). Pronto modificaremos la herramienta bitcracker_rpgen
para generar contraseña de recuperación de manera informal en lugar de en secuencia ordenada.
Un ejemplo de línea de comando:
./build/bitcracker_cuda -f hash_recv_pass.txt -d bitcracker_wlrp_0.txt -t 1 -b 1 -g 0 -r
Donde las opciones son las mismas que en el caso de la contraseña del usuario, pero en lugar de -u
necesita especificar -r
. Un ejemplo de salida:
====================================
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
================================================
Por defecto, BitCracker realiza un ataque rápido (para los modos de contraseña de usuario y de recuperación) que puede devolver un falso positivo. En este caso, puede volver a ejecutar su ataque con la opción -m
que permite la verificación MAC (solución más lenta).
Para probar BitCracker en su sistema antes de comenzar el ataque real, proporcionamos varias imágenes de dispositivos de almacenamiento cifrados.
Puede atacar esas imágenes con los modos de contraseña de usuario y recuperación, utilizando las listas de palabras almacenadas en la carpeta Dictionary
.
Aquí informamos el mejor rendimiento de BitCracker en caso de ataque rápido (predeterminado) a la contraseña del usuario (-U opción).
GPU Acronim | GPU | Arco | CC | # SM | Reloj | Cuda |
---|---|---|---|---|---|---|
GFT | Titán GeForce | 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 | - | - | - | - | - |
Actuación:
Versión | GPU | -T | -b | Contraseñas x kernel | Contraseñas/seg | Hash/seg |
---|---|---|---|---|---|---|
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 |
NB Cada contraseña requiere aproximadamente 2.097.152 SHA-256
Lanzamos BitCracker como el formato OpenCl-BitLocker en John the Ripper ( --format=bitlocker-opencl
). Los archivos hash generados por bitcracker_hash
(ver cómo la sección) son totalmente compatibles con el formato John.
En la tasa de contraseña GTV100 es de aproximadamente 3150p/s. El equipo JTR desarrolló la versión de CPU de este ataque ( --format=bitlocker
); En una CPU Intel (R) Xeon (R) V4 2.20GHz, la velocidad de contraseña es de aproximadamente 78p/s.
Este es un trabajo en progreso ...
Nov 2021: Código actualizado para ejecutarse en NVIDIA GPU Ampere usando CUDA 11.X
PLASE Compartir y probar nuestro proyecto: ¡Necesitamos sus comentarios!
Un agradecimiento especial al equipo de John the Ripper, Dislocker y Libbde Projects.
Este es un proyecto de investigación en colaboración con el Consejo Nacional de Investigación de Italia publicado bajo la licencia GPLV2.
Copyright (c) 2013-2021 Elena hace (Elena Dot Dot en Gmail Dot Com) y Massimo Bernaschi (Massimo Dot Bernaschi en Gmail Dot Com)
Proporcionaremos información adicional sobre el ataque de Bitcracker en un artículo futuro.
Aunque usamos la licencia GPLV2, estamos abiertos a colaboraciones. Para obtener información adicional, colaboraciones o informe de errores, contáctenos o abra un problema