KerberoastingやAS-REP Roastingで取得したチケットを解析する
はじめに:kirbi2johnとは? 🤔
kirbi2john
は、有名なパスワードクラッキングツールであるJohn the Ripper (JtR) スイートに含まれるユーティリティスクリプト(通常はPythonスクリプト)です。その主な目的は、Kerberos認証プロトコルで使用されるチケットファイル(.kirbi
形式やKRB5CCキャッシュファイルなど)から、John the Ripperが解読(クラック)できる形式のハッシュデータを抽出することです。
Kerberosは、Active Directory環境などで広く利用されている認証プロトコルです。攻撃者がネットワーク内で活動する際、特定のサービスアカウントの権限を奪取するために「Kerberoasting」と呼ばれる攻撃手法を用いることがあります。この攻撃では、サービスプリンシパル名(SPN)を持つアカウントのサービスチケット(TGS)を取得します。このチケットはサービスアカウントのパスワードハッシュで暗号化されているため、チケットを取得できれば、オフラインでそのパスワードのクラッキングを試みることができます。
また、「AS-REP Roasting」と呼ばれる攻撃では、Kerberos事前認証が無効になっているユーザーアカウントの認証応答(AS-REP)を取得し、そこに含まれる暗号化されたデータからパスワードハッシュを抽出します。
kirbi2john
は、これらの攻撃手法で得られた.kirbi
ファイルやAS-REP応答データから、John the Ripperで処理可能なハッシュ文字列を生成する役割を担います。これにより、攻撃者(またはペネトレーションテスター)は、取得したチケットや応答データに含まれるパスワード情報の強度を評価したり、実際にパスワードを解読したりすることが可能になります。👍
kirbi2john
は、Kerberosチケット(バイナリ形式)をJohn the Ripperが理解できるテキスト形式のハッシュに変換するための重要な「橋渡し役」ツールです。
kirbi2johnの入手と場所 📂
kirbi2john
は、John the Ripper (Jumbo) の一部として提供されています。通常、John the Ripperをソースからコンパイルした場合や、パッケージマネージャー(例: Kali Linuxのapt install john
)でインストールした場合、John the Ripperのインストールディレクトリ内のrun
サブディレクトリに配置されています。
例えば、Linux環境でJohn the Ripperが/opt/john/
にインストールされている場合、kirbi2john
(多くの場合kirbi2john.py
という名前のPythonスクリプト)は/opt/john/run/kirbi2john.py
のようなパスに存在することが一般的です。
見つからない場合は、John the Ripperのインストールディレクトリ内で検索してみてください。
# John the Ripperのディレクトリ内で検索する例
find /path/to/john/ -name 'kirbi2john*'
最新版や特定のバージョンが必要な場合は、John the Ripperの公式GitHubリポジトリから直接取得することも可能です。古いバージョンのkirbi2john.py
では、特定のチケット形式に対応していなかったり、バグが存在したりする可能性があるため、最新版の使用が推奨される場合があります。
基本的な使い方 💻
kirbi2john
の基本的な使い方は非常にシンプルです。コマンドラインでスクリプトを実行し、引数として変換したいKerberosチケットファイル(.kirbi
ファイルやKRB5CCキャッシュファイルなど)のパスを指定します。
# Pythonスクリプトの場合
python /path/to/john/run/kirbi2john.py <kerberos_ticket_file>
# 実行可能ファイルとしてパスが通っている場合
kirbi2john <kerberos_ticket_file>
ここで、<kerberos_ticket_file>
には、解析したいチケットファイルの実際のパスを指定します。例えば、MimikatzやRubeusなどのツールでエクスポートされた.kirbi
ファイルや、Linux/macOSシステムから取得した/tmp/krb5cc_<UID>
のようなKRB5CCキャッシュファイル、あるいはImpacketのGetNPUsers.py
で取得したAS-REP応答を含むファイルなどです。
実行すると、kirbi2john
は指定されたファイルを読み込み、John the Ripperが解釈できる形式のハッシュ文字列を標準出力に表示します。通常、この出力はファイルにリダイレクトして保存し、後でJohn the Ripperに渡します。
# 出力をファイルに保存する例
python /path/to/john/run/kirbi2john.py ticket.kirbi > kerberos_hashes.txt
生成されるハッシュの形式は、チケットの種類や暗号化方式によって異なります。代表的なものには以下のようなプレフィックスがあります。
$krb5tgs$
: Kerberos TGS (Ticket Granting Service) チケットに対するハッシュ。Kerberoastingで得られたチケットから抽出されます。$krb5asrep$
: Kerberos AS-REP (Authentication Service Response) データに対するハッシュ。AS-REP Roastingで得られたデータから抽出されます。
これらのハッシュ文字列には、暗号化タイプ(例: 23はRC4-HMACを示すことが多い)、ユーザー名、ドメイン、SPN(TGSの場合)、そして暗号化されたチケットデータやチェックサムなどが含まれています。
具体的な使用例とシナリオ 💡
kirbi2john
が役立つ具体的なシナリオと、その使用例を見ていきましょう。
シナリオ1:Kerberoastingで取得したTGSチケットの変換
Active Directory環境への侵入後、ペネトレーションテスターがMimikatzやRubeusといったツールを使用して、特定のサービスアカウント(例えば、SQL Serverサービスアカウントなど)のSPNに対するTGSチケットを取得したとします。これらのツールは、取得したチケットを.kirbi
ファイルとしてエクスポートできます。
例えば、1-40a00000-admin@MSSQLSvc~sqlserver.corp.local~1433-CORP.LOCAL.kirbi
のような名前のファイルが取得できたとします。このファイルをkirbi2john
で処理します。
# Mimikatzなどでエクスポートした.kirbiファイルを変換
python /path/to/john/run/kirbi2john.py '1-40a00000-admin@MSSQLSvc~sqlserver.corp.local~1433-CORP.LOCAL.kirbi' > sql_service_hash.txt
sql_service_hash.txt
ファイルには、以下のような形式のハッシュが書き込まれます(内容は実際のチケットによって異なります)。
$krb5tgs$23$*user$realm$test/spn*$checksum$encrypted_ticket
このハッシュをJohn the Ripperでクラックすることで、サービスアカウントのパスワード特定を試みることができます。
シナリオ2:AS-REP Roastingで取得した応答データの変換
別のシナリオとして、Kerberos事前認証が無効になっているユーザーアカウントを発見し、ImpacketのGetNPUsers.py
ツールを使ってAS-REP応答を取得したとします。このツールは、クラック可能な形式で応答データを出力できますが、場合によってはkirbi2john
で再処理が必要な形式で保存されることもあります(あるいは、他のツールで取得したAS-REPデータの場合)。
# GetNPUsers.pyでAS-REP応答を取得し、John形式でファイルに保存する例
impacket-GetNPUsers corp.local/ -usersfile vulnerable_users.txt -format john -outputfile asrep_hashes.txt
多くの場合、GetNPUsers.py
が直接John形式で出力してくれるため、kirbi2john
の出番はないかもしれませんが、ツールが出力したファイルがJohnで直接扱えない形式であったり、AS-REP応答を別の方法でキャプチャしたりした場合には、kirbi2john
が役立つ可能性があります。kirbi2john
は、AS-REP応答を含むKRB5CCキャッシュファイルなども処理できる場合があります。
AS-REP Roastingで得られたハッシュは$krb5asrep$
というプレフィックスを持ちます。
$krb5asrep$23$username@REALM:checksum$encrypted_data
シナリオ3:Linux/macOSのKerberosチケットキャッシュの変換
LinuxやmacOS環境でKerberos認証を使用している場合、ユーザーのチケットは通常/tmp/krb5cc_<UID>
(<UID>
はユーザーID)という名前のファイルにキャッシュされます。もし、これらのシステムにアクセスでき、チケットキャッシュファイルを取得できた場合、kirbi2john
を使ってそこに含まれるチケット情報(TGTなど)からハッシュを抽出できる可能性があります。
# Linuxのチケットキャッシュファイルを変換
python /path/to/john/run/kirbi2john.py /tmp/krb5cc_1000 > user_tgt_hash.txt
これにより、ユーザーアカウント自体のパスワードクラッキングを試みることが可能になる場合があります。
抽出したハッシュのクラッキング 💥
kirbi2john
でハッシュファイルを生成したら、次はいよいよJohn the Ripperを使ってパスワードクラッキングを試みます。John the Ripperは、辞書攻撃、ブルートフォース攻撃、ルールベース攻撃など、様々な手法でハッシュから元のパスワードを推測します。
基本的なコマンドは以下のようになります。
# 辞書ファイルを使ってクラックする例
john --wordlist=/path/to/wordlist.txt kerberos_hashes.txt
# John the Ripperに攻撃モードを自動選択させる例
john kerberos_hashes.txt
ここで、/path/to/wordlist.txt
には、パスワード候補がリストされた辞書ファイル(例:有名なrockyou.txt
など)のパスを指定します。kerberos_hashes.txt
は、kirbi2john
で生成したハッシュが含まれるファイルです。
John the Ripperは、ハッシュファイル内のプレフィックス($krb5tgs$
や$krb5asrep$
)を認識し、適切なクラッキングアルゴリズム(Kerberos TGSまたはAS-REPのRC4/AESなど)を自動的に選択して処理を開始します。
クラッキングに成功すると、John the Ripperは解読できたパスワードをハッシュと共に表示します。
# クラック結果を表示するコマンド
john --show kerberos_hashes.txt
注意点とトラブルシューティング 🛠️
- バージョンの互換性: 古いバージョンの
kirbi2john.py
では、新しい形式のチケットや特定の暗号化タイプ(特にAESなど)に対応していない場合があります。問題が発生した場合は、John the Ripper Jumboの最新版に含まれるスクリプトを使用してみてください。 - ファイル形式: 入力ファイルが
kirbi2john
が期待する形式(.kirbi
バイナリ、KRB5CCキャッシュ、特定のAS-REPダンプ形式など)であることを確認してください。異なるツールが出力したファイルは、互換性がない場合があります。 - エラーメッセージ: 実行時にエラーが出る場合は、エラーメッセージをよく読み、Pythonの依存関係が満たされているか、ファイルパスが正しいかなどを確認してください。
- Hashcatとの連携: John the Ripperではなく、GPUを用いた高速クラッキングが可能なHashcatを使用したい場合もあります。
kirbi2john
が出力する形式はJohn the Ripper用ですが、Hashcatが直接サポートするKerberosハッシュ形式(モード13100 for KRB5TGS-RC4, モード19600 for KRB5TGS-AES128, モード19700 for KRB5TGS-AES256, モード18200 for KRB5ASREP-RC4, モード18200 for KRB5ASREP-AESなど)に変換する必要がある場合があります。一部のツール(例: ImpacketのGetNPUsers.py
やRubeus)は、直接Hashcat形式で出力するオプションを持っていることがあります。場合によっては、kirbi2john
の出力から手動または簡単なスクリプトでHashcat形式に変換することも可能です。
まとめ 📝
kirbi2john
は、John the Ripperスイートの中でも、特にActive Directory環境におけるセキュリティ評価やペネトレーションテストにおいて重要な役割を果たすツールです。KerberoastingやAS-REP Roastingといった攻撃手法で得られたKerberosチケットや認証応答データから、パスワードクラッキング試行に必要なハッシュ情報を抽出する機能を提供します。
このツールを正しく理解し使用することで、サービスアカウントやユーザーアカウントのパスワード強度を評価し、Active Directory環境全体のセキュリティ態勢を把握するための一助となります。ただし、これらの技術の使用は、必ず適切な権限と許可の下で行われるべきです。🔒
パスワードクラッキングはセキュリティ評価の重要な一部ですが、それと同時に、強力なパスワードポリシーの適用、不要なアカウントの無効化、Kerberos事前認証の強制、脆弱な暗号化方式(RC4など)の無効化といった防御策を講じることが、KerberoastingやAS-REP Roastingのような攻撃から組織を守るためには不可欠です。🛡️
参考情報
- John the Ripper official website: https://www.openwall.com/john/
- John the Ripper Community Wiki (GitHub): https://github.com/openwall/john-packages/blob/master/john/README.md (ドキュメント内に各種ツールの説明が含まれる場合があります)
- Mimikatz (Tool for exporting tickets): https://github.com/gentilkiwi/mimikatz
- Rubeus (Tool for Kerberos interaction and ticket manipulation): https://github.com/GhostPack/Rubeus
- Impacket (Collection of Python classes for working with network protocols, includes GetNPUsers.py): https://github.com/SecureAuthCorp/impacket
コメント