ADCS ESC16 – CA 上禁用的安全扩展(全球)

cipher

版主

cipher Rep
0
0
0
Rep
0
cipher Vouches
Vouches
0
8 MONTHS
8 8 MONTHS OF SERVICE
cipher 获得
0
0
0
获得
0
cipher 凭证
0
0
0
凭证
0
主题
18
点赞
0
HakB
8
在社区成长 8 月
LEVEL 50 100 XP
 
AD CS 中的ESC16 漏洞允许攻击者绕过证书验证并通过错误配置的模板、UPN 映射和影子凭据来升级权限。这可能会导致整个域受到损害。立即缓解对于保护您的Microsoft PKI 并防止未经授权的访问至关重要。

目录​

概述ESC16 攻击先决条件实验室设置枚举利用后利用横向移动使用Evil-Winrm 进行权限升级
缓解措施

ESC16 攻击概述​

ESC16 是Active Directory 证书服务(AD CS) 中的一种泄露后攻击技术,它结合了薄弱的证书扩展控制、不正确的UPN 处理和影子凭据,以实现完全域泄露。
从本质上讲,ESC16 滥用了两个主要弱点:
滥用DisableExtensionList注册表项如果配置不当,攻击者就可以绕过证书扩展的限制,从而为影子凭证或其他身份操纵打开大门。
临时UPN 操纵通过授予自己对另一个帐户的用户主体名称(UPN) 的写入权限,攻击者可以在证书请求期间模拟特权帐户(如管理员)。
当这些缺陷结合在一起时,低权限的攻击者可以利用这些缺陷:
请求绕过扩展限制的证书将它们映射到高价值帐户使用影子凭据进行持久性
在不触发传统密码/哈希检测的情况下转向域管理员权限

为什么 ESC16 很危险​

利用基于注册表的强化错误(DisableExtensionList)。
利用属性级权限(对UPN 的写入访问权限)。
通过影子凭证启用隐秘持久性。
Works even in hardened environments with StrongCertificateBindingEnforcement enabled.
Result: A complete compromise of Active Directory with minimal touch points.

先决条件​

Windows Server 2019 作为支持PKINIT 的Active Directory
域必须配置Active Directory 证书服务和证书颁发机构。
Kali Linux 包含各种工具
Tools: Evil-Winrm、certipy-ad

实验室设置​

在本指南中,我们不会介绍完整的AD CS 部署。 Instead, we assume a typical enterprise environment where:
已安装Active Directory 和AD CS 存在两个域用户:
raj(攻击者控制)sanjeet(低权限目标)证书颁发机构(ignite-DC01-CA) 正在运行
首先,我们的第一步是验证和调整Active Directory 和CA 中的设置,以确保ESC16 的先决条件具备。

检查用户组成员资格​

在Active Directory 用户和计算机(ADUC):中首先打开raj → 属性→
1.1.png
的成员
然后,打开sanjeet → 属性→
1.2.png
的成员
枚举两个帐户的权限并评估是否可以利用sanjeet 作为权限升级的关键点。

向 sanjeet 上的 raj 授予写入权限​

ADUC:
首先,打开Sanjeet → 属性→ 安全→ AdvancedAdd raj
然后,授予写入权限最后,应用更改
1.3.png

此权限使raj 能够修改sanjeet 的敏感属性(例如UPN),这是后续权限提升步骤的关键先决条件。

调整 KDC 和 CA 注册表设置​

要使ESC16 攻击成功,某些KDC 和CA 注册表设置必须配置错误或过于宽松。此步骤涉及审核这些设置,以识别或利用允许具有提升权限的证书请求(例如,使用其他用户的SID 或UPN)的弱点。
重点关注领域:
KDC 设置,例如AllowAltSecurityIdentities
处理SubjectAltName字段和EKU的CA模板
使用reg query 或PowerShell 等工具进行枚举
此处的不正确设置可能会允许低权限用户通过基于证书的身份验证来冒充高权限帐户。

启用强大的证书绑定强制执行​

设置StrongCertificateBindingEnforcement DWORD 注册表项会激活此严格验证,这是专注于保护PKI 和Kerberos 身份验证的企业环境中的常见强化措施。
1.png

这模拟了强制执行强绑定的场景,这在强化的企业环境中很常见。可以使用以下命令完成验证。
2.1.png

修改CA禁用扩展列表​

修改证书颁发机构上的DisableExtensionList 注册表设置会从黑名单中删除某些扩展,从而允许接受关键证书扩展(例如用于影子凭据的证书扩展)。
certutil -setreg 策略\DisableExtensionList +1.3.6.1.4.1.311.25.2
该命令将扩展名1.3.6.1.4.1.311.25.2 添加到CA 的允许列表中,允许颁发具有此扩展名的证书,从而启用影子凭证等技术。
2.png

certutil -getreg 策略\DisableExtensionList
这将检索CA 阻止或允许的证书扩展的当前列表,显示哪些扩展被禁用或允许。
3.png

修改证书颁发机构(CA) 注册表设置(例如更新禁用扩展列表)后,需要重新启动证书服务(certsvc) 才能应用更改。重新启动可确保CA 加载更新的配置,从而允许新的证书颁发策略或扩展立即生效,而无需重新启动系统。
网络停止certsvc
网络启动certsvc
4.png

枚举利用​

枚举易受攻击的模板​

certipy-ad find -u raj -p Passworda1 -dc-ip 192.168.220.138 -vulnerable -stdout
5.png

这枚举了我们可用的证书模板,并将任何潜在风险的配置识别为
6.png

读取 sanjeet 帐户属性​

certipy-ad 帐户-u raj -p 密码@1 -dc-ip 192.168.220.138 -user sanjeet 读取
这将验证是否可以查询sanjeet 并检查其帐户的任何可写权限。
7.png

将 Sanjeet 的 UPN 更改为管理员​

certipy-ad 帐户-u raj -p 密码@1 -dc-ip 192.168.220.138 -upn 管理员-user sanjeet 更新
这会暂时将sanjeet 映射到[email protected],从而允许CA 被欺骗
 
顶部