Kerberos認証の基礎から運用まで徹底解説:構成要素・フロー・セキュリティ対策と実装のベストプラクティス

イントロダクション — ケルベロス認証とは何か

ケルベロス(Kerberos)は、ネットワーク上で安全にユーザー認証を行うためのチャレンジ/レスポンス型のプロトコルです。MIT が開発し、現在はRFC 4120で規格化された「Kerberos V5」が事実上の標準になっています。主に「一度のログオンで複数のサービスにアクセスできる(SSO: Single Sign-On)」ことを目的とし、対称鍵暗号とチケット(ticket)を用いることでパスワードを直接送信せずに認証を実現します。

基本コンポーネントと用語

  • KDC(Key Distribution Center):認証を行う中央サーバ。Authentication Service(AS)とTicket Granting Service(TGS)を包含する。
  • AS(Authentication Service):ユーザーの初回認証を担当し、TGT(Ticket Granting Ticket)を発行する。
  • TGS(Ticket Granting Service):TGT に基づいて各サービス向けのサービスチケットを発行する。
  • TGT(Ticket Granting Ticket):TGS にアクセスするための「チケット」。通常は長めの有効期限を持つ。
  • Service Ticket:個々のサービス(ファイルサーバ、HTTPサービス等)にアクセスするためのチケット。
  • Keytab:サービスが自分の鍵(長期鍵)を保持するためのファイル。サービス側がチケットを検証するために使用。
  • SPN(Service Principal Name):サービスを識別する一意の名前(例: HTTP/www.example.com)。Windows の Active Directory で重要。

プロトコルフロー(代表的なやり取り)

典型的なKerberos認証の流れは以下の通りです(簡略化):

  • 1) クライアント → AS: AS-REQ(ユーザー名を送る。事前認証が有効なら暗号化されたタイムスタンプ等を添付)
  • 2) AS → クライアント: AS-REP(クライアントの長期鍵で復号する部分と、TGT を含む)
  • 3) クライアントはTGTを保持し、サービスにアクセスする際に TGS に対して TGS-REQ を送る(TGT を添付)
  • 4) TGS → クライアント: TGS-REP(対象サービス用のサービスチケットを返す)
  • 5) クライアント → サービス: AP-REQ(サービスチケットを提示して接続)
  • 6) サービス → クライアント: AP-REP(必要に応じて相互認証のレスポンス)

上記の間でやり取りされるチケットやメッセージは対称鍵暗号で保護され、KDC は各主体の長期鍵(ユーザーならパスワード由来の鍵、サービスなら keytab の鍵)を知っています。

暗号・鍵管理・時刻の役割

Kerberos は基本的に対称鍵暗号を使います。ユーザーの初回認証はパスワード(またはその派生鍵)に依存するため、ユーザーパスワードの強度がセキュリティ上重要です。さらに、チケットにはタイムスタンプと有効期限が含まれ、再生攻撃(replay attack)を防ぎます。したがって、クライアントとKDCの間で厳密な時刻同期(通常は数分以内の誤差許容)が必要です(NTP の導入が一般的)。

相互認証とSSO

Kerberos の利点の一つは相互認証(mutual authentication)をサポートする点です。クライアントはサービスの正当性を検証でき、サービス側もクライアントの正当性を検証します。また、TGT を用いることで一度のログオンで複数サービスに対してチケットを取り直すことなくアクセスできるため、SSO に適しています。

実装と運用上のポイント(Active Directory を含む)

  • Active Directory(AD)は Kerberos を認証基盤として採用している。ドメインコントローラが KDC の役割を果たす。
  • Windows 特有の要素として PAC(Privilege Attribute Certificate)があり、チケット内にユーザーのグループ情報などが含まれる。サービス側(例:ファイルサーバ)は PAC を検証してアクセス制御に用いる。
  • krbtgt アカウント:AD の内部で TGT を暗号化するために使われる特殊なアカウント。これのハッシュが漏れると「Golden Ticket」攻撃に繋がる。
  • SPN の管理:サービスごとに適切な SPN を登録しておくことが重要。重複した SPN は認証不具合を招く。

よくある障害とトラブルシューティング

  • 時刻ずれ(Clock skew):NTP が設定されていないと AS-REQ/REP が拒否される。
  • SPN の不整合:サービス認証に失敗する場合、setspn の確認・修正が必要。
  • keytab のミスマッチ:サービスの keytab が正しい鍵を持っていないとチケット検証に失敗する。
  • プリオース(pre-auth)未対応:古いクライアントや設定によっては事前認証(pre-auth)が無効で脆弱性を招く可能性あり。
  • チケット期限:短いチケットやポリシーで早期切断される場合にはチケットの有効期限と renewable 設定を確認。

攻撃手法とリスク(代表例)

  • Kerberoasting:サービスアカウントのサービスチケット(TGS)を取得してオフラインでパスワードを総当たりする攻撃。サービス側が弱いパスワードであると危険。
  • Golden Ticket:krbtgt アカウントの長期鍵が窃取されると、任意の TGT を偽造してあらゆるサービスへアクセスできるようになる深刻な攻撃。
  • Silver Ticket:特定サービスの鍵(service account の鍵)が入手されると、そのサービス向けのチケットを偽造できる。
  • リプレイ・中間者攻撃:適切なタイムスタンプやセッションキーの検証が無い実装だとリスクになる。

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

  • 強力なパスワード/長期鍵と AES 等のモダンな暗号の利用(RC4 の利用は避ける)
  • krbtgt のローテーション(定期的なパスワード変更)と最小権限の運用
  • SPN 管理の徹底と不要なサービスアカウントの削除
  • 監視:異常なチケット発行や長期有効な TGT の使用、異常なサービスチケット要求をログで検知する
  • NTP による時刻同期、プリオース(pre-auth)を有効にする
  • PAC の検証や RBCD(Resource-Based Constrained Delegation)など最新の委任機構の理解と適用

運用・検証ツール

  • kinit / klist / kvno / ktutil(MIT Kerberos): チケット取得・確認・keytab 操作
  • Windows の klist、setspn、ktpass: SPN や keytab の管理
  • Wireshark:Kerberos パケットのキャプチャと解析(ただし暗号化により中身は見えないことが多い)
  • セキュリティツール(例:Mimikatz 等)は攻撃検証や侵入テストに使われるが、使用は適切な許可の下でのみ行うこと

まとめ

Kerberos はSSOや相互認証を実現する強力なプロトコルであり、企業内認証の中核をなしています。ただし、その安全性は実装・運用次第で左右されます。時刻同期、鍵管理(keytab/krbtgt)、SPN の適切な管理、最新暗号の利用、監視体制の整備が重要です。攻撃手法(Kerberoasting、Golden/Silver Ticket 等)を理解し、対策を講じておくことが実運用における必須事項です。

参考文献