はじめに
John the Ripper (JtR) は、強力で広く使用されているオープンソースのパスワードセキュリティ監査およびパスワードリカバリツールです。システム管理者はシステムのパスワード強度をテストするために、セキュリティ専門家は紛失したパスワードを復旧するために使用できます。そのさまざまな動作モードを理解することが、効果的に使用するための鍵となります。
この実験 (Lab) では、John the Ripper の基本的なクラッキングモードを実際に体験します。ヘルプオプションの使用方法を学び、デフォルトの動作を探ります。その後、Single Crack、Wordlist、Incremental、External の 4 つの主要なモードに飛び込み、それぞれの目的と基本的な使い方を学びます。
John the Ripper ヘルプオプションの探索
このステップでは、まず John the Ripper の組み込みヘルプドキュメントを探索します。ヘルプメニューは、ツールの構文、コマンドラインオプション、および利用可能なモードのクイックリファレンスを提供する不可欠なリソースです。
メインのヘルプページを表示するには、--help フラグを付けて john コマンドを実行するだけです。これにより、最も一般的なオプションとその説明の概要が表示されます。
ターミナルで次のコマンドを実行してください。
john --help
さまざまなオプションが記載された詳細な出力が表示されます。--single、--wordlist、--incremental のような、さまざまなクラッキングモードを指定するフラグに注意してください。
John the Ripper 1.9.0-jumbo-1 [linux-gnu 64-bit x86_64 AVX2 AC]
Copyright (c) 1996-2019 by Solar Designer and others
Homepage: http://www.openwall.com/john/
Usage: john [OPTIONS] [PASSWORD-FILES]
--single "single crack" mode
--wordlist=FILE --stdin wordlist mode, read words from FILE or stdin
--rules enable word mangling rules for wordlist mode
--incremental[=MODE] "incremental" mode [using section MODE]
--external=MODE external mode or word filter
--stdout[=LENGTH] just output candidate passwords [cut at LENGTH]
--restore[=NAME] restore an interrupted session [called NAME]
--session=NAME new session [called NAME]
--status[=NAME] print status of a session [called NAME]
--show[=LEFT] show cracked passwords [if =LEFT, then uncracked]
--test[=TIME] run tests and benchmarks for TIME seconds each
--users=[-]LOGIN|UID[,..] [don't] load this (these) user(s) only
--groups=[-]GID[,..] load users of this (these) group(s) only
... (output truncated) ...
このコマンドは、John the Ripper が何ができるかの全体像を把握するのに役立ちます。次のステップでは、これらのモードの一部を実際に探索します。
John the Ripper のデフォルトクラッキングモードの特定
このステップでは、John the Ripper がデフォルトでどのように動作するかを学びます。モードを指定せずにパスワードファイルに対して john を実行すると、単一の方法を選択するだけではありません。代わりに、最も効果的なモードをデフォルトの順序でインテリジェントにサイクルします。まず「single」モード、次に「wordlist」モード、最後に「incremental」モードです。これにより、速度と網羅性のバランスが取れます。
セットアップスクリプトは、現在のディレクトリ (~/project) に mypasswd.txt という名前のファイルを作成しました。このファイルには、単純なハッシュ化されたパスワードを持つユーザーエントリが含まれています。
モードフラグを指定せずにこのファイルに対して John the Ripper を実行し、デフォルトの動作を観察しましょう。
john mypasswd.txt
John はクラッキングプロセスを開始します。作業中にステータスアップデートが表示されます。パスワードは単純なので、非常に迅速にクラックされるはずです。
Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 12000p/s 12000c/s 12000C/s rolez..pimpin
Use the "--show" option to display all of the cracked passwords reliably
Session completed
ご覧のとおり、John はユーザー testuser のパスワード (password) を正常にクラックしました。また、後でクラックされたパスワードを表示するために --show オプションを使用することを推奨しています。
クラックされたパスワードを確認するには、--show オプションを使用できます。
john --show mypasswd.txt
これにより、指定されたファイルに対して正常にクラックされたすべてのパスワードが表示されます。
testuser:password:1001:1001::/home/testuser:/bin/sh
1 password hash cracked, 0 left
これにより、デフォルトのモードシーケンスが成功したことが確認されます。
Single Crack モードと Wordlist モードの違い
このステップでは、最も基本的なクラッキングモードである「single crack」と「wordlist」について学びます。
まず、John the Ripper はクラックされたパスワードを ~/.john/ ディレクトリにある john.pot というファイルに保存することを理解しておくことが重要です。既にクラックされたパスワードに対してクラッキングセッションを再実行するには、まずこのファイルを削除する必要があります。今すぐ行いましょう。
rm ~/.john/john.pot
Single Crack モード
Single crack モードは、ユーザー名や GECOS フィールドデータなどのユーザーアカウント自体に関する情報に基づいてパスワード候補を生成する、高速で効率的なモードです。これらの候補に対して一般的なミューテーション(数字や記号の追加など)を適用します。
--single フラグを使用して、明示的に single crack モードで John を実行しましょう。
john --single mypasswd.txt
この出力はデフォルトの実行と似ています。これは John が最初に試すモードだからです。ユーザー名のバリエーションであるパスワードに対して非常に効果的です。
Wordlist モード
Wordlist モードは、最も人気のあるパスワードクラッキング技術の 1 つです。事前にコンパイルされた単語のリスト(辞書または単語リスト)を使用し、それぞれをパスワードとして試します。John にはデフォルトの単語リストが付属しており、通常は /usr/share/john/password.lst にあります。
まず、セッションをリセットするために pot ファイルを再度削除しましょう。
rm ~/.john/john.pot
次に、--wordlist フラグを使用して、デフォルトの単語リストを明示的に指定し、wordlist モードで John を実行します。
john --wordlist=/usr/share/john/password.lst mypasswd.txt
John が単語リストをロードし、ハッシュをクラックしようとするのが表示されます。「password」は非常に一般的なパスワードであるため、デフォルトのリストに含まれており、ほぼ瞬時に見つかります。
Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:35) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Use the "--show" option to display all of the cracked passwords reliably
Session completed
これにより、John に攻撃用の特定の辞書ファイルを使用するように指示する方法が実証されます。
Incremental モードの基本を理解する
このステップでは、「incremental」モードを探求します。このモードは基本的に総当たり攻撃です。特定の長さまでのすべての可能な文字の組み合わせを体系的に試します。最も網羅的なモードですが、中程度の複雑さのパスワードであっても、非常に時間がかかる可能性があります。
Incremental モードの動作は john.conf ファイルで定義されており、文字セット(例:Alnum は英数字、All はすべての文字)や長さの制約を指定します。
まず、john.pot ファイルを再度削除して、クラッキングセッションをリセットしましょう。
rm ~/.john/john.pot
次に、incremental モードで John を実行しましょう。Digits 文字セットを指定します。これにより、John はすべての可能な数字の組み合わせを試すようになります。これには --incremental フラグを使用します。
john --incremental=Digits mypasswd.txt
John が "0", "1", "2", "00", "01" などの組み合わせを試し始めるのが表示されます。私たちのパスワードは「password」(すべて文字)なので、この攻撃は成功しません。数秒後に Ctrl+C を押して停止できます。
次に、より適切な文字セットを試してみましょう。デフォルトの incremental モードを使用します。これは通常、小文字などの一般的な文字セットから始まります。
セッションをもう一度リセットします。
rm ~/.john/john.pot
文字セットを指定せずにコマンドを実行します。
john --incremental mypasswd.txt
今回は、John は定義済みの文字セットのシーケンスを使用します。「password」は小文字で構成されているため、最終的に Lower または Alpha 文字セットで見つかるでしょう。
Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:40) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Session completed
Incremental モードは、他のより高速なモードが失敗した場合の最後の手段です。
External モードの機能について学ぶ
このステップでは、「external」モードを紹介します。これは John のモードの中で最も高度で柔軟なものです。john.conf 設定ファイル内で直接、C 言語ライクなスクリプト言語を使用してカスタムパスワード生成ロジックを定義できます。これは、他のモードでは対応できない、高度にターゲットを絞った攻撃を作成するのに強力です。
外部スクリプトの作成は高度なトピックですが、John に付属している事前定義済みの外部モードを簡単に使用できます。まず、/etc/john/john.conf で定義されている利用可能な外部モードを一覧表示しましょう。
grep '^\[' /etc/john/john.conf | grep 'External:'
このコマンドは設定ファイルをフィルタリングして、外部モードセクションの名前を表示します。
[External:Compiler]
[External:Double]
[External:Hybrid]
[External:Keyboard]
[External:LanManager]
[External:Shift]
[External:Status]
[External:Wordlist]
いくつかの組み込み外部関数が見えます。Wordlist 外部モードを使用してみましょう。このモードは基本的に標準の wordlist モードを模倣していますが、外部スクリプトとして実装されているため、良い例となります。
まず、いつものようにセッションをリセットします。
rm ~/.john/john.pot
次に、--external フラグを使用して Wordlist モードを指定し、John を実行します。
john --external=Wordlist mypasswd.txt
出力は、標準の wordlist モードを実行したときと非常によく似ています。なぜなら、基盤となるロジックは同じであり、デフォルトの単語リストを使用してパスワードを見つけるからです。
Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2-16])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:45) 100.0g/s 12000p/s 12000c/s 12000C/s passwo..pascal
Session completed
External モードは、パスワード候補生成のほぼ無限の可能性を解き放ち、カスタムクラッキングロジックを実装する必要があるエキスパートユーザー向けのツールとなります。
まとめ
この実験では、John the Ripper の基本的なクラッキングモードを効果的に探求しました。ヘルプオプションの操作方法を学び、効率のために複数のモードをインテリジェントに組み合わせるデフォルトの動作を観察しました。
以下の項目について実践的な経験を積みました。
- Single Crack モード: ユーザー固有の情報を使用してパスワードを推測する高速なモードです。
- Wordlist モード: 単語の辞書を使用する一般的な手法です。
- Incremental モード: すべての文字の組み合わせを試す包括的な総当たり攻撃モードです。
- External モード: カスタムパスワード生成ルールを作成するための、高度でスクリプト可能なモードです。
これらのコアモードを理解することは、パスワードセキュリティ監査および回復タスクのために John the Ripper を習得するための最初のステップです。これで、さまざまなシナリオに適したモードを選択するための基本的な知識を習得しました。


