Translated ['src/windows-hardening/active-directory-methodology/ad-certi

This commit is contained in:
Translator 2025-07-10 10:08:44 +00:00
parent e970d8e947
commit 68c4fa5e6d

View File

@ -2,81 +2,81 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## 介绍 ## Introduction
### 证书的组成部分 ### Components of a Certificate
- 证书的**主题**表示其所有者。 - 证书的**主题**表示其所有者。
- **公钥**与私有密钥配对,将证书与其合法所有者关联。 - **公钥**与私有密钥配对,将证书与其合法所有者关联。
- **有效期**由**NotBefore**和**NotAfter**日期定义,标记证书的有效持续时间。 - **有效期**由**NotBefore**和**NotAfter**日期定义,标记证书的有效持续时间。
- 由证书颁发机构 (CA) 提供的唯一 **序列号** 用于识别每个证书。 - 由证书颁发机构CA提供的唯一**序列号**标识每个证书。
- **颁发者**指的是颁发证书的CA。 - **颁发者**指的是颁发证书的CA。
- **SubjectAlternativeName**允许为主题提供额外名称,增强识别灵活性。 - **SubjectAlternativeName**允许为主题提供额外名称,增强识别灵活性。
- **基本约束** 确定证书是用于 CA 还是最终实体,并定义使用限制。 - **基本约束**识别证书是用于CA还是最终实体,并定义使用限制。
- **扩展密钥使用 (EKUs)** 通过对象标识符 (OIDs) 划定证书的特定用途,如代码签名或电子邮件加密。 - **扩展密钥使用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 证书。 - **Certification Authorities**容器保存受信任的根CA证书。
- **注册服务** 容器详细说明企业 CA 及其证书模板。 - **Enrolment Services**容器详细说明企业CA及其证书模板。
- **NTAuthCertificates** 对象包括被授权用于 AD 认证的 CA 证书。 - **NTAuthCertificates**对象包括被授权用于AD身份验证的CA证书。
- **AIA (Authority Information Access)**容器通过中间和交叉CA证书促进证书链验证。 - **AIA (Authority Information Access)**容器通过中间和交叉CA证书促进证书链验证。
### 证书获取:客户端证书请求流程 ### Certificate Acquisition: Client Certificate Request Flow
1. 请求过程从客户端寻找企业CA开始。 1. 请求过程从客户端寻找企业CA开始。
2. 在生成公私钥对后创建包含公钥和其他详细信息的CSR。 2. 在生成公私钥对后创建包含公钥和其他详细信息的CSR。
3. CA 根据可用证书模板评估 CSR基于模板的权限颁发证书。 3. CA根据可用证书模板评估CSR并根据模板的权限颁发证书。
4. 经批准后CA使用其私钥签署证书并将其返回给客户端。 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 接口。 1. **Windows客户端证书注册协议**MS-WCCE使用DCOM接口。
2. **ICertPassage 远程协议** (MS-ICPR),通过命名管道或 TCP/IP。 2. **ICertPassage远程协议**MS-ICPR通过命名管道或TCP/IP。
3. **证书注册Web界面**安装了证书颁发机构Web注册角色。 3. **证书注册Web界面**安装了证书颁发机构Web注册角色。
4. **证书注册服务** (CES),与证书注册策略 (CEP) 服务结合使用。 4. **证书注册服务**CES与证书注册策略CEP服务结合使用。
5. **网络设备注册服务** (NDES) 用于网络设备,使用简单证书注册协议 (SCEP) 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 ```bash
# Example of requesting a certificate using PowerShell # Example of requesting a certificate using PowerShell
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My" Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
@ -87,7 +87,7 @@ Active Directory (AD) 支持证书认证,主要利用 **Kerberos** 和 **安
### Kerberos 认证过程 ### Kerberos 认证过程
在 Kerberos 认证过程中,用户请求的票据授予票据 (TGT) 使用用户证书的 **私钥** 进行签名。该请求经过域控制器的多个验证,包括证书的 **有效性**、**路径** 和 **撤销状态**。验证还包括确认证书来自受信任的来源,并确认发行者在 **NTAUTH 证书存储** 中的存在。成功的验证将导致 TGT 的发放。AD 中的 **`NTAuthCertificates`** 对象位于: 在 Kerberos 认证过程中,用户请求的票证授予票证 (TGT) 使用用户证书的 **私钥** 进行签名。该请求经过域控制器的多个验证,包括证书的 **有效性**、**路径** 和 **撤销状态**。验证还包括确认证书来自受信任的来源,并确认发行者在 **NTAUTH 证书存储** 中的存在。成功的验证将导致 TGT 的发放。AD 中的 **`NTAuthCertificates`** 对象位于:
```bash ```bash
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com> CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
``` ```
@ -99,7 +99,7 @@ Schannel 促进安全的 TLS/SSL 连接,在握手过程中,客户端会提
### AD 证书服务枚举 ### 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 ```bash
@ -108,16 +108,52 @@ Certify.exe cas
# Identify vulnerable certificate templates with Certify # Identify vulnerable certificate templates with Certify
Certify.exe find /vulnerable Certify.exe find /vulnerable
# Use Certipy for enumeration and identifying vulnerable templates # Use Certipy (>=4.0) for enumeration and identifying vulnerable templates
certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128 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 # Enumerate Enterprise CAs and certificate templates with certutil
certutil.exe -TCAInfo certutil.exe -TCAInfo
certutil -v -dstemplate certutil -v -dstemplate
``` ```
## 参考 ---
## 最近的漏洞与安全更新 (2022-2025)
| 年份 | ID / 名称 | 影响 | 关键要点 |
|------|-----------|--------|----------------|
| 2022 | **CVE-2022-26923** “Certifried” / ESC6 | *特权提升*,通过在 PKINIT 期间伪造机器账户证书。 | 补丁包含在 **2022年5月10日** 的安全更新中。通过 **KB5014754** 引入审计和强映射控制;环境现在应处于 *完全强制* 模式。 citeturn2search0 |
| 2023 | **CVE-2023-35350 / 35351** | *远程代码执行* 在 AD CS Web Enrollment (certsrv) 和 CES 角色中。 | 公开的 PoC 限制较少,但易受攻击的 IIS 组件通常在内部暴露。补丁自 **2023年7月** 的补丁星期二起生效。 citeturn3search0 |
| 2024 | **CVE-2024-49019** “EKUwu” / ESC15 | 具有注册权限的低权限用户可以在 CSR 生成期间覆盖 **任何** EKU 或 SAN发放可用于客户端身份验证或代码签名的证书导致 *域被攻陷*。 | 在 **2024年4月** 的更新中解决。移除模板中的“请求中提供”并限制注册权限。 citeturn1search3 |
### 微软强化时间表 (KB5014754)
微软引入了三阶段的推出(兼容性 → 审计 → 强制),以将 Kerberos 证书认证从弱隐式映射中移除。自 **2025年2月11日** 起,如果未设置 `StrongCertificateBindingEnforcement` 注册表值,域控制器将自动切换到 **完全强制**。管理员应:
1. 修补所有 DC 和 AD CS 服务器2022年5月或更晚
2. 在 *审计* 阶段监控事件 ID 39/41 以查找弱映射。
3. 在 2025年2月之前重新签发带有新 **SID 扩展** 的客户端认证证书或配置强手动映射。 citeturn2search0
---
## 检测与强化增强
* **Defender for Identity AD CS 传感器 (2023-2024)** 现在提供 ESC1-ESC8/ESC11 的姿态评估,并生成实时警报,例如 *“非 DC 的域控制器证书发放”* (ESC8) 和 *“防止使用任意应用程序策略的证书注册”* (ESC15)。确保传感器部署到所有 AD CS 服务器,以便受益于这些检测。 citeturn5search0
* 禁用或严格限制所有模板上的 **“请求中提供”** 选项;优先使用明确定义的 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://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://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}} {{#include ../../banners/hacktricks-training.md}}