滥用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用户都有权修改模板中的任何属性。
我们入侵的用户账户"billy"是"Domain Users"组的成员,因此有权修改模板配置。我们可以使用以下Certipy命令引入权限提升条件:
|
|
Certipy执行结果
如上图所示,原始模板保存在"ESC4Certificate_FOOBAR.json"中。完成攻击后,我们可以使用此配置文件轻松将模板配置恢复到原始状态。目标模板已更新以满足以下ESC1条件:
- 客户端认证:True
- 启用:True
- 注册者提供主题:True
- 需要管理审批:False
- 需要授权签名:0
此外,模板有效期从4年增加到5年。现在,任何域用户都可以使用此易受攻击的模板代表任何其他域账户请求证书。修改后的模板如下所示。
为了演示这一点,我们可以通过将用户主体名称(UPN)设置为[email protected]来为"Dan the DA"请求证书:
|
|
注意:Certipy结果将返回请求ID或对象SID。请记下此信息,因为在测试完成后需要此信息来撤销证书。
获得证书后,我们可以使用证书获取目标DA账户的凭据哈希和Kerberos票据,使用以下Certipy -auth命令:
|
|
如下图所示,我们成功检索到了DA_Dan账户的哈希值。现在我们可以模拟DA_Dan!
总结
“ESC4Certificate_FOOBAR"模板配置为允许Domain Users组(非管理员账户)的用户修改模板配置。这使得标准域用户Billy能够修改"ESC4Certificate_FOOBAR"模板,并引入允许从普通域账户提升到域管理员账户的漏洞。
清理操作
要将模板配置恢复到原始状态,请使用以下模板命令:
|
|
预防和检测
那么,我们可以采取哪些措施来预防和检测此类攻击?以下是强化证书模板的几个步骤:
- 清点证书模板,确定所有启用的模板是否当前正在使用。禁用所有不必要的模板
- 确保模板权限尽可能严格。仅授予必要的组/用户注册权限。仅授予必要的组/用户修改模板属性的权限
- 修改"颁发要求”,在可能的情况下要求手动批准颁发的证书
- 在可能的情况下禁用"注册者提供主题"标志
- 在可能的情况下移除"客户端认证”
监控
证书模板通常不会经常更改。检测应围绕意外的模板配置更改构建。当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
附加资源
- https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh831740
- SpecterOps白皮书:https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
- SpecterOps博客文章:https://posts.specterops.io/certified-pre-owned-d95910965cd2
- https://specterops.io/wp-content/uploads/sites/3/2022/06/an_ace_up_the_sleeve.pdf
- https://www.securew2.com/blog/how-to-revoke-certificate-in-windows-ad-cs
- https://www.thehacker.recipes/ad/movement/ad-cs/certificate-templates
- https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
- PKINITtools:https://github.com/dirkjanm/PKINITtools
- PyWhisker:https://github.com/ShutdownRepo/pywhisker
- Certi:https://github.com/zer1t0/certi
- Impacket:https://github.com/fortra/Impacket
- Certipy:https://github.com/ly4k/Certipy
- Certify:https://github.com/GhostPack/Certify