パスワード解析やワードリスト分析に役立つ統計情報を取得しよう
パスワードクラッキングツールとして有名なJohn the Ripper (JtR)には、様々な補助ツールが含まれています。その中でも、calc_stat
は、John the Ripperが生成した.pot
ファイル(解読成功したパスワードとハッシュのペアが記録されるファイル)や、パスワードクラッキングに使用するワードリスト(辞書ファイル)の内容を統計的に分析するための非常に便利なツールです。
このツールを使うことで、解読されたパスワードの傾向(長さ、使用文字種など)や、ワードリストの特性を詳細に把握することができます。これは、より効果的なパスワードクラッキング戦略を立てたり、パスワードポリシーの強度を評価したりする上で重要な情報となります。
この記事では、calc_stat
ツールの基本的な使い方から、主要なオプション、出力結果の読み解き方までを詳しく解説していきます。John the Ripperをより深く活用したい方、パスワードやワードリストの分析に興味がある方はぜひ参考にしてください。😊
calc_statの基本的な使い方
calc_stat
は通常、John the Ripper (Jumbo版) をインストールすると一緒に導入されます。特別なインストール作業は不要な場合が多いです。コマンドラインから以下のように実行します。
最も基本的な使い方は、分析したいファイルを引数として指定するだけです。John the Ripperの.pot
ファイルを分析する場合、通常はjohn.pot
という名前で保存されています(環境によっては異なる場所にあります)。
# john.pot ファイルを分析する場合
./calc_stat john.pot
# custom_wordlist.txt というワードリストを分析する場合
./calc_stat custom_wordlist.txt
複数のファイルを同時に指定することも可能です。その場合、指定された全てのファイルの内容をまとめて分析します。
./calc_stat john.pot old_passwords.txt wordlist1.txt
calc_stat
は、標準入力 (stdin) からデータを読み込むこともできます。これは、他のコマンドの出力をパイプで渡して分析したい場合に便利です。
cat my_wordlist.txt | ./calc_stat
基本的なコマンドを実行すると、デフォルトでいくつかの統計情報(パスワードの総数、最小/最大長、平均長、文字種ごとの統計など)が出力されます。
主要なコマンドラインオプション
calc_stat
には、分析内容を細かく制御するための様々なオプションが用意されています。ここでは、特によく使われる主要なオプションを紹介します。
オプション | 説明 | 例 |
---|---|---|
-c charset_file |
指定された文字セットファイルに基づいて文字頻度を計算します。文字セットファイルは、John the Ripperの設定ファイル (john.conf ) で定義されているフォーマットに従います。 |
./calc_stat -c ../run/charset.lst john.pot |
-l |
パスワード(または行)の長さの分布を表示します。各長さに対して、その長さを持つパスワードがいくつ存在するかを示します。 | ./calc_stat -l my_wordlist.txt |
-s |
文字セットの統計情報を表示します。各パスワードがどの文字クラス(数字、小文字、大文字、特殊文字など)を含んでいるかを分析し、その組み合わせごとのパスワード数を出力します。 | ./calc_stat -s john.pot |
-m min_len |
分析対象とするパスワードの最小長を指定します。これより短いパスワードは無視されます。 | ./calc_stat -m 8 john.pot (長さ8文字以上のパスワードのみ分析) |
-M max_len |
分析対象とするパスワードの最大長を指定します。これより長いパスワードは無視されます。 | ./calc_stat -M 12 john.pot (長さ12文字以下のパスワードのみ分析) |
-h or --help |
ヘルプメッセージを表示して終了します。利用可能な全てのオプションを確認できます。 | ./calc_stat -h |
-e=encoding |
入力ファイルのエンコーディングを指定します。デフォルトはシステムのロケールに依存しますが、明示的に指定したい場合に使用します (例: -e=UTF-8 )。 |
./calc_stat -e=UTF-8 japanese_wordlist.txt |
-8 |
各パスワードを8ビット文字のシーケンスとして扱います (エンコーディングを無視)。特殊なバイナリデータを含むファイルを分析する場合などに使用します。 | ./calc_stat -8 data.bin |
これらのオプションは組み合わせて使用することも可能です。例えば、長さ8文字以上16文字以下で、文字セットの統計を見たい場合は以下のようにします。
./calc_stat -m 8 -M 16 -s john.pot
オプションを駆使することで、より目的に合った詳細な分析が可能になります。💪
出力結果の読み解き方
calc_stat
の出力はテキストベースですが、いくつかのセクションに分かれています。ここでは、主要な出力項目とその意味を解説します。
基本統計情報
オプションを指定しない場合や、特定のオプションに関連しない基本的な情報がまず表示されます。
Passphrases: 10000
Unique: 9980 (99.80%)
Target: john.pot
Lengths:
Min: 4
Max: 15
Avg: 8.25
Character classes:
ASCII: 9900 (99.00%)
Non-ASCII: 100 (1.00%)
Control: 0 (0.00%)
Digit: 5000 (50.00%)
Upper: 3000 (30.00%)
Lower: 9500 (95.00%)
Special: 1500 (15.00%)
- Passphrases: 分析対象となったパスワード(行)の総数。
- Unique: 重複を除いたユニークなパスワードの数とその割合。
- Target: 分析対象のファイル名(標準入力の場合は表示されないことがあります)。
- Lengths:
- Min: 最小のパスワード長。
- Max: 最大のパスワード長。
- Avg: 平均のパスワード長。
- Character classes:
- ASCII: ASCII文字のみで構成されるパスワードの数と割合。
- Non-ASCII: 非ASCII文字(例: 日本語、アクセント付き文字など)を含むパスワードの数と割合。
- Control: 制御文字を含むパスワードの数と割合。
- Digit: 数字 (0-9) を含むパスワードの数と割合。
- Upper: 大文字 (A-Z) を含むパスワードの数と割合。
- Lower: 小文字 (a-z) を含むパスワードの数と割合。
- Special: 特殊文字 (!@#$%^&*() など) を含むパスワードの数と割合。
注意: Character classesの各項目は、「その種類の文字を少なくとも1つ含む」パスワードの数を表します。そのため、合計が100%になるとは限りません(例: “Password123!” はDigit, Upper, Lower, Special の全てにカウントされます)。
長さの分布 (-l オプション)
-l
オプションを使用すると、パスワードの長さごとの分布が表示されます。
Length distribution:
4: 500 (5.00%)
5: 800 (8.00%)
6: 1200 (12.00%)
7: 1500 (15.00%)
8: 2000 (20.00%)
9: 1800 (18.00%)
10: 1000 (10.00%)
11: 500 (5.00%)
12: 400 (4.00%)
13: 150 (1.50%)
14: 100 (1.00%)
15: 50 (0.50%)
各行は「長さ: その長さのパスワード数 (全体の割合)
」を示します。この例では、長さ8のパスワードが最も多く、全体の20%を占めていることがわかります。ワードリストの傾向把握や、ブルートフォース攻撃の際の長さ範囲設定に役立ちます。
文字セットの統計 (-s オプション)
-s
オプションを使用すると、パスワードがどの文字クラスの組み合わせで構成されているかの統計が表示されます。
Character set statistics:
lower: 1500 (15.00%) | L
upper: 200 (2.00%) | U
digit: 500 (5.00%) | D
special: 50 (0.50%) | S
lower+upper: 800 (8.00%) | LU
lower+digit: 2500 (25.00%) | LD
lower+special: 300 (3.00%) | LS
upper+digit: 100 (1.00%) | UD
upper+special: 20 (0.20%) | US
digit+special: 80 (0.80%) | DS
lower+upper+digit: 1200 (12.00%) | LUD
lower+upper+special: 150 (1.50%) | LUS
lower+digit+special: 1800 (18.00%) | LDS
upper+digit+special: 50 (0.50%) | UDS
lower+upper+digit+special: 750 (7.50%) | LUDS
(other): 0 (0.00%) | O
各行は「文字クラスの組み合わせ: その組み合わせを持つパスワード数 (全体の割合) | 略称
」を示します。
- L: 小文字のみ
- U: 大文字のみ
- D: 数字のみ
- S: 特殊文字のみ
- LU: 小文字と大文字のみ
- LD: 小文字と数字のみ
- … LUD: 小文字、大文字、数字のみ
- … LUDS: 小文字、大文字、数字、特殊文字の全てを含む
- (other): 上記の組み合わせに当てはまらないもの(例: 非ASCII文字を含む場合など)
この例では、「小文字と数字のみ」のパスワード (LD) が最も多く25%、「小文字、数字、特殊文字」の組み合わせ (LDS) が18%であることがわかります。これは、パスワードポリシーの要件(例: 「英小文字、数字、記号をそれぞれ1文字以上含むこと」)がどの程度守られているか、あるいは破られているかを分析するのに役立ちます。
文字頻度 (-c オプション)
-c charset_file
オプションを使用すると、指定された文字セットファイルに基づいて、各文字クラスや具体的な文字の出現頻度が表示されます。John the Ripperのcharset.lst
などを指定することが多いです。出力は詳細になるため、ここでは一部を抜粋します。
[List.External: C:\john\run\charset.lst]
[...]
[Charset:Known]
Char count: 68250
Ten most frequent chars:
'a' (6.59%) 'e' (5.98%) 'o' (5.50%) 'i' (5.12%) 'n' (4.88%)
's' (4.75%) 'r' (4.50%) 'l' (4.20%) 't' (4.01%) '1' (3.80%)
Ten least frequent chars:
'Z' (0.01%) 'X' (0.01%) 'J' (0.02%) 'Q' (0.02%) 'K' (0.03%)
'V' (0.05%) 'W' (0.08%) 'Y' (0.10%) 'F' (0.12%) 'G' (0.15%)
Character classes (percentage of total characters):
Digit: 15000 (21.98%)
Upper: 8000 (11.72%)
Lower: 40000 (58.61%)
Special: 5250 (7.69%)
[...]
- Char count: 総文字数。
- Ten most frequent chars: 最も出現頻度が高い10文字とその割合。
- Ten least frequent chars: 最も出現頻度が低い10文字とその割合。
- Character classes: 各文字クラスに属する文字の総数とその割合(これはパスワード単位ではなく、全文字中の割合である点に注意)。
この情報は、特定の文字がどれだけ使われているかを知りたい場合や、カスタム文字セットを作成する際の参考に役立ちます。📝
活用シナリオとヒント ✨
calc_stat
は様々な場面で活用できます。
-
漏洩パスワードリストの分析:
実際に漏洩したパスワードリスト (例: Have I Been Pwned の Pwned Passwords リストなど) を分析することで、ユーザーがどのようなパスワードを設定しがちか、その傾向(よく使われる単語、長さ、文字種など)を把握できます。これは、組織のパスワードポリシー策定や、従業員へのセキュリティ教育の材料として役立ちます。
# Have I Been Pwned のリスト (pwned-passwords-sha1-ordered-by-count-v8.txt など) をダウンロードして分析 ./calc_stat -l -s pwned-passwords-sha1-ordered-by-count-v8.txt > pwned_stats.txt
-
John the Ripper の .pot ファイル分析:
John the Ripperによるクラッキングセッション後に
john.pot
ファイルを分析することで、どのくらいのパスワードが解読され、それらがどのような特徴を持っていたかを確認できます。特定のルールやワードリストがどれだけ効果的だったかを評価するのにも使えます。./calc_stat -s john.pot
-
カスタムワードリストの評価:
独自のワードリストを作成した場合、そのリストがどのような長さや文字種のパスワード候補を含んでいるかを評価できます。例えば、特定のターゲットに対して、短すぎるパスワード候補や、逆に長すぎる候補が多すぎないかなどを確認できます。
./calc_stat -l my_custom_list.txt
-
パスワードポリシーの検証:
組織で設定されているパスワードポリシー(例: 8文字以上、英大小文字・数字・記号をすべて含む)が、実際のユーザーパスワード(もし監査などで取得できれば)や漏洩パスワードと比較してどの程度有効かを評価する材料になります。
-s
オプションの結果が特に役立ちます。
calc_stat
の処理には時間がかかることがあります。特に文字頻度分析(-c
)は計算量が多くなりがちです。必要に応じて、head
やgrep
コマンドなどで入力データをフィルタリングしたり、nohup
やscreen
/tmux
などを使ってバックグラウンドで実行したりすることを検討してください。
まとめ
calc_stat
は、John the Ripperに含まれるシンプルながらも強力な統計分析ツールです。.pot
ファイルやワードリストの内容を深く理解するために、以下のような情報を提供してくれます。
- パスワードの長さ分布
- 使用されている文字クラス(数字、大小文字、記号)の組み合わせ
- 文字ごとの出現頻度
- ASCII/非ASCII文字の使用状況
これらの情報を活用することで、パスワードクラッキングの効率を高めたり、パスワードセキュリティの傾向を分析したり、より効果的なパスワードポリシーを策定したりするための洞察を得ることができます。
John the Ripperを使っている方はもちろん、パスワードリストの分析に興味がある方にとっても、calc_stat
は試してみる価値のあるツールです。ぜひ、お手元のデータでその機能を確かめてみてください!🚀
参考情報
-
John the Ripper official website: https://www.openwall.com/john/
John the Ripperの公式サイト。ダウンロードや基本的な情報はこちらから。
-
John the Ripper wiki (calc_stat): (※公式Wiki等に専用ページが見当たらない場合が多いため、具体的なURLは記載が難しいですが、JtRのドキュメントやソースコード内で言及されていることがあります)
より詳細なオプションや内部動作については、John the Ripperのドキュメントやソースコード内のコメントを参照する必要があるかもしれません。
-
John the Ripper jumbo (GitHub): https://github.com/openwall/john
開発版であるJumbo版のソースコードリポジトリ。
calc_stat.c
などのソースコードを読むことで、最新の機能や詳細な動作を確認できます。
コメント