
Générateur de mots de passe basé sur un modèle de Markov en C qui énumère les candidats par probabilité, générant les mots de passe les plus probables en premier pour le cassage de hash via Hashcat ou John.
OMEN est un générateur de mots de passe basé sur un modèle de Markov, écrit en C. Il génère des candidats de mots de passe en fonction de leurs probabilités d'occurrence, c'est-à-dire qu'il produit d'abord les mots de passe les plus probables. OMEN améliore considérablement la vitesse de devinette par rapport aux propositions existantes. Si vous êtes intéressé par les détails sur la façon dont OMEN améliore les approches existantes de devinette de mots de passe basées sur un modèle de Markov, veuillez vous référer à OMEN: Faster Password Guessing Using an Ordered Markov Enumerator.
OMEN se compose de deux modules de programme distincts : createNG et enumNG. createNG
calcule les probabilités de n-grammes à partir d'une liste de mots de passe donnée et les stocke
sur le disque dur. Sur la base de ces probabilités, enumNG énumère de nouveaux
mots de passe dans le bon ordre (décroissant).
Utilisez une version récente de Linux, assurez-vous d'avoir installé git (système de contrôle de version Git), gcc (GNU Compiler Collection) et make (GNU Make). Vous pouvez l'installer sous Ubuntu Linux via :
$ sudo apt-get install build-essential git
Récupérez le code source via :
$ git clone https://github.com/RUB-SysSec/OMEN.git OMEN
Placez-vous dans le répertoire nouvellement créé OMEN et exécutez :
$ make
Si la compilation réussit, vous trouverez createNG et enumNG dans le répertoire courant.
.
├── alphabetCreator
├── createNG
├── docs
│ ├── CHANGELOG.md
│ ├── LICENSE
│ └── screenshots
├── enumNG
├── evalPW
├── makefile
├── README.md
└── src
├── alphabetCreator.c
...
Si vous le souhaitez, vous pouvez maintenant supprimer le dossier src et le fichier makefile, ils ne sont plus utilisés.
Un court guide d'installation utilisant Cygwin sous Windows 10 est disponible ici.
Avant de pouvoir générer des mots de passe, les probabilités de n-grammes doivent être estimées à l'aide de
createNG. Pour calculer les probabilités avec les paramètres par défaut, createNG doit être
appelé en fournissant un chemin vers une liste de mots de passe à entraîner :
$ ./createNG --iPwdList password-training-list.txt
Chaque mot de passe de la liste donnée doit être sur une nouvelle ligne. Le module
lit et évalue ensuite la liste en générant plusieurs fichiers. Outre un fichier de configuration (createConfig) stockant les paramètres utilisés (dans ce cas le paramètre par défaut), plusieurs fichiers sont créés contenant des informations sur les grammes et la longueur des mots de passe. Ces fichiers ont l'extension '.level' :
Les probabilités de chaque n-gramme et les longueurs sont mappées sur des niveaux entre 0
(le plus probable) et 10 (le moins probable). Une fois ces fichiers créés, enumNG peut
être utilisé pour générer une liste de mots de passe ordonnés par probabilités. Actuellement, enumNG prend en charge trois modes de fonctionnement : file, stdout, simulated plaintext attack. Dans le mode par défaut de enumNG, une liste de devinettes de mots de passe basée sur ces niveaux est créée. En utilisant la commande
$ ./enumNG
génère 1 milliard de mots de passe et les stocke dans un fichier texte, qui peut être trouvé
dans le dossier 'results'. Les mots de passe de ce fichier sont ordonnés par niveau (c'est-à-dire par
probabilité). Comme les éditeurs de texte courants ne sont pas capables de gérer des fichiers aussi volumineux,
il est recommandé, pour les tests, de réduire le nombre de mots de passe créés. Cela
peut être fait en utilisant l'argument -m.
$ ./enumNG -m 10000
Il créera une liste ordonnée de seulement 10 000 mots de passe. Si vous souhaitez afficher les mots de passe sur le flux de sortie standard (stdout), utilisez l'argument -p.
$ ./enumNG -p -m 10000
Si vous souhaitez évaluer la performance de devinette par rapport à un ensemble de test de mots de passe en plaintext, utilisez l'argument -s. Veuillez noter : dans ce mode, OMEN bénéficie de l'algorithme adaptatif de planification de longueur intégrant un retour en direct, qui n'est pas disponible (en raison du canal de retour manquant) dans les modes file et stdout.
$ ./enumNG -s=password-testing-list.txt -m 10000
Le résultat de cette évaluation peut être trouvé dans le dossier 'results'.
Les deux modules fournissent un dialogue d'aide qui peut être affiché en utilisant l'argument -h ou --help.
Comment passer de $2a$10$HNYF4KajSTqxIP/KoiB5tOCVeKUgvscTh32hhAmppFk4T/USmI2B. à "GoodOMEN!123" ?
OMEN a été développé pour des cas d'usage académiques comme l'amélioration de la modélisation probabiliste des mots de passe, l'estimation du nombre de devinettes ou la force des mots de passe, en général, pour améliorer la sécurité des mots de passe. N'abusez pas de ce logiciel pour porter atteinte à la vie privée d'autrui ou enfreindre la loi.
Les évaluateurs de hachage populaires comme Hashcat et John the Ripper prennent en charge des centaines de formats de hachage et de chiffrement et pourraient être facilement intégrés grâce à leur prise en charge de la lecture des candidats de mots de passe via leur flux d'entrée standard (stdin).
$ ./enumNG -p -m 10000 | ./hashcat64.bin ...
ou
$ ./enumNG -p -m 10000 | ./john --stdin ...
Pour une performance de devinette optimale, envisagez d'entraîner createNG avec une distribution de mots de passe similaire à celle que vous souhaitez craquer.
Veuillez noter : l'utilisation de la modélisation probabiliste des mots de passe pour craquer des mots de passe, en général, ne devrait être envisagée que contre des hachages lents (par exemple, bcrypt, PBKDF2, scrypt ou Argon2) où le nombre de devinettes réalisables est limité, ou dans des attaques très ciblées. En revanche, pour les hachages très rapides (MD5, SHA-1 ou NTLM), l'utilisation de bons dictionnaires et de règles de mangling (par exemple, best64.rule) est la voie à suivre.
Si vous êtes intéressé par ce sujet, envisagez de lire les articles suivants et leurs travaux connexes (cette liste est incomplète, vous pouvez contribuer en l'étendant) :