Kerberos TGSの仕組みと防御戦略:チケット発行の流れからGolden/Silver Ticket、Kerberoastingまで

概要:Ticket Granting Service(TGS)とは何か

Ticket Granting Service(TGS)は、Kerberos認証プロトコルにおける中核的なコンポーネントで、ユーザーがネットワーク上の特定サービスにアクセスするための「サービスチケット」を発行する役割を担います。TGSは通常、KDC(Key Distribution Center)の一部として動作し、最初の認証(AS:Authentication Service)で発行されたTicket Granting Ticket(TGT)を用いて、クライアントが要求するサービスごとのチケットを発行します。

Kerberos全体の流れ(TGSの位置づけ)

  • 1) AS-REQ / AS-REP:クライアントがユーザー名をKDCのASに提示し、認証が成功するとKDCはTGTを発行(TGTはKDC内部の鍵で暗号化される)。
  • 2) TGS-REQ / TGS-REP:クライアントはTGTを持ってTGSに接近し、特定サービス(例:ファイルサーバやHTTPサービス)へのアクセスを要求。TGSはTGTを検証し、要求が妥当であればそのサービス用のサービスチケットを発行して返す。
  • 3) AP-REQ / AP-REP:クライアントは取得したサービスチケットをサービスに提示して接続を確立する。

TGSが行う技術的処理(詳細)

TGSの主な処理は下記の通りです。

  • 受信したTGTの復号・検証:TGTはKDC側の長期鍵(krbtgtアカウントに対応する鍵)で暗号化されています。TGSはこの鍵でTGTを復号し、チケット内部の情報(クライアント主体、セッションキー、発行時刻、期限など)を取り出します。
  • 認可チェック:チケット内の情報、認可ポリシー(アクセスコントロール、制限付きデリゲーションの設定、クライアントの所属レルムや経路情報)を参照して、要求が許可されるか判断します。
  • サービスチケット生成:サービス用のチケット(service ticket)を生成します。チケット本体はサービス側の長期鍵(サービスプリンシパルの鍵)で暗号化され、該当サービスのみが復号できるようになっています。加えて、クライアントとサービスが共有するセッションキーを生成し、クライアントにはそのセッションキーをTGTで使われたセッションキー等で暗号化して返します。
  • 返答(TGS-REP):クライアントはTGS-REPを受け取り、復号してサービスチケットとセッションキーを取り出し、以降のAP-REQでそれを用います。

チケットの構造と暗号化(RFC準拠)

Kerberos V5(RFC 4120)に基づくチケットは、以下のようなフィールドを含みます:クライアント/サービスのプリンシパル名、レルム、開始/終了時刻、再発行有効期限(renew-till)、チケットフラグ(forwardable, renewable, proxiable など)、送信元アドレス、暗号化されたセッションキーやオプション情報(例:Microsoft環境ではPAC:Privilege Attribute Certificateが含まれる)。チケット本体は受信側(KDCまたはサービス)の長期鍵で暗号化され、安全性を担保します。

Windows固有の拡張と注意点

  • PAC(Privilege Attribute Certificate):Microsoftの実装では、チケットにユーザーのグループ情報や権限情報を含めるPACが埋め込まれています。サービスはこのPACを参照してアクセス制御を行います。
  • krbtgtアカウント:KDCがTGTを暗号化するために使用するアカウント。krbtgtアカウントの秘密を侵害されると「Golden Ticket」攻撃が可能になります。
  • イベントログ:WindowsではTGSのリクエストに関するログ(例:イベントID 4769:Kerberos service ticket requested)が記録され、監査や検出に利用できます。

拡張機能とデリゲーション

KerberosにはS4U(Service for User)や制限付きデリゲーション(Constrained Delegation)など、サービス間の代理や委任を扱う拡張があります。S4U2self/S4U2proxyを使うと、サービスがユーザーになり代わって別のサービスのチケットを取得することが可能になりますが、設定ミスや過剰な委任設定は横移動や権限昇格のリスクを生みます。TGSはこれら委任要求の妥当性をチェックする役目も担います。

攻撃手法と脅威(TGSに関連する代表例)

  • Golden Ticket:KDCのkrbtgtアカウントの秘密が漏洩すると、攻撃者は任意のTGTを偽造できる。これによりTGSに対する要求で任意のサービスチケットを取得できる(事実上のドメイン支配)。
  • Silver Ticket:特定サービスの長期鍵(サービスアカウントのNTLM/パスワードハッシュ)を入手すると、サービスチケットを直接偽造し、TGSを経由せずにサービスにアクセスできる。
  • Kerberoasting:攻撃者がTGSに対して特定SPN(Service Principal Name)のサービスチケットを要求し、その応答で返るチケット(サービス鍵で暗号化された部分)をオフラインで総当たり解析してサービスアカウントのパスワードを割り出す手法。ここでTGSはチケットを発行する役割を果たすため、攻撃と密接に関係する。
  • Pass-the-Ticket:盗んだTGTやサービスチケットを使って別のホストやサービスへ横移動する手法。

検出と防御策

  • 最小特権と強力なパスワード:サービスアカウントの複雑なパスワード、管理アカウントの回転(krbtgtパスワードの定期ローテーション)を徹底する。
  • 暗号スイートの強制:RC4や古い暗号を無効化し、AESなど安全な暗号化方式を使用する。
  • デリゲーション管理:制限付きデリゲーションのみを利用し、不要な委任を無効化する。
  • ログ監視:Windowsのイベント(4768、4769など)やKerberos関連の異常なリクエストを監視して早期検出を行う。
  • Kerberoasting対策:サービスアカウントのパスワードを高強度にし、できればManaged Service AccountsやGroup Managed Service Accountsを利用する。

運用面の実践的アドバイス・トラブルシューティング

  • ツール:kinit、klist、kvno(UNIX系)、WindowsのklistやSetSPN、WiresharkのKerberosディセクタを使ってチケット発行の流れを確認する。
  • 時間同期:Kerberosは時刻差に敏感(デフォルトで5分)。NTPによる正確な時刻同期は必須。
  • チケットの有効期限と更新:renewableやforwardableフラグ、renew-tillの概念を理解して適切なライフサイクルを設計する。
  • クロスレルム:複数レルム間での信頼関係を設定する場合、トラストやtransitedフィールドの挙動を理解しておくこと。

まとめ

TGSはKerberos認証の“サービスチケット発行”を担う重要な役割を持ちます。プロトコルの正しい理解は単なる認証処理の把握だけでなく、Active Directory環境における脅威(Golden/Silver Ticket、Kerberoasting等)への対策設計にも直結します。適切な暗号設定、堅牢なサービスアカウント管理、デリゲーションの最小化や監査ログの活用がTGSを介した攻撃から環境を守る鍵となります。

参考文献