BKSキーストアファイルからパスワードハッシュを抽出し、John the Ripperで解析する方法
John the Ripper bks2john パスワードクラック BKSキーストア
John the Ripper (JtR) は、非常に強力で広く使われているオープンソースのパスワードクラッキングツールです。システム管理者やセキュリティ専門家が、弱いパスワードを発見したり、パスワードの強度をテストしたりするのに役立ちます。JtRは単体のツールではなく、様々なファイル形式からパスワードハッシュを抽出するための補助ツール群(`*2john` ユーティリティ)を含んでいます。
この記事では、その中でも特に bks2john
というツールに焦点を当てて、その機能、使い方、そしてJohn the Ripper本体と連携してパスワード解析を行う方法について詳しく解説します。🔑
1. BKSキーストアと bks2john とは?
まず、bks2john
が対象とするBKSキーストアについて理解しましょう。
BKS (Bouncy Castle KeyStore)
BKSは、Bouncy Castle というJavaの暗号ライブラリによって提供されるキーストア形式の一つです。キーストアとは、暗号鍵(秘密鍵、公開鍵)や証明書を安全に保管するためのデータベースファイルのようなものです。
BKS形式は、特に古いバージョンのAndroid開発や、Bouncy Castleライブラリが標準的に使われるJava環境で利用されることがあります。キーストアファイル自体は、通常、パスワードによって保護されており、このパスワードがなければ内部の鍵や証明書にアクセスすることはできません。
BKSにはいくつかのバージョンがあり(例: BKS, BKS-V1, UBER)、bks2john
はこれらの形式に対応しています。
bks2john の役割
bks2john
は、Pythonスクリプト(bks2john.py
)として提供されるユーティリティです。その主な役割は、BKS (または UBER) 形式のキーストアファイルから、キーストアを保護しているパスワードのハッシュ情報を抽出することです。
John the Ripper 本体は、直接BKSファイルを読み込んでパスワード解析を行うことはできません。JtRが理解できる特定のハッシュ形式に変換する必要があります。bks2john
は、その変換作業を担当するツールなのです。
抽出されたハッシュ情報は、john
コマンドの入力として使用され、辞書攻撃やブルートフォース攻撃(総当たり攻撃)によって元のパスワードを特定する試みが行われます。
2. 準備:John the Ripper のインストール
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
3. bks2john の基本的な使い方
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
オプションを指定する必要はほとんどありません。
4. John the Ripper でのパスワード解析
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
-
インクリメンタルモード (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
5. 注意点と倫理的考慮事項
bks2john
と John the Ripper は非常に強力なツールですが、その使用には注意が必要です。
- 法的・倫理的な問題: これらのツールは、自身が所有または明示的な許可を得ているシステムやファイルに対してのみ使用してください。他者のシステムやファイルに対して無許可で使用することは、法律で禁止されており、重大な犯罪となる可能性があります。倫理的なハッキングの範囲内で、教育や正当なセキュリティ評価の目的でのみ使用するようにしてください。
- 解析時間: パスワードの複雑さ(長さ、文字種)、キーストアの暗号化強度、使用するマシンの計算能力によって、解析にかかる時間は大きく異なります。単純なパスワードは数秒で見つかることもありますが、複雑なパスワードの場合は数日、数週間、あるいはそれ以上かかることもあります。GPU を利用した解析 (John the Ripper は OpenCL をサポート) は CPU よりも大幅に高速ですが、BKS形式の解析が GPU に最適化されているかは確認が必要です。
- 成功の保証はない: 非常に強力でランダムなパスワードが使用されている場合、現実的な時間内にパスワードをクラックできない可能性も十分にあります。
-
ツールのバージョン: John the Ripper と
bks2john
は継続的に開発されています。古いバージョンでは特定のBKS形式に対応していなかったり、バグが存在したりする可能性があります。可能な限り最新のJumboバージョンを使用することをお勧めします。
6. まとめ
bks2john
は、John the Ripper スイートの一部として提供される、BKS (Bouncy Castle KeyStore) ファイルからパスワードハッシュを抽出するための重要なユーティリティです。
- BKSキーストア: Javaや古いAndroidアプリで使われる鍵/証明書ストア。パスワードで保護されている。
- bks2john: BKSファイルからJohn the Ripperが解析できる形式のハッシュを抽出する。
- 使い方:
bks2john.py <keystore.bks> > hashes.txt
のように実行し、ハッシュをファイルに保存。 - John the Ripperでの解析:
john hashes.txt
を実行し、辞書攻撃や総当たり攻撃でパスワードを解析。 - 結果確認:
john --show hashes.txt
でクラックされたパスワードを表示。
適切な権限と倫理観を持って使用すれば、bks2john
と John the Ripper は、システムのセキュリティ評価や、パスワードを忘れてしまった正規のキーストアへのアクセス回復(ただし時間はかかる可能性があります)に役立つ強力なツールとなります。 💪
パスワードクラッキング技術を理解することは、同時に強力なパスワードを設定し、適切なセキュリティ対策を講じることの重要性を再認識させてくれます。常に安全なパスワード管理を心がけましょう。🛡️
7. 参考情報
-
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暗号ライブラリの公式サイトです。
コメント