Kerberos認証

に公開

Kerberos方式

レルムと呼ばれる範囲内において、1台の全体を管理するサーバーで、範囲内に存在するすべてのリソース間の認証を行います

レルム

  • 同一の認証基盤とポリシーが適用される認証の範囲を示す論理的な領域です
  • 主にKerberos認証やHTTP認証の文脈で用いられる用語です
  • レルムは認証の論理的単位で、ドメインは管理・運用の単位です。多くの場合は一致するが、概念上は異なります

構成要素

要素 役割
クライアント 利用者端末
KDC(Key Distribution Center) ASとTGSを合わせた「チケット発行所」の総称
├ AS(Authentication Server) ユーザーが本人かを確認し、最初のチケット(TGT)を出す
└ TGS
(Ticket Granting Server)
TGTを見て、特定のサービス(SS)用のチケットを出す
ST(Service Ticket) /
SS(Service Server)
ファイルサーバやメールサーバなど、実際に使いたいサービス

認証の流れ

初期認証(AS)

  • 利用者がログイン
  • ASが利用者を認証
  • TGT(Ticket Granting Ticket)を発行

サービスチケット取得(TGS)

  • クライアントがTGTをTGSに提示
  • TGSが対象サービス用チケットを発行

サービス利用

  • クライアントがサービスチケットをサーバに提示
  • サーバが検証し、利用を許可

SPNEGO(Simple and Protected GSSAPI Negotiation Mechanism)

  • クライアントとサーバ間で、利用可能な認証方式を安全に交渉(ネゴシエーション)するための仕組みです
  • 認証方式そのものではなくて、「どの認証方式を使うか」を決めるための仕組みです
  • 動的に認証方式を選択できます

例えば、上のシーケンス図の5と6(AP-REQ,AP-REP)の通信では、相手のサーバが使用しているプロトコルに従うが、その部分を標準化したのがGSS-APIです
GSS-APIを利用すれば、Kereberos側のサーバーのプロトコルではなく、GSS-APIのプロトコルに従います。
そうすると、複数サービスがある場合に、サービスごとでプロトコルに対応する必要がなくなりました。

Kerberos認証に対する攻撃

Pass-the-Ticket

  • Kerberos認証で用いられるチケット(TGTやサービスチケット)を窃取し、そのチケットを再利用して正規利用者になりすます攻撃です
  • パスワードは不要です
  • 正規のKerberosプロトコルを正しく使っているように見えます
  • ログ上の判別が困難です

攻撃の仕組み

  1. 攻撃者が端末からTGTやサービスチケットを窃取
  2. 盗んだチケットを別セッションや別端末に注入(PASS)
  3. 正規利用者としてサービスにアクセス

対策

  • チケット有効期限の短縮
  • ログに不審なアクセスや不正な権限昇格の痕跡がないかを確認して、早期検知を狙います

Kerberoasting

  • サービスアカウントのパスワードをオフラインで解析(クラッキング)して、特権を得ることを目的にする攻撃です
  • TGSを暗号化しているパスワードは、どのユーザー(異なるTGT)が要求しても、全く同じものになります

攻撃の仕組み

  1. 攻撃者がTGSを要求
  2. TGSはサービスアカウントの秘密鍵(=パスワード由来)で暗号化されて発行
  3. 攻撃者がTGSを取得
  4. オフラインで辞書攻撃・総当たり攻撃
  5. サービスアカウントのパスワードを解読

特徴

  • ログイン失敗が発生しない
  • オフライン攻撃のため検知が困難
  • 高権限サービスアカウントが狙われやすい

対策

  • サービスアカウントに長く複雑なパスワード
  • 定期的なパスワード変更
  • gMSA(グループ管理サービスアカウント)の利用
  • SPNの棚卸し

gMSA(Group Managed Service Account)

Active Directoryがサービスアカウントのパスワードを自動管理する仕組みです

特徴

  • パスワードは ADが自動生成・定期変更により、パスワード漏えいリスク低減し、人が設定する弱いパスワードを排除します
  • 管理者でもパスワードを直接知る必要がありません
  • 複数サーバで同一サービスアカウントを安全に共有可能です
  • Kerberos認証に完全対応します
  • Kerberoasting耐性が高くなります

SPN(Service Principal Name)

  • Kerberosにおいてサービスを一意に識別するための名前です
  • クライアントがTGSを要求する際に使用されます

特徴

  • 「どのサービスにアクセスしたいか」をKerberosに伝える識別子です
  • SPNとサービスアカウントをひも付けることで、適切なサービスチケットが発行されます
  • SPNが設定されたアカウントはKerberoastingの対象です
  • 不要なSPNの放置はリスクになる原因です
  • SPNの重複設定は認証障害の原因です
GitHubで編集を提案

Discussion