Kerberos攻撃: Golden TicketとSilver Ticket

Tech

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

Kerberos攻撃: Golden TicketとSilver Ticket

Kerberosは、Active Directory (AD) 環境で広く利用される認証プロトコルであり、シングルサインオンを実現するために不可欠です。しかし、その信頼性を逆手に取った「Golden Ticket」と「Silver Ticket」という二つの強力な攻撃手法が存在します。これらの攻撃は、一度ドメイン環境に侵入した攻撃者が特権を永続化させ、ドメイン内のあらゆるリソースへのアクセスを可能にする点で極めて危険です。本記事では、これらの攻撃のメカニズム、具体的な攻撃シナリオ、そしてそれらを検出・緩和するための対策を実務的な視点から解説します。

脅威モデル

Kerberos攻撃、特にGolden TicketとSilver Ticketは、一般的に「初期侵入後の永続化および特権昇格」フェーズで用いられます。

  • 攻撃者の目的:

    • 永続化: ドメインコントローラー (DC) のパスワードが変更されても、またはアカウントがロックアウトされても、持続的にドメイン内のリソースへのアクセスを維持する。

    • 特権昇格: ドメイン管理者権限を持たない状態から、事実上のドメイン管理者権限を獲得し、任意のサービスやシステムへアクセスする。

  • 攻撃者の前提条件:

    • Golden Ticket: ドメインコントローラーが侵害され、krbtgtアカウントのNTLMハッシュが窃取されていること。これにより、ドメインの信頼の根幹が揺らぎます。

    • Silver Ticket: 特定のサービスアカウント(またはマシンアカウント)のNTLMハッシュが窃取されていること。

    • いずれの場合も、攻撃者は少なくとも何らかの形でドメイン内への侵入を果たし、管理者権限を奪取している状況が前提となります。

  • 影響範囲:

    • Golden Ticket: ドメイン全体への完全なアクセス権と永続的な制御。

    • Silver Ticket: 特定のサービス(ファイル共有、LDAP、HTTPなど)への偽装アクセスと、そのサービスに対する永続的な制御。

攻撃シナリオ

Kerberos認証は、Ticket Granting Ticket (TGT) と Ticket Granting Service (TGS) の二種類のチケットを使用します。攻撃者はこれらのチケットを偽造することで、認証プロセスをバイパスします。

1. Golden Ticket攻撃

Golden Ticket攻撃は、Kerberos Key Distribution Center (KDC) の中核であるkrbtgtアカウントのNTLMハッシュを悪用します。このハッシュは、ドメイン内のすべてのKerberosチケットの署名に使用される「マスターキー」のようなものです。

  1. 前提: 攻撃者はドメインコントローラーを侵害し、krbtgtアカウントのNTLMハッシュを窃取します。通常、これはMimikatzのようなツールでメモリから抽出されます。

    • 窃取される情報: ドメイン名、ドメインSID、krbtgtのNTLMハッシュ。
  2. 偽造TGTの生成: 窃取した情報を用いて、攻撃者はMimikatzなどのツールで任意のユーザー(例: Administrator)と任意のSID(例: S-1-5-21-XXX-512 ドメイン管理者グループ)を持つ偽造TGTを生成します。

    • Mimikatzコマンド(例):

      # 危険なコマンド例。本番環境での実行は厳禁。
      
      
      # kerberos::golden /user:eviluser /domain:contoso.com /sid:S-1-5-21-2365171739-123456789-987654321 /krbtgt:b7f202279589d31a0e0811b712345678 /id:500 /ptt
      
      
      # /user: 偽装するユーザー名 (存在しなくてもよい)
      
      
      # /domain: 対象ドメイン名
      
      
      # /sid: 対象ドメインのSID
      
      
      # /krbtgt: krbtgtアカウントのNTLMハッシュ(最も重要)
      
      
      # /id: 偽装するユーザーのRID (通常はAdministratorの500)
      
      
      # /ptt: Pass The Ticket。生成したチケットを現在のセッションに注入
      
      • 入力: 偽装するユーザー名、ドメイン名、ドメインSID、krbtgtのNTLMハッシュ、偽装するユーザーのRID。

      • 出力: 偽造されたTGTが現在のセッションにロードされ、任意のKerberosサービスへのアクセスが可能になる。

      • 前提: krbtgtハッシュの正確な情報。

      • 計算量/メモリ: ハッシュの生成とチケットの作成はO(1)の低コスト。

  3. 任意のリソースへのアクセス: この偽造されたTGTを使用すると、KDCの認証プロセスを完全にバイパスし、ドメイン内のあらゆるサービスやリソース(ファイルサーバー、Exchange、SQL Serverなど)に、偽装された特権ユーザーとしてアクセスできます。このTGTは通常、非常に長い有効期限(例: 10年)が設定され、永続化が図られます。

2. Silver Ticket攻撃

Silver Ticket攻撃は、特定のサービスアカウントのNTLMハッシュを悪用します。この攻撃はKDCを介さず、サービスに直接TGSを提示します。

  1. 前提: 攻撃者は特定のサービスを実行するアカウント(例: SQLService)またはマシンアカウントのNTLMハッシュを窃取します。これは、標的サービスが稼働するサーバーを侵害することで可能になります。

    • 窃取される情報: ドメイン名、ドメインSID、対象サービスアカウントのNTLMハッシュ、対象サービスプリンシパル名 (SPN)。
  2. 偽造TGSの生成: 窃取した情報を用いて、攻撃者はMimikatzなどのツールで特定のサービスに対する偽造TGSを生成します。

    • Mimikatzコマンド(例):

      # 危険なコマンド例。本番環境での実行は厳禁。
      
      
      # kerberos::forge /user:eviluser /domain:contoso.com /sid:S-1-5-21-2365171739-123456789-987654321 /sids:S-1-5-21-2365171739-123456789-987654321-512 /rc4:service_account_NTLM_HASH /service:cifs /target:fileserver.contoso.com /ptt
      
      
      # /user: 偽装するユーザー名 (存在しなくてもよい)
      
      
      # /domain: 対象ドメイン名
      
      
      # /sid: 対象ドメインのSID
      
      
      # /sids: 偽装するSID (例: Domain AdminsのSID)
      
      
      # /rc4: サービスアカウントのNTLMハッシュ(最も重要)
      
      
      # /service: 対象サービスの種類 (例: cifs, ldap, http, mssql)
      
      
      # /target: 対象サービスが稼働するサーバーのFQDN
      
      
      # /ptt: Pass The Ticket
      
      • 入力: 偽装するユーザー名、ドメイン名、ドメインSID、偽装するSID、サービスアカウントのNTLMハッシュ、対象サービスの種類、対象サーバーのFQDN。

      • 出力: 偽造されたTGSが現在のセッションにロードされ、特定のサービスへのアクセスが可能になる。

      • 前提: サービスアカウントハッシュ、SPNの正確な情報。

      • 計算量/メモリ: ハッシュの生成とチケットの作成はO(1)の低コスト。

  3. 特定のサービスへのアクセス: この偽造されたTGSを使用すると、KDCを介さず、直接ターゲットのサービスにアクセスできます。例えば、cifsサービスに対して偽造TGSを作成すれば、そのサーバー上の共有フォルダにアクセスできます。これは、Golden Ticketよりは限定的ですが、特定のシステムに対する永続化と特権昇格に有効です。

攻撃チェーンの可視化

graph TD
    A["初期侵入"] --> B{"権限昇格"};
    B -- ドメイン管理者取得 --> C["DC侵害"];
    C -- LSA/メモリダンプ --> D_krbtgt["krbtgt NTLMハッシュ窃取"];
    D_krbtgt -- Mimikatzなど --> E_golden["Golden Ticket生成"];
    E_golden -- KDCバイパス --> F_golden["ドメイン全体への永続的アクセス"];

    B -- サービスサーバー侵害 --> G_service["サービスアカウント NTLMハッシュ窃取"];
    G_service -- Mimikatzなど --> H_silver["Silver Ticket生成"];
    H_silver -- KDCバイパス --> I_silver["特定サービスへの永続的アクセス"];

    F_golden --> J["完全なドメイン制御"];
    I_silver --> K["特定サービス制御"];
  • ノードの説明:

    • A[初期侵入]: 脆弱性悪用、フィッシングなどによる初期アクセス。

    • B{権限昇格}: システム管理者権限への昇格。

    • C[DC侵害]: ドメインコントローラーへの不正アクセスと制御。

    • D_krbtgt[krbtgt NTLMハッシュ窃取]: krbtgtアカウントのパスワードハッシュをメモリなどから抽出。

    • E_golden[Golden Ticket生成]: 抽出したハッシュとMimikatzなどで偽造TGTを作成。

    • F_golden[ドメイン全体への永続的アクセス]: 偽造TGTを利用して、KDCを経由せずドメイン内の任意リソースへアクセス。

    • G_service[サービスアカウント NTLMハash窃取]: 特定のサービスを実行するアカウントのパスワードハッシュを抽出。

    • H_silver[Silver Ticket生成]: 抽出したハッシュとMimikatzなどで偽造TGSを作成。

    • I_silver[特定サービスへの永続的アクセス]: 偽造TGSを利用して、KDCを経由せず特定のサービスへアクセス。

    • J[完全なドメイン制御]: Golden Ticketにより実現される、ドメインの完全な支配。

    • K[特定サービス制御]: Silver Ticketにより実現される、特定のサービスの支配。

検出と緩和

これらの強力な攻撃から身を守るためには、多層的なアプローチが必要です。

検出

  1. イベントログ監視:

    • イベントID 4768 (Kerberos認証チケット要求に成功しました): TGT要求。Golden TicketはKDCをバイパスするため、このログは生成されにくい、あるいは不審なソースからの要求として記録される可能性があります。異常な発行元、異常な有効期限のTGTを監視します。

    • イベントID 4769 (Kerberosサービスチケット要求に成功しました): TGS要求。Silver TicketはKDCをバイパスするため、このログは生成されません。このログが記録されずにサービスへのアクセスが成功している場合は不審です。

    • イベントID 4624 (ログオン成功): 不審なログオン試行を監視します。特に、Golden TicketやSilver Ticketによって偽装されたアカウントが、通常のアクセス元とは異なるIPアドレスからログオンしている場合や、通常アクセスしないリソースにアクセスしている場合。

    • イベントID 4771/4776 (Kerberos認証サービス要求の失敗/パススルー認証の成功/失敗): 認証失敗ログの急増や、異常なパススルー認証を監視。

    • Mimikatz等のツール実行ログ: Sysmonなどを利用して、LSASSプロセスへのアクセスや Mimikatzに関連するプロセスの実行を監視します。

  2. SIEM (Security Information and Event Management) による異常検知:

    • 異常なTGT発行元のKDC: Golden TicketはKDCの署名なしに作成されるため、KDCからの正当な発行がないまま認証が成功しているように見える場合があります。

    • 不自然なユーザー名/SID: 存在しないユーザー名や、特権を持つユーザーグループに直接紐付けられたSIDを持つチケットの利用。

    • 異常に長いTGT/TGS有効期限: 通常のチケットは数時間から1日の有効期限ですが、攻撃者は永続化のために数年を設定することがあります。

    • ハニーアカウント/ハニーサービス: 誰もアクセスしないはずのダミーのアカウントやサービスを設定し、それらへのアクセスがあれば即座にアラートを上げる。

  3. Active Directory Defender for Identity (Microsoft Defender for Identity): これらの攻撃を検知する専用のセンサーが提供されており、疑わしいKerberosチケットの使用や、特権アカウントの異常な動作を検知できます。

緩和

  1. krbtgtアカウントのパスワードローテーション:

    • Golden Ticket攻撃に対する最も効果的な対策の一つです。krbtgtアカウントのパスワードが変更されると、古いハッシュで署名されたGolden Ticketは無効になります。

    • 推奨頻度: 少なくとも年2回。攻撃が確認された場合は、直ちに2回ローテーションが必要です(1回では古いハッシュが残る可能性があるため)。

    • PowerShellコマンド(例):

      # krbtgtアカウントのパスワードをローテーションするスクリプトの一部
      
      
      # このスクリプトは非常にデリケートであり、事前に十分なテストが必要です。
      
      
      # 参照: https://learn.microsoft.com/ja-jp/windows-server/identity/ad-ds/security/krbtgt-password-reset-script
      
      # 1. ドメインコントローラーのリストを取得
      
      $DCs = Get-ADDomainController -Filter *
      
      # 2. krbtgtアカウントのパスワードを1回目リセット
      
      
      # この操作はすべてのDCにレプリケートされ、既存のTGTを無効化し始める
      
      
      # 必ずドメインの機能レベルに応じて慎重に実行すること
      
      Set-ADUser krbtgt -ChangePassword
      
      # 3. レプリケーションが完了するまで待機(環境によるが数時間〜24時間)
      
      Start-Sleep -Seconds (24 * 60 * 60) # 例: 24時間待機
      
      # 4. krbtgtアカウントのパスワードを2回目リセット
      
      Set-ADUser krbtgt -ChangePassword
      
      # 5. 再度レプリケーションが完了するまで待機
      
      Start-Sleep -Seconds (24 * 60 * 60) # 例: 24時間待機
      
      Write-Host "krbtgt password rotation completed."
      
      • 注意点: krbtgtパスワードのリセットは、既存のすべてのKerberosチケットを無効にするため、大規模な環境ではサービスの中断を引き起こす可能性があります。計画的な実施と徹底的な事前テストが不可欠です。
  2. サービスアカウントのパスワード管理とGMSAの利用:

    • Silver Ticket攻撃を防ぐには、サービスアカウントのパスワード(ハッシュ)を保護することが重要です。

    • GMSA (Group Managed Service Accounts): パスワードをシステムが自動管理・ローテーションし、管理者がパスワードを知る必要がないため、ハッシュ窃取のリスクを大幅に軽減します。

    • GMSA作成コマンド(例):

      # GMSAの作成とホストへの割り当て
      
      
      # 前提: Active Directoryの機能レベルがWindows Server 2012以降。
      
      
      # ドメインのKDSルートキーが存在すること(Add-KdsRootKey -EffectiveImmediately)
      
      # KDSルートキーの追加 (一度だけ実行)
      
      
      # Add-KdsRootKey -EffectiveImmediately
      
      # 新しいGMSAを作成
      
      New-ADServiceAccount -Name "MyGMSAService" `
                           -DNSHostName "MyGMSAService.contoso.com" `
                           -PrincipalsAllowedToRetrieveManagedPassword "SQLServersGroup" `
                           -ServicePrincipalNames "MSSQLSvc/sqlserver.contoso.com:1433"
      
      # GMSAをサービスを実行するサーバーにインストール
      
      
      # (対象サーバー上で実行)
      
      
      # Install-ADServiceAccount -Identity MyGMSAService
      
      # サービス構成時にこのGMSAアカウントを選択
      
      Write-Host "GMSA 'MyGMSAService' created. Remember to install it on the target server and configure services to use it."
      
      • 入力: GMSA名、DNSホスト名、パスワード取得を許可するセキュリティグループ、SPN。

      • 出力: GMSAオブジェクトがADに作成され、指定されたサーバーがパスワードを取得できるようになる。

      • 前提: Windows Server 2012以降のドメイン機能レベル、KDSルートキーの存在。

      • 計算量/メモリ: ADオブジェクト作成の標準的なコスト。

  3. Credential Guardの有効化:

    • Windows 10/Server 2016以降で利用可能なセキュリティ機能。LSA (Local Security Authority) から分離された仮想化ベースのセキュリティ環境にNTLMハッシュやKerberosチケットを保存することで、Mimikatzのようなツールによるハッシュ窃取を防ぎます [1]。

    • グループポリシーまたはレジストリで有効化できます。

  4. Active Directoryのセキュリティ強化:

    • 最小権限の原則: ドメイン管理者権限を持つアカウントの数を最小限に抑え、通常の運用では標準ユーザーアカウントを使用する。

    • ティアモデル: ドメインコントローラーへのアクセスを厳格に制限し、管理者のアクセス元を限定する。

    • AD監査ポリシー: 詳細な監査を有効にし、重要なイベントが記録されるようにする。

    • 定期的な脆弱性診断とペネトレーションテスト: 潜在的な侵入経路を特定し、修正する。

  5. Kerberos委任の見直し: 信頼されていない委任(Unconstrained Delegation)はKerberosチケット窃取のリスクを高めるため、リソースベースの委任(Resource-based Constrained Delegation)など、より安全な委任方式への移行を検討します。

運用対策

鍵/秘匿情報の取り扱い

  • krbtgtアカウントのNTLMハッシュは、ドメイン全体を制御できる「マスターキー」であるため、ドメインコントローラーの物理的・論理的セキュリティを最優先します。

  • ドメインコントローラーのメモリダンプは厳重に保護し、不正なアクセスを監視します。

  • サービスアカウントのパスワードは、可能な限りGMSAで管理し、管理者が直接パスワードを知らない状態を維持します。やむを得ず手動で管理する場合は、厳格なパスワードポリシー(複雑性、長さ、ローテーション)を適用し、シークレット管理システムで安全に保管します。

ローテーション

  • krbtgtパスワード: 年2回以上の定期的なローテーションを運用プロセスに組み込みます。インシデント発生時は直ちに2回ローテーションします。

  • サービスアカウントパスワード: GMSAへの移行が難しい場合でも、定期的なパスワードローテーション計画を立て、適用します。

最小権限

  • ドメイン管理者アカウントの利用は、緊急時や特定のメンテナンス作業に限定し、日常業務では標準ユーザーまたは権限の限定されたアカウントを使用します。

  • サービスアカウントには、そのサービスを実行するために必要最小限の権限のみを付与します。

監査

  • すべてのドメインコントローラー、メンバーサーバー、ワークステーションで適切なセキュリティイベントログを有効化し、SIEMシステムに集約して一元的に監視します。

  • 特権アカウントのログオン/ログオフ、アカウント変更、グループメンバーシップ変更、Kerberos認証関連イベントなどを重点的に監視します。

現場の落とし穴

  • 誤検知とアラート疲労: SIEMのルールが不適切だと、大量の誤検知が発生し、本当に重要なアラートを見逃す可能性があります。具体的な攻撃パターンに基づいたチューニングが必要です。

  • 検出遅延: 攻撃者は巧妙に痕跡を隠すため、検知に時間がかかり、被害が拡大する可能性があります。リアルタイムに近い監視と、AI/機械学習を活用した異常検知の導入が有効です。

  • パスワードローテーションの運用負荷と可用性トレードオフ: krbtgtパスワードのローテーションは非常に強力な対策ですが、適切に行わないと大規模な認証障害を引き起こす可能性があります。綿密な計画、検証、段階的な実施が不可欠です。

  • レガシーシステムとの互換性: Credential GuardやGMSAは新しいOSバージョンでのみサポートされるため、レガシーなWindows Server環境や古いアプリケーションでは導入が困難な場合があります。

  • Credential Guardの誤解: Credential Guardはオフラインでのハッシュ窃取(例: ディスクイメージから)には効果がないこと、またHyper-Vなどの仮想化技術が必要であることを理解しておく必要があります。

まとめ

Golden TicketとSilver Ticketは、Active Directory環境における永続化と特権昇格を可能にする非常に危険なKerberos攻撃手法です。これらの攻撃は、ドメインコントローラーやサービスアカウントのNTLMハッシュが窃取されることで成立します。

これらの脅威から組織を守るためには、krbtgtパスワードの定期的な2回ローテーション、GMSAの活用、Credential Guardの導入といった技術的対策が不可欠です。また、イベントログの継続的な監視とSIEMによる異常検知、最小権限の原則の徹底、そして鍵/秘匿情報の厳重な管理を含む強固な運用体制が求められます。これらの多層的な防御策を講じることで、Kerberos攻撃のリスクを大幅に低減し、Active Directory環境のセキュリティを堅牢に保つことができます。


[1] Microsoft Learn. “Credential Guard の概要”. 2023年10月26日. (https://learn.microsoft.com/ja-jp/windows-server/security/credentials-protection-and-management/credential-guard-overview)

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

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