John the Ripperツールスイート: bks2john の徹底解説

セキュリティツール

BKSキーストアファイルからパスワードハッシュを抽出し、John the Ripperで解析する方法

John the Ripper bks2john パスワードクラック BKSキーストア

John the Ripper (JtR) は、非常に強力で広く使われているオープンソースのパスワードクラッキングツールです。システム管理者やセキュリティ専門家が、弱いパスワードを発見したり、パスワードの強度をテストしたりするのに役立ちます。JtRは単体のツールではなく、様々なファイル形式からパスワードハッシュを抽出するための補助ツール群(`*2john` ユーティリティ)を含んでいます。

この記事では、その中でも特に bks2john というツールに焦点を当てて、その機能、使い方、そしてJohn the Ripper本体と連携してパスワード解析を行う方法について詳しく解説します。🔑

まず、bks2john が対象とするBKSキーストアについて理解しましょう。

BKS (Bouncy Castle KeyStore)

BKSは、Bouncy Castle というJavaの暗号ライブラリによって提供されるキーストア形式の一つです。キーストアとは、暗号鍵(秘密鍵、公開鍵)や証明書を安全に保管するためのデータベースファイルのようなものです。

BKS形式は、特に古いバージョンのAndroid開発や、Bouncy Castleライブラリが標準的に使われるJava環境で利用されることがあります。キーストアファイル自体は、通常、パスワードによって保護されており、このパスワードがなければ内部の鍵や証明書にアクセスすることはできません。

BKSにはいくつかのバージョンがあり(例: BKS, BKS-V1, UBER)、bks2john はこれらの形式に対応しています。

📝 注意: Android 4.3以降では、よりセキュアな「Android KeyStore System」が導入されており、BKS形式の使用は限定的になってきています。しかし、古いアプリケーションや特定のJava実装では依然として遭遇する可能性があります。

bks2john の役割

bks2john は、Pythonスクリプト(bks2john.py)として提供されるユーティリティです。その主な役割は、BKS (または UBER) 形式のキーストアファイルから、キーストアを保護しているパスワードのハッシュ情報を抽出することです。

John the Ripper 本体は、直接BKSファイルを読み込んでパスワード解析を行うことはできません。JtRが理解できる特定のハッシュ形式に変換する必要があります。bks2john は、その変換作業を担当するツールなのです。

抽出されたハッシュ情報は、john コマンドの入力として使用され、辞書攻撃やブルートフォース攻撃(総当たり攻撃)によって元のパスワードを特定する試みが行われます。

bks2john を使用するには、まずJohn the Ripperスイートがシステムにインストールされている必要があります。bks2john は通常、JtRの “Jumbo” バージョンに含まれています。Jumboバージョンは、多くの追加機能や対応フォーマット、そして `*2john` ユーティリティ群を含む拡張版です。

インストール方法はOSによって異なります。

  • Kali Linux や Parrot OSなどのペネトレーションテスト用ディストリビューション: 通常、標準でインストールされています。ターミナルで john と入力して確認できます。
  • Debian/Ubuntu系:
    sudo apt update
    sudo apt install john
  • Fedora/CentOS/RHEL系:
    sudo dnf install john
    または
    sudo yum install john
  • macOS (Homebrewを使用):
    brew install john-jumbo
  • ソースからコンパイル: 最新版や特定の機能が必要な場合は、John the Ripper 公式サイトからソースコードをダウンロードしてコンパイルします。JumboバージョンのリポジトリはGitHub (https://github.com/openwall/john) にあります。

インストール後、bks2john スクリプトが実行パスに含まれているか、またはJtRのディレクトリ(例: /usr/share/john/, /usr/lib/john/, /opt/john/run/ など)に存在することを確認してください。見つからない場合は、JtRのインストールディレクトリ内の `run` サブディレクトリなどを探してみてください。

# スクリプトの場所を探す例
find /usr -name bks2john.py 2>/dev/null
locate bks2john.py

bks2john の基本的な使い方は非常にシンプルです。ターミナルでスクリプトを実行し、引数として対象のBKSキーストアファイルを指定します。

python /path/to/bks2john.py [オプション] <対象のキーストアファイル.bks>

または、実行パスが通っていれば直接コマンド名を指定できます。

bks2john.py [オプション] <対象のキーストアファイル.bks>

実行例

例えば、mykeystore.bks という名前のBKSファイルからハッシュを抽出したい場合は、以下のように実行します。

bks2john.py mykeystore.bks

出力

コマンドを実行すると、標準出力にJohn the Ripperが解釈できる形式のハッシュ文字列が出力されます。この文字列には、ファイル名、ハッシュの種類を示す情報、そして実際のハッシュ値などが含まれています。

出力例(実際の値は異なります):

mykeystore.bks:$bks$*0*16*b1a2c3d4e5f67890a1b2c3d4e5f67890*...

この出力されたハッシュ文字列をファイルに保存して、次のステップで john コマンドに渡します。リダイレクトを使うと便利です。

bks2john.py mykeystore.bks > bks_hashes.txt

これで、bks_hashes.txt というファイルに抽出されたハッシュが保存されました。📄

オプション

bks2john にはいくつかのオプションがありますが、最も一般的に使われるのはヘルプ表示です。

bks2john.py -h

または

bks2john.py --help

これにより、利用可能なオプションが表示されます。主要なオプションは以下の通りです。

オプション 説明
-h, --help ヘルプメッセージを表示して終了します。
-t TYPE, --type=TYPE キーストアのタイプを指定します(例: `bks` または `uber`)。通常は自動検出されますが、問題がある場合に明示的に指定できます。

多くの場合、タイプは自動で正しく認識されるため、-t オプションを指定する必要はほとんどありません。

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

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

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

先ほど作成した bks_hashes.txt を使って解析を開始するには、次のように実行します。

john bks_hashes.txt

これを実行すると、John the Ripperはデフォルトのモード(通常はシングルクラックモード、次に辞書モード、最後にインクリメンタルモードの順)で解析を開始します。

解析モードの指定

特定の解析モードを指定することも可能です。

  • 辞書モード (Wordlist Mode): パスワードの候補リスト(辞書ファイル)を使って解析します。最も一般的に使われるモードの一つです。--wordlist オプションで辞書ファイルを指定します。
    john --wordlist=/path/to/password.lst bks_hashes.txt
    多くのシステムには、/usr/share/wordlists/ などによく使われるパスワードリスト(例: rockyou.txt)が用意されています。
    john --wordlist=/usr/share/wordlists/rockyou.txt bks_hashes.txt
    💡 rockyou.txt: rockyou.txt は非常に有名で効果的なパスワードリストですが、大規模な侵害(2009年のRockYou社からの漏洩)に由来するデータを含みます。使用する際は、法的な問題や倫理的な側面を考慮してください。
  • インクリメンタルモード (Incremental Mode): 設定された文字セット(例: 英数字、記号)の組み合わせを総当たりで試します。非常に時間がかかる可能性がありますが、辞書にないパスワードも見つけられる可能性があります。--incremental オプションで指定します。
    john --incremental bks_hashes.txt
    特定の文字セット(例: 数字のみ)を指定することも可能です(john.conf ファイルで定義)。
    john --incremental=Digits bks_hashes.txt
  • シングルクラックモード (Single Crack Mode): ハッシュファイルに含まれる情報(ユーザー名など)を基に、パスワードの推測を行います。非常に高速ですが、効果は限定的です。--single オプションで指定します。
    john --single bks_hashes.txt
  • ルールベース攻撃 (Rule-Based Attack): 辞書モードと組み合わせて使用され、辞書の単語に特定のルール(例: 大文字小文字変換、数字の追加、記号の置換など)を適用して、より複雑なパスワード候補を生成します。--rules オプションで有効になります(デフォルトで有効な場合もあります)。
    john --wordlist=password.lst --rules bks_hashes.txt

解析結果の確認

John the Ripper は、解析に成功したパスワードを $JOHN/john.pot というファイル(通常は JtR の実行ディレクトリ、またはユーザーのホームディレクトリ以下の .john/ 内)に記録します。john.pot は “pot file” (Password Output Text file) と呼ばれます。

解析が完了した後、または途中で、クラックされたパスワードを確認するには --show オプションを使用します。

john --show bks_hashes.txt

これにより、bks_hashes.txt に含まれるハッシュのうち、john.pot に記録されている(つまり、クラックに成功した)パスワードが表示されます。

出力例:

mykeystore.bks:CorrectPassword123

上記の例では、mykeystore.bks のパスワードが CorrectPassword123 であることが判明しました。🎉

もしパスワードが見つからなければ、”0 password hashes cracked, X left” のようなメッセージが表示されます。

セッション管理

John the Ripper は、解析の進捗状況を自動的に $JOHN/john.rec ファイルに保存します。途中で Ctrl+C を押して中断しても、次回同じコマンドを実行するか、--restore オプションをつけて実行することで、中断した箇所から解析を再開できます。

# 中断したセッションを再開
john --restore

bks2john と John the Ripper は非常に強力なツールですが、その使用には注意が必要です。

  • 法的・倫理的な問題: これらのツールは、自身が所有または明示的な許可を得ているシステムやファイルに対してのみ使用してください。他者のシステムやファイルに対して無許可で使用することは、法律で禁止されており、重大な犯罪となる可能性があります。倫理的なハッキングの範囲内で、教育や正当なセキュリティ評価の目的でのみ使用するようにしてください。
  • 解析時間: パスワードの複雑さ(長さ、文字種)、キーストアの暗号化強度、使用するマシンの計算能力によって、解析にかかる時間は大きく異なります。単純なパスワードは数秒で見つかることもありますが、複雑なパスワードの場合は数日、数週間、あるいはそれ以上かかることもあります。GPU を利用した解析 (John the Ripper は OpenCL をサポート) は CPU よりも大幅に高速ですが、BKS形式の解析が GPU に最適化されているかは確認が必要です。
  • 成功の保証はない: 非常に強力でランダムなパスワードが使用されている場合、現実的な時間内にパスワードをクラックできない可能性も十分にあります。
  • ツールのバージョン: John the Ripper と bks2john は継続的に開発されています。古いバージョンでは特定のBKS形式に対応していなかったり、バグが存在したりする可能性があります。可能な限り最新のJumboバージョンを使用することをお勧めします。

⚠️ 警告

パスワードクラッキングツールの不正利用は絶対に避けてください。常に法律と倫理規定を遵守し、許可された範囲内で責任を持って使用することが重要です。

bks2john は、John the Ripper スイートの一部として提供される、BKS (Bouncy Castle KeyStore) ファイルからパスワードハッシュを抽出するための重要なユーティリティです。

  1. BKSキーストア: Javaや古いAndroidアプリで使われる鍵/証明書ストア。パスワードで保護されている。
  2. bks2john: BKSファイルからJohn the Ripperが解析できる形式のハッシュを抽出する。
  3. 使い方: bks2john.py <keystore.bks> > hashes.txt のように実行し、ハッシュをファイルに保存。
  4. John the Ripperでの解析: john hashes.txt を実行し、辞書攻撃や総当たり攻撃でパスワードを解析。
  5. 結果確認: john --show hashes.txt でクラックされたパスワードを表示。

適切な権限と倫理観を持って使用すれば、bks2john と John the Ripper は、システムのセキュリティ評価や、パスワードを忘れてしまった正規のキーストアへのアクセス回復(ただし時間はかかる可能性があります)に役立つ強力なツールとなります。 💪

パスワードクラッキング技術を理解することは、同時に強力なパスワードを設定し、適切なセキュリティ対策を講じることの重要性を再認識させてくれます。常に安全なパスワード管理を心がけましょう。🛡️

  • John the Ripper 公式サイト: https://www.openwall.com/john/

    公式サイトでは、ツールのダウンロード、ドキュメント(インストール方法、オプション、設定、ルールなど)、関連情報などが提供されています。

  • John the Ripper Jumbo (GitHub): https://github.com/openwall/john

    多くの `*2john` ツールを含む拡張版 (Jumbo) のソースコードリポジトリです。

  • Bouncy Castle: https://www.bouncycastle.org/

    BKS形式を提供するJava暗号ライブラリの公式サイトです。

コメント

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