John the Ripper スイートの一部である ccache2john を使用して、Kerberos の ccache ファイルからパスワードハッシュを抽出し、セキュリティ監査やパスワード強度テストに役立てる方法を解説します。
はじめに 🤔
Kerberos は、ネットワーク認証プロトコルとして広く利用されており、特に Active Directory 環境などでは中心的な役割を果たしています。Kerberos 認証プロセスでは、ユーザーの資格情報を一時的に保存するために「資格情報キャッシュ (Credential Cache、通称 ccache)」ファイルが使用されます。これらのファイルには、特定の条件下でユーザーのパスワードに関連する情報が含まれていることがあります。
ccache2john
は、著名なパスワードクラッキングツールである John the Ripper (JtR) の “jumbo” バージョンに含まれるユーティリティの一つです。このツールの主な目的は、Kerberos の ccache ファイルから JtR が解析可能な形式のハッシュデータを抽出することです。抽出されたハッシュは、その後 JtR を用いてオフラインでのパスワードクラッキング試行に使用でき、パスワードの強度評価やセキュリティ監査、あるいはペネトレーションテストの一環として利用されます。
このブログ記事では、ccache2john
の基本的な使い方、前提条件、そして実際の使用例について詳しく解説していきます。
ccache2john とは何か? 🕵️♀️
ccache2john
は、ccache
(Credential Cache) ファイルを処理するために特別に設計されたPythonスクリプトです。ccache ファイルは、Kerberos 認証において、ユーザーが KDC (Key Distribution Center) から取得したチケット (主に TGT: Ticket Granting Ticket や TGS: Ticket Granting Service) を一時的に保存しておくためのものです。通常、Linux や macOS 環境では /tmp/krb5cc_<UID>
のような名前で作成されます。
これらのチケットには、ユーザーのパスワードから派生した鍵で暗号化された部分が含まれている場合があります。ccache2john
は、この ccache ファイルの構造を解析し、特に TGT などに含まれる暗号化されたデータを抽出し、John the Ripper がブルートフォース攻撃や辞書攻撃を仕掛けることができる形式(例: $krb5tgt$*
形式)に変換します。
ccache2john
は John the Ripper の jumbo バージョンに含まれており、通常は JtR の run
ディレクトリ内にあります。
前提条件 🛠️
ccache2john
を使用するには、以下の準備が必要です。
-
John the Ripper (jumbo version) のインストール:
ccache2john
は JtR の一部として提供されています。公式ウェブサイトや、多くの Linux ディストリビューションのパッケージマネージャ (例: Kali Linux の `apt install john`) からインストールできます。”jumbo” バージョンであることを確認してください。 -
Python 環境:
ccache2john
は Python スクリプト (多くの場合 Python 2 系ですが、バージョンによっては Python 3 もサポート) で書かれています。実行環境に対応する Python がインストールされている必要があります。依存するライブラリ (例: `pyasn1`) が必要になる場合もありますが、通常 JtR jumbo のパッケージに含まれているか、簡単な手順でインストールできます。 -
ccache ファイル: 解析対象となる Kerberos 資格情報キャッシュファイルが必要です。これは、セキュリティテストのために意図的に生成したものか、あるいは調査対象のシステムから取得したもの(例: Linux システムの
/tmp
ディレクトリなど)になります。ファイル名は通常krb5cc_<UID>
(UIDはユーザーID) や、特定のアプリケーションが生成したカスタム名などになります。
ccache2john の基本的な使い方 💻
ccache2john
の使い方は非常にシンプルです。基本的なコマンド構文は以下の通りです。
python /path/to/john/run/ccache2john.py <ccache_file>
または、JtR の run ディレクトリにパスが通っている場合や、カレントディレクトリにいる場合は、より短く書けます。
ccache2john <ccache_file>
ここで、<ccache_file>
には解析したい Kerberos 資格情報キャッシュファイルのパスを指定します。
実行すると、ccache2john
は指定された ccache ファイルを読み込み、John the Ripper が認識できる形式のハッシュ文字列を標準出力に表示します。通常、この出力をファイルにリダイレクトして保存し、後で John the Ripper の入力として使用します。
ccache2john krb5cc_1000 > hash.txt
上記の例では、krb5cc_1000
という名前の ccache ファイルからハッシュを抽出し、その結果を hash.txt
というファイルに保存しています。
抽出されたハッシュは、以下のような形式になります(これは一例です)。
user:$krb5tgt$23$*user$EXAMPLE.COM$krb5_ccache/salt*b8a8...[長い16進文字列]...9d2c$0102...[さらに長い16進文字列]...abcd
このハッシュ文字列には、Kerberos の暗号化タイプ (例: 23 は RC4-HMAC を示すことが多い)、ユーザー名、レルム名、ソルト情報、そして暗号化されたチケットデータが含まれています。
ccache2john のオプション ⚙️
ccache2john
は比較的シンプルなツールであり、多くの複雑なオプションは持っていません。利用可能なオプションがあるかどうかは、ツールのバージョンや JtR の配布元によって異なる可能性があります。
基本的なヘルプ情報を表示するには、-h
や --help
オプションを試すことができますが、多くの場合、主な機能は引数として ccache ファイルを受け取ることのみです。
ccache2john --help
もし特定の機能やオプションが必要な場合は、John the Ripper の公式ドキュメントや、スクリプトのソースコード (ccache2john.py
) を直接確認するのが最も確実です。GitHub の Openwall リポジトリなどで最新のコードを確認できます。
実践的な使用例 ✨
ここでは、ccache2john
を使った具体的なシナリオをいくつか紹介します。
1. 単一の ccache ファイルからハッシュを抽出してファイルに保存
最も基本的な使い方です。カレントディレクトリにある my_ticket.ccache
というファイルからハッシュを抽出し、kerberos_hashes.txt
に保存します。
ccache2john my_ticket.ccache > kerberos_hashes.txt
2. 抽出したハッシュを直接 John the Ripper に渡してクラックを開始
ファイルに一度保存せず、パイプ (|
) を使って ccache2john
の出力を直接 john
コマンドに渡すことも可能です。これにより、中間ファイルを作成する手間が省けます。
ccache2john /tmp/krb5cc_1001 | john --pipe --wordlist=/path/to/wordlist.txt
このコマンドでは、/tmp/krb5cc_1001
ファイルからハッシュを抽出し、その結果を john
コマンドに渡しています。--pipe
オプションは、標準入力からハッシュを受け取ることを JtR に指示します。--wordlist
オプションで辞書ファイルを指定し、辞書攻撃を開始します。
3. 複数の ccache ファイルを処理
複数の ccache ファイルがある場合、シェルスクリプトやコマンドラインのループ機能を使って一括処理できます。例えば、/tmp
ディレクトリにある全ての krb5cc_*
ファイルを処理し、結果を一つのファイルにまとめるには、以下のようにします(bash の例)。
# 出力ファイルを初期化
> all_kerberos_hashes.txt
# /tmp ディレクトリ内の krb5cc_* ファイルをループ処理
for ccache_file in /tmp/krb5cc_*; do
if [ -f "$ccache_file" ]; then
echo "Processing $ccache_file ..."
ccache2john "$ccache_file" >> all_kerberos_hashes.txt
fi
done
echo "All hashes extracted to all_kerberos_hashes.txt"
これにより、all_kerberos_hashes.txt
に全てのファイルから抽出されたハッシュが追記されていきます。その後、このファイルを JtR で処理します。
john all_kerberos_hashes.txt
John the Ripper でのクラック実行
ccache2john
でハッシュファイル (hash.txt
など) を作成したら、John the Ripper を使ってパスワードクラックを試みます。
# デフォルトモード (single, wordlist, incremental の順) でクラック開始
john hash.txt
# 特定の辞書ファイルを使ってクラック
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
# ルールベースの攻撃を併用
john --wordlist=/usr/share/wordlists/rockyou.txt --rules=KoreLogic hash.txt
# インクリメンタルモード (ブルートフォース) を指定
john --incremental=Digits hash.txt
クラックが成功すると、John the Ripper はパスワードをターミナルに表示し、$JOHN/john.pot
ファイル(通常は JtR の実行ディレクトリかホームディレクトリ内の .john
ディレクトリ)に記録します。後でクラック済みのパスワードを確認するには、以下のコマンドを使用します。
john --show hash.txt
セキュリティ上の意味合い 🛡️
ccache2john
と John the Ripper を使って Kerberos チケットからパスワードをクラックできることは、セキュリティ上重要な意味を持ちます。
- パスワードの強度評価: 組織内で使用されているパスワードが、オフラインのクラッキング攻撃に対してどの程度耐性があるかを評価できます。弱いパスワードが発見された場合、パスワードポリシーの見直しやユーザーへの教育が必要です。
-
ペネトレーションテスト: 攻撃者がシステムに侵入した後、権限昇格やラテラルムーブメント(横展開)を行うために、メモリやファイルシステムから ccache ファイルを窃取し、そこからパスワードをクラックしようとする可能性があります。
ccache2john
は、このような攻撃シナリオをシミュレートし、リスクを評価するために使用されます。これは “Pass-the-Cache” 攻撃と呼ばれることもあります。 - インシデントレスポンス: セキュリティインシデント発生時、侵害された可能性のあるアカウントのパスワードが漏洩していないかを確認するために、取得した ccache ファイルを分析することがあります。
Kerberos 環境においては、強力なパスワードポリシーを適用し、ccache ファイルへのアクセスを適切に制限し、不要になった ccache ファイルを定期的に削除することが、セキュリティを維持する上で重要です。また、AES など、より強力な暗号化方式の使用を強制することも推奨されます。
まとめ 🎉
ccache2john
は、John the Ripper スイートの中でも特に Kerberos 環境のセキュリティ評価において有用なツールです。Kerberos の資格情報キャッシュ (ccache) ファイルから JtR で解析可能なハッシュを抽出し、オフラインでのパスワードクラッキングを可能にします。
使い方は非常にシンプルで、主に ccache ファイルを引数として渡すだけです。抽出されたハッシュは、John the Ripper の強力なクラッキング能力と組み合わせることで、パスワードの強度テスト、ペネトレーションテスト、インシデント対応など、様々なセキュリティ関連タスクに役立ちます。
Kerberos を利用する環境では、この種のツールによる攻撃のリスクを理解し、適切なパスワードポリシーの施行やアクセス制御、暗号化方式の選択といった対策を講じることが不可欠です。
参考情報 📚
より詳しい情報については、以下のリソースを参照してください。
- John the Ripper official website: https://www.openwall.com/john/
- John the Ripper jumbo repository (GitHub): https://github.com/openwall/john (ccache2john.py は run ディレクトリ内にあります)
- MIT Kerberos Documentation – Credential cache: https://web.mit.edu/kerberos/krb5-latest/doc/basic/ccache_def.html
コメント