mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/windows-hardening/active-directory-methodology/ad-certi
This commit is contained in:
		
							parent
							
								
									e970d8e947
								
							
						
					
					
						commit
						68c4fa5e6d
					
				@ -2,81 +2,81 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## 介绍
 | 
			
		||||
## Introduction
 | 
			
		||||
 | 
			
		||||
### 证书的组成部分
 | 
			
		||||
### Components of a Certificate
 | 
			
		||||
 | 
			
		||||
- 证书的 **主题** 表示其所有者。
 | 
			
		||||
- **公钥** 与私有密钥配对,将证书与其合法所有者关联。
 | 
			
		||||
- **有效期** 由 **NotBefore** 和 **NotAfter** 日期定义,标记证书的有效持续时间。
 | 
			
		||||
- 由证书颁发机构 (CA) 提供的唯一 **序列号** 用于识别每个证书。
 | 
			
		||||
- **颁发者** 指的是颁发证书的 CA。
 | 
			
		||||
- **SubjectAlternativeName** 允许为主题提供额外名称,增强识别灵活性。
 | 
			
		||||
- **基本约束** 确定证书是用于 CA 还是最终实体,并定义使用限制。
 | 
			
		||||
- **扩展密钥使用 (EKUs)** 通过对象标识符 (OIDs) 划定证书的特定用途,如代码签名或电子邮件加密。
 | 
			
		||||
- **签名算法** 指定签署证书的方法。
 | 
			
		||||
- **签名** 使用颁发者的私钥创建,保证证书的真实性。
 | 
			
		||||
- 证书的**主题**表示其所有者。
 | 
			
		||||
- **公钥**与私有密钥配对,将证书与其合法所有者关联。
 | 
			
		||||
- **有效期**由**NotBefore**和**NotAfter**日期定义,标记证书的有效持续时间。
 | 
			
		||||
- 由证书颁发机构(CA)提供的唯一**序列号**标识每个证书。
 | 
			
		||||
- **颁发者**指的是颁发证书的CA。
 | 
			
		||||
- **SubjectAlternativeName**允许为主题提供额外名称,增强识别灵活性。
 | 
			
		||||
- **基本约束**识别证书是用于CA还是最终实体,并定义使用限制。
 | 
			
		||||
- **扩展密钥使用(EKUs)**通过对象标识符(OIDs)划分证书的特定用途,如代码签名或电子邮件加密。
 | 
			
		||||
- **签名算法**指定签署证书的方法。
 | 
			
		||||
- 使用颁发者的私钥创建的**签名**保证证书的真实性。
 | 
			
		||||
 | 
			
		||||
### 特殊考虑
 | 
			
		||||
### Special Considerations
 | 
			
		||||
 | 
			
		||||
- **主题备用名称 (SANs)** 扩展证书的适用性到多个身份,对于具有多个域的服务器至关重要。安全的颁发流程对于避免攻击者操纵 SAN 规范而导致的冒充风险至关重要。
 | 
			
		||||
- **主题备用名称(SANs)**扩展证书对多个身份的适用性,对于具有多个域的服务器至关重要。安全的颁发流程对于避免攻击者操纵SAN规范而导致的冒充风险至关重要。
 | 
			
		||||
 | 
			
		||||
### Active Directory (AD) 中的证书颁发机构 (CAs)
 | 
			
		||||
### Certificate Authorities (CAs) in Active Directory (AD)
 | 
			
		||||
 | 
			
		||||
AD CS 通过指定的容器在 AD 林中承认 CA 证书,每个容器承担独特的角色:
 | 
			
		||||
AD CS通过指定的容器在AD森林中承认CA证书,每个容器承担独特的角色:
 | 
			
		||||
 | 
			
		||||
- **证书颁发机构** 容器保存受信任的根 CA 证书。
 | 
			
		||||
- **注册服务** 容器详细说明企业 CA 及其证书模板。
 | 
			
		||||
- **NTAuthCertificates** 对象包括被授权用于 AD 认证的 CA 证书。
 | 
			
		||||
- **AIA (Authority Information Access)** 容器通过中间和交叉 CA 证书促进证书链验证。
 | 
			
		||||
- **Certification Authorities**容器保存受信任的根CA证书。
 | 
			
		||||
- **Enrolment Services**容器详细说明企业CA及其证书模板。
 | 
			
		||||
- **NTAuthCertificates**对象包括被授权用于AD身份验证的CA证书。
 | 
			
		||||
- **AIA (Authority Information Access)**容器通过中间和交叉CA证书促进证书链验证。
 | 
			
		||||
 | 
			
		||||
### 证书获取:客户端证书请求流程
 | 
			
		||||
### Certificate Acquisition: Client Certificate Request Flow
 | 
			
		||||
 | 
			
		||||
1. 请求过程从客户端寻找企业 CA 开始。
 | 
			
		||||
2. 在生成公私钥对后,创建包含公钥和其他详细信息的 CSR。
 | 
			
		||||
3. CA 根据可用证书模板评估 CSR,基于模板的权限颁发证书。
 | 
			
		||||
4. 经批准后,CA 使用其私钥签署证书并将其返回给客户端。
 | 
			
		||||
1. 请求过程从客户端寻找企业CA开始。
 | 
			
		||||
2. 在生成公私钥对后,创建包含公钥和其他详细信息的CSR。
 | 
			
		||||
3. CA根据可用证书模板评估CSR,并根据模板的权限颁发证书。
 | 
			
		||||
4. 经批准后,CA使用其私钥签署证书并将其返回给客户端。
 | 
			
		||||
 | 
			
		||||
### 证书模板
 | 
			
		||||
### Certificate Templates
 | 
			
		||||
 | 
			
		||||
在 AD 中定义,这些模板概述了颁发证书的设置和权限,包括允许的 EKUs 和注册或修改权限,对于管理证书服务的访问至关重要。
 | 
			
		||||
在AD中定义的这些模板概述了颁发证书的设置和权限,包括允许的EKUs和注册或修改权限,对于管理证书服务的访问至关重要。
 | 
			
		||||
 | 
			
		||||
## 证书注册
 | 
			
		||||
## Certificate Enrollment
 | 
			
		||||
 | 
			
		||||
证书的注册过程由管理员 **创建证书模板** 开始,然后由企业证书颁发机构 (CA) **发布**。这使得模板可用于客户端注册,这一步通过将模板名称添加到 Active Directory 对象的 `certificatetemplates` 字段来实现。
 | 
			
		||||
证书的注册过程由管理员**创建证书模板**,然后由企业证书颁发机构(CA)**发布**。这使得模板可用于客户端注册,通过将模板名称添加到Active Directory对象的`certificatetemplates`字段来实现。
 | 
			
		||||
 | 
			
		||||
为了让客户端请求证书,必须授予 **注册权限**。这些权限由证书模板和企业 CA 本身的安全描述符定义。必须在两个位置授予权限,才能成功请求。
 | 
			
		||||
为了让客户端请求证书,必须授予**注册权限**。这些权限由证书模板和企业CA本身的安全描述符定义。必须在两个位置授予权限,才能成功请求。
 | 
			
		||||
 | 
			
		||||
### 模板注册权限
 | 
			
		||||
### Template Enrollment Rights
 | 
			
		||||
 | 
			
		||||
这些权限通过访问控制条目 (ACEs) 指定,详细说明权限,如:
 | 
			
		||||
这些权限通过访问控制条目(ACEs)指定,详细说明了如下权限:
 | 
			
		||||
 | 
			
		||||
- **证书注册** 和 **证书自动注册** 权限,每个权限与特定的 GUID 相关联。
 | 
			
		||||
- **扩展权限**,允许所有扩展权限。
 | 
			
		||||
- **完全控制/通用所有**,提供对模板的完全控制。
 | 
			
		||||
- **证书注册**和**证书自动注册**权限,每个权限与特定的GUID相关联。
 | 
			
		||||
- **ExtendedRights**,允许所有扩展权限。
 | 
			
		||||
- **FullControl/GenericAll**,提供对模板的完全控制。
 | 
			
		||||
 | 
			
		||||
### 企业 CA 注册权限
 | 
			
		||||
### Enterprise CA Enrollment Rights
 | 
			
		||||
 | 
			
		||||
CA 的权限在其安全描述符中列出,可以通过证书颁发机构管理控制台访问。有些设置甚至允许低权限用户远程访问,这可能是一个安全隐患。
 | 
			
		||||
CA的权限在其安全描述符中列出,可以通过证书颁发机构管理控制台访问。有些设置甚至允许低权限用户远程访问,这可能是一个安全隐患。
 | 
			
		||||
 | 
			
		||||
### 额外的颁发控制
 | 
			
		||||
### Additional Issuance Controls
 | 
			
		||||
 | 
			
		||||
某些控制可能适用,例如:
 | 
			
		||||
 | 
			
		||||
- **经理批准**:将请求置于待处理状态,直到由证书经理批准。
 | 
			
		||||
- **注册代理和授权签名**:指定 CSR 上所需的签名数量和必要的应用程序策略 OIDs。
 | 
			
		||||
- **注册代理和授权签名**:指定CSR上所需的签名数量和必要的应用程序策略OIDs。
 | 
			
		||||
 | 
			
		||||
### 请求证书的方法
 | 
			
		||||
### Methods to Request Certificates
 | 
			
		||||
 | 
			
		||||
可以通过以下方式请求证书:
 | 
			
		||||
 | 
			
		||||
1. **Windows 客户端证书注册协议** (MS-WCCE),使用 DCOM 接口。
 | 
			
		||||
2. **ICertPassage 远程协议** (MS-ICPR),通过命名管道或 TCP/IP。
 | 
			
		||||
3. **证书注册 Web 界面**,安装了证书颁发机构 Web 注册角色。
 | 
			
		||||
4. **证书注册服务** (CES),与证书注册策略 (CEP) 服务结合使用。
 | 
			
		||||
5. **网络设备注册服务** (NDES) 用于网络设备,使用简单证书注册协议 (SCEP)。
 | 
			
		||||
1. **Windows客户端证书注册协议**(MS-WCCE),使用DCOM接口。
 | 
			
		||||
2. **ICertPassage远程协议**(MS-ICPR),通过命名管道或TCP/IP。
 | 
			
		||||
3. **证书注册Web界面**,安装了证书颁发机构Web注册角色。
 | 
			
		||||
4. **证书注册服务**(CES),与证书注册策略(CEP)服务结合使用。
 | 
			
		||||
5. **网络设备注册服务**(NDES)用于网络设备,使用简单证书注册协议(SCEP)。
 | 
			
		||||
 | 
			
		||||
Windows 用户还可以通过 GUI (`certmgr.msc` 或 `certlm.msc`) 或命令行工具 (`certreq.exe` 或 PowerShell 的 `Get-Certificate` 命令) 请求证书。
 | 
			
		||||
Windows用户还可以通过GUI(`certmgr.msc`或`certlm.msc`)或命令行工具(`certreq.exe`或PowerShell的`Get-Certificate`命令)请求证书。
 | 
			
		||||
```bash
 | 
			
		||||
# Example of requesting a certificate using PowerShell
 | 
			
		||||
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
 | 
			
		||||
@ -87,7 +87,7 @@ Active Directory (AD) 支持证书认证,主要利用 **Kerberos** 和 **安
 | 
			
		||||
 | 
			
		||||
### Kerberos 认证过程
 | 
			
		||||
 | 
			
		||||
在 Kerberos 认证过程中,用户请求的票据授予票据 (TGT) 使用用户证书的 **私钥** 进行签名。该请求经过域控制器的多个验证,包括证书的 **有效性**、**路径** 和 **撤销状态**。验证还包括确认证书来自受信任的来源,并确认发行者在 **NTAUTH 证书存储** 中的存在。成功的验证将导致 TGT 的发放。AD 中的 **`NTAuthCertificates`** 对象位于:
 | 
			
		||||
在 Kerberos 认证过程中,用户请求的票证授予票证 (TGT) 使用用户证书的 **私钥** 进行签名。该请求经过域控制器的多个验证,包括证书的 **有效性**、**路径** 和 **撤销状态**。验证还包括确认证书来自受信任的来源,并确认发行者在 **NTAUTH 证书存储** 中的存在。成功的验证将导致 TGT 的发放。AD 中的 **`NTAuthCertificates`** 对象位于:
 | 
			
		||||
```bash
 | 
			
		||||
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
 | 
			
		||||
```
 | 
			
		||||
@ -99,7 +99,7 @@ Schannel 促进安全的 TLS/SSL 连接,在握手过程中,客户端会提
 | 
			
		||||
 | 
			
		||||
### AD 证书服务枚举
 | 
			
		||||
 | 
			
		||||
AD 的证书服务可以通过 LDAP 查询进行枚举,揭示有关 **企业证书颁发机构 (CAs)** 及其配置的信息。这对任何经过域认证的用户都是可访问的,无需特殊权限。工具如 **[Certify](https://github.com/GhostPack/Certify)** 和 **[Certipy](https://github.com/ly4k/Certipy)** 被用于在 AD CS 环境中进行枚举和漏洞评估。
 | 
			
		||||
AD 的证书服务可以通过 LDAP 查询进行枚举,揭示有关 **企业证书授权机构 (CAs)** 及其配置的信息。任何经过域认证的用户都可以访问这些信息,而无需特殊权限。工具如 **[Certify](https://github.com/GhostPack/Certify)** 和 **[Certipy](https://github.com/ly4k/Certipy)** 被用于在 AD CS 环境中进行枚举和漏洞评估。
 | 
			
		||||
 | 
			
		||||
使用这些工具的命令包括:
 | 
			
		||||
```bash
 | 
			
		||||
@ -108,16 +108,52 @@ Certify.exe cas
 | 
			
		||||
# Identify vulnerable certificate templates with Certify
 | 
			
		||||
Certify.exe find /vulnerable
 | 
			
		||||
 | 
			
		||||
# Use Certipy for enumeration and identifying vulnerable templates
 | 
			
		||||
certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
 | 
			
		||||
# Use Certipy (>=4.0) for enumeration and identifying vulnerable templates
 | 
			
		||||
certipy find -vulnerable -dc-only -u john@corp.local -p Passw0rd -target dc.corp.local
 | 
			
		||||
 | 
			
		||||
# Request a certificate over the web enrollment interface (new in Certipy 4.x)
 | 
			
		||||
certipy req -web -target ca.corp.local -template WebServer -upn john@corp.local -dns www.corp.local
 | 
			
		||||
 | 
			
		||||
# Enumerate Enterprise CAs and certificate templates with certutil
 | 
			
		||||
certutil.exe -TCAInfo
 | 
			
		||||
certutil -v -dstemplate
 | 
			
		||||
```
 | 
			
		||||
## 参考
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 最近的漏洞与安全更新 (2022-2025)
 | 
			
		||||
 | 
			
		||||
| 年份 | ID / 名称 | 影响 | 关键要点 |
 | 
			
		||||
|------|-----------|--------|----------------|
 | 
			
		||||
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *特权提升*,通过在 PKINIT 期间伪造机器账户证书。 | 补丁包含在 **2022年5月10日** 的安全更新中。通过 **KB5014754** 引入审计和强映射控制;环境现在应处于 *完全强制* 模式。 citeturn2search0 |
 | 
			
		||||
| 2023 | **CVE-2023-35350 / 35351** | *远程代码执行* 在 AD CS Web Enrollment (certsrv) 和 CES 角色中。 | 公开的 PoC 限制较少,但易受攻击的 IIS 组件通常在内部暴露。补丁自 **2023年7月** 的补丁星期二起生效。 citeturn3search0 |
 | 
			
		||||
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | 具有注册权限的低权限用户可以在 CSR 生成期间覆盖 **任何** EKU 或 SAN,发放可用于客户端身份验证或代码签名的证书,导致 *域被攻陷*。 | 在 **2024年4月** 的更新中解决。移除模板中的“请求中提供”并限制注册权限。 citeturn1search3 |
 | 
			
		||||
 | 
			
		||||
### 微软强化时间表 (KB5014754)
 | 
			
		||||
 | 
			
		||||
微软引入了三阶段的推出(兼容性 → 审计 → 强制),以将 Kerberos 证书认证从弱隐式映射中移除。自 **2025年2月11日** 起,如果未设置 `StrongCertificateBindingEnforcement` 注册表值,域控制器将自动切换到 **完全强制**。管理员应:
 | 
			
		||||
 | 
			
		||||
1. 修补所有 DC 和 AD CS 服务器(2022年5月或更晚)。
 | 
			
		||||
2. 在 *审计* 阶段监控事件 ID 39/41 以查找弱映射。
 | 
			
		||||
3. 在 2025年2月之前重新签发带有新 **SID 扩展** 的客户端认证证书或配置强手动映射。 citeturn2search0
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 检测与强化增强
 | 
			
		||||
 | 
			
		||||
* **Defender for Identity AD CS 传感器 (2023-2024)** 现在提供 ESC1-ESC8/ESC11 的姿态评估,并生成实时警报,例如 *“非 DC 的域控制器证书发放”* (ESC8) 和 *“防止使用任意应用程序策略的证书注册”* (ESC15)。确保传感器部署到所有 AD CS 服务器,以便受益于这些检测。 citeturn5search0
 | 
			
		||||
* 禁用或严格限制所有模板上的 **“请求中提供”** 选项;优先使用明确定义的 SAN/EKU 值。
 | 
			
		||||
* 除非绝对必要,否则从模板中移除 **任何目的** 或 **无 EKU**(解决 ESC2 场景)。
 | 
			
		||||
* 对于敏感模板(例如,WebServer / CodeSigning),要求 **经理批准** 或专用注册代理工作流。
 | 
			
		||||
* 将 Web 注册 (`certsrv`) 和 CES/NDES 端点限制在受信网络或客户端证书认证后面。
 | 
			
		||||
* 强制 RPC 注册加密 (`certutil –setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`) 以减轻 ESC11。
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 参考文献
 | 
			
		||||
 | 
			
		||||
- [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)
 | 
			
		||||
- [https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html](https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html)
 | 
			
		||||
- [https://support.microsoft.com/en-us/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16](https://support.microsoft.com/en-us/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16)
 | 
			
		||||
- [https://advisory.eventussecurity.com/advisory/critical-vulnerability-in-ad-cs-allows-privilege-escalation/](https://advisory.eventussecurity.com/advisory/critical-vulnerability-in-ad-cs-allows-privilege-escalation/)
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user