
PCFG = 確率文脈自由文法 (Probabilistic Context Free Grammar)
PCFG = Pretty Cool Fuzzy Guesser
一言で言えば: 人間がパスワードを生成する方法についての研究を行うためのツールコレクションです。これらはパスワードハッシュをクラックするために使用できますが、合成パスワード(ハニーワード)を作成したり、より優れたパスワード強度アルゴリズムの開発を支援するためにも使用できます。
Trainer: 4.4
Guesser: 4.6
PRINCE_LING: 4.3
Password_Scorer: 4.4
Sphinx を使用して、コード内のドキュメント文字列に基づいて開発者ガイドを動的に生成しています。開発者ガイドをビルドするには、/doc/INSTRUCTIONS.rst の手順を参照してください。
プレビルドされた開発者ガイドの PDF は /doc/build/latex/pcfgdevelopersguide.pdf にもあります。なお、git 履歴をクリーンに保つため、メジャーリリース間でこのガイドを再ビルドする予定はありません。つまり、PDF をコミットするとすぐに非常に混乱するからです。そのため、プレビルドガイドは若干古くなっている可能性があります。コードの作成/修正に役立てるために使用する場合は、プレビルド版ではなく、自分でガイドをビルドすることをお勧めします。
このプロジェクトは、機械学習を使用してユーザーのパスワード作成習慣を特定します。開示された平文/クラックされたパスワードのリストをトレーニングすることで、PCFG モデルが生成されます。このプロジェクトのコンテキストでは、モデルはルールセットと呼ばれ、トレーニング中に特定されたパスワードのさまざまな部分と、それらに関連する確率が多数含まれています。このステミングは、PRINCE などの他のクラッキングツールに役立ち、ルールセットの一部をより伝統的な辞書ベースの攻撃に直接組み込むこともできます。このプロジェクトには、このルールセットを利用して確率順にパスワードの推測を生成する PCFG 推測ジェネレータも含まれています。これは標準的な辞書攻撃よりもはるかに強力であり、テストでは、他の公開されている方法よりも平均して大幅に少ない推測数でパスワードをクラックできることが証明されています。欠点は、確率順に推測を生成するのが遅いことです。つまり、毎秒平均 50〜10 万の推測を生成するのに対し、GPU ベースのアルゴリズムは高速ハッシュアルゴリズムに対して毎秒数百万から数十億(以上)の推測を生成できます。したがって、PCFG 推測器は、多数のソルト付きハッシュやその他の低速ハッシュアルゴリズムに対して最も適しており、アルゴリズムのパフォーマンスコストは推測の精度によって補われます。
pip3 install chardet を使用してインストールこのリポジトリに含まれるデフォルトのルールセットは、RockYou データセットの 100 万パスワードのサブセットをトレーニングして作成されました。RockYou の 3200 万パスワードの完全なセットでトレーニングすると、より良いパフォーマンスが得られますが、ダウンロードサイズを小さくするために除外されました。新しいリストでトレーニングしなくても、デフォルトのルールセットを使用してパスワードの生成を開始できますが、ターゲットとするパスワードに近いと思われるターゲットセットでトレーニングすることをお勧めします。独自のルールセットを作成する場合のクイックガイドは次のとおりです:
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: 指定すると、トレーニング中に検出されたメールアドレスや完全な Web サイトなどの機密データがルールセットに保存されます。PCFG 推測ジェネレータは現在このデータを使用していませんが、実際のパスワードクラッキング攻撃では非常に価値があります。これはデフォルトではオフになっており、このツールを学術的な環境で使いやすくしています。オフの場合でも、ルールセット内にはほぼ確実に PII データが保存されることに注意し、生成されたルールセットを適切に保護してください。例: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive
c. --comments: ルールセット設定ファイルにコメントを追加します。これは後で見返したときに、ルールセットをなぜどのように生成したかを知るのに役立ちます。追加したいコメントを引用符で囲んで指定します。以前にトレーニングされた PCFG ルールセットを使用して、推測を標準出力に生成します。これらの推測は、使用したい任意のプログラムにパイプで渡すことができます。ルールセットが指定されていない場合、デフォルトのルールセット DEFAULT が使用されます。このガイドでは、使用するルールセットが NEW_RULESET であると想定します。
python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAMEpython3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load以前にトレーニングされたルールセットによってパスワードが生成される確率を推定したい場合が多くあります。例えば、これはパスワード強度メトリックの一部として、または他の研究目的で使用できます。これを実行するサンプルプログラムが含まれています。
python3 password_scorer -r NEW_RULESET -i INPUT_LIST名前: PRINCE Language Indexed N-Grams (Prince-Ling)
概要: PRINCE スタイルのコンビネータ攻撃で使用するために、既にトレーニングされた PCFG ルールセット/文法に基づいてカスタマイズされたワードリストを構築します。この背後にある考え方は、PCFG トレーナーがトレーニングセットのパスワードを個々の解析に分割しているため、その情報を活用して他の攻撃用のターゲットワードリストを作成できるということです。
基本メカニズム: 内部的には、Prince-Ling ツールは基本的にミニ PCFG 推測ジェネレータです。マルコフ推測生成を除去し、通常の PCFG 攻撃で使用される基本構造を、PRINCE ワードリストを生成するために調整された大幅に削減された基本構造に置き換えます。これにより、PRINCE 攻撃でどの単語が有用であると期待されるかを考慮しながら、確率順に辞書単語を生成できます。
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
バグに気づいた場合、または追加してほしい機能がある場合は、この GitHub ページで Issue を開いてください。プルリクエストも受け付けていますが、理想的にはプルリクエストを Issue にリンクして、レビューや質問、変更内容の理解を容易にしてください。
PCFG を使用したパスワード作成戦略のモデリングには、多くの改善の余地があります。新しいアイデア、変更、提案は大歓迎です。コードが現在特定の方法で何かを行っているからといって、それが最良の選択であるとは限りません。例えば、アルファ文字列、数字、その他などのマスクが生成される現在のアプローチの基本構造は、「最も簡単な」実装オプションであったために選択されました。私のチームでは、基本単語から始めて、それに適用されるより伝統的なマングリングルールを PCFG の遷移としてモデル化する方が良い選択肢かもしれないという議論が多くありました。このコードを自由に活用してください!