krb2johnの使い方:Kerberosチケットからパスワードハッシュを抽出する🔑

セキュリティツール

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-REPTGS-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):
    sudo apt update
    sudo apt install john
    これにより、ディストリビューションが提供するJohn the Ripper (多くの場合Jumboバージョン) がインストールされます。「2john」スクリプト群は、通常 /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認証のセキュリティ体制を評価するための有用なツールですが、その利用には責任が伴います。得られた知見は、組織のセキュリティ強化に役立てるべきです。🛡️

参考情報

コメント

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