
Probabilistische Kontextfreie Grammatik (PCFG) Passwort-Rate-Generator
PCFG = Probabilistische Kontextfreie Grammatik
PCFG = Ziemlich cooler Fuzzy-Rater
Kurz gesagt: Eine Sammlung von Werkzeugen zur Erforschung, wie Menschen Passwörter generieren. Diese können zum Knacken von Passwort-Hashes verwendet werden, aber auch zur Erstellung synthetischer Passwörter (Honeywords) oder zur Entwicklung besserer Passwortstärke-Algorithmen.
Trainer: 4.4
Guesser: 4.6
PRINCE_LING: 4.3
Password_Scorer: 4.4
Sphinx wird verwendet, um dynamisch ein Entwicklerhandbuch basierend auf Docstrings im Code zu erstellen. Informationen zum Erstellen des Entwicklerhandbuchs finden Sie in der Anleitung unter /doc/INSTRUCTIONS.rst
Ein vorab erstelltes Entwicklerhandbuch als PDF finden Sie auch unter /doc/build/latex/pcfgdevelopersguide.pdf. Beachten Sie, dass ich dieses Handbuch zwischen größeren Veröffentlichungen nicht neu erstelle, um die Git-Historie sauber zu halten. Das Commitieren von PDFs wird schnell unübersichtlich. Daher kann das vorab erstellte Handbuch leicht veraltet sein. Wenn Sie es zum Schreiben/Ändern von Code verwenden, wird empfohlen, das Handbuch selbst zu erstellen, anstatt das vorab erstellte zu verwenden.
Dieses Projekt verwendet maschinelles Lernen, um die Passworterstellungsgewohnheiten von Benutzern zu identifizieren. Ein PCFG-Modell wird durch Training mit einer Liste offengelegter Klartext-/geknackter Passwörter erstellt. Im Kontext dieses Projekts wird das Modell als Regelsatz bezeichnet und enthält viele verschiedene Teile der während des Trainings identifizierten Passwörter sowie deren zugehörige Wahrscheinlichkeiten. Diese Zerlegung kann für andere Knackwerkzeuge wie PRINCE nützlich sein, und/oder Teile des Regelsatzes können direkt in traditionellere wörterbuchbasierte Angriffe integriert werden. Dieses Projekt enthält auch einen PCFG-Ratengenerator, der diesen Regelsatz verwendet, um Passwortversuche in Wahrscheinlichkeitsreihenfolge zu generieren. Dies ist viel leistungsfähiger als Standard-Wörterbuchangriffe und hat sich in Tests als fähig erwiesen, Passwörter im Durchschnitt mit deutlich weniger Versuchen zu knacken als andere öffentlich verfügbare Methoden. Der Nachteil ist, dass das Generieren von Versuchen in Wahrscheinlichkeitsreihenfolge langsam ist – es werden durchschnittlich 50-100k Versuche pro Sekunde erstellt, während GPU-basierte Algorithmen Millionen bis Milliarden (und mehr) Versuche pro Sekunde gegen schnelle Hash-Algorithmen erzeugen können. Daher wird der PCFG-Rater am besten gegen große Mengen gesalzener Hashes oder andere langsame Hash-Algorithmen eingesetzt, bei denen die Leistungskosten des Algorithmus durch die Genauigkeit der Versuche ausgeglichen werden.
pip3 install chardetDer in diesem Repo enthaltene Standard-Regelsatz wurde durch Training mit einem 1-Millionen-Passwort-Teilsatz des RockYou-Datensatzes erstellt. Bessere Leistung kann durch Training mit dem gesamten 32-Millionen-Passwort-Satz von RockYou erzielt werden, aber dieser wurde ausgeschlossen, um die Download-Größe klein zu halten. Sie können den Standard-Regelsatz verwenden, um sofort Passwörter zu generieren, ohne einen neuen Satz trainieren zu müssen, es wird jedoch empfohlen, auf einem Ziel-Passwortsatz zu trainieren, der Ihrem Angriffsziel näher kommt. Wenn Sie Ihren eigenen Regelsatz erstellen, finden Sie hier eine Kurzanleitung:
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: Wenn dies angegeben wird, werden sensible Daten wie E-Mail-Adressen und vollständige Websites, die während des Trainings entdeckt werden, im Regelsatz gespeichert. Der PCFG-Ratengenerator verwendet diese Daten derzeit nicht, aber sie sind bei einem echten Passwort-Knackangriff sehr wertvoll. Diese Option ist standardmäßig deaktiviert, um dieses Tool in akademischen Umgebungen einfacher nutzbar zu machen. Beachten Sie, dass selbst wenn diese Option deaktiviert ist, mit ziemlicher Sicherheit immer noch personenbezogene Daten im Regelsatz gespeichert werden, schützen Sie daher generierte Regelsätze entsprechend. Beispiel: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive
c. --comments: Fügt einen Kommentar zur Konfigurationsdatei Ihres Regelsatzes hinzu. Dies ist nützlich, um später zu wissen, warum und wie Sie Ihren Regelsatz generiert haben. Geben Sie den gewünschten Kommentar in Anführungszeichen an.Dies generiert Versuche auf stdout unter Verwendung eines zuvor trainierten PCFG-Regelsatzes. Diese Versuche können dann in jedes Programm weitergeleitet werden, das Sie verwenden möchten. Wenn kein Regelsatz angegeben wird, wird der Standard-Regelsatz DEFAULT verwendet. Für die Zwecke dieser Anleitung wird angenommen, dass der verwendete Regelsatz NEW_RULESET ist.
python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAMEpython3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --loadEs gibt viele Fälle, in denen Sie die Wahrscheinlichkeit schätzen möchten, dass ein Passwort von einem zuvor trainierten Regelsatz generiert wird. Dies könnte beispielsweise Teil einer Passwortstärkemetrik sein oder für andere Forschungszwecke verwendet werden. Ein Beispielprogramm wurde beigefügt, um dies durchzuführen.
python3 password_scorer -r NEW_RULESET -i INPUT_LISTName: PRINCE Language Indexed N-Grams (Prince-Ling)
Übersicht: Erstellt maßgeschneiderte Wortlisten basierend auf einem bereits trainierten PCFG-Regelsatz/-Grammatik für die Verwendung in PRINCE-Kombinationsangriffen. Die Idee dahinter war, dass der PCFG-Trainer die Trainingspasswörter bereits in einzelne Parsings zerlegt. Diese Informationen könnten genutzt werden, um gezielte Wortlisten für andere Angriffe zu erstellen.
Grundlegende Mechanik: Im Kern ist das Prince-Ling-Werkzeug im Grunde ein Mini-PCFG-Ratengenerator. Es entfernt die Markov-Versuchsgenerierung und ersetzt die Basisstrukturen, die in normalen PCFG-Angriffen verwendet werden, durch eine deutlich reduzierte Basisstruktur, die auf die Erstellung von PRINCE-Wortlisten zugeschnitten ist. Dies ermöglicht das Generieren von Wörterbuchwörtern in Wahrscheinlichkeitsreihenfolge, wobei berücksichtigt wird, wie nützlich diese Wörter voraussichtlich in einem PRINCE-Angriff sein werden.
Verwendung von 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
Wenn Ihnen Fehler auffallen oder Sie eine Funktion wünschen, die hinzugefügt werden soll, eröffnen Sie bitte ein Issue auf dieser GitHub-Seite. Ich akzeptiere auch Pull Requests, aber idealerweise verlinken Sie einen Pull Request auf ein Issue, damit ich ihn leichter überprüfen, Fragen stellen und die von Ihnen vorgenommenen Änderungen besser verstehen kann.
Es gibt viele Verbesserungsmöglichkeiten bei der Modellierung von Passworterstellungsstrategien mit PCFGs. Ich bin sehr offen für neue Ideen, Änderungen und Vorschläge. Nur weil der Code etwas derzeit auf eine bestimmte Weise tut, heißt das nicht, dass dies die beste Option ist. Zum Beispiel wurde die grundlegende Basisstruktur des aktuellen Ansatzes, bei der Masken für Alpha-Strings, Ziffern, Sonstiges usw. generiert werden, gewählt, weil es die "einfachste" zu implementierende Option war. Mein Team hatte viele Diskussionen darüber, dass eine bessere Option darin bestehen könnte, mit einem Basiswort zu beginnen und dann traditionellere Mangelregeln, die darauf angewendet werden, als Übergänge im PCFG zu modellieren. Also fühlen Sie sich frei, mit diesem Code zu experimentieren!