
BitCracker es la primera herramienta de código abierto para descifrar contraseñas de unidades de memoria cifradas con BitLocker
BitCracker es la primera herramienta de código abierto para descifrar contraseñas de dispositivos de almacenamiento (Disco Duro, Pendrive USB, tarjeta SD, etc...) cifrados con BitLocker, una función de cifrado disponible en Windows Vista, 7, 8.1 y 10 (ediciones Ultimate, Pro y Enterprise). BitLocker ofrece varios métodos de autenticación diferentes para cifrar un dispositivo de almacenamiento, como el Módulo de Plataforma Confiable (TPM), Tarjeta Inteligente, Contraseña de Recuperación, Contraseña proporcionada por el usuario.
Mediante un ataque de diccionario, BitCracker intenta encontrar la Contraseña de Usuario o la Contraseña de Recuperación correcta para descifrar el dispositivo de almacenamiento cifrado. Se ha implementado en CUDA y OpenCL.
Varias revistas retrasaron la publicación de nuestro artículo sobre 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 Unidad BitLocker (BDE) y posibles debilidades en el procedimiento de cifrado/descifrado. Finalmente, publicamos el artículo aquí: https://arxiv.org/abs/1901.01337 . No dudes 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 compatible con OpenCL (puedes encontrar ayuda aquí.
BitCracker requiere al menos 260 MB de memoria de dispositivo.
Recomendamos encarecidamente ejecutar el ataque en una GPU en lugar de una CPU por razones de rendimiento (consulta la sección Rendimiento).
Ejecutar el script build.sh genera 4 ejecutables dentro del directorio build: bitcracker_hash, bitcracker_rpgen, bitcracker_cuda, bitcracker_opencl.
Para compilar bitcracker_cuda de manera coherente con tu GPU NVIDIA y versión de CUDA, debes modificar el src_CUDA/Makefile eligiendo la versión SM correcta. Como referencia, puedes usar la siguiente tabla:
| Arquitectura GPU | CUDA sugerido | 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 |
Debes crear la imagen de tu dispositivo de almacenamiento cifrado con BitLocker usando, por ejemplo, el comando dd:
sudo dd if=/dev/disk2 of=/path/to/imageEncrypted.img conv=noerror,sync
4030464+0 registros leídos
4030464+0 registros escritos
2063597568 bytes transferidos en 292.749849 segundos (7049013 bytes/seg)
Luego debes ejecutar el ejecutable bitcracker_hash en tu imageEncrypted.img para:
Si la ejecución se completa correctamente, bitcracker_hash produce 1 o 2 archivos de salida:
Los volúmenes cifrados con BDE pueden tener diferentes formatos para diferentes métodos de autenticación. Si bitcracker_hash no puede encontrar la Contraseña de Recuperación en tu imagen cifrada, por favor abre un issue o contáctame
Un ejemplo:
/build/bitcracker_hash -o test_hash -i ./Images/imgWin7
---------> BitCracker Hash Extractor <---------
Abriendo archivo ./Images/imgWin7
....
Firma encontrada en 0x02208000
Versión: 2 (Windows 7 o posterior)
Entrada VMK encontrada en 0x022080bc
¡VMK cifrada con contraseña de usuario encontrada!
VMK cifrada con AES-CCM
Entrada VMK encontrada en 0x0220819c
¡VMK cifrada con clave de recuperación encontrada!
VMK cifrada con AES-CCM
Hash de Contraseña de Usuario:
$bitlocker$0$16$89a5bad722db4a729d3c7b9ee8e76a29$1048576$12$304a4ac192a2cf0103000000$60$24de9a6128e8f8ffb97ac72d21de40f63dbc44acf101e68ac0f7e52ecb1be4a8ee30ca1e69fbe98400707ba3977d5f09b14e388c885f312edc5c85c2
Hash de Clave de Recuperación:
$bitlocker$2$16$8b7be4f7802275ffbdad3766c7f7fa4a$1048576$12$304a4ac192a2cf0106000000$60$6e72f6ef6ba688e72211b8cf8cc722affd308882965dc195f85614846f5eb7d9037d4d63bcc1d6e904f0030cf2e3a95b3e1067447b089b7467f86688
Archivo de salida para ataque de contraseña de usuario: "hash_user_pass.txt"
Archivo de salida para ataque de contraseña de recuperación: "hash_recv_pass.txt"
Puedes usar este tipo de ataque si el dispositivo de almacenamiento ha sido cifrado con una contraseña proporcionada por el usuario, como se muestra en la siguiente imagen.
BitCracker realiza un ataque de diccionario, por lo tanto debes proporcionar una lista de palabras con posibles contraseñas de usuario.
Para iniciar el ataque necesitas:
hash_user_pass.txtUn ejemplo de línea de comandos:
./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u
Donde:
-f : ruta al archivo hash_user_pass.txt-d : ruta 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 GPU NVIDIA-u : especifica que deseas un ataque de contraseña de usuarioPara todas las opciones disponibles, escribe ./build/bitcracker_cuda -h.
Para obtener el mejor rendimiento, consulta la tabla en la sección Rendimiento para configurar correctamente las opciones t y b según tu GPU NVIDIA.
Se pueden aplicar las mismas consideraciones para el ejecutable bitcracker_opencl.
Un ejemplo de salida:
====================================
Dispositivo seleccionado: GPU Tesla K80 (ID: 0)
====================================
....
Leyendo archivo hash "hash_user_pass.txt"
$bitlocker$0$16$0a8b9d0655d3900e9f67280adc27b5d7$1048576$12$b0599ad6c6a1cf0103000000$60$c16658f54140b3d90be6de9e03b1fe90033a2c7df7127bcd16cb013cf778c12072142c484c9c291a496fc0ebd8c21c33b595a9c1587acfc6d8bb9663
====================================
Ataque
====================================
Tipo de ataque: Contraseña de Usuario
Hilos CUDA: 1024
Bloques CUDA: 1
Contraseñas por hilo: 1
Máx. Contraseñas por kernel: 1024
Diccionario: wordlist.txt
Verificación estricta (-s): No
Comparación MAC (-m): No
Ejecución del kernel CUDA:
Stream 0
Número efectivo de contraseñas: 12
Rango de contraseñas:
abcdefshhf
.....
blablalbalbalbla12
Tiempo: 28.651947 seg
Contraseñas por segundo: 0.42 pw/sec
================================================
....
Contraseña encontrada: paperino
================================================
Actualmente BitCracker es capaz de procesar contraseñas de entrada con una longitud entre 8 y 55 caracteres.