Kerberosの中核・KDCとは?仕組み・脅威・運用・対策を徹底解説

Key Distribution Center(KDC)とは

Key Distribution Center(KDC)は、Kerberos 認証プロトコルにおける中心的なコンポーネントで、クライアントとサービスの間で共有される暗号鍵(セッションキー)や「チケット」を発行・管理する役割を担います。KDC は認証の起点であり、ユーザーやサービスのアイデンティティを検証し、安全に通信するための鍵素材を配布することでシングルサインオン(SSO)を実現します。

KDC の基本機能とコンポーネント

  • 認証サーバ(AS: Authentication Service) — 初回認証(AS-REQ/AS-REP)を担当します。ユーザーが自分のパスワードに基づく鍵で認証を受け、Ticket-Granting Ticket(TGT)を受け取ります。

  • チケット付与サーバ(TGS: Ticket Granting Service) — TGT を用いて、特定のサービスにアクセスするためのサービスチケットを発行します(TGS-REQ/TGS-REP)。

  • KDC データベース — プリンシパル(ユーザー/サービス)の秘密鍵や属性(チケット寿命、転送可能か等)を格納します。Active Directory 環境ではドメインコントローラーがこれに相当します。

  • 再生防止/セッション管理 — チケットの有効期限、再生キャッシュ、チケット更新・再利用の管理を行います。

典型的な認証フロー(概要)

  • AS-REQ/AS-REP:クライアントが KDC の AS にユーザー名(プリンシパル)を送る。KDC はユーザーの鍵(パスワード派生鍵)で応答メッセージを暗号化して返し、クライアントはそれを復号して TGT とセッションキーを取得する(事前認証が有効な場合はタイムスタンプ暗号化などの追加処理)。

  • TGS-REQ/TGS-REP:クライアントは TGT を提示して特定サービス用のチケットを要求。KDC(TGS)はサービスの鍵で暗号化したサービスチケットと、クライアントとサービス間で使うセッションキーを返す。

  • AP-REQ/AP-REP:クライアントはサービスに対してサービスチケットを提示してアクセスを開始。サービスはチケットを検証して相互認証(必要なら)を行う。

暗号と実装上の要点

KDC は主に対称鍵暗号(ユーザーやサービスごとの秘密鍵、チケット内のセッションキー)を利用します。Kerberos v5(RFC 4120)以降では AES 系のエンクリプションが標準的で、古い DES 系はセキュリティ上の理由で廃止されるべきです(RFC 3962 等)。また、PKINIT(RFC 4556)を使うことで公開鍵基盤(PKI)を用いた事前認証が可能になり、パスワード由来鍵のリスクを低減できます。

実装例と運用面

  • MIT Kerberos / Heimdal — オープンソース実装で Unix/Linux 環境で広く利用されています。設定ファイル(krb5.conf)、keytab、kadm5 ACL や KDC プロセスの管理が重要です。

  • Active Directory(Microsoft の KDC) — 各ドメインコントローラーが KDC 機能を提供します。AD 環境では krbtgt アカウントが TGT を暗号化する鍵を持っており、これの管理(定期的なローテーションなど)がセキュリティ上重要です。

  • 可用性 — KDC は認証の要であるため、冗長化が必要です。DNS SRV レコードによる複数 KDC の公開、Active Directory の DC レプリカ、KDC プロキシ等で可用性と負荷分散を図ります。

代表的な脅威と脆弱性

  • Golden Ticket(ゴールデンチケット)攻撃 — 攻撃者が krbtgt の鍵(Windows では該当アカウントのハッシュ)を入手すると、任意の TGT を偽造してドメイン内を横移動できます。対策として krbtgt パスワードのローテーションや侵害検出が有効です。

  • Silver Ticket(シルバーチケット) — 特定サービスアカウントのサービスキーを盗むことで、そのサービスへの偽チケットを作成できる攻撃。サービスアカウントの権限最小化やキー管理が重要です。

  • パスワード攻撃/事前認証の欠如 — 事前認証(PA-ENC-TIMESTAMP 等)を無効にすると、オフラインでパスワード推測が可能になる恐れがあります。

  • 古い暗号方式の使用 — DES や RC4 等の弱いエンクリプトタイプはチケットの解読や偽造を容易にします。AES 等の強力なアルゴリズムを使用してください。

  • 時刻同期の欠如 — Kerberos はタイムスタンプに依存するため NTP による正確な時刻同期が必須です。時刻差が大きいと認証ができなくなります。

対策とベストプラクティス

  • 強力な暗号と設定 — AES 系エンクリプトタイプを有効化し、DES/RC4 等は無効化する。チケット寿命を適切に短く設定する(短めの TGT 有効期限、更新は制御)。

  • 事前認証と PKINIT の活用 — PA-ENC-TIMESTAMP による事前認証を有効にし、可能なら PKI を使った PKINIT を導入して盗聴・オフライン辞書攻撃を防ぐ。

  • krbtgt/マスターキーの管理 — Active Directory 環境では krbtgt アカウントのパスワードローテーションを定期的に行う(ローテーションポリシーの策定)。また、サービスアカウントのキーは最小権限で管理する。

  • 監査と検知 — KDC ログ(AS-REQ/TGS-REQ の異常、大量失敗や短時間での大量 TGT 発行)を収集し SIEM で解析する。Golden/Silver チケット作成を示す異常なログも監視対象。

  • 可用性の確保と隔離 — KDC(およびそのデータベース)を厳重にアクセス制御し、管理用ネットワークを分離。冗長構成で障害耐性を持たせる。

  • 時刻同期管理 — 全ノードで NTP を正しく設定し、許容スキューを小さく保つ。

運用時の具体的なチェック項目

  • KDC のログにおける大量な AS-REQ/TGS-REQ のエラーや、サービスチケット発行の異常パターンを定期チェックする。

  • keytab ファイルの権限と所在を確認し、不必要な配布を防ぐ。

  • krbtgt(あるいはマスター鍵)ローテーションを計画的に実施し、その影響(キャッシュや既存チケット)を考慮する。

  • 古い/脆弱な enctypes が無効化されているかを確認する。

まとめ

KDC は Kerberos 認証の中核であり、正しく設計・運用されることで安全で利便性の高い認証基盤を提供します。一方で KDC に対する攻撃や設定ミスは致命的な影響を及ぼす可能性があるため、暗号設定、鍵管理、ログ監査、可用性確保、時刻同期といった運用面の対策を包括的に実施することが重要です。最新の RFC や実装ドキュメント、ベンダーガイドラインに従い、定期的な評価と改善を行ってください。

参考文献