
grands ensembles de règles hashcat générés à partir de mots de passe compromis réels
Avertissement de maintenance du projet : Ce projet est considéré comme terminé. Aucune pull request ou modification ne sera apportée à ce projet à l'avenir, sauf s'il s'agit de bugs réels ou de migrations pour permettre à ces règles de fonctionner avec des versions plus récentes de hashcat.
Pantagrule est une série de règles pour le craqueur de mots de passe hashcat générées à partir de grandes quantités de données réelles de compromission de mots de passe. Bien que les fichiers de règles Pantagrule puissent être volumineux, les règles sont à la fois ajustables et offrent de meilleures performances que de nombreux ensembles de règles existants.
Pantagrule a été généré à l'aide de l'algorithme de chemin inverse de Levenshtein de PACK pour la génération automatique de règles (Kacherginsky, 2013). La sortie de PACK a ensuite été triée en fonction du nombre de fois que PACK a généré la règle pour créer l'ensemble de règles de base. Ce processus est similaire aux règles générées par _NSAKEY pour les compétitions de craquage de mots de passe en 2014 (_NSAKEY, 2014), cependant, Pantagrule a été généré à partir d'un ensemble de mots de passe significativement plus grand. La version 2 de Pantagrule a été développée à partir du corpus « founds » hashes.org accessible publiquement, une liste de mots publique de premier ordre. Cela donne des résultats plus transparents que la variante originale, qui utilisait un corpus propriétaire contenant 842 643 513 mots de passe uniques.
Lorsque de si grands ensembles de règles sont introduits dans PACK, des millions de règles en résultent. Cependant, comme la plupart des règles générées n'apparaissent que quelques fois, les règles les plus utiles sont celles qui sont le plus couramment générées par l'algorithme. Ce dépôt contient un sous-ensemble de règles générées par PACK en itérant sur le corpus existant.
Afin de générer une optimisation de second passage des règles sur des données réelles, le million de règles les plus générées a été exécuté contre la liste NTLM Pwned Passwords en utilisant la liste rockyou. Toute règle ayant craqué un mot de passe a été ajoutée à sa propre liste et les règles les moins performantes ont été écartées.
Quatre types d'optimisation ont été créés :
popular.rule : pantagrule.1m exécuté contre les 25 000 000 de mots de passe les plus courants de l'ensemble HIBP.random.rule : pantagrule.1m exécuté contre 25 000 000 de mots de passe sélectionnés aléatoirement dans l'ensemble HIBP.hybrid.rule : Une liste triée combinant les règles popular et random les plus efficaces, puis réduite de moitié, afin d'obtenir un ensemble de règles plus léger et « équilibré » fonctionnant sur un échantillon plus large.one.rule : Une version de OneRuleToRuleThemAll dans laquelle les meilleures règles hybrid sont ajoutées, et la liste est tronquée à la taille de l'ensemble de règles dive. Fait intéressant, il n'y a qu'un chevauchement de quelques milliers de règles entre OneRuleToRuleThemAll et les règles Pantagrule, ce qui rend les deux stratégies complémentaires. Le one de Pantagrule offre de meilleures performances que d'autres listes connues de cette taille, et il est recommandé de commencer par cet ensemble de règles avant d'essayer l'une des variantes plus volumineuses.Après le succès de ces grands ensembles de règles, une tentative a été faite de l'inverse de la variante royce, où la méthodologie originale de Pantagrule a été utilisée mais les deux ensembles de données étaient différents. Pantagrule utilise désormais la liste publique hashes.org « founds » comme base de liste de mots pour la génération de règles, et un passage d'optimisation a ensuite été effectué contre la liste NTLM V6 de Have I Been Pwned. Compte tenu de la nature entièrement publique des données utilisées, cela permet également la publication de données de reproductibilité brutes, y compris pantagrule.v2.1m.rule, qui sont le million de règles les plus générées par cette méthodologie. Les données pour V5 et V6 sont les mêmes pour les 25 millions de mots de passe les plus courants.
Pour cette version, la façon dont one est généré a changé. Pour générer one, la liste complète d'un million de règles a été ajoutée à OneRuleToRuleThemAll.rule, puis l'ensemble entier a été calibré sur Pwned V6, au lieu de simplement ajouter des règles et de tronquer.
Les conventions de nommage des règles ont maintenant changé pour adopter le format pantagrule.${corpus}.${version_entrainement}.${extension}. Cela permet de comprendre plus facilement à quoi la règle a été optimisée. Par exemple, pour pantagrule.hashorg.v6.random, nous avons utilisé la méthodologie random avec hashes.org comme base pour la génération de règles, optimisée sur Pwned Passwords V6.
Les règles originales ont été entraînées en utilisant la liste de mots propriétaire ainsi que l'ensemble Pwned Passwords NTLM v5 en utilisant rockyou.txt comme base. Étant donné que les « données d'entraînement » et les données de validation sont les mêmes, il semble logique qu'elles soient optimisées pour l'ensemble de données V5.
royceÀ la demande du contributeur de hashcat Royce Williams, des optimisations du million de règles les plus générées ont également été exécutées avec la liste founds de hashes.org. Cela est dû au fait que le corpus HIBP est relativement sale, et que la liste founds de hashes.org est susceptible de produire un ensemble de règles plus pratique pour le craquage réel. Celles-ci ont été ajoutées en tant que variantes royce. Les optimisations royce semblent comporter un nombre de règles globalement légèrement inférieur, et random.royce est nettement plus efficace sur une longue traîne de mots de passe que l'original random. Les performances n'ont pas augmenté par rapport aux règles existantes sur certaines variantes, mais étant donné que les données d'entraînement et de validation de Pantagrule original proviennent toutes deux de l'ensemble de données Pwned Passwords, cela ne semble pas surprenant. Les variantes Pantagrule royce se trouvent dans le dossier rules/royce.
Afin de tester le succès de la stratégie Pantagrule par rapport à d'autres ensembles de règles, nous exécuterons des données de validation sur les 25 millions de mots de passe les plus courants de Pwned Passwords V5 et les 100 millions de mots de passe les plus courants de Pwned Passwords V5 pour comprendre l'efficacité des règles à craquer la « longue traîne » avec chaque ensemble de règles. Le fichier canonique rockyou.txt servira de dictionnaire et de base de référence.
La génération de la variante originale a été effectuée sur une machine équipée de 8x 1070Ti sous hashcat v5.1.0. Les variantes Pantagrule royce ont été créées sur une machine équipée de 4x Radeon VII exécutant la version git de hashcat v5.1.0-1774-gf96594ef. Les variantes hashorg.v6 ont été créées et validées (très lentement) sur un seul NVIDIA Tesla M4, un seul 1070Ti et hashcat v6.1.0.
Afin de noter les performances des règles sur les mots de passe très courants, la tranche 0-25M est isolée dans sa propre colonne. La colonne RPP représente les règles par pourcentage sur l'ensemble de données 100M. Elle est calculée à l'aide de la formule rpp = Math.round(num_rules / (0_100m_percent - 6.450)). Plus ce nombre est élevé, plus il y a de règles exécutées par pourcentage craqué. Cela permet de réaliser les rendements décroissants des ensembles de règles et donne une idée du coût amplifié de l'exécution des règles sur des hashages plus lents.
Ce travail confirme les limites de l'algorithme LRP de PACK initialement observées par _NSAKEY sur des ensembles de données modernes lorsqu'on utilise le dictionnaire rockyou. Bien que l'algorithme LRP génère des règles qui augmentent le pourcentage de craquage, cela se fait au prix d'une augmentation importante de l'espace de recherche. Pour cette raison, Pantagrule est surtout utile dans les cas où un craquage difficile nécessite des règles exotiques.
Il est important de noter que si vous pouvez utiliser PACK pour générer des règles basées sur un corpus spécifique, puis cibler vos hashages restants avec celles-ci, vous obtiendrez probablement un pourcentage de craquage plus élevé qu'en utilisant l'un de ces grands ensembles de règles. Par exemple, Pantagrule V2 n'est pas aussi performant sur PPv5 que l'ensemble de règles calibré pour v5.
Depuis la publication originale de Pantagrule, ces règles ont fait leurs preuves lors de multiples missions d'équipe rouge dans de grandes entreprises technologiques et des cabinets de conseil. La liste originale pantagrule.1m a craqué 8 % des hashages HIBP restants qui avaient résisté au corpus utilisé pour générer Pantagrule, aux ensembles de règles courants ci-dessus, à une force brute alphanumérique de 7 caractères et aux topologies PathWell de KoreLogic.
Comme le dit l'auteur même de la métarègle One Rule to Rule Them All (Hunt, 2017), il n'existe pas de règle universellement meilleure que les autres. Chaque cas d'utilisation est différent, et chaque source de règles peut être celle qui vous aide le plus sur un dump de hashages spécifique ou avec une liste de mots particulière. Notez que ces données ne montrent pas ce qui a été craqué ; certaines règles ont craqué des hashages que d'autres règles n'ont pas craqués.
Les règles Pantagrule sont distribuées sous licence MIT. N'hésitez pas à les intégrer dans vos propres outils.
| Règles | Nombre de règles | V5 25M | V5 100M | RPP |
|---|
| Pas de règles (juste rockyou.txt) | 0 | 16,549 % | 6,450 % | N/A |
| pantagrule.private.v5.one | 99 092 | 79,814 % | 69,417 % | 1 574 |
| pantagrule.private.v5.hybrid | 355 205 | 81,346 % | 73,372 % | 5 308 |
| pantagrule.private.v5.popular | 478 736 | 81,792 % | 73,544 % | 7 135 |
| pantagrule.private.v5.random | 616 236 | 81,687 % | 69,805 % | 8 828 |
| pantagrule.hashorg.v6.one | 99 092 | 74,500 % | 60,573 % | 1 831 |
| pantagrule.hashorg.v6.hybrid | 339 953 | 77,649 % | 68,341 % | 5 493 |
| pantagrule.hashorg.v6.popular | 514 416 | 80,668 % | 72,377 % | 6 931 |
| pantagrule.hashorg.v6.random | 638 773 | 80,603 % | 72,713 % | 8 614 |
| pantagrule.private.hashorg.one.royce | 99 092 | 79,618 % | 69,092 % | 1 582 |
| pantagrule.private.hashorg.hybrid.royce | 314 268 | 81,068 % | 73,082 % | 4 716 |
| pantagrule.private.hashorg.popular.royce | 420 984 | 81,386 % | 73,102 % | 6 316 |
| pantagrule.private.hashorg.random.royce | 592 235 | 81,659 % | 74,010 % | 8 766 |
| best64 | 64 | 45,117 % | 24,985 % | 3 |
| hob064 | 68 | 37,786 % | 19,773 % | 5 |
| OneRuleToRuleThemAll | 52 014 | 78,058 % | 64,541 % | 895 |
| d3adhob0 | 57 548 | 51,274 % | 34,800 % | 2 030 |
| dive | 99 092 | 77,111 % | 63,314 % | 1 743 |
| _NSAKEY V1 | 123 289 | 76,42 % | 64,121 % | 2 138 |
| _NSAKEY V2 | 123 289 | 76,882 % | 64,472 % | 2 124 |