
Active Directory 証明書サービス (AD CS) を監査するための PowerShell ツールキット。
これは PKISolution の PSPKI ツールキット (Microsoft Public License) をベースに構築されています。このリポジトリには、PSGallery で入手可能なものよりも新しいバージョンの PSPKI が含まれています (PSPKI ディレクトリを参照)。Vadims Podans (PSPKI の作成者) 氏が、いくつかのバグの修正パッチを含むこのバージョンを快く提供してくださいました。
この README はあくまでも出発点です。完全な詳細と防御のガイダンスについては、「Certified Pre-Owned」ホワイトペーパーをご参照ください。
このモジュールには以下の主要な機能が含まれています。
警告: このコードはベータ版です。Invoke-PKIAudit はクエリするデータ量がごく限られているため、環境に影響を与えないと確信しています。Get-CertRequest については、一般的な CA サーバーのワークロードに対して十分なテストは行っていません。Get-CertRequest は CA のデータベースを直接クエリし、数千件の結果を処理する必要があるため、パフォーマンスに影響を与える可能性があります。
結果がない場合でも、環境が安全であるとは保証されません!!
また、当社の緩和策のアドバイスが環境を安全にしたり、運用を妨げないことを保証することはできません!!
お客様自身の責任で、Active Directory/PKI/アーキテクチャチームと相談し、環境に最適な緩和策を決定してください。
コードが壊れた場合、または何か見落としがあった場合は、Issue を送信するか、修正のプルリクエストをお送りください!
管理者特権の PowerShell プロンプト (PowerShell バージョン 5.1 以上) を使用して、Windows マシンに以下をインストールします。
* [PSPKI PowerShell モジュール](https://github.com/PKISolutions/PSPKI)。次のコマンドでインストールします:```
Install-Module -Name PSPKI
モジュールをダウンロードし、フォルダに展開してください。その後、以下のコマンドを使用してモジュールをインポートします:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File
Import-Module .\PSPKIAudit.psd1
# Auditing AD CS Misconfigurations
`Invoke-PKIAudit` を実行すると、現在のドメインのAD CSに対してすべての監査チェックが実行され、さまざまな証明機関および証明書テンプレートの設定が列挙されます。特定のCAを監査するには、`Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` または `Invoke-PKIAudit -CAName X-Y-Z` を実行します。
誤構成(ESC1-8)は、検出された特定の誤構成を示すプロパティとして、CA/テンプレートの結果に表示されます。
登録/アクセス制御のテストに使用するグループ/ユーザーを変更する場合は、`Invoke-PKIAudit.ps1` の先頭にある `$CommonLowprivPrincipals` 正規表現を変更してください。
すべてのCA情報をCSVにエクスポートするには、`Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv` を実行します。
公開されているすべてのテンプレート情報(脆弱なテンプレートだけでなく)をCSVにエクスポートするには、`Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv` を実行します。
## 出力の説明
出力には主に2つのセクションがあります。検出されたCAに関する詳細と、潜在的に脆弱なテンプレートに関する詳細です。
証明機関の結果:
| Certificate Authority Property | 説明 |
| ------------------------------ | --------------------------------------------------------------- |
| ComputerName | CAが実行されているシステム。 |
| CAName | CAの名前。 |
| ConfigString | 完全なCOMPUTER\CA_NAME構成文字列。 |
| IsRoot | CAがルートCAであるかどうか。 |
| AllowsUserSuppliedSans | CAに`EDITF_ATTRIBUTESUBJECTALTNAME2`フラグが設定されているか。 |
| VulnerableACL | CAに脆弱なACL設定があるかどうか。 |
| EnrollmentPrincipals | CAレベルで`Enroll`権限を持つプリンシパル。 |
| EnrollmentEndpoints | CAのWebサービス登録エンドポイント。 |
| NTLMEnrollmentEndpoints | NTLMが有効なCAのWebサービス登録エンドポイント。 |
| DACL | 完全なアクセス制御情報。 |
| Misconfigurations | 存在する特定の誤構成を示すESCX(ある場合)。 |
証明書テンプレートの結果:
| Property | 説明 |
| ----------------------- | ------------------------------------------------------------------------------------------------- |
| CA | テンプレートが公開されている完全なCA ConfigString(公開されていない場合はnull)。 |
| Name | テンプレート名。 |
| SchemaVersion | テンプレートのスキーマバージョン(1/2/3)。 |
| OID | テンプレートの一意のオブジェクト識別子。 |
| VulnerableTemplateACL | テンプレートに脆弱なACL設定がある場合にTrue。 |
| LowPrivCanEnroll | 低特権ユーザーがテンプレートに登録できる場合にTrue。 |
| EnrolleeSuppliesSubject | `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`フラグが存在する場合にTrue(つまり、ユーザーが任意のSANを指定可能)。 |
| EnhancedKeyUsage | テンプレートで有効な使用EKU。 |
| HasAuthenticationEku | テンプレートに認証を許可するEKUがある場合にTrue。 |
| HasDangerousEku | テンプレートに「危険な」(任意の目的またはnull)EKUがある場合にTrue。 |
| EnrollmentAgentTemplate | テンプレートに「証明書要求エージェント」EKUがある場合にTrue。 |
| CAManagerApproval | 登録にマネージャーの承認が必要な場合にTrue。 |
| IssuanceRequirements | 承認された署名情報。 |
| ValidityPeriod | 証明書の有効期間。 |
| RenewalPeriod | 証明書の更新期間。 |
| Owner | 証明書を所有するプリンシパル。 |
| DACL | 完全なアクセス制御情報。 |
| Misconfigurations | 存在する特定の誤構成を示すESCX(ある場合)。 |
## ESC1 - 誤った構成の証明書テンプレート
### Details <!-- omit in toc -->
この権限昇格シナリオは、以下の条件がすべて満たされた場合に発生します。
1. **エンタープライズCAが低特権ユーザーに登録権を付与している。** エンタープライズCAの構成で、低特権ユーザーが証明書を要求できるよう許可されている必要があります。詳細については、ホワイトペーパーの冒頭にある「Background - Enrollment」セクションを参照してください。
2. **マネージャーの承認が無効になっている。** この設定では、証明書「マネージャー」権限を持つユーザーが、証明書が発行される前に要求された証明書をレビューおよび承認する必要があります。詳細については、ホワイトペーパーの冒頭にある「Background - Issuance Requirements」セクションを参照してください。
3. **許可された署名は不要である。** この設定では、CSRが既存の許可された証明書によって署名されている必要があります。詳細については、ホワイトペーパーの冒頭にある「Background - Issuance Requirements」セクションを参照してください。
4. **過度に寛容な証明書テンプレートのセキュリティ記述子が、低特権ユーザーに証明書登録権を付与している。** 証明書登録権を持つことで、低特権の攻撃者はテンプレートに基づいて証明書を要求および取得できます。登録権は、証明書テンプレートADオブジェクトのセキュリティ記述子を介して付与されます。
5. **証明書テンプレートが認証を可能にするEKUを定義している。** 該当するEKUには、クライアント認証(OID 1.3.6.1.5.5.7.3.2)、PKINITクライアント認証(OID 1.3.6.1.5.2.3.4)、またはスマートカードログオン(OID 1.3.6.1.4.1.311.20.2.2)が含まれます。
6. **証明書テンプレートが、要求者がCSRでsubjectAltName(SAN)を指定できるようにしている。** 要求者がCSRでSANを指定できる場合、要求者は任意のユーザー(例:ドメイン管理者)として証明書を要求できます。証明書テンプレートのADオブジェクトは、mspki-certificate-name-flagプロパティで要求者がSANを指定できるかどうかを指定します。mspki-certificate-name-flagプロパティはビットマスクであり、`CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`フラグが存在する場合、要求者はSANを指定できます。
**TL;DR** この状況は、特権のないユーザーが、ドメイン認証に使用できる証明書を要求でき、その証明書で任意の代替名(ドメイン管理者など)を指定できることを意味します。これにより、ドメイン管理者などの昇格したユーザーとして機能する証明書が作成される可能性があります!
### Example <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC1Template
SchemaVersion : 2
OID : ESC1 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : True
EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC1
いくつかの対策があります。まず、証明書テンプレートコンソール(certtmpl.msc)で影響を受ける証明書テンプレートを右クリックし、「プロパティ」をクリックします。
この権限昇格シナリオは、以下の条件が満たされた場合に発生します。
エンタープライズ CA が低権限ユーザーに登録権限を付与している。 詳細は ESC1 と同じです。
マネージャーの承認が無効になっている。 詳細は ESC1 と同じです。
許可された署名が必要ない。 詳細は ESC1 と同じです。
過度に寛容な証明書テンプレートのセキュリティ記述子が、低権限ユーザーに証明書の登録権限を付与している。 詳細は ESC1 と同じです。
証明書テンプレートが任意の目的 EKU を定義しているか、EKU が定義されていない。 任意の目的 (OID 2.5.29.37.0) は(驚くなかれ)任意の目的、特にクライアント認証に使用できます。EKU が指定されていない場合、つまり pkiextendedkeyusage が空または属性が存在しない場合、その証明書は下位 CA 証明書と同等になり、何にでも使用できます。
要約 これは ESC1 と非常によく似ていますが、任意の目的または EKU なしの場合、CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT フラグは必要ありません。
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC2Template SchemaVersion : 2 OID : ESC2 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.7730030.4389735) VulnerableTemplateACL : False LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : HasAuthenticationEku : True HasDangerousEku : True EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC2
### 緩和策 <!-- omit in toc -->
いくつかのオプションがあります。まず、[証明書テンプレート]コンソール(certtmpl.msc)で影響を受ける証明書テンプレートを右クリックし、[プロパティ]をクリックします。
1. [セキュリティ]タブで、低特権ユーザーがこのテンプレートに登録できないように、適切な**登録**権限を削除します。
* これがおそらく最善の修正方法です。これらの重要なEKUは低特権ユーザーが利用できるべきではないためです。
2. [発行要件]で**"CA証明書マネージャーの承認"**を有効にします。
* これにより、このテンプレートの要求は[保留中の要求]キューに入れられ、証明書マネージャーが手動で承認する必要があります。
3. [発行要件]で**承認された署名"**を有効にします(知識がある場合のみ)。
* これにより、CSRは登録エージェント証明書によって共同署名される必要があります。
## ESC3 - 構成が不適切な登録エージェントテンプレート
### 詳細 <!-- omit in toc -->
この特権昇格シナリオは、以下の条件が満たされた場合に発生します。
1. **エンタープライズCAが低特権ユーザーに登録権限を付与している。** 詳細はESC1と同じです。
2. **マネージャーの承認が無効になっている。** 詳細はESC1と同じです。
3. **承認された署名が必要ない。** 詳細はESC1と同じです。
4. **過度に寛容な証明書テンプレートのセキュリティ記述子が、低特権ユーザーに証明書登録権限を付与している。** 詳細はESC1と同じです。
5. **証明書テンプレートが証明書要求エージェントEKUを定義している。** 証明書要求エージェントEKU(OID 1.3.6.1.4.1.311.20.2.1)により、プリンシパルが別のユーザーに代わって_別の_証明書テンプレートに登録できるようになります。
6. **CAに登録エージェント制限が実装されていない。**
**要約** 証明書要求(別名:登録エージェント)証明書を持つユーザーは、ドメイン内の任意のユーザーに代わって、他の証明書に登録できます。対象は、適切な「承認された署名/アプリケーションポリシー」発行要件を必要とする任意のSchema Version 1テンプレートまたはSchema Version 2+テンプレートです。ただし、CAレベルで「登録エージェント制限」が実装されている場合は除きます。
### 例 <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC3Template
SchemaVersion : 2
OID : ESC3 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.4300342.10028552)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Certificate Request Agent (1.3.6.1.4.1.311.20.2.1)
HasAuthenticationEku : False
HasDangerousEku : False
EnrollmentAgentTemplate : True
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC3
いくつかのオプションがあります。まず、証明書テンプレートコンソール (certtmpl.msc) で影響を受ける証明書テンプレートを右クリックし、「プロパティ」をクリックします。
また、証明機関コンソール (certsrv.msc) から「登録エージェントの制限」を実装することもできます。影響を受けるCAで、CA名を右クリックし、「プロパティ」→「登録エージェント」をクリックします。このアプローチの詳細はこちらを参照してください。
証明書テンプレートはActive Directory内のセキュリティ保護可能なオブジェクトであり、テンプレートに対する特定のアクセス許可を持つActive Directoryプリンシパルを指定するセキュリティ記述子を持っています。脆弱なアクセス制御を持つテンプレートは、意図しないプリンシパルにテンプレートの設定を変更する権限を与えます。変更権限を持つ攻撃者は、脆弱なEKU(ESC1-ESC3)を設定したり、CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT(ESC1)のような設定を変更したり、マネージャーの承認や許可された署名などの「発行要件」を削除したりできます。
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC4Template SchemaVersion : 2 OID : ESC4 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1768738.6205646) VulnerableTemplateACL : True LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4) HasAuthenticationEku : True HasDangerousEku : False EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read, Write THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC4
軽減策 <!-- omit in toc -->
影響を受ける証明書テンプレートを証明書テンプレートコンソール (certtmpl.msc) で右クリックし、[プロパティ] をクリックします。
[セキュリティ] タブに移動し、脆弱なアクセス制御エントリを削除します。
## ESC5 - 脆弱なPKI ADオブジェクトアクセス制御
### 詳細 <!-- omit in toc -->
証明書テンプレートや証明機関自体以外の多数のオブジェクトが、AD CSシステム全体にセキュリティ上の影響を与える可能性があります。
これらの可能性には以下が含まれます(ただしこれらに限定されません):
- CAサーバーのADコンピュータオブジェクト(例:RBCDを通じた侵害)
- CAサーバーのRPC/DCOMサーバー
- PKI関連のADオブジェクト。コンテナ CN=Public Key Services,CN=Services,CN=Configuration,DC=<COMPANY>,DC=<COM> 内の任意の子孫ADオブジェクトまたはコンテナ(例:証明書テンプレートコンテナ、証明機関コンテナ、NTAuthCertificatesオブジェクトなど)
*この特定の誤構成の範囲が広いため、現在このツールキットではデフォルトでESC5をチェックしていません。*
CAサーバー自体へのアクセスパスは、現在のBloodHoundコレクションで確認できます。
CAサーバーのRPC/DCOMサーバーのセキュリティは手動分析が必要です。
次のコマンドは、ユーザーとそのユーザーがPKI関連のADオブジェクトに対して持つ制御/編集権限のリストを出力します。```
$Controllers = Get-AuditPKIADObjectControllers
Format-PKIAdObjectControllers $Controllers
結果内のすべてのプリンシパルがリストされた権限を確実に必要とすることを確認してください。多くの場合、非Tier 0アカウント(低特権ユーザー/グループ、または低特権の非ADサーバー管理者など)がPKI関連のADオブジェクトを制御しています。
THESHIRE\Cert Publishers (S-1-5-21-3022474190-4230777124-3051344698-517) GenericAll CN=THESHIRE-DC-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\DC$ (S-1-5-21-3022474190-4230777124-3051344698-1000) WriteOwner CN=THESHIRE-DC-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=KRA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Computers (S-1-5-21-3022474190-4230777124-3051344698-515) WriteDacl CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Users (S-1-5-21-3022474190-4230777124-3051344698-513) WriteAllProperties CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\john-sa (S-1-5-21-3022474190-4230777124-3051344698-1602) GenericAll CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
NT AUTHORITY\Authenticated Users (S-1-5-11) Owner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL WriteOwner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
### Mitigations <!-- omit in toc -->
Active Directory ユーザーとコンピュータ (*dsa.msc*) または ADSIEdit (*adsiedit.msc*) を使用して、構成オブジェクトの脆弱なアクセス制御エントリをすべて削除します。
## ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
### Details <!-- omit in toc -->
証明機関の構成で **EDITF_ATTRIBUTESUBJECTALTNAME2** フラグが設定されている場合、*任意の*証明書リクエストで任意のサブジェクト代替名 (SAN) を指定できます。つまり、ドメイン認証用に構成されており、かつ権限のないユーザーが登録を許可されているテンプレート (例: デフォルトの **User** テンプレート) であれば、悪用してドメイン管理者 (または他のアクティブなユーザー/マシン) として認証できる証明書を取得できます。
**この設定は、環境内で絶対に有効にしてはいけません。**
### Example <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : True
VulnerableACL : False
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC6
[!] The above CA is misconfigured!
...(snip)...
[!] EDITF_ATTRIBUTESUBJECTALTNAME2 set on this CA, the following templates may be vulnerable:
CA : dc.theshire.local\theshire-DC-CA
Name : User
SchemaVersion : 1
OID : 1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1.1
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Encrypting File System (1.3.6.1.4.1.311.10.3.4)|Secure Email (1.3.6.1.5.5.7.3.4)|Client Authentication (1.3.6.1.5.5.7.3.2)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\Enterprise Admins
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
Misconfigurations :
直ちにこのフラグを削除し、影響を受けた認証局を、CAサーバーに対して昇格された権限を持つPowerShellプロンプトから再起動してください:``` PS C:> certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
PS C:> Get-Service -ComputerName CA_HOST certsvc | Restart-Service -Force
## ESC7 - 脆弱な証明機関アクセス制御
### Details <!-- omit in toc -->
証明書テンプレート以外にも、証明機関自体にはさまざまなCA操作を保護する一連の権限があります。これらの権限は、certsrv.msc を開き、CAを右クリックしてプロパティを選択し、セキュリティタブに切り替えることでアクセスできます。
意図しないプリンシパルが保持している場合、セキュリティ上重要で危険な権限が2つあります:
* **ManageCA** (別名 "CA Administrator") - CAの管理操作を許可します。これには、(リモートで) EDITF_ATTRIBUTESUBJECTALTNAME2 ビットを反転させ、ESC6 を引き起こす操作が含まれます。
* **ManageCertificates** (別名 "Certificate Manager/Officer") - プリンシパルが保留中の証明書要求を承認できるようにし、"Manager Approval" 発行要件/保護を無効にします。
### 例 <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : False
VulnerableACL : True
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - ManageCA, Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC7
[!] The above CA is misconfigured!
影響を受けたCAで証明機関コンソール (certsrv.msc) を開き、CA名を右クリックして「プロパティ」をクリックします。
「セキュリティ」タブに移動し、脆弱なアクセス制御エントリを削除します。
注意: PSPKIAuditのこの特定のチェックは、公開された登録エンドポイントにNTLMが存在するかどうかのみをチェックします。これらのNTLM対応エンドポイントにExtended Protection for Authenticationが存在するかどうかはチェックしないため、誤検出が発生する可能性があります!
[!IMPORTANT]
NTLM認証は、Protected Usersグループのアカウントでは無効化されています。このチェックは、Protected UserとしてログインしてPSPKIAuditを実行すると失敗する可能性があります。
AD CSは、管理者がインストールできる追加のAD CSサーバーロールを介して、いくつかのHTTPベースの登録方法をサポートしています。これらのHTTPベースの証明書登録インターフェースはすべて、NTLMリレー攻撃に対して脆弱です。
NTLMリレーを使用すると、侵害されたマシン上の攻撃者は、受信NTLM認証を行う任意のADアカウントを偽装できます。被害者のアカウントを偽装している間に、攻撃者はこれらのWebインターフェースにアクセスし、UserまたはMachine証明書テンプレートに基づいてクライアント認証証明書を要求する可能性があります。
=== Certificate Authority ===
ComputerName : dc.theshire.local CAName : theshire-DC-CA ConfigString : dc.theshire.local\theshire-DC-CA IsRoot : True AllowsUserSuppliedSans : False VulnerableACL : False EnrollmentPrincipals : THESHIRE\Domain Users THESHIRE\Domain Computers THESHIRE\certmanager THESHIRE\certadmin THESHIRE\Nested3 EnrollmentEndpoints : http://dc.theshire.local/certsrv/ NTLMEnrollmentEndpoints : http://dc.theshire.local/certsrv/ DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Domain Computers (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates THESHIRE\certmanager (Allow) - ManageCertificates, Enroll THESHIRE\certadmin (Allow) - ManageCA, Enroll THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll Misconfigurations : ESC8
[!] The above CA is misconfigured!
### 緩和策 <!-- omit in toc -->
HTTP(S) 登録エンドポイントを削除するか、エンドポイントの NTLM を無効にするか、または認証のための拡張保護を有効にします。詳細については、ホワイトペーパーの「**Harden AD CS HTTP Endpoints – PREVENT8**」を参照してください。
## その他 - 明示的なマッピング
状況によっては、証明書に対して明示的なマッピングを強制することが別の緩和策となる場合があります。これにより、Active Directory への認証時に証明書内の代替 SAN の使用が無効になります。
Kerberos の場合、**HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc ! UseSubjectAltName** キーを 00000000 に設定すると、明示的なマッピングが強制されます。詳細は [KB4043463](https://mskb.pkisolutions.com/kb/4043463) を参照してください。
SChannel の明示的なマッピングを無効にする方法はあまり文書化されていませんが、当社の調査に基づくと、**HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SecurityProviders\SCHANNEL ! CertificateMappingMethods** キーに 0x1 または 0x2 を設定すると SAN がブロックされるように見えますが、さらなるテストが必要です。
# 既存の発行済み証明書要求のトリアージ
**警告:** この機能は大規模環境では最小限のテストしか行われていません!
**注:** 詳細情報や certutil を使用したこれらの検索の実行方法については、ホワイトペーパーの「Monitor User/Machine Certificate Enrollments - DETECT1」を参照してください。
既存の発行済み証明書要求を調査したい場合、たとえば、任意の SAN が指定された要求や、特定のテンプレート/特定のプリンシパルによって要求されたものがないかを確認するために、`Get-CertRequest [-CAComputerName COMPUTER.DOMAIN.COM | -CAName X-Y-Z]` 関数は、さまざまな PSPKI 関数を基に、より多くのコンテキスト情報を提供します。
具体的には、ドメイン内で現在発行されているすべての証明書から生の証明書署名要求 (CSR) が抽出され、要求から特定の情報 (SAN が指定されたかどうか、要求者名/マシン/プロセスなど) が構築され、CSR オブジェクトが充実されます。
以下のフラグが役立ちます:
| フラグ | 説明 |
| ---------------------------- | ------------------------------------------------------------------------------------------ |
| **-HasSAN** | 要求にサブジェクト代替名が指定された発行済み証明書のみを返します。 |
| **-Requester DOMAIN\USER** | 特定の要求ユーザーによる発行済み証明書要求のみを返します。 |
| **-Template TEMPLATE_NAME** | 指定されたテンプレート名の発行済み証明書要求のみを返します。 |
<br/>
すべての発行済み証明書要求を CSV にエクスポートするには、`Get-CertRequest | Export-CSV -NoTypeInformation requests.csv` を使用します。
以下は、Certify を使用してサブジェクト代替名 (SAN) が指定された状況を示す結果エントリの例です。```
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4602
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension :
SubjectAltNamesAttrib : Administrator
SerialNumber : 55000011faef0fab5ffd7f75b30000000011fa
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:54:51 PM
StartDate : 6/3/2021 5:44:51 PM
EndDate : 6/3/2022 5:44:51 PM
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4603
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension : Administrator
SubjectAltNamesAttrib :
SerialNumber : 55000011fb021b79cf7276c2de0000000011fb
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:55:10 PM
StartDate : 6/3/2021 5:45:10 PM
EndDate : 6/3/2022 5:45:10 PM
SubjectAltNamesExtension プロパティは、x509 SubjectAlternativeNames 拡張が SAN の指定に使用されたことを意味します。これは、CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT フラグを持つテンプレートで発生します。SubjectAltNamesAttrib プロパティは、x509 の名前/値ペアが使用されたことを意味します。これは、EDITF_ATTRIBUTESUBJECTALTNAME2 CA フラグが設定されている場合に SAN を指定する際に発生します。
既存の発行済み証明書は、PSPKI の Revoke-Certificate 関数を使用して失効できます。
PS C:\> Get-CertificationAuthority <CAName> | Get-IssuedRequest -RequestID <X> | Revoke-Certificate -Reason "KeyCompromise"
-Reason に指定可能な値は、"KeyCompromise"、"CACompromise"、"Unspecified" です。