
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オブジェクトのセキュリティ記述子を介して付与されます。