用于审计 Active Directory 证书服务 (AD CS) 的 PowerShell 工具包。
它基于 PKISolution 的 PSPKI 工具包(Microsoft 公共许可证)构建。此仓库包含比 PSGallery 中更新的 PSPKI 版本(请参阅 PSPKI 目录)。Vadims Podans(PSPKI 的创建者)慷慨地提供了此版本,因为它包含多个 bug 的补丁。
此 README 仅作为入门指南——如需完整的详细信息和防御指导,请参阅《Certified Pre-Owned》白皮书。
该模块包含以下主要功能:
警告: 此代码处于测试阶段!我们确信 Invoke-PKIAudit 不会对环境产生影响,因为它查询的数据量相当有限。我们尚未针对典型的 CA 服务器工作负载对 Get-CertRequest 进行严格测试。Get-CertRequest 直接查询 CA 的数据库,可能需要处理数千条结果,这可能会影响性能。
如果没有结果,这并不能保证您的环境是安全的!!
我们也不能保证我们的缓解建议能使您的环境安全或不会中断运营!
您有责任与您的 Active Directory/PKI/架构团队沟通,以确定最适合您环境的缓解措施。
如果代码出现故障,或者我们遗漏了一些内容,请提交 issue 或 pull request 以进行修复!
在 Windows 计算机上使用提升的 PowerShell 提示符(PowerShell 版本 5.1 或更高版本)安装以下内容:
* [PSPKI PowerShell 模块](https://github.com/PKISolutions/PSPKI)。使用以下命令安装:```
Install-Module -Name PSPKI
下载模块并将其提取到一个文件夹中。然后,使用以下命令导入模块:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File
Import-Module .\PSPKIAudit.psd1
# 审计 AD CS 错误配置
运行 `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`
## 输出说明
输出主要分为两个部分:关于发现的 CA 的详细信息,以及关于可能易受攻击的模板的详细信息。
对于证书颁发机构结果:
| 证书颁发机构属性 | 描述 |
| ---------------- | ----------------------------------------------------------- |
| ComputerName | 运行 CA 的系统。 |
| CAName | CA 的名称。 |
| ConfigString | 完整的 COMPUTER\CA_NAME 配置字符串。 |
| IsRoot | CA 是否为根 CA。 |
| AllowsUserSuppliedSans | 是否设置了 `EDITF_ATTRIBUTESUBJECTALTNAME2` 标志。 |
| VulnerableACL | CA 是否具有易受攻击的 ACL 设置。 |
| EnrollmentPrincipals | 在 CA 级别拥有 `Enroll` 权限的主体。 |
| EnrollmentEndpoints | CA 的 Web 服务注册端点。 |
| NTLMEnrollmentEndpoints | 已启用 NTLM 的 CA Web 服务注册端点。 |
| DACL | 完整的访问控制信息。 |
| Misconfigurations | 标识存在的特定错误配置的 ESCX(如果有)。 |
对于证书模板结果:
| 属性 | 描述 |
| -------------------- | ----------------------------------------------------------------------------------------------------- |
| CA | 模板发布到的完整 CA ConfigString(若未发布则为 null)。 |
| Name | 模板名称。 |
| SchemaVersion | 模板的架构版本(1/2/3)。 |
| OID | 模板的唯一对象标识符。 |
| VulnerableTemplateACL | 如果模板具有易受攻击的 ACL 设置,则为 True。 |
| LowPrivCanEnroll | 如果低权限用户可以注册该模板,则为 True。 |
| EnrolleeSuppliesSubject | 如果存在 `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` 标志(即用户可以提供任意 SAN),则为 True。 |
| EnhancedKeyUsage | 模板中启用的 EKU 用途。 |
| HasAuthenticationEku | 如果模板具有允许身份验证的 EKU,则为 True。 |
| HasDangerousEku | 如果模板具有“危险”EKU(Any Purpose 或 null),则为 True。 |
| EnrollmentAgentTemplate | 如果模板具有“证书请求代理”EKU,则为 True。 |
| CAManagerApproval | 注册是否需要经理审批。 |
| IssuanceRequirements | 授权签名信息。 |
| ValidityPeriod | 证书的有效期。 |
| RenewalPeriod | 证书的续订期。 |
| Owner | 拥有证书的主体。 |
| DACL | 完整的访问控制信息。 |
| Misconfigurations | 标识存在的特定错误配置的 ESCX(如果有)。 |
## ESC1 - 错误配置的证书模板
### 详细信息 <!-- omit in toc -->
此权限提升场景在满足以下条件时发生:
1. **企业 CA 授予低权限用户注册权限。** 企业 CA 的配置必须允许低权限用户请求证书。有关详细信息,请参阅白皮书开头的“背景 - 注册”部分。
2. **禁用了经理审批。** 此设置要求具有证书“经理”权限的用户审查并批准所请求的证书,然后才能颁发该证书。有关详细信息,请参阅白皮书开头的“背景 - 颁发要求”部分。
3. **不需要授权签名。** 此设置要求任何 CSR 由现有的授权证书签名。有关详细信息,请参阅白皮书开头的“背景 - 颁发要求”部分。
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 中指定 subjectAltName。mspki-certificate-name-flag 属性是一个位掩码,如果存在 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT 标志,则请求者可以指定 SAN。
**TL;DR** 这种情况意味着非特权用户可以请求可用于域身份验证的证书,并且他们可以指定任意替代名称(例如域管理员)。这可能导致为高权限用户(如域管理员)生成有效的证书!
### 示例 <!-- 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 证书,可用于任何目的。
TL;DR 这与 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. 在“颁发要求”中启用**授权签名**(如果您清楚自己在做什么)。
* 这会强制证书签名请求必须由注册代理证书共同签名。
## 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 上未实施注册代理限制。**
**简而言之** 拥有证书请求(即注册代理)证书的人可以代表域中的任何用户注册其他证书,适用于任何架构版本 1 的模板或任何架构版本 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
### Mitigations <!-- omit in toc -->
在证书模板控制台(certtmpl.msc)中右键单击受影响的证书模板,然后单击“属性”。
转到“安全”并删除易受攻击的访问控制条目。
## ESC5 - 易受攻击的 PKI AD 对象访问控制
### Details <!-- 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
确保结果中的所有主体绝对需要所列出的权限。通常,非第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 :
立即移除此标志,并使用具有提升权限的 PowerShell 提示符针对 CA 服务器重启受影响的证书颁发机构:``` 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 - 易受攻击的证书颁发机构访问控制
### 详情 <!-- omit in toc -->
除了证书模板之外,证书颁发机构本身也有一组权限来保护各种 CA 操作。可以从 certsrv.msc 访问这些权限,右键单击 CA,选择属性,然后切换到安全选项卡。
有两个权限是安全敏感的,如果意外的主体拥有它们则很危险:
* **ManageCA**(亦称“CA 管理员”)- 允许执行管理 CA 操作,包括(远程)翻转 EDITF_ATTRIBUTESUBJECTALTNAME2 位,从而导致 ESC6。
* **ManageCertificates**(亦称“证书管理员/官员”)- 允许主体批准待处理的证书请求,从而否定“经理审批”颁发要求/保护。
### 示例 <!-- 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 的端点是否启用了扩展保护身份验证,因此可能出现误报!
[!IMPORTANT]
已加入受保护用户组的帐户会禁用 NTLM 身份验证。如果以受保护用户身份登录时运行 PSPKIAudit,此检查可能会失败。
AD CS 支持多种基于 HTTP 的注册方法,这些方法通过管理员可安装的附加 AD CS 服务器角色实现。这些基于 HTTP 的证书注册接口均存在 NTLM 中继攻击漏洞。
通过 NTLM 中继,受感染机器上的攻击者可以冒充任何入站 NTLM 身份验证的 AD 帐户。在冒充受害者帐户期间,攻击者可访问这些 Web 接口,并根据用户或计算机证书模板请求客户端身份验证证书。
=== 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,或者启用扩展保护以进行身份验证。有关更多详细信息,请参阅白皮书中的 **加固 AD CS HTTP 端点 – 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 执行这些搜索,请参阅白皮书中的“监视用户/机器证书注册 - 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"。