El método podría tardar toda la vida, incluso podría terminarse el universo y no tener la llave para descifrar la Llave maestra para descifrar el disco duro.
Hace unos días publique un post sobre Extraer la información[2]
de cifrado (Metadata Usada por Geli[1]). El post sirve solo para extraer información de metadata para su posterior análisis, de hecho el comando
Código:
#geli dump ada0p2
Realiza la misma salida, sin embargo con el programa podemos tener en memoria una copia de la clave cifrada para tratar de crackearla.
Ahora Comento que el programa es infeasible por lo mismo que tardaríamos una eternidad en crackear la clave, posiblemente cuando la clave sea encontrada por mera suerte el disco duro a descifrar ya no exista.
Sin embargo como no he visto ninguna herramienta publica he decidido programar mi propio crack para Discos Duros cifrados con geli.
Métodos de crackeo:
- Fuerza Bruta a la passphrase mediante diccionario
- Fuerza Bruta a la clave cifrada
Fuerza Bruta a la passphrase mediante diccionario
La primera opción es incluso mas tardada, pero puede ser que tengamos mas suerte si es que la passphrase escogida por el Sysadmin esta en nuestro diccionario, sin embargo si la palabra no esta en el diccionario es imposible.
En este caso la única limitante es:
Código:
Iterations: 218830
En ese caso tarda como 2 segundos en mi equipo realizar el key derivation con esa cantidad de iteraciones. Sin embargo la ultima instalación de FreeBSD que hice, incremente ese numero de iteraciones a 10485760 y tarda aproximadamente u 41 veces mas en realizar el key derivation.
Entonces en un ataque por diccionario tendriamos que pasar nuestra passphrare y derivarla X cantidad de veces, lo cual seria rapido para un X pequeño pero muy tardado para un X muy grande como el mencionado.
Recomendación para los sysadmin que utilizen este método de cifrado o un cifrado similar, no elegir una clave que se encuentre en algun diccionario, y si pueden configurar el numero de iteracciones, configuren uno muy alto para que sea desalentador tratar de crackear por este medio.
Fuerza Bruta a la clave cifrada
Este metodo tiene como ventaja que se salta la parte de las iteraciones y como desventaja es que prueba todas las combinaciones posibles.
Sin embargo la probabilidad de que encuentre la clave en los primeros años de ejecución son NULAS, sin embargo a largooooo plazo va a terminar encontrado la llave para descifrar la clave maestra para descifrar el disco duro.
El metodo utiliza un archivo para salvar el progreso actual y poder reanudarlo en cualquier otro momento.
En cada iteracion del programa se realizan 2 pruebas para descifrar la clave.
- Una clave de 64 Bytes que incrementa de uno en uno en cada ciclo
- Una clave de 64 bytes de un buffer aleatorio
Una clave de 64 Bytes que incrementa de uno en uno.
Esta es la parte que nos da la certeza de que en algun momento podremos encontrar nuestra clave para descifrar ya que probamos todas las combinaciones posibles.
Una clave de 64 bytes de un buffer aleatorio
Posiblemente una perdidad de tiempo, pero si tenemos la suerte de que el buffer aleatorio coincida con la clave para descifrar la clave maestra. entonces podriamos tener la clave antes de tiempo.
Esta ultima parte se puede omitir y incrementariamos nuestro tiempo de finalizacion a un poco menos de la mitad del actual.
Infeasibilidad del metodo
La llave para descifrar la llave maestra es de 64 bytes de longitud, NO 64 Bits, 64 BYTES de longitud (64*8 bits)
Imaginemos el siguiente numero:
Código:
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095
Un numero decimal de 155 digitos
Entonces por cada prueba que realize nuestro programa tenemos la posibilidad de 1 en Ese numero de que sea nuestra clave de decifrado.
Para los curiosos esta seria la forma de leer el numero de posibilidades
Código:
13407 quintovigecillones
,807929 cuatorvigecillones
,942597 trivigecillones
,099574 duovigecillones
,024998 unvigecillones
,205846 vigecillones
,127479 nonidecillones
,365820 octidecillones
,592393 septodecillones
,377723 sextodecillones
,561443 quintodecillones
,721764 cuatordecillones
,030073 tridecillones
,546976 Duodecillones
,801874 Undecillones
,298166 Decillones
,903427 Nonillones
,690031 Octillones
,858186 Septillones
,486050 Sextillones
,853753 Quintillones
,882811 Cuatrillones
,946569 Trillones
,946433 Billones
,649006 Millones
,084095
Aunque tengo dudas de la pronunciacion apartir de los decillones.
El codigo para crackear por fuerza bruta esta en:
https://github.com/albertobsd/geli_metadata/blob/master/crackgeli.c
Si alguien quiere probrar tengo en mi firma un Reto para crackear
Crackeame si puedes Wallet.dat
Saludos!
[1] Extraer informacion de Cifrado
https://foro.elhacker.net/criptografia/extraer_informacion_de_cifrado_en_discoduro_de_freebsd-t474262.0.html
[2] Man page of Eli: https://www.freebsd.org/cgi/man.cgi?query=geli&apropos=0&sektion=8&manpath=FreeBSD+11.1-RELEASE&arch=default&format=html