John the Ripper の高度なコマンドラインオプション

Kali LinuxBeginner
オンラインで実践に進む

はじめに

John the Ripper は、Unix、macOS、Windows、DOS の多くのフレーバーで利用可能な高速パスワードクラッカーです。その主な目的は、弱い Unix パスワードを検出することです。さまざまな Unix システムで最も一般的に見られる crypt(3) パスワードハッシュタイプのいくつかだけでなく、コミュニティ拡張バージョンでは Kerberos AFS および Windows LM ハッシュ、さらに数百ものハッシュおよび暗号タイプが標準でサポートされています。

この実験では、John the Ripper の高度なコマンドラインオプションをいくつか探求することで、その機能についてより深く掘り下げていきます。これらのオプションを理解することで、パスワードクラッキングの試みを微調整し、長時間実行されるセッションを管理し、さらなる分析のために出力をリダイレクトすることができます。ハッシュフォーマットの指定方法、カスタムルールの適用、クラッキングセッションの管理、および単語リストの生成のための --stdout オプションの使用方法を学びます。

--format オプションの詳細な探索

このステップでは、John the Ripper で --format オプションを使用する方法を学びます。このオプションは、さまざまな種類のパスワードハッシュを扱う際に非常に重要です。なぜなら、John にどのハッシュタイプを期待し、どのように処理するかを指示するからです。John the Ripper は、従来の Unix crypt ハッシュから最新のアプリケーション固有のハッシュまで、幅広いハッシュフォーマットをサポートしています。

まず、John the Ripper がサポートする利用可能なハッシュフォーマットを一覧表示してみましょう。これにより、このツールの汎用性を把握できます。

john --list=formats

長いフォーマットのリストが表示されます。例えば、従来の Unix ハッシュ用の crypt、プレーンな MD5 ハッシュ用の raw-md5、Windows NT ハッシュ用の nt など、他にも多数あります。

次に、passwords.txt ファイルから、特定の既知のフォーマットをターゲットにしてパスワードをクラックしてみましょう。ここでは、SHA512 crypt ハッシュを持つユーザー user1 がいます。John に sha512crypt フォーマットを使用するように明示的に指示できます。

john --format=sha512crypt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt

user1 のパスワード(この設定では password123)が単語リストに含まれている場合、John はそれをクラックします。

次に、passwords.txt ファイルから LM ハッシュ(user5)と NT ハッシュ(user6)をクラックしてみましょう。John はしばしばフォーマットを自動検出できますが、--format で明示的に指定すると、特に混合ハッシュタイプやあまり一般的でないフォーマットを扱う場合に、より高速で信頼性が高くなります。

john --format=lm /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt
john --format=nt /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt

クラッキングプロセスを示す、以下のような出力が表示される場合があります。

Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2])
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (user1)
1g 0:00:00:00 DONE (2023-10-27 10:00) 100% (ETA: 10:00) 1.000g/s 1.000p/s 1.000c/s 1.000C/s password123
Session completed

このステップは、効率的で正確なパスワードクラッキングにおける --format オプションの重要性を示しています。

カスタムルールを使用した --rules オプションの活用

このステップでは、--rules オプションを探求します。これにより、John the Ripper は定義済みのルールセットまたはカスタムルールセットを単語リストの単語に適用できます。ルールは、数字の追加、大文字小文字の変更、文字の重複など、単語に適用できる強力な変換であり、一般的な単語のバリエーションであるパスワードをクラックする可能性を大幅に高めます。

John には、Wordlist(デフォルト)、SingleJumbo など、いくつかの組み込みルールセットが付属しています。利用可能なルールセットは次のように一覧表示できます。

john --list=rules

このコマンドは、ルールセットのリストを出力します。

次に、カスタムルールファイルを使用してみましょう。セットアップで custom_rules.txt という名前のシンプルなカスタムルールファイルを作成しました。これには、:$[0-9](数字を追加)や Az(最初の文字を大文字にする)などのルールが含まれています。

user1 を再度クラックしてみましょう。ただし、今回はカスタムルールを使用します。user1 のパスワードが Password123(大文字の P、その後に 123)であったと仮定します。単語リストには password のみが含まれています。Az ルールは最初の文字を大文字にし、:$[0-9] は数字を追加します。

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt /home/labex/project/passwords.txt --format=sha512crypt

このコマンドは、ハッシュに対して試行する前に、custom_rules.txt のルールを wordlist.txt の各単語に適用します。例えば、passwordPasswordpassword0password1 などになり、その後 Password0Password1 などになります。

--stdout オプション(次のステップで説明します)とルールを組み合わせて、ルールによって生成される単語を確認することもできます。

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout

このコマンドは、custom_rules.txtwordlist.txt に適用して生成されたすべての単語をターミナルに出力します。これは、ルールセットのデバッグに役立ちます。

--rules オプションは、一般的なパスワードのバリエーションを生成することにより、単語リスト攻撃の効果を拡張するための強力な機能です。

--session および --restore オプションの理解

このステップでは、長時間実行されるパスワードクラッキングタスクの管理に不可欠な --session および --restore オプションについて学びます。複雑なパスワードのクラッキングには、数時間、数日、あるいは数週間かかることがあります。これらのオプションを使用すると、クラッキングセッションの現在の状態を保存し、進捗を失うことなく後で再開できます。

John the Ripper が実行されると、状態を保存するためにセッションファイル(通常は実行ディレクトリ内の john.rec)が自動的に作成されます。ただし、--session オプションを使用すると、このセッションファイルにカスタム名を指定できます。これは、複数のクラッキングタスクを同時に実行する場合や、特定のセッションログを保持したい場合に便利です。

user1 のクラッキングセッションを開始し、セッション名を指定してみましょう。

john --session=my_cracking_session /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt

クラッキングを数秒間実行させ、その後 Ctrl+C を押して中断してください。セッションが保存されたことを示すメッセージが表示されます。

次に、現在のディレクトリのファイルを表示して、セッションファイルを確認しましょう。

ls -l /home/labex/project/

my_cracking_session.rec という名前のファイル(John のバージョンや設定によっては類似の名前)が表示されるはずです。

中断したセッションを再開するには、セッション名とともに --restore オプションを使用します。

john --restore=my_cracking_session

John は中断した箇所から正確に処理を再開します。これは、大規模なクラッキング操作を管理する場合や、システムを再起動する必要がある場合に非常に役立ちます。

--session でセッション名を指定しない場合、John はデフォルトのセッションファイルを使用します。セッション名を指定せずに --restore を使用すると、デフォルトのセッションの復元が試行されます。

john --restore

このステップでは、パスワードクラッキングの取り組みを効果的に管理および再開し、進捗が失われないようにする方法を強調します。

出力リダイレクトのための --stdout オプションの実験

このステップでは、--stdout オプションについて学びます。これは、実際のクラッキング試行を行わずに、単語リストを生成したり、ルールセットをテストしたりするのに非常に役立ちます。--stdout と一緒に使用すると、John the Ripper は生成された候補パスワードを標準出力に出力します。これは、ファイルにリダイレクトしたり、別のツールにパイプしたりできます。

これは、単語リストやルールと組み合わせると特に強力です。John を使用して、既存の単語リストと特定のルールに基づいて高度にカスタマイズされた単語リストを作成できます。

custom_rules.txtwordlist.txt に適用して単語リストを生成し、出力を generated_wordlist.txt という新しいファイルにリダイレクトしてみましょう。

john --wordlist=/home/labex/project/wordlist.txt --rules=/home/labex/project/custom_rules.txt --stdout > /home/labex/project/generated_wordlist.txt

コマンドを実行した後、新しく作成されたファイルのコンテンツを確認してください。

cat /home/labex/project/generated_wordlist.txt

ルールによって生成された passwordPasswordpassword0password1 などの単語が表示されるはずです。

--stdout を使用して、単一の単語の順列を生成することもできます。たとえば、「test」という単語のバリエーションを生成するには、次のようにします。

echo "test" | john --pipe --rules=/home/labex/project/custom_rules.txt --stdout

ここでは、echo "test" | john --pipe は単語「test」を John の標準入力にパイプし、--pipe は John に標準入力から読み取るように指示します。--stdout は、その後ルールが適用されたバリエーションを出力します。

--stdout オプションは、単語リストの前処理、他のクラッキングツールのためのカスタム辞書の作成、または単にルールが単語をどのように変換するかを理解するための多用途な機能です。

その他の便利なコマンドラインフラグを発見する

この最後のステップでは、John the Ripper の使用を強化できる、その他の便利なコマンドラインフラグをいくつか簡単に探ります。それぞれについて詳細には触れませんが、これらのフラグが存在することを知っておくと、さまざまなシナリオで役立ちます。

  1. --show: このオプションは、以前のセッションからクラックされたパスワードを表示します。パスワードをクラックした後、John はそれらを john.pot ファイルに保存します。次のようにして表示できます。

    john --show /home/labex/project/passwords.txt

    これにより、John が passwords.txt ファイルから正常にクラックしたパスワードが表示されます。

  2. --incremental: これは、ブルートフォース攻撃のための強力なモードです。John は、文字セットと長さに基づいてパスワードを生成します。モード(例:alnumdigitsall)を指定できます。

    ## このコマンドは長時間実行されるため、使用方法のみを示します。
    ## 長時間実行させないでください。数秒後に Ctrl+C を押して停止してください。
    john --incremental=digits /home/labex/project/passwords.txt --format=raw-md5

    このコマンドは、数字の組み合わせを生成することによってパスワードのクラッキングを試みます。

  3. --fork=<N>: このオプションを使用すると、John はクラッキングのために複数の CPU コアまたはスレッドを使用できます。ここで <N> は使用するフォーク(プロセス)の数です。これにより、マルチコアシステムでのクラッキングを大幅に高速化できます。

    john --fork=2 /home/labex/project/passwords.txt --wordlist=/home/labex/project/wordlist.txt --format=sha512crypt

    これにより、2 つの CPU コアを使用してパスワードのクラッキングが試行されます。

  4. --mask: このオプションを使用すると、マスク攻撃を実行できます。これは、パスワードの特定のパターンを定義するものです。たとえば、?l?l?l?d?d は、3 文字、2 桁のすべての組み合わせを試行します。

    ## このコマンドは長時間実行されるため、使用方法のみを示します。
    ## 長時間実行させないでください。数秒後に Ctrl+C を押して停止してください。
    john --mask=?l?l?l?d?d /home/labex/project/passwords.txt --format=raw-md5

    このコマンドは、指定されたマスクに一致するパスワードのクラッキングを試みます。

これらは、John the Ripper で利用可能な多くの高度なオプションのほんの一部です。man john ページまたは john --help を調べると、さらに多くの専門的なパスワード監査およびクラッキングタスクの可能性が見つかります。

まとめ

この実験では、John the Ripper のいくつかの高度なコマンドラインオプションについて実践的な経験を積みました。--format を使用してハッシュ形式を正確に指定する方法、--rules とカスタムルールファイルを使用して単語リストに強力な変換を適用する方法、そして --session--restore を使用して長時間実行されるクラッキングセッションを管理する方法を学びました。さらに、カスタム単語リストを生成するための --stdout の汎用性を探り、--show--incremental--fork--mask のようなその他の便利なフラグについても簡単に触れました。

これらのオプションを習得することで、効果的なパスワード監査とクラッキングを実行する能力が大幅に向上し、さまざまなセキュリティタスクで John the Ripper をより効果的に使用できるようになります。John の広範なドキュメントを引き続き探索して、さらに高度な機能とテクニックを発見してください。