John the Ripper (JtR) は、非常に強力で広く使われているパスワードクラッキングツールです。その多機能性の一部として、「2john」と呼ばれる一群のユーティリティスクリプトが提供されています。これらは、様々なファイル形式やデータから、John the Ripperが解析できる形式のハッシュを抽出するために設計されています。
この記事では、その中でも特に krb2john
に焦点を当て、その機能と使い方を詳しく解説します。krb2john
は、Kerberos認証プロトコルに関連するデータ、特にネットワークキャプチャファイル(PCAP)から得られる情報やkeytabファイルから、パスワードクラッキングに必要なハッシュ情報を抽出するための重要なツールです。
Kerberos認証は、Active Directory環境などで広く採用されており、そのセキュリティメカニズムを理解し、潜在的な脆弱性を評価する上で、krb2john
のようなツールはペネトレーションテスターやセキュリティ研究者にとって不可欠です。このガイドを通じて、krb2john
の基本的な使い方から、抽出されたハッシュを実際にJohn the Ripperでクラックする手順までを学びましょう。🚀
Kerberos認証と関連するチケットについて
krb2john
の役割を理解するために、まずKerberos認証の基本的な流れと、そこで扱われる主要な「チケット」について触れておきましょう。Kerberosは、ネットワーク上で安全にユーザーやサービスを認証するためのプロトコルです。チケットと呼ばれる暗号化された情報を使って認証を行います。
主要なステップとチケットは以下の通りです:
- AS-REQ (Authentication Service Request): クライアントが最初にドメインコントローラー(具体的にはKDCのAS)に対して送信するリクエスト。ユーザー名などの情報が含まれます。「事前認証」が有効な場合、クライアントは自身のパスワードハッシュで暗号化したタイムスタンプも送信します。
- AS-REP (Authentication Service Reply): ASがAS-REQを検証した後、クライアントに送り返す応答。これには、クライアントのパスワードハッシュで暗号化された「TGTセッションキー」と、TGS(Ticket Granting Service)の秘密鍵(krbtgtアカウントのハッシュ)で暗号化された「TGT (Ticket Granting Ticket)」が含まれます。
- TGS-REQ (Ticket Granting Service Request): クライアントが特定のサービス(例:ファイルサーバー、ウェブサーバー)へのアクセス許可を求めるために、TGTを添えてKDCのTGSに送信するリクエスト。
- TGS-REP (Ticket Granting Service Reply): TGSがTGTを検証した後、クライアントに送り返す応答。これには、AS-REPで得たTGTセッションキーで暗号化された「サービスセッションキー」と、アクセスしたいサービスの秘密鍵(通常はサービスアカウントのパスワードハッシュ)で暗号化された「サービスチケット(ST)」が含まれます。
- AP-REQ (Application Request): クライアントが最終的にサービスに対して、サービスチケットと、サービスセッションキーで暗号化した認証情報(Authenticator)を送るリクエスト。
- AP-REP (Application Reply): (オプション) サービスがクライアントを認証したことを示す応答。
krb2john
が主に注目するのは、AS-REP と TGS-REP のメッセージです。これらのメッセージには、それぞれクライアントのパスワードハッシュ、またはサービスアカウントのパスワードハッシュで暗号化された部分が含まれており、ここからJohn the Ripperでクラック可能な形式のハッシュデータを抽出することができます。
- AS-REP Roasting: もしユーザーアカウントでKerberosの「事前認証」が無効になっている場合、攻撃者はそのユーザーになりすましてAS-REQを送信し、AS-REPを受け取ることができます。このAS-REPにはユーザーのパスワードハッシュで暗号化された部分が含まれるため、
krb2john
でハッシュを抽出し、オフラインでパスワードクラッキングを試みることが可能です。これはAS-REP Roastingと呼ばれます。 - Kerberoasting: サービスアカウントに紐づいたSPN(Service Principal Name)に対して、任意の認証済みユーザーがTGS-REQを送信し、TGS-REPを受け取ることができます。このTGS-REPにはサービスアカウントのパスワードハッシュで暗号化されたサービスチケットが含まれています。
krb2john
でここからハッシュを抽出し、オフラインでサービスアカウントのパスワードクラッキングを試みる攻撃がKerberoastingです。
💡 補足: krb2john
は元々 krbpa2john.py
という名前でしたが、後に改名されました。また、John the Ripperスイートには他にもKerberos関連のツールがあります。
ccache2john.py
: Kerberosクレデンシャルキャッシュファイル (.ccache) からハッシュを抽出します。kirbi2john.py
: KIRBI Kerberosチケットファイル (.kirbi) からハッシュを抽出します。Mimikatzなどで取得したチケットファイルに利用できます。kdcdump2john.py
: KDC (Key Distribution Center) のダンプファイルからハッシュを抽出します。
krb2john
は主にネットワークキャプチャからAS-REQ/AS-REPやTGS-REQ/TGS-REPのパケットデータを解析することに特化しています。
John the Ripper と krb2john の入手
krb2john
は、John the Ripper の一部として提供されています。したがって、John the Ripperをインストールすれば、通常 krb2john
(または関連スクリプト) も一緒に利用可能になります。
John the Ripperには、オリジナルのバージョンと、コミュニティによって拡張された「Jumbo」バージョンがあります。krb2john
を含む多くの「2john」スクリプトは、Jumboバージョンに含まれていることが一般的です。
インストール方法(一般的なLinux環境):
- パッケージマネージャーを利用する場合 (例: Debian/Ubuntu):
これにより、ディストリビューションが提供するJohn the Ripper (多くの場合Jumboバージョン) がインストールされます。「2john」スクリプト群は、通常sudo apt update sudo apt install john
/usr/share/john/
や/usr/lib/john/
、あるいは/opt/john/run/
のような場所に配置されます。krb2john.py
はPythonスクリプトとして提供されることが多いです。 - ソースコードからビルドする場合:
John the Ripper 公式サイト や GitHubリポジトリ から最新のJumboバージョンのソースコードをダウンロードし、ドキュメントに従ってコンパイル・インストールします。この方法では、最新の機能や修正を利用できます。
ビルド後、実行ファイルは# 例: GitHubからクローンしてビルド git clone https://github.com/openwall/john -b bleeding-jumbo john cd john/src ./configure && make -s clean && make -sj4
../run/
ディレクトリに生成されます。krb2john.py
もこのディレクトリ内にあります。 - Kali Linuxなどのペネトレーションテスト用OS: Kali Linuxなどのセキュリティ診断に特化したOSでは、John the Ripper (Jumbo) がプリインストールされているか、簡単にインストールできます。
インストール後、krb2john.py
スクリプトの場所を確認し、実行権限があることを確認してください。多くの場合、Pythonインタプリタ (python2またはpython3) を指定して実行する必要があります。
# スクリプトの場所を探す例
find /usr -name krb2john.py 2>/dev/null
# または John the Ripper の run ディレクトリ内で確認
cd /path/to/john/run
ls krb2john.py
krb2john の使い方
krb2john
は主に、Kerberos認証の通信が含まれるネットワークキャプチャファイル(PCAP形式)を解析し、John the Ripperがクラックできる形式のハッシュを抽出します。特にAS-REPやTGS-REPメッセージに注目します。
PCAPファイルから直接 krb2john
で解析することはできません。まず、tshark
(Wiresharkのコマンドライン版) を使って、PCAPファイルからKerberos関連の情報をPDML (Packet Details Markup Language) または PSML (Packet Summary Markup Language) 形式に変換する必要があります。
ステップ1: tshark を用いた PDML/PSML ファイルの生成
tshark
を使って、キャプチャしたPCAPファイル (capture.pcap
) からKerberosの通信データを含むPDMLファイル (kerberos.pdml
) を生成します。
# -r: 入力ファイル指定
# -T pdml: 出力形式をPDMLに指定
# kerberos: Kerberosプロトコルでフィルタリング (環境によっては不要/調整が必要)
tshark -r capture.pcap -T pdml -Y kerberos > kerberos.pdml
# またはフィルタリングせずに全パケットをPDMLにする (ファイルサイズが大きくなる可能性あり)
# tshark -r capture.pcap -T pdml > all_packets.pdml
-Y kerberos
のような表示フィルタは、目的のパケット(AS-REPやTGS-REP)が含まれることを保証するものではありません。フィルタリングせずに全パケットをPDML化するか、より具体的なフィルタ(例: kerberos.msg_type == 11
for AS-REP, kerberos.msg_type == 13
for TGS-REP)を使用することを検討してください。ただし、krb2john
はPDMLファイル全体をスキャンするため、フィルタなしでも動作することが多いです。
ステップ2: krb2john を用いたハッシュの抽出
生成したPDMLファイル (kerberos.pdml
) を krb2john.py
に入力として与え、抽出されたハッシュをファイル (krb_hashes.txt
) に保存します。
# John the Ripperのrunディレクトリにいる場合
./krb2john.py kerberos.pdml > krb_hashes.txt
# フルパスで指定する場合 (Pythonのバージョン指定が必要な場合も)
python3 /path/to/john/run/krb2john.py kerberos.pdml > krb_hashes.txt
krb2john.py
はPDMLファイル内のKerberosメッセージを解析し、AS-REPまたはTGS-REPメッセージからクラック可能なハッシュを見つけると、標準出力にJohn the Ripper形式で出力します。
出力されるハッシュ形式
krb2john
が出力するハッシュの形式は、抽出元のメッセージタイプ(AS-REPかTGS-REPか)と暗号化タイプ(etype)によって異なります。
-
AS-REP (krb5asrep): ユーザーのパスワードハッシュで暗号化された部分から抽出されます。
形式例 (etype 23 – RC4-HMAC):$krb5asrep$23$*<user>$<realm>$<salt>*$<hex_encrypted_data>$...
形式例 (etype 17/18 – AES):$krb5asrep$<etype>$<user>@<realm>$<checksum>$<hex_encrypted_data>
(etype 23の場合、saltは通常ユーザー名ですが、AD環境などでは異なる場合もあります) -
TGS-REP (krb5tgs): サービスアカウントのパスワードハッシュで暗号化されたサービスチケット部分から抽出されます (Kerberoasting用)。
形式例 (etype 23 – RC4-HMAC):$krb5tgs$23$*<user>$<realm>$<spn_without_realm>*$<hex_checksum>$<hex_encrypted_data>$...
形式例 (etype 17/18 – AES):$krb5tgs$<etype>$*<spn>*$<hex_checksum>$<hex_encrypted_data>
(TGSハッシュでは、ユーザー名、レルム、SPN、チェックサム、暗号化データなどが含まれます)
これらの形式は、John the Ripperがどのハッシュタイプ(krb5asrep
または krb5tgs
)として処理すべきか、またどの暗号化アルゴリズム(etypeで示される)が使用されているかを示す情報を含んでいます。
✅ Keytabファイルからの抽出: krb2john
はkeytabファイル (Kerberosの鍵を格納するファイル) からもハッシュを抽出できる場合がありますが、その機能性は限定的かもしれません。通常、keytabファイルにはサービスプリンシパルの長期鍵が含まれており、直接的なパスワードクラッキングとは異なる文脈で使われます。
John the Ripper でハッシュをクラックする
krb2john
で抽出したハッシュ (krb_hashes.txt
に保存したとします) は、John the Ripper本体を使ってクラックを試みることができます。
基本的なコマンド構文は以下の通りです。
# John the Ripperのrunディレクトリにいる場合
./john [オプション] krb_hashes.txt
# フルパスで指定する場合
/path/to/john/run/john [オプション] krb_hashes.txt
John the Ripperは、ハッシュファイル内の形式を自動的に検出し、適切なクラッキングモード(デフォルトでは single, wordlist, incremental の順)でパスワード解析を開始します。
クラッキングモードの指定
特定のクラッキングモードやオプションを指定することもできます。
-
ワードリストモード: 辞書ファイルを使ってクラックします。
./john --wordlist=/path/to/dictionary.txt krb_hashes.txt
--rules
オプションでマングルール(例: 大文字小文字変換、数字付加など)を適用することもできます。./john --wordlist=/path/to/dictionary.txt --rules=KoreLogic krb_hashes.txt
-
インクリメンタルモード (総当たり): 指定された文字セットで総当たり攻撃を行います。
利用可能なモードは./john --incremental=Digits krb_hashes.txt # 数字のみ ./john --incremental=LowerNum krb_hashes.txt # 小文字英字と数字
john.conf
ファイルで定義されています。 -
シングルクラックモード: ユーザー名などの情報からパスワードを推測します (AS-REPハッシュなどで有効な場合があります)。
./john --single krb_hashes.txt
-
ハッシュ形式の指定 (オプション): 通常は自動検出されますが、明示的に指定することも可能です。
# AS-REPの場合 ./john --format=krb5asrep krb_hashes.txt # TGS-REPの場合 ./john --format=krb5tgs krb_hashes.txt
クラック結果の表示
クラックが成功すると、パスワードは $JOHN/john.pot
(通常はJohn the Ripperの実行ディレクトリかホームディレクトリの .john
内) というファイルに記録されます。
クラック済みのパスワードを確認するには、--show
オプションを使用します。
./john --show krb_hashes.txt
これにより、ハッシュファイル内の各ハッシュについて、クラックされたパスワード(もしあれば)が表示されます。
# 表示例
user1@REALM.COM:Password123:1:1:::
service/server.realm.com@REALM.COM:ComplexP@ssword!::1:1:::
2 password hashes cracked, 0 left
考慮事項とセキュリティへの影響
⚠️ 倫理的な利用について
krb2john
や John the Ripper は、システムのセキュリティ評価やパスワード監査のために設計された強力なツールです。しかし、これらのツールを悪用すれば、不正アクセスや情報漏洩につながる可能性があります。
許可なく他者のシステムやネットワークに対してこれらのツールを使用することは、法律で禁止されており、重大な犯罪となる可能性があります。 必ず、適切な権限と許可を得た上で、自身の管理下にあるシステムや、明確な合意のもとでのペネトレーションテストなどの正当な目的のためにのみ使用してください。
krb2john
を用いたKerberosハッシュの抽出とクラッキングは、Active Directory環境などにおける潜在的なセキュリティリスクを明らかにします。
- 弱いパスワードのリスク: AS-REP Roasting や Kerberoasting によって抽出されたハッシュが容易にクラックされる場合、それはユーザーアカウントやサービスアカウントに弱いパスワードが設定されていることを示唆します。特にサービスアカウントのパスワードが侵害されると、広範囲な権限昇格につながる可能性があります。
- 事前認証の重要性: AS-REP Roastingが可能になるのは、ユーザーアカウントでKerberos事前認証が無効化されている場合です。特別な理由がない限り、事前認証は有効にしておくべきです。
- 強力な暗号化アルゴリズムの使用: Kerberosでは、RC4-HMAC (etype 23) だけでなく、AES128-CTS-HMAC-SHA1-96 (etype 17) や AES256-CTS-HMAC-SHA1-96 (etype 18) のようなより強力な暗号化タイプも利用可能です。可能であれば、より新しい、強力な暗号化タイプを使用するようにKerberos環境を設定することが推奨されます。John the Ripperもこれらの新しいetypeに対応しています。
- 定期的なパスワード監査:
krb2john
のようなツールを(許可を得て)使用して定期的にパスワード強度を監査し、弱いパスワードが使用されていないか確認することが重要です。 - 監視と検出: 大量のAS-REPやTGS-REPリクエスト、特に失敗した認証試行や異常なSPNへのリクエストは、攻撃の兆候である可能性があります。セキュリティ情報イベント管理(SIEM)システムなどでこれらのイベントを監視し、アラートを設定することが有効です。
krb2john
は、Kerberos認証のセキュリティ体制を評価するための有用なツールですが、その利用には責任が伴います。得られた知見は、組織のセキュリティ強化に役立てるべきです。🛡️
参考情報
-
John the Ripper official website: John the Ripperに関する公式情報、ダウンロード、ドキュメントなど。
https://www.openwall.com/john/ -
John the Ripper Community Wiki (GitHub): Jumboバージョンの情報、使い方、対応フォーマットなど。
https://github.com/openwall/john-packages/blob/master/doc/README.md (内容はGitHubリポジトリのドキュメントを参照するのがより確実です) -
krb2john.py ソースコード (GitHub): スクリプト自体の実装を確認したい場合。
https://github.com/openwall/john/blob/bleeding-jumbo/run/krb2john.py
コメント