ccache2john の使い方: Kerberos 資格情報キャッシュからのハッシュ抽出ガイド

セキュリティツール

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$* 形式)に変換します。

注意点: 抽出されるハッシュは、必ずしもユーザーの元のパスワードそのものではありません。Kerberos の認証プロセスやチケットの種類、暗号化方式 (例: RC4-HMAC, AES) に依存します。しかし、このハッシュをクラックできれば、多くの場合、元のパスワードを特定することにつながります。

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 を利用する環境では、この種のツールによる攻撃のリスクを理解し、適切なパスワードポリシーの施行やアクセス制御、暗号化方式の選択といった対策を講じることが不可欠です。

参考情報 📚

より詳しい情報については、以下のリソースを参照してください。

コメント

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