keystore2john: Java KeyStoreからハッシュを抽出しJohn the Ripperで解析する方法🔑

セキュリティツール

Javaアプリケーション開発や運用に携わっている方なら、.keystoreファイル(Java KeyStore)にお世話になることが多いでしょう。SSL証明書や秘密鍵などを安全に保管するための重要なファイルですが、万が一パスワードを忘れてしまったら大変です😱。また、セキュリティ診断の観点からは、キーストアに設定されているパスワードの強度を確認する必要があります。

そんな時に役立つのが、著名なパスワードクラッキングツール「John the Ripper」(JtR)スイートに含まれるkeystore2johnです。この記事では、keystore2johnの基本的な使い方から、John the Ripperを使った実際のパスワード解析手順までを詳しく解説します。

注意: パスワードクラッキングツールの使用は、必ず自身が管理権限を持つシステムやファイル、または明示的に許可された環境でのみ行ってください。許可なく他者のシステムやデータに対して使用することは、不正アクセス禁止法などの法律に抵触する可能性があります。倫理的な利用を心掛けてください。

まず、基本的なツールについて理解しましょう。

John the Ripper (JtR)

John the Ripper(ジョン・ザ・リッパー、通称JohnまたはJtR)は、Openwallプロジェクトによって開発されている、非常に強力で人気のあるオープンソースのパスワードクラッキングツールです。元々はUnix系システムのパスワード(/etc/shadowファイルなど)の強度をテストするために開発されましたが、現在ではWindowsのLM/NTLMハッシュ、各種ハッシュ関数(MD5, SHA-1, SHA-256, SHA-512など)、さらには様々なアプリケーション固有のパスワード形式に対応しています。

JtRは主に以下のパスワード解析手法をサポートしています:

  • 辞書攻撃 (Wordlist mode): パスワード候補が記載されたリスト(辞書ファイル)を用いて攻撃します。
  • ブルートフォース攻撃 (Incremental mode): 文字の組み合わせを総当たりで試します。
  • ルールベース攻撃 (Rule-based attack): 辞書の単語に特定のルール(大文字小文字変換、数字付加など)を適用して候補を生成します。
  • シングルクラックモード (Single crack mode): ユーザー名などの情報からパスワードを推測します。

その速度と柔軟性から、セキュリティ専門家やシステム管理者に広く利用されています。最新情報やダウンロードは公式サイトhttps://www.openwall.com/john/で確認できます。

keystore2john

keystore2johnは、John the Ripperの「community-enhanced version」(Jumbo Johnとも呼ばれる、多くの追加機能を持つバージョン)に含まれるユーティリティスクリプト(多くの場合Pythonスクリプト)の一つです。その主な役割は、Java KeyStore (JKS) ファイルからパスワードハッシュ情報を抽出し、John the Ripperが解析できる形式に変換することです。

JKSファイル自体は直接John the Ripperで解析できません。そのため、このkeystore2johnのような「*2john」系ツールを使って、事前に解析可能なフォーマットに変換する必要があるのです。他にもzip2john(ZIPファイル用)、rar2john(RARファイル用)、office2john(Officeファイル用)など、多くのファイルタイプに対応するツールがJtRスイートには含まれています。

keystore2johnを使用するには、以下の準備が必要です。

  • John the Ripper (Jumboバージョン) のインストール: keystore2johnはJumbo Johnに含まれています。多くのLinuxディストリビューションではパッケージマネージャ(例: sudo apt install john on Debian/Ubuntu)でインストールできますが、最新版やフル機能を利用したい場合は、公式サイトGitHubリポジトリからダウンロードしてビルドすることをお勧めします。特にPythonスクリプトである*2johnツール群は、GitHubのソースに含まれていることが多いです。
  • Python環境: keystore2john.pyはPythonスクリプトであるため、Pythonの実行環境が必要です。通常、現代的なLinuxシステムにはデフォルトでインストールされています。
  • 解析対象のJava KeyStoreファイル (.keystore または .jks): パスワードを解析したいキーストアファイルが必要です。

John the Ripperをソースからビルドした場合、keystore2john.pyスクリプトは通常、Johnのインストールディレクトリ内のrunサブディレクトリに配置されます。(古いバージョンや配布形態によっては/usr/share/john/などに配置されることもあります)。

# 例: John the Ripperのソースを展開したディレクトリに移動
cd JohnTheRipper/run/
ls *2john* # *2john系のツールを探す
./keystore2john.py --help # ヘルプが表示されればOK

keystore2johnの使い方は非常にシンプルです。基本的には、スクリプトを実行し、引数として解析したいキーストアファイルを指定するだけです。

# Johnのrunディレクトリにいる場合
./keystore2john.py /path/to/your/mykeystore.jks

# Johnのrunディレクトリがパスに含まれていない場合
/path/to/john/run/keystore2john.py /path/to/your/mykeystore.jks

実行すると、標準出力にJohn the Ripperが解析できる形式のハッシュ文字列が出力されます。この出力をファイルに保存して、後でJohn the Ripperに渡します。

./keystore2john.py mykeystore.jks > keystore_hash.txt

出力されるハッシュの形式は通常、以下のようになります(内容はキーストアによって異なります)。

mykeystore.jks:$keystore$0*...*...

この文字列には、キーストアの種類、暗号化されたデータ、チェックサムなどが含まれており、John the Ripperはこの情報を使ってパスワードの検証を行います。

💡 複数のファイルを一度に処理:

keystore2johnは複数のキーストアファイルを引数として受け付け、それぞれのハッシュを連続して出力することもできます。

./keystore2john.py key1.jks key2.jks > multiple_hashes.txt

⚠️ キーストアのパスワードと鍵のパスワード:

Java KeyStoreには、キーストアファイル全体を保護する「ストアパスワード」と、キーストア内に格納されている個々の秘密鍵を保護する「キーパスワード」の2種類が存在します。keystore2johnがデフォルトで抽出しようとするのは、主にストアパスワードのハッシュです。キーパスワードがストアパスワードと異なる場合、keystore2johnでストアパスワードをクラックしても、秘密鍵自体にはアクセスできない可能性があります。一部のバージョンのkeystore2johnや関連ツール(bks2johnなど)ではキーパスワードの抽出もサポートする動きがありましたが、基本的な利用ではストアパスワードの解析が主目的となります。

keystore2johnでハッシュを抽出したら、いよいよJohn the Ripper本体を使ってパスワード解析(クラッキング)を行います。

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

john [オプション] <ハッシュファイル>

<ハッシュファイル>には、先ほどkeystore2johnで作成したハッシュ情報を含むファイル(例: keystore_hash.txt)を指定します。

1. 辞書攻撃 (Wordlist Mode)

最も一般的な方法の一つが辞書攻撃です。パスワードとして使われそうな単語を集めたリスト(辞書ファイル)を用意し、それを試します。John the Ripperにはデフォルトでpassword.lstという辞書が付属していることが多いですが、より強力な辞書(例えば有名なrockyou.txtなど)を別途用意すると成功率が上がります。

# John付属のデフォルト辞書を使う場合
john keystore_hash.txt

# 特定の辞書ファイルを指定する場合 (--wordlist オプション)
john --wordlist=/path/to/your/dictionary.txt keystore_hash.txt

# rockyou.txt を使う例 (kali linuxなどでは /usr/share/wordlists/rockyou.txt.gz にあることが多い)
# gunzip /usr/share/wordlists/rockyou.txt.gz # 事前に解凍が必要な場合
john --wordlist=/usr/share/wordlists/rockyou.txt keystore_hash.txt

2. ブルートフォース攻撃 (Incremental Mode)

辞書攻撃でパスワードが見つからない場合、文字の組み合わせを総当たりで試すブルートフォース攻撃が有効です。ただし、パスワードが長くて複雑な場合、非常に時間がかかります(数日~数年以上かかることも)。

# --incremental オプションでブルートフォースモードを指定
john --incremental keystore_hash.txt

# 特定の文字種を指定することも可能 (例: 小文字アルファベットのみ)
john --incremental=Lower keystore_hash.txt

Johnはデフォルトで、辞書攻撃 → シングルモード → ブルートフォースモード、と自動的に試行を進めることもあります。

解析の進行状況と結果の確認

John the Ripperは解析中に状況を表示します。何かキーを押すと現在のステータス(試行速度、経過時間、現在の候補など)が表示されます。解析が完了するか、Ctrl+Cで中断できます。

パスワードが見つかると、John the Ripperはその結果を記録します(デフォルトでは$JOHN/john.potというファイル)。後でクラックされたパスワードを確認するには、--showオプションを使用します。

john --show keystore_hash.txt

出力例:

mykeystore.jks:SecretPassword123: ... (他の情報) ...

1 password hash cracked, 0 left

この例では、mykeystore.jksのパスワードがSecretPassword123であることが特定されました🎉。

💡 フォーマットの指定:

John the Ripperは通常、ハッシュファイルの形式を自動検出しますが、明示的に指定したい場合は--format=keystoreのように指定できます。

john --format=keystore --wordlist=dictionary.txt keystore_hash.txt

利用可能なフォーマットは john --list=formats で確認できます。

問題 考えられる原因 対処法
keystore2john.py: command not found John the Ripper (Jumbo) が正しくインストールされていない、またはkeystore2john.pyがPATHに含まれていない。 John the Ripper (Jumbo) をインストールする。keystore2john.pyのフルパスを指定して実行する(例: /opt/john/run/keystore2john.py ...)。
FileNotFoundError: [Errno 2] No such file or directory: 'mykeystore.jks' (keystore2john実行時) 指定したキーストアファイルが存在しない、またはパスが間違っている。 ファイル名とパスを確認する。カレントディレクトリを確認する。
John the RipperでNo password hashes loadedと表示される keystore2johnが出力したハッシュファイルが空、または形式がJohnに認識されていない。キーストアファイル自体が破損している可能性。 keystore2johnの出力(ハッシュファイルの中身)を確認する。keystore2johnを再度実行してみる。別のJKSファイルで試してみる。Johnのバージョンを確認する。
パスワード解析に非常に時間がかかる、または見つからない パスワードが非常に長く複雑。使用している辞書が弱い。ブルートフォース攻撃の範囲が広すぎる。 より強力な辞書ファイルを使用する。ルールベース攻撃を試す。可能であればパスワードに関するヒント(長さ、使用文字種など)から攻撃方法を絞り込む。高性能なハードウェア(特にGPU対応のツールと組み合わせる場合)を使用する。諦める(現実的な時間内に解読不可能な場合もある)。

keystore2johnとJohn the Ripperは、忘れてしまったパスワードの回復や、システムのセキュリティ強度を評価するための強力なツールです。しかし、その能力ゆえに悪用される危険性もはらんでいます。

  • 倫理的な使用: 繰り返しになりますが、これらのツールは許可された目的でのみ使用してください。
  • 強力なパスワードの重要性: このツールを使ってみると、単純なパスワードや辞書に載っている単語がいかに簡単に破られるかが分かります。キーストアには、長く、複雑で、推測困難なパスワードを設定することが極めて重要です。ランダムな文字列生成ツールの利用も検討しましょう。
  • アクセス制御: キーストアファイル自体へのアクセスを適切に制限することも重要です。ファイルシステムのパーミッションを適切に設定し、不要なユーザーがアクセスできないようにしてください。

この記事では、keystore2johnを使ってJava KeyStoreからハッシュを抽出し、John the Ripperでパスワードを解析する基本的な手順を解説しました。正しく理解し、責任ある使い方を心掛けることで、これらのツールはセキュリティ維持・向上のための強力な味方となります🛡️。

参考情報

コメント

タイトルとURLをコピーしました