
Générateur de mots de passe par grammaire hors contexte probabiliste (PCFG)
PCFG = Grammaire Probabiliste Hors Contexte
PCFG = Guesseur Flou Assez Cool
En bref : Un ensemble d'outils pour mener des recherches sur la manière dont les humains génèrent des mots de passe. Ceux-ci peuvent être utilisés pour casser des hachages de mots de passe, mais aussi pour créer des mots de passe synthétiques (honeywords), ou aider à développer de meilleurs algorithmes de force des mots de passe.
Entraîneur : 4.4
Guesseur : 4.6
PRINCE_LING : 4.3
Scoreur de mots de passe : 4.4
Sphinx est utilisé pour créer dynamiquement un Guide du développeur basé sur les docstrings dans le code. Pour construire le Guide du développeur, reportez-vous aux instructions dans /doc/INSTRUCTIONS.rst
Un PDF pré-construit du Guide du développeur peut également être trouvé dans /doc/build/latex/pcfgdevelopersguide.pdf. Notez que je ne vais pas reconstruire ce guide entre les versions majeures pour garder l'historique git plus propre. Autrement dit, commiter des PDF devient très vite désordonné. Cela signifie que le guide pré-construit peut être légèrement obsolète, donc si vous l'utilisez pour vous aider à écrire/modifier du code, il est recommandé de construire le guide vous-même plutôt que d'utiliser le guide pré-construit.
Ce projet utilise l'apprentissage automatique pour identifier les habitudes de création de mots de passe des utilisateurs. Un modèle PCFG est généré en s'entraînant sur une liste de mots de passe divulgués en clair/cassés. Dans le contexte de ce projet, le modèle est appelé un ensemble de règles et contient de nombreuses parties différentes des mots de passe identifiées lors de l'entraînement, ainsi que leurs probabilités associées. Ce stemming peut être utile pour d'autres outils de cassage tels que PRINCE, et/ou des parties de l'ensemble de règles peuvent être directement incorporées dans des attaques par dictionnaire plus traditionnelles. Ce projet inclut également un générateur de suppositions PCFG qui utilise cet ensemble de règles pour générer des suppositions de mots de passe dans l'ordre de probabilité. C'est beaucoup plus puissant que les attaques par dictionnaire standard, et lors des tests, il s'est avéré capable de casser des mots de passe en moyenne avec significativement moins de suppositions que d'autres méthodes disponibles publiquement. L'inconvénient est que générer des suppositions dans l'ordre de probabilité est lent, ce qui signifie qu'il crée en moyenne 50 à 100k suppositions par seconde, alors que les algorithmes basés sur GPU peuvent créer des millions à des milliards (et plus) de suppositions par seconde contre des algorithmes de hachage rapides. Par conséquent, le guesseur PCFG est mieux utilisé contre de grands nombres de hachages salés, ou d'autres algorithmes de hachage lents, où le coût de performance de l'algorithme est compensé par la précision des suppositions.
pip3 install chardetL'ensemble de règles par défaut inclus dans ce dépôt a été créé en s'entraînant sur un sous-ensemble de 1 million de mots de passe du jeu de données RockYou. De meilleures performances peuvent être obtenues en s'entraînant sur l'ensemble complet de 32 millions de mots de passe de RockYou, mais cela a été exclu pour garder la taille de téléchargement petite. Vous pouvez utiliser l'ensemble de règles par défaut pour commencer à générer des mots de passe sans avoir à vous entraîner sur une nouvelle liste, mais il est recommandé de vous entraîner sur un ensemble cible de mots de passe qui pourrait être plus proche de ce que vous essayez de cibler. Si vous créez votre propre ensemble de règles, voici un guide rapide :
python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESETpython3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6
b. --save_sensitive : Si spécifié, les données sensibles telles que les adresses e-mail et les sites Web complets découverts lors de l'entraînement seront sauvegardées dans l'ensemble de règles. Bien que le générateur de suppositions PCFG n'utilise pas actuellement ces données, elles sont très précieuses lors d'une véritable attaque de cassage de mots de passe. Cette option est désactivée par défaut pour rendre cet outil plus facile à utiliser dans un cadre académique. Notez que même lorsque cette option est désactivée, il y aura presque certainement encore des données PII sauvegardées dans un ensemble de règles, donc protégez les ensembles de règles générés de manière appropriée. Exemple : python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive
c. --comments : Ajoute un commentaire à votre fichier de configuration d'ensemble de règles. Cela est utile pour savoir pourquoi et comment vous avez généré votre ensemble de règles lorsque vous y reviendrez plus tard. Incluez le commentaire que vous souhaitez ajouter entre guillemets.Ceci génère des suppositions vers stdout en utilisant un ensemble de règles PCFG précédemment entraîné. Ces suppositions peuvent ensuite être redirigées (piped) vers tout programme que vous souhaitez utiliser. Si aucun ensemble de règles n'est spécifié, l'ensemble de règles par défaut DEFAULT sera utilisé. Pour les besoins de ce guide, on supposera que l'ensemble de règles utilisé est NEW_RULESET.
python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAMEpython3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --loadIl existe de nombreux cas où vous pouvez souhaiter estimer la probabilité qu'un mot de passe soit généré par un ensemble de règles précédemment entraîné. Par exemple, cela pourrait faire partie d'une métrique de force de mot de passe, ou être utilisé à d'autres fins de recherche. Un programme d'exemple a été inclus pour effectuer cela.
python3 password_scorer -r NEW_RULESET -i INPUT_LISTNom : PRINCE Language Idexed N-Grams (Prince-Ling)
Overview : Construit des listes de mots personnalisées basées sur un ensemble de règles/grammaire PCFG déjà entraîné pour une utilisation dans des attaques de combinaison de style PRINCE. L'idée derrière cela était que puisque l'entraîneur PCFG décompose déjà un ensemble d'entraînement de mots de passe en analyses individuelles, cette information pourrait être exploitée pour créer des listes de mots ciblées pour d'autres attaques.
Basic Mechanics : Sous le capot, l'outil Prince-Ling est essentiellement un mini-générateur de suppositions PCFG. Il supprime la génération de suppositions Markov et remplace les structures de base utilisées dans les attaques PCFG normales par une structure de base significativement réduite conçue pour générer des listes de mots PRINCE. Cela permet de générer des mots de dictionnaire dans l'ordre de probabilité en gardant un œil sur l'utilité attendue de ces mots dans une attaque PRINCE.
Using Prince-Ling
python3 prince-ling.py -r RULESET_NAME -s SIZE_OF_WORDLIST_TO_CREATE -o OUTPUT_FILENAMEpython3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt
Si vous remarquez des bogues, ou si vous avez une fonctionnalité que vous souhaiteriez voir ajoutée, veuillez ouvrir un problème sur cette page GitHub. J'accepte également les pull requests, mais idéalement, veuillez lier une pull request à un problème afin que je puisse plus facilement la réviser, poser des questions et mieux comprendre les modifications que vous apportez.
Il y a de nombreuses améliorations qui peuvent être apportées à la modélisation des stratégies de création de mots de passe en utilisant les PCFGs. Je suis très ouvert aux nouvelles idées, changements et suggestions. Ce n'est pas parce que le code fait actuellement quelque chose d'une certaine manière que c'est la meilleure option. Par exemple, la structure de base fondamentale de l'approche actuelle où des masques sont générés pour les chaînes alpha, les chiffres, autres, etc., a été choisie parce que c'était l'option la "plus facile" à implémenter. Mon équipe a beaucoup débattu qu'une meilleure option pourrait être de commencer par un mot de base, puis de modéliser des règles de mangling plus traditionnelles appliquées à celui-ci comme des transitions dans le PCFG. Alors n'hésitez pas à laisser libre cours à votre imagination avec ce code !