John the Ripper 🕵‍: パスワードクラッキングツールの使い方ガイド

John the Ripper (通称: John, JtR) は、非常に有名で強力なオープンソースのパスワードクラッキングツールです。1996年にAlexander Peslyak (Solar Designer) によって最初に開発され、現在も活発に開発が続けられています(特にコミュニティによる「Jumbo」バージョン)。主にシステム管理者やセキュリティ専門家が、システムのパスワード強度をテストしたり、忘れてしまったパスワードを回復したりするために使用されます。しかし、その強力さゆえに、悪用される危険性もはらんでいます。

注意: このツールは、許可されたシステムや自身が所有するデータに対してのみ使用してください。不正な目的での使用は法律で固く禁じられています。このガイドは教育目的であり、ツールの不正利用を推奨するものではありません。

John the Ripperとは何か?

John the Ripperは、オフラインのパスワードクラッカーです。これは、パスワードハッシュ(暗号化されたパスワード)のリストを取得し、それに対応する元のパスワード(平文)を見つけ出そうと試みるツールです。オンラインのパスワードクラッカー(例: Hydra)がネットワーク経由でログイン試行を繰り返すのとは異なり、Johnは手元にあるハッシュデータに対して解析を行うため、ログイン試行回数の制限やアカウントロックの影響を受けません。

主な特徴:

  • クロスプラットフォーム: Linux, macOS, Windows, Unix系OSなど、多くのプラットフォームで動作します。
  • 多様なハッシュ形式に対応: Unix (DES, MD5, Blowfish), Windows (LM/NTLM), Kerberos AFS, MD4, MD5, SHA-1, SHA-256, SHA-512, bcrypt, そしてJumboバージョンではさらに多くの形式(ZIP, RAR, SSHキー, PDF, Office文書など)に対応しています。
  • 自動ハッシュ検出: 多くの場合、Johnは提供されたファイル内のハッシュ形式を自動的に検出できます。
  • 複数の攻撃モード: 辞書攻撃、ブルートフォース攻撃(インクリメンタルモード)、シングルクラックモードなど、複数の方法でパスワードを解析します。
  • カスタマイズ可能: ルールを用いて辞書攻撃を強化したり、外部スクリプトを利用したりできます。
  • オープンソース: 基本的な機能は無料で利用できます(Pro版も存在します)。

ペネトレーションテスターやセキュリティ監査担当者は、このツールを使って組織内の弱いパスワードを特定し、セキュリティポリシーの改善に役立てます。

インストール

John the Ripperのインストール方法はOSによって異なります。多くの場合、「Jumbo」バージョン(コミュニティによって拡張された機能豊富なバージョン)の利用が推奨されます。

Linux (Debian/Ubuntu系)

多くのディストリビューション、特にKali Linuxのようなペネトレーションテスト用OSでは、デフォルトでインストールされている場合があります。

インストールされていない場合は、aptパッケージマネージャを使います:

sudo apt update
sudo apt install john

最新のJumbo版を使いたい場合は、GitHubからソースコードを取得してビルドすることも可能です。

# 必要な依存関係をインストール (例)
sudo apt install build-essential libssl-dev zlib1g-dev
# GitHubからクローン
git clone https://github.com/openwall/john -b bleeding-jumbo john
cd john/src
# ビルドとインストール
./configure && make -s clean && make -sj4
# 必要に応じて `sudo make install`

macOS

Homebrewを使うのが簡単です:

brew install john-jumbo

または、公式サイトからZIPファイルをダウンロードし、手動でセットアップすることもできますが、Homebrewの方が新しいバージョンを管理しやすいでしょう。

Windows

公式サイトのダウンロードページからWindows用のバイナリ(ZIPファイル)をダウンロードできます。解凍して、`run` ディレクトリ内の `john.exe` を使用します。

最新機能(特にGPUサポートなど)が必要な場合は、Windows Subsystem for Linux (WSL) を利用するか、CygwinやVisual Studioを使ってソースからビルドする必要がありますが、手順は複雑になることがあります。

実行ファイルの場所:

インストール後、`john` コマンド(または `john.exe`)が実行パスに含まれているか確認してください。含まれていない場合は、フルパスを指定するか、パスを通す必要があります。

# パスが通っているか確認 (Linux/macOS)
which john
# ヘルプを表示して動作確認
john --help

基本的な使い方

基本的なコマンド構文は以下の通りです:

john [オプション] [パスワードファイル...]

[パスワードファイル] には、解析したいパスワードハッシュが含まれるファイルを指定します。複数のファイルを指定することも可能です。

パスワードファイルの準備

Johnが解析できる形式でパスワードハッシュを用意する必要があります。

Linuxのパスワードファイル (`/etc/shadow`)

Linuxシステムでは、パスワードハッシュは通常 /etc/shadow ファイルに保存されています。しかし、/etc/shadow だけでは、ユーザー名などの情報(GECOS情報)が欠けており、「シングルクラックモード」の効果が低下します。そのため、/etc/passwd ファイルと結合するのが一般的です。

unshadow ユーティリティ(Johnに同梱)を使って結合します:

# root権限が必要な場合がある
sudo unshadow /etc/passwd /etc/shadow > mypasswords.txt

これで、mypasswords.txt にJohnが解析しやすい形式のデータが作成されます。

他の形式のハッシュ

データベースダンプ、特定のアプリケーションのハッシュ、あるいは単純なハッシュリストなど、様々な形式がありえます。Johnが認識できる形式であれば、そのままファイルに保存して渡すことができます。

ZIPファイルやSSHキーなどの場合は、専用のツール(例: `zip2john`, `ssh2john`)を使ってJohnが扱える形式のハッシュを抽出します。

# ZIPファイルからハッシュを抽出
zip2john protected.zip > zip_hash.txt
# SSH秘密鍵からハッシュを抽出
ssh2john id_rsa > ssh_hash.txt
# PDFファイルからハッシュを抽出 (pdf2johnが必要)
pdf2john document.pdf > pdf_hash.txt

クラッキングの実行

準備したパスワードファイルを指定してJohnを実行します:

john mypasswords.txt

デフォルトでは、Johnは以下の順序でクラッキングモードを試します:

  1. シングルクラックモード (Single Crack Mode): ユーザー名やGECOS情報(フルネームなど)を基に、よく使われる変形パターン(例: username123, Username!)を試します。
  2. 辞書モード (Wordlist Mode): デフォルトの辞書ファイル (`password.lst`) を使って攻撃します。存在しない場合はスキップされることがあります。
  3. インクリメンタルモード (Incremental Mode): 全ての可能な文字の組み合わせを試すブルートフォース攻撃です。

解析には時間がかかる場合があります。特にインクリメンタルモードは計算量が多くなります。

結果の表示

クラッキングに成功したパスワードは、`john.pot` というファイル(Johnの実行ディレクトリ、または設定ファイルで指定された場所)に保存されます。

--show オプションを使って、指定したパスワードファイルに対応するクラック済みのパスワードを表示できます:

john --show mypasswords.txt

出力例:

user1:password123:1001:1001:User One:/home/user1:/bin/bash
user2:monkey:1002:1002:User Two:/home/user2:/bin/bash
2 password hashes cracked, 0 left

この例では、`user1` のパスワードが `password123`、`user2` のパスワードが `monkey` であることが判明しました。

セッション管理

Johnはクラッキングの進行状況を `john.rec` ファイルに自動的に保存します。途中で中断しても、同じコマンドで再開すれば中断したところから続行できます。

# 中断 (Ctrl+C)
# 再開
john mypasswords.txt

特定のセッション名を指定して管理することも可能です:

# セッション名を指定して開始
john --session=my_session mypasswords.txt
# セッションを再開
john --restore=my_session
# セッションの状況を確認
john --status=my_session

実行中にキー(通常はEnterキー)を押すことでも、現在の状況(試行速度、経過時間など)を確認できます。

クラッキングモードの詳細

Johnにはいくつかの主要なクラッキングモードがあり、オプションで明示的に指定できます。

シングルクラックモード (`–single`)

パスワードファイルに含まれるユーザー名やGECOS情報を利用して、パスワード候補を生成します。単純なパスワード(例: ユーザー名をそのまま、あるいは少し変形したもの)を素早く見つけるのに効果的です。

john --single mypasswords.txt

例えば、ユーザー名が `testuser` であれば、`testuser`, `Testuser`, `testuser1`, `retset`, などの候補が試されます。

辞書モード (`–wordlist`)

指定された単語リスト(辞書ファイル)に含まれる単語をパスワード候補として試します。一般的な単語や過去に漏洩したパスワードリストを使うことが多いです。

# 指定した辞書ファイルを使用
john --wordlist=/path/to/custom_wordlist.txt mypasswords.txt
# 標準入力から辞書を読み込む
cat /path/to/wordlist.txt | john --stdin mypasswords.txt

有名な辞書ファイルとして `rockyou.txt` があります。非常に大きなリストですが、効果的な場合が多いです。

ルール (`–rules`)

辞書モードと組み合わせて使うことで、辞書の単語を様々な規則に従って変形させ、より多くの候補を生成します。例えば、大文字小文字変換、数字や記号の追加、単語の反転など。

# デフォルトのルールセットを適用
john --wordlist=/path/to/wordlist.txt --rules mypasswords.txt
# 特定のルールセットを指定 (john.conf で定義)
john --wordlist=/path/to/wordlist.txt --rules=Jumbo mypasswords.txt

ルールを適用することで、`password` という単語から `Password`, `p@ssword`, `password123`, `drowssap` など、多様なバリエーションを試すことができます。

インクリメンタルモード (`–incremental`)

ブルートフォース(総当たり)攻撃を行います。指定された文字セット(例: 数字のみ、英数字、全ASCII文字)と長さの範囲で、考えられるすべての組み合わせを試します。

# デフォルトのインクリメンタルモード (通常は英数字など)
john --incremental mypasswords.txt
# 特定のモードを指定 (john.conf で定義)
john --incremental=Digits mypasswords.txt # 数字のみ
john --incremental=Alnum mypasswords.txt # 英数字のみ

このモードは非常に時間がかかりますが、辞書に載っていないランダムなパスワードを見つけられる可能性があります。文字セットや長さは `john.conf` ファイルでカスタマイズできます。

マスクモード (`–mask`)

特定のパターン(マスク)に一致するパスワード候補のみを試すブルートフォース攻撃の一種です。パスワードの形式について何らかの情報がある場合に有効です。

# 例: 8文字の英大文字で始まるパスワード (残りは小文字)
# ?u = 英大文字, ?l = 英小文字
john --mask='?u?l?l?l?l?l?l?l' mypasswords.txt
# 例: 6桁の数字
# ?d = 数字
john --mask='?d?d?d?d?d?d' mypasswords.txt

独自の文字セットを定義することも可能です。

外部モード (`–external`)

カスタムスクリプトやプログラムを使ってパスワード候補を生成するモードです。非常に柔軟な攻撃が可能になります。

高度なオプションとヒント

ハッシュ形式の指定 (`–format`)

Johnは多くの場合ハッシュ形式を自動検出しますが、誤検出したり、複数の形式が考えられる場合があります。その際は `–format` オプションで明示的に指定します。

# LMハッシュとして解析
john --format=lm my_windows_hashes.txt
# Raw MD5として解析
john --format=raw-md5 my_md5_hashes.txt
# ZIPファイルのハッシュとして解析
john --format=zip zip_hash.txt

サポートされている形式のリストは `–list=formats` で確認できます。

john --list=formats

特定のユーザーのみを対象 (`–users`)

パスワードファイル内の特定のユーザーのみをクラッキング対象にしたい場合に使います。

# user1 と user3 のみを対象
john --users=user1,user3 mypasswords.txt
# root ユーザーのみを除外
john --users=-root mypasswords.txt

マルチコア/マルチプロセス (`–fork`)

複数のCPUコアを利用してクラッキングを高速化します。

# 4つのプロセスで並列実行
john --fork=4 mypasswords.txt

GPUの利用 (OpenCL)

対応するGPUがあれば、OpenCLを使ってさらに高速化できます(Jumbo版で、ビルド時にOpenCLサポートが有効になっている必要があります)。

# 利用可能なOpenCLデバイスを確認
john --list=opencl-devices
# OpenCL対応のハッシュ形式を指定して実行 (例: sha512crypt)
john --format=sha512crypt-opencl --wordlist=wl.txt mypasswords.txt
# 特定のGPUデバイスを指定して実行 (例: デバイス0と1)
john --format=wpapsk-opencl --wordlist=wl.txt --dev=0,1 --fork=2 wifi_hashes.hccapx

Windows環境でのGPU利用はセットアップが複雑な場合があります。

`john.conf` ファイルのカスタマイズ

Johnの動作は `john.conf` (または `john.ini`) ファイルで詳細に設定できます。インクリメンタルモードの文字セット、ルールセットの定義、外部モードの設定などが可能です。

倫理的な考慮事項と合法性

John the Ripperは非常に強力なツールであり、その使用には大きな責任が伴います。

  • 許可の取得: 自分自身が所有していないシステムやアカウントに対してJohn the Ripperを使用することは、ほとんどの国や地域で違法行為となります。必ず、対象システムの所有者から書面による明確な許可を得てください。
  • 目的の明確化: セキュリティ監査やパスワード強度テスト、パスワード忘れの回復など、正当な目的でのみ使用してください。
  • 情報の取り扱い: クラッキングによって得られたパスワード情報は機密情報として扱い、適切に管理・保護し、許可された目的以外には絶対に使用しないでください。
  • 意図しない影響: 大量の計算リソースを消費するため、共有システムなどで実行する際は他のユーザーへの影響を考慮してください。
不正アクセス行為や、許可なく他人のパスワードを解析・取得する行為は、不正アクセス禁止法などの法律により厳しく罰せられます。倫理観を持ち、責任ある行動を心がけてください。

まとめ

John the Ripperは、パスワードセキュリティの評価において非常に有用なツールです。シングルクラック、辞書、インクリメンタルといった多様なモードと、豊富なカスタマイズオプションにより、様々な状況に対応できます。

このツールの使い方を理解することは、自身のシステムのパスワードポリシーがどれだけ堅牢かを確認し、弱いパスワードを使用しているユーザーを特定するのに役立ちます。強力なパスワードポリシー(長く、複雑で、推測困難なパスワードの使用)を導入し、定期的に監査を行うことが、John the Ripperのようなツールによる攻撃からシステムを守るための鍵となります 。

繰り返しになりますが、John the Ripperは倫理的に、そして法的に許可された範囲内で使用してください。責任ある使用を心がけ、サイバーセキュリティの向上に貢献しましょう。

参考情報

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です