
Generador de contraseñas basado en modelos de Markov en C que enumera candidatos por probabilidad, generando primero las contraseñas más probables para el cracking de hashes mediante Hashcat o John.
OMEN es un adivinador de contraseñas basado en modelos de Markov escrito en C. Genera candidatos a contraseñas según sus probabilidades de aparición, es decir, produce primero las contraseñas más probables. OMEN mejora significativamente la velocidad de adivinación respecto a propuestas existentes. Si estás interesado en los detalles sobre cómo OMEN mejora los enfoques existentes de adivinación de contraseñas basados en modelos de Markov, consulta OMEN: Faster Password Guessing Using an Ordered Markov Enumerator.
OMEN consta de dos módulos de programa separados: createNG y enumNG. createNG
calcula las probabilidades de n-gramas basándose en una lista de contraseñas dada y las almacena
en el disco duro. Basándose en estas probabilidades, enumNG enumera nuevas
contraseñas en el orden correcto (descendente).
Usa una versión reciente de Linux y asegúrate de tener instalados git (sistema de control de versiones Git), gcc (GNU Compiler Collection) y make (GNU Make). Puedes instalarlo en Ubuntu Linux mediante:
$ sudo apt-get install build-essential git
Obtén el código fuente mediante:
$ git clone https://github.com/RUB-SysSec/OMEN.git OMEN
Cambia al directorio recién creado OMEN y ejecuta:
$ make
Si la compilación es exitosa, puedes encontrar createNG y enumNG dentro del directorio actual.
.
├── alphabetCreator
├── createNG
├── docs
│ ├── CHANGELOG.md
│ ├── LICENSE
│ └── screenshots
├── enumNG
├── evalPW
├── makefile
├── README.md
└── src
├── alphabetCreator.c
...
Si lo deseas, ahora puedes eliminar la carpeta src y el archivo makefile, ya no se utilizan.
Puedes encontrar una breve guía de instalación usando Cygwin en Windows 10 aquí.
Antes de poder generar cualquier contraseña, se deben estimar las probabilidades de n-gramas usando
createNG. Para calcular las probabilidades usando la configuración predeterminada, se debe
llamar a createNG proporcionando una ruta a una lista de contraseñas que se debe entrenar:
$ ./createNG --iPwdList password-training-list.txt
Cada contraseña de la lista dada debe estar en una nueva línea. El módulo entonces
lee y evalúa la lista generando un par de archivos. Además de un archivo de configuración (createConfig) que almacena la configuración usada (en este caso la configuración predeterminada), se crean varios archivos que contienen información sobre los gramas y la longitud de las contraseñas. Estos archivos tienen la extensión '.level':
Las probabilidades de cada n-grama y las longitudes se asignan a niveles entre 0
(más probable) y 10 (menos probable). Una vez que se crean esos archivos, se puede usar enumNG para generar una lista de contraseñas ordenadas por probabilidades. Actualmente, enumNG admite tres modos de operación: file, stdout, simulated plaintext attack. En el modo predeterminado de enumNG, se crea una lista de conjeturas de contraseñas basada en estos niveles. Usando el comando
$ ./enumNG
genera 1.000 millones de contraseñas y las almacena en un archivo de texto, que se puede encontrar
en la carpeta 'results'. Las contraseñas en este archivo están ordenadas por nivel (es decir, por
probabilidad). Dado que los editores de texto comunes no pueden manejar archivos tan grandes,
se recomienda para pruebas reducir el número de contraseñas creadas. Esto
se puede hacer usando el argumento -m.
$ ./enumNG -m 10000
Creará una lista ordenada con solo 10.000 contraseñas. Si estás interesado en imprimir las contraseñas al flujo de salida estándar (stdout) usa el argumento -p.
$ ./enumNG -p -m 10000
Si estás interesado en evaluar el rendimiento de adivinación contra un conjunto de pruebas de contraseñas en texto plano usa el argumento -s. Ten en cuenta: En este modo OMEN se beneficia del algoritmo de programación de longitud adaptativa que incorpora retroalimentación en vivo, que no está disponible (debido a la falta de canal de retroalimentación) en los modos file y stdout.
$ ./enumNG -s=password-testing-list.txt -m 10000
El resultado de esta evaluación se puede encontrar en la carpeta 'results'.
Ambos módulos proporcionan un diálogo de ayuda que se puede mostrar usando el argumento -h o --help.
¿Cómo llegar desde $2a$10$HNYF4KajSTqxIP/KoiB5tOCVeKUgvscTh32hhAmppFk4T/USmI2B. hasta "GoodOMEN!123"?
OMEN fue desarrollado para casos de uso académicos como mejorar el modelado probabilístico de contraseñas, estimar números de conjeturas o la fortaleza de contraseñas, en general, para mejorar la seguridad de las contraseñas. No abuses de este software para dañar la privacidad de otras personas o para infringir la ley.
Evaluadores de hash populares como Hashcat y John the Ripper admiten cientos de formatos de hash y cifrado y podrían integrarse fácilmente debido a su soporte para leer candidatos a contraseñas a través de su flujo de entrada estándar (stdin).
$ ./enumNG -p -m 10000 | ./hashcat64.bin ...
o
$ ./enumNG -p -m 10000 | ./john --stdin ...
Para un rendimiento de adivinación óptimo, considera entrenar createNG con una distribución de contraseñas similar a la que deseas crackear.
Ten en cuenta: Usar modelado probabilístico de contraseñas para crackear contraseñas, en general, solo debería considerarse contra hashes lentos (por ejemplo, bcrypt, PBKDF2, scrypt o Argon2) donde el número de conjeturas factibles es limitado o en ataques muy dirigidos. En contraste, para hashes muy rápidos (MD5, SHA-1 o NTLM), usar buenos diccionarios y reglas de mangling (por ejemplo, best64.rule) es el camino a seguir.
Si estás interesado en este tema, considera leer los siguientes artículos y su trabajo relacionado (esta lista está incompleta, puedes ayudar ampliándola):
Gramáticas Probabilísticas Libres de Contexto