はじめに
John the Ripper は、広く利用されているオープンソースのパスワードクラッキングツールです。パスワード監査やクラッキングの試みを行う際、その出力とステータスを理解することは、進捗状況の監視、クラックされたパスワードの特定、および問題のトラブルシューティングに不可欠です。この実験 (Lab) では、John the Ripper の様々な出力メッセージの解釈、リアルタイムのクラッキングステータスの確認、クラッキングセッションの結果の表示、パフォーマンス統計の理解、および後で分析するための出力のログ記録について解説します。
John the Ripper 出力メッセージの解釈
このステップでは、クラッキングセッション中に John the Ripper が表示する様々なメッセージを理解します。これらのメッセージは、その進捗状況、クラッキングモード、および発生した問題に関する洞察を提供します。
まず、単語リスト (wordlist) を使用して簡単なクラッキングセッションを開始しましょう。セットアップで作成した passwords.txt ファイルと、小さな wordlist.txt を使用します。
ターミナルで以下のコマンドを実行してください。
john --wordlist=wordlist.txt passwords.txt
以下のような出力が表示されます。
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts to the same type of crypt (sha512crypt, crypt(3) $6$)
Remaining 3 password hashes with no different salts
Press 'q' or Ctrl-C to abort, almost any other key for status
user1 (user1)
user2 (user2)
user3 (user3)
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% 3.000g/s 18.00p/s 18.00c/s 18.00C/s user1 user2 user3
Session completed
この出力の主要な部分を分解してみましょう。
Using default input encoding: UTF-8: John が使用している文字エンコーディングを示します。Loaded 3 password hashes...: 入力ファイルからロードされたハッシュの数を示します。Press 'q' or Ctrl-C to abort, almost any other key for status: これは重要なプロンプトです。セッション中に John と対話する方法を示しています。user1 (user1): これはクラックされたパスワードです。user1はユーザー名(またはハッシュ識別子)であり、(user1)はクラックされたパスワードです。John は、見つかった各クラックされたパスワードを表示します。3g 0:00:00:00 DONE ...: これはサマリー行です。3g: クラックされたハッシュの数(3 回の推測)。0:00:00:00 DONE: 経過時間とセッションが完了したことを示します。100.0%: クラッキングプロセスが完了した割合。3.000g/s: 1 秒あたりの推測数 (guesses per second)。18.00p/s: 1 秒あたりのパスワード数 (passwords per second)(テストされた候補パスワードの数)。18.00c/s: 1 秒あたりの暗号化処理数 (crypts per second)(ハッシュ計算の数)。18.00C/s: 1 秒あたりの候補数 (candidates per second)(生成されたユニークな候補パスワードの数)。user1 user2 user3: 最近クラックされたパスワードの一部。
Session completed: クラッキングセッションが終了したことを確認します。
これらのメッセージを理解することで、John the Ripper の操作の進捗状況と結果を監視するのに役立ちます。
セッション中のクラッキングステータスの確認
このステップでは、John the Ripper クラッキングセッションのリアルタイムステータスを確認する方法を学びます。これは、プロセスを中断することなく進捗状況を監視するために、長時間実行されるセッションで特に役立ちます。
まず、前のセッションの状態をクリーンアップして、John が新たに開始できるようにします。
john --session=test_session --restore=NONE --wordlist=wordlist.txt passwords.txt --force-load-hashes
次に、新しいクラッキングセッションを開始します。今回は、セッションがステータスを確認できるのに十分な時間実行されるように、少し大きめの単語リストを使用します。passwords.txt ファイルと wordlist.txt ファイルを使用します。
以下のコマンドを実行してください。セッションに名前を付けるために --session=test_session を使用していることに注意してください。これは後で復元したりステータスを確認したりするのに役立ちます。
john --session=test_session --wordlist=wordlist.txt passwords.txt
John が実行されている間(小さな単語リストではすぐに完了するかもしれませんが、大きな単語リストだと想像してください)、新しいターミナルタブ(または LabEx 環境にいない場合は新しいターミナルウィンドウ)を開きます。新しいターミナルで、実行中のセッションのステータスを確認できます。
ステータスを確認するには、セッション名とともに --status オプションを使用します。
john --session=test_session --status
以下のような出力が表示されます(正確な数値は進捗状況によって異なります)。
Session test_session (john)
Progress: 3/3 (100%)
Speed: 3.000g/s (words), 18.00p/s (passwords), 18.00c/s (crypts), 18.00C/s (candidates)
Remaining: 0:00:00:00
Cracked: 3
この出力は、クラックされたハッシュの数、クラッキング速度、および推定残り時間を含む、セッションの進捗状況のスナップショットを提供します。
ステータスを確認した後、新しいターミナルタブを閉じることができます。元の John the Ripper セッションは、完了するまで実行を続けます。
セッションが既に完了している場合、--status コマンドはセッションが完了したことを示します。
Session test_session (john)
Session completed
この機能は、長時間実行されるクラッキング操作を管理する上で非常に役立ちます。
セッションからクラックされたパスワードを表示する
John the Ripper セッションが完了した後、クラックされたパスワードは john.pot というファイル(通常は ~/.john/john.pot にあります)に保存されます。このステップでは、これらのクラックされたパスワードを表示する方法を学びます。
まず、クラックされたパスワードを含む john.pot ファイルがあることを確認してください。前のステップに従っていれば、既に存在しているはずです。もし存在しない場合は、クラッキングコマンドを再度実行してください。
john --wordlist=wordlist.txt passwords.txt
セッションが完了したら、--show オプションを使用してクラックされたパスワードを表示できます。このオプションは、John に指定されたハッシュファイルに対して保存されているすべてのクラックされたパスワードを表示するように指示します。
以下のコマンドを実行してください。
john --show passwords.txt
以下のような出力が表示されます。
user1:user1
user2:user2
user3:user3
3 password hashes cracked, 0 left
出力は ユーザー名:パスワード の形式で各クラックされたハッシュをリストします。3 password hashes cracked, 0 left という行は結果を要約しています。
john.pot ファイルは John the Ripper の重要なコンポーネントであり、成功裏にクラックされたすべてのパスワードを保存します。John はハッシュをクラックしようとする前に自動的にこのファイルを確認し、冗長な作業を防ぎます。cat を使用して john.pot ファイルを直接確認することもできます。
cat ~/.john/john.pot
内容は以下のようになります。
user1:user1
user2:user2
user3:user3
このステップでは、クラッキング作業の貴重な結果を取得してレビューする方法を示します。
John the Ripper の統計情報の理解
John the Ripper は、クラッキングパフォーマンスに関する詳細な統計情報を提供します。これらの統計情報を理解することで、クラッキング試行の効率を評価し、異なるクラッキング戦略を比較することができます。
統計情報を生成するために、クラッキングセッションを再度実行しましょう。以前と同じコマンドを使用します。
john --wordlist=wordlist.txt passwords.txt
セッション完了後に表示される最終的なサマリー行に注目してください。
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% 3.000g/s 18.00p/s 18.00c/s 18.00C/s user1 user2 user3
Session completed
主要な統計メトリクスを再確認しましょう。
3g: これは「推測 (guesses)」の回数を示しており、この文脈では成功裏にクラックされたハッシュの数に対応します。0:00:00:00 DONE: セッションにかかった合計時間です。短いセッションでは 0 と表示される場合があります。100.0%: クラッキングプロセスが完了した割合です。3.000g/s(guesses/s): John が 1 秒あたりに行う推測のレートです。これはクラッキング速度の最も直接的な指標となることが多いです。18.00p/s(passwords/s): 1 秒あたりにテストされた候補パスワードの数です。同じ候補パスワードが複数のハッシュに対してテストされている場合、g/sよりも高くなることがあります。18.00c/s(crypts/s): 1 秒あたりに実行されたハッシュ計算(暗号化操作)の数です。これは、使用されている生の計算能力の尺度です。18.00C/s(candidates/s): 1 秒あたりに生成されたユニークな候補パスワードの数です。同じ候補が複数のハッシュに対してテストされている場合、p/sと異なることがあります。
これらの統計情報は、以下のために重要です。
- パフォーマンス評価: John がどれだけ速くパスワードをクラックしているかを理解する。
- リソース利用率: ハッシュ計算にどれだけ CPU パワーが使用されているかを測定する。
- 戦略比較: 異なる単語リストやクラッキングモードの効果を比較する。
これらの数値に注意を払うことで、パスワード監査の取り組みに関する貴重な洞察を得ることができます。
John the Ripper の出力をファイルにログ記録する
長時間実行されるセッションや監査目的の場合、John the Ripper の出力をファイルにログ記録することは、しばしば有益です。これにより、ターミナルを開いたままにする必要なく、後で進捗状況や結果を確認できます。
標準的なシェルリダイレクション (>) を使用して、John の標準出力をファイルにリダイレクトできます。
まず、以前のセッションファイルをクリーンアップして、確実に最初から開始できるようにします。
john --session=log_session --restore=NONE --wordlist=wordlist.txt passwords.txt --force-load-hashes
次に、John the Ripper を実行し、その出力を ~/project ディレクトリ内の john_output.log というファイルにリダイレクトします。
john --session=log_session --wordlist=wordlist.txt passwords.txt > john_output.log
このコマンドを実行した後、ターミナルは何もしていないように見えることに注意してください。これは、通常画面に表示されるすべての出力が、現在 john_output.log に書き込まれているためです。
コマンドが終了したら(小さな単語リストを使用しているため、ほぼ瞬時に完了します)、cat を使用してログファイルの内容を表示できます。
cat john_output.log
John the Ripper セッションの完全な出力が表示され、画面で見たものと同一ですが、現在はファイルに保存されています。
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts to the same type of crypt (sha512crypt, crypt(3) $6$)
Remaining 3 password hashes with no different salts
Press 'q' or Ctrl-C to abort, almost any other key for status
user1 (user1)
user2 (user2)
user3 (user3)
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% 3.000g/s 18.00p/s 18.00c/s 18.00C/s user1 user2 user3
Session completed
出力のログ記録は、長時間実行される、または重要なコマンドライン操作においてベストプラクティスであり、イベントと結果の永続的な記録を提供します。
まとめ
この実験では、John the Ripper の出力を解釈し、セッションを管理する方法について包括的な理解を得ました。クラッキングセッション中に表示されるさまざまなメッセージを解読する方法、実行中のセッションのリアルタイムステータスを確認する方法、そして john.pot ファイルからクラックされたパスワードを取得する方法を学びました。さらに、John のパフォーマンス統計を理解する方法と、永続的な記録保持のために出力をファイルにログ記録する方法を探りました。これらのスキルは、パスワード監査やセキュリティテストに John the Ripper を効果的に使用するための基本となります。


