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

This commit is contained in:
Translator 2025-08-28 22:28:58 +00:00
parent 4b43919fe3
commit a6bdb1ad1b
2 changed files with 356 additions and 322 deletions

View File

@ -1,112 +1,122 @@
# AD Certificates
# AD 证书
{{#include ../../../banners/hacktricks-training.md}}
## Introduction
## 介绍
### Components of a Certificate
### 证书的组成部分
- 证书的**主题**表示其所有者。
- **公钥**与私有密钥配对,将证书与其合法所有者关联
- **有效期**由**NotBefore**和**NotAfter**日期定义,标记证书的有效持续时间。
- 由证书颁发机构CA提供的唯一**序列号**标识每个证书。
- **颁发者**指的是颁发证书的CA。
- **SubjectAlternativeName**允许为主题提供额外名称,增强识别灵活性。
- **基本约束**识别证书是用于CA还是终端实体,并定义使用限制。
- **扩展密钥使用EKUs**通过对象标识符OIDs划定证书的特定用途如代码签名或电子邮件加密。
- **签名算法**指定签署证书的方法。
- 使用颁发者的私钥创建的**签名**保证证书的真实性。
- 证书的 **Subject** 表示其所有者。
- **Public Key** 与一个私有的密钥配对,以将证书与其合法所有者关联起来
- **Validity Period**(由 **NotBefore****NotAfter** 日期定义)标示证书的有效期间。
- 一个唯一的 **Serial Number**,由 Certificate Authority (CA) 提供,用于标识每个证书。
- **Issuer** 指的是签发该证书的 CA。
- **SubjectAlternativeName** 允许为 Subject 指定额外的名称,以增强识别灵活性。
- **Basic Constraints** 标识证书是用于 CA 还是终端实体,并定义使用限制。
- **Extended Key Usages (EKUs)** 通过 Object Identifiers (OIDs) 划定证书的特定用途,例如代码签名或邮件加密。
- **Signature Algorithm** 指定签署证书的方法。
- **Signature** 使用颁发者的私钥创建,以保证证书的真实性。
### Special Considerations
### 特别注意事项
- **主题备用名称SANs**扩展证书的适用性到多个身份对于具有多个域的服务器至关重要。安全的颁发流程对于避免攻击者操纵SAN规范进行冒充风险至关重要
- **Subject Alternative Names (SANs)** 将证书的适用性扩展到多个身份,对于托管多个域名的服务器尤为重要。必须确保安全的签发流程,以避免攻击者通过操纵 SAN 规范进行冒充的风险
### Certificate Authorities (CAs) in Active Directory (AD)
### Active Directory (AD) 中的 Certificate Authorities (CAs)
AD CS通过指定的容器在AD森林中承认CA证书每个容器承担独特角色:
AD CS 在 AD 林中通过指定的容器认可 CA 证书,每个容器承担不同的角色:
- **Certification Authorities**容器保存受信任的根CA证书。
- **Enrolment Services**容器详细说明企业CA及其证书模板。
- **NTAuthCertificates**对象包括被授权用于AD身份验证的CA证书。
- **AIA (Authority Information Access)**容器通过中间和交叉CA证书促进证书链验证。
- **Certification Authorities** 容器保存受信任的根 CA 证书。
- **Enrolment Services** 容器列出 Enterprise CAs 及其证书模板。
- **NTAuthCertificates** 对象包含被授权用于 AD 身份验证的 CA 证书。
- **AIA (Authority Information Access)** 容器通过中间 CA 和跨域 CA 证书来支持证书链验证。
### Certificate Acquisition: Client Certificate Request Flow
### 证书获取:客户端证书请求流程
1. 请求过程始于客户端寻找企业CA。
2. 在生成公私钥对后,创建包含公钥和其他详细信息的CSR
3. CA根据可用证书模板评估CSR并根据模板的权限颁发证书。
4. 经批准后CA使用其私钥签署证书并将其返回给客户端。
1. 请求流程始于客户端查找一个 Enterprise CA。
2. 在生成公私钥对后,会创建一个 CSR包含公钥和其他信息
3. CA 根据可用的证书模板评估 CSR并基于模板的权限决定是否签发证书。
4. 经批准后CA 使用其私钥对证书签名并将其返回给客户端。
### Certificate Templates
### 证书模板
在AD中定义这些模板概述了颁发证书的设置和权限,包括允许的EKUs和注册或修改权利对于管理证书服务的访问至关重要。
这些模板 AD 中定义,概述了颁发证书的设置和权限,包括允许的 EKU 以及注册或修改权限,对管理对证书服务的访问至关重要。
## Certificate Enrollment
## 证书注册
证书的注册过程由管理员**创建证书模板**然后由企业证书颁发机构CA**发布**。这使得模板可用于客户端注册通过将模板名称添加到Active Directory对象的`certificatetemplates`字段来实现
证书的注册流程由管理员启动,管理员 **creates a certificate template**,然后由 Enterprise Certificate Authority (CA) 将其 **published**。这使模板可供客户端申请,方法是将模板名称添加到 Active Directory 对象的 `certificatetemplates` 字段中
为了让客户端请求证书,必须授予**注册权限**。这些权限由证书模板和企业CA本身的安全描述符定义。必须在两个位置授予权限才能成功请求
为了使客户端能够请求证书,必须授予其 **enrollment rights**。这些权限由证书模板和 Enterprise CA 本身上的安全描述符定义。请求要成功,必须在两个位置都授予相应权限
### Template Enrollment Rights
### 模板注册权限
这些权限通过访问控制条目ACEs指定详细说明权限如:
这些权限通过 Access Control Entries (ACEs) 指定,描述了诸如:
- **证书注册**和**证书自动注册**权限每个权限与特定的GUID相关联
- **扩展权限**,允许所有扩展权限。
- **完全控制/通用所有**,提供对模板的完全控制。
- **Certificate-Enrollment****Certificate-AutoEnrollment** 权限,每个都关联特定的 GUID
- **ExtendedRights**,允许所有扩展权限。
- **FullControl/GenericAll**,赋予对模板的完全控制。
### Enterprise CA Enrollment Rights
### Enterprise CA 注册权限
CA的权限在其安全描述符中列出,可以通过证书颁发机构管理控制台访问。一些设置甚至允许低权限用户远程访问,这可能是一个安全隐患。
CA 的权限在其安全描述符中定义,可通过 Certificate Authority 管理控制台查看。一些设置甚至允许低权限用户进行远程访问,这可能构成安全隐患。
### Additional Issuance Controls
### 额外颁发控制
某些控制可能适用,例如
可能适用的某些控制包括
- **经理批准**:将请求置于待处理状态,直到证书经理批准。
- **注册代理和授权签名**指定CSR上所需的签名数量和必要的应用程序策略OIDs。
- **Manager Approval**:将请求置于挂起状态,直到证书管理员批准。
- **Enrolment Agents and Authorized Signatures**:指定 CSR 所需的签名数量及必要的 Application Policy 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 Client Certificate Enrollment Protocol** (MS-WCCE),使用 DCOM 接口。
2. **ICertPassage Remote Protocol** (MS-ICPR),通过命名管道或 TCP/IP。
3. 通过安装了 Certificate Authority Web Enrollment role 的 **certificate enrollment web interface**
4. **Certificate Enrollment Service** (CES),配合 Certificate Enrollment Policy (CEP) 服务使用。
5. 用于网络设备的 **Network Device Enrollment Service** (NDES),使用 Simple Certificate Enrollment Protocol (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"
```
## 证书认证
Active Directory (AD) 支持证书认证,主要利用 **Kerberos****安全通道 (Schannel)** 协议。
Active Directory (AD) 支持证书认证,主要使用 **Kerberos****Secure Channel (Schannel)** 协议。
### Kerberos 认证
### Kerberos 认证
在 Kerberos 认证过程中,用户请求的票证授予票证 (TGT) 使用用户证书的 **私钥** 进行签名。该请求经过域控制器的多个验证,包括证书的 **有效性**、**路径** 和 **撤销状态**。验证还包括确认证书来自受信任的来源,并确认发行者在 **NTAUTH 证书存储** 中的存在。成功的验证将导致 TGT 的发放。AD 中的 **`NTAuthCertificates`** 对象位于:
在 Kerberos 认证流程中,用户请求 Ticket Granting Ticket (TGT) 时,该请求由用户证书的 **私钥** 签名。该请求会被域控制器进行多项校验,包括证书的 **有效性**、**路径** 和 **吊销状态**。校验还包括确认证书来源是否受信任,以及确认证书颁发者是否存在于 **NTAUTH 证书存储** 中。校验通过后会颁发 TGT。AD 中的 **`NTAuthCertificates`** 对象位于:
```bash
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
```
在证书认证中建立信任是至关重要的
是建立证书认证信任的核心
### 安全通道 (Schannel) 认证
### Secure Channel (Schannel) Authentication
Schannel 促进安全的 TLS/SSL 连接,在握手过程中,客户端会提供一个证书,如果成功验证,则授权访问。将证书映射到 AD 账户可能涉及 Kerberos 的 **S4U2Self** 函数或证书的 **主题备用名称 (SAN)**,以及其他方法。
Schannel 促进安全的 TLS/SSL 连接,在握手期间,客户端会出示一个证书;如果该证书被成功验证,则授权访问。证书与 AD 帐户的映射可能涉及 Kerberos 的 **S4U2Self** 功能,或证书的 **Subject Alternative Name (SAN)**,以及其他方法。
### AD 证书服务枚举
### AD Certificate Services Enumeration
AD 的证书服务可以通过 LDAP 查询进行枚举,揭示有关 **企业证书授权机构 (CAs)** 及其配置的信息。这对任何经过域认证的用户都是可访问的,无需特殊权限。工具如 **[Certify](https://github.com/GhostPack/Certify)** 和 **[Certipy](https://github.com/ly4k/Certipy)** 被用于 AD CS 环境中的枚举和漏洞评估。
AD 的证书服务可以通过 LDAP 查询进行枚举,揭示有关 **Enterprise Certificate Authorities (CAs)** 及其配置的信息。任何经过域身份验证的用户都可以访问这些信息,无需特殊权限。像 **[Certify](https://github.com/GhostPack/Certify)** 和 **[Certipy](https://github.com/ly4k/Certipy)** 这样的工具用于在 AD CS 环境中进行枚举和漏洞评估。
使用这些工具的命令包括:
Commands for using these tools include:
```bash
# Enumerate trusted root CA certificates and Enterprise CAs with Certify
Certify.exe cas
# Identify vulnerable certificate templates with Certify
Certify.exe find /vulnerable
# Enumerate trusted root CA certificates, Enterprise CAs and HTTP enrollment endpoints
# Useful flags: /domain, /path, /hideAdmins, /showAllPermissions, /skipWebServiceChecks
Certify.exe cas [/ca:SERVER\ca-name | /domain:domain.local | /path:CN=Configuration,DC=domain,DC=local] [/hideAdmins] [/showAllPermissions] [/skipWebServiceChecks]
# Identify vulnerable certificate templates and filter for common abuse cases
Certify.exe find
Certify.exe find /vulnerable [/currentuser]
Certify.exe find /enrolleeSuppliesSubject # ESC1 candidates (CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT)
Certify.exe find /clientauth # templates with client-auth EKU
Certify.exe find /showAllPermissions # include template ACLs in output
Certify.exe find /json /outfile:C:\Temp\adcs.json
# Enumerate PKI object ACLs (Enterprise PKI container, templates, OIDs) useful for ESC4/ESC7 discovery
Certify.exe pkiobjects [/domain:domain.local] [/showAdmins]
# Use Certipy for enumeration and identifying vulnerable templates
certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
@ -115,9 +125,11 @@ certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
certutil.exe -TCAInfo
certutil -v -dstemplate
```
## 参考
## 参考资料
- [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)
- [GhostPack/Certify](https://github.com/GhostPack/Certify)
- [GhostPack/Rubeus](https://github.com/GhostPack/Rubeus)
{{#include ../../../banners/hacktricks-training.md}}