8
月
在社区成长 8 月
LEVEL 90
100 XP
配置错误的证书模板(尤其是受ESC9 影响的证书模板)对Active Directory 环境构成严重威胁。通过CT_FLAG_NO_SECURITY_EXTENSION 标志禁用szOID_NTDS_CA_SECURITY_EXT 安全扩展,即使启用了StrongCertificateBindingEnforcement,仍然可以利用弱或隐式证书映射。这种错误配置使攻击者能够绕过安全机制,并可能将权限升级到未经授权的域管理员访问权限。
在本文中,我们将分解证书映射的概念(隐式与显式、弱与强),解释证书模板属性的作用,并重点介绍ESC9 如何在企业网络中造成危险的安全漏洞。
以管理员身份使用certipy LDAP Shell 进行利用后横向移动权限提升
使用Evil-Winrm 横向移动权限升级
缓解措施
它具体发生在什么时候:
证书模板允许用户提供使用者备用名称(SAN)(如UPN),以及
证书颁发机构(CA) 尊重这些SAN,没有足够的限制。
因此,低权限用户可以为任何身份(例如域管理员)请求证书,然后使用该证书通过PKINIT 获取Kerberos TGT,从而导致整个域受到攻击。
ESC9 所需的条件要被利用,以下条件必须全部满足:
可以在请求中提供主体名称或SAN → 由msPKI-Certificate-Name-Flag 属性控制; 1、17 等值表示漏洞
CA 尊重请求中的SAN → 通过EditFlags 注册表项启用(0x10000000=EDITF_ATTRIBUTESUBJECTALTNAME2)
低权限用户可以访问模板→ ENROLL 权限授予域用户或经过身份验证的用户没有主题名称强制执行→ 模板不仅限于AD 解析的名称
UPN 欺骗是可能的→ 攻击者可以请求任何UPN 的证书,甚至是属于域管理员的证书
msPKI-证书-名称-标志值:0x0/0 → 仅从AD 构建(安全)
0x1/1 → 根据请求提供(易受ESC9 攻击)
0x3/3 → 根据AD 构建+ 根据请求提供(也容易受到攻击)
0x10/16 → 在SAN 中强制执行UPN(如果与请求中的供应结合使用,则为ESC9 所必需)
msPKI-Enrollment-Flag 位值:0x1/1 → 包括对称算法
0x2/2 → 允许密钥存档
0x10/16 → 从存储中删除吊销的证书
0x20/32 → 不要保留主题
0x40/64 → 在主题中包含电子邮件
其他标志:flags(常规)→ 控制模板可用性、自动注册等。
msPKI-Template-Schema-Version1=旧模板
3=现代模板
如果msPKI-Certificate-Name-Flag=1 或3 并且SAN 包含UserPrincipalName,则ESC9 可被利用。Note: 有关更多详细信息,请参阅有关msPKI-Certificate-Name-Flag 和msPKI-Enrollment-Flag 属性的Microsoft 文档
此问题的核心是证书映射,即将证书链接到AD 帐户的过程。问题的核心是证书映射:
隐式映射: 将证书的使用者备用名称(SAN) 与AD 帐户属性(例如userPrincipalName)相匹配。易于使用,但如果不采取强有力的强制措施,则容易受到攻击(SAN 欺骗风险)。
显式映射: 需要通过altSecurityIdentities 手动链接证书如果攻击者可以修改用户属性,则更安全,但存在风险。
通常,当证书包含特殊安全扩展(szOID_NTDS_CA_SECURITY_EXT) 时,会强制执行强映射。此扩展确保只有受信任的证书颁发机构(CA) 颁发的证书才能安全地对用户进行身份验证。
但是,当证书模板设置了CT_FLAG_NO_SECURITY_EXTENSION 标志时,该关键扩展将被排除。即使系统配置为强制执行强映射(StrongCertificateBindingEnforcement=1),这也会禁用强映射。
因此,允许弱映射,攻击者可以:
注册基于易受攻击的模板的证书
修改AD 帐户的altSecurityIdentities 属性
使用该证书以任何用户(甚至域管理员)身份进行身份验证这是ESC9: 的核心,通过利用错误配置的证书模板,攻击者可以将弱映射转变为权限升级的强大路径。
域必须配置Active Directory 证书服务和证书颁发机构。
Kali Linux 包含各种工具
Tools: Evil-Winrm、certipy-ad
然后,右键单击证书模板→ 单击管理。
注: 创建或复制证书模板时,请为模板兼容性选择Windows Server 2016(或兼容版本)。这决定了可用的功能,例如对主题备用名称(SAN) 的支持。
将模板显示名称更改为ESC9。
然后,根据需要设置有效期/续订期限。
选中在Active Directory 中发布证书。
然后单击“应用”,然后单击“确定”。
选择从此Active Directory 信息构建。
未选中主题名称中包含电子邮件名称。
用户主体名称(UPN) 在SAN 下进行检查。
Note: 这是默认配置。它限制冒充。
从列表中选择新创建的ESC9 模板。
单击“确定”。
在本文中,我们将分解证书映射的概念(隐式与显式、弱与强),解释证书模板属性的作用,并重点介绍ESC9 如何在企业网络中造成危险的安全漏洞。
目录
ESC9 攻击概述ESC9 整数属性证书映射先决条件实验室设置枚举利用方法1: 基于模板的管理员模拟以管理员身份使用certipy LDAP Shell 进行利用后横向移动权限提升
使用Evil-Winrm 横向移动权限升级
缓解措施
ESC9 攻击概述
ESC9 是Active Directory 证书服务(ADCS) 中确定的升级路径之一,它允许攻击者滥用配置错误的证书模板来冒充特权用户,例如域管理员。它具体发生在什么时候:
证书模板允许用户提供使用者备用名称(SAN)(如UPN),以及
证书颁发机构(CA) 尊重这些SAN,没有足够的限制。
因此,低权限用户可以为任何身份(例如域管理员)请求证书,然后使用该证书通过PKINIT 获取Kerberos TGT,从而导致整个域受到攻击。
ESC9 所需的条件要被利用,以下条件必须全部满足:
可以在请求中提供主体名称或SAN → 由msPKI-Certificate-Name-Flag 属性控制; 1、17 等值表示漏洞
CA 尊重请求中的SAN → 通过EditFlags 注册表项启用(0x10000000=EDITF_ATTRIBUTESUBJECTALTNAME2)
低权限用户可以访问模板→ ENROLL 权限授予域用户或经过身份验证的用户没有主题名称强制执行→ 模板不仅限于AD 解析的名称
UPN 欺骗是可能的→ 攻击者可以请求任何UPN 的证书,甚至是属于域管理员的证书
ESC9 整数属性
Active Directory 证书服务(ADCS) 中的msPKI-Certificate-Name-Flag 和msPKI-Enrollment-Flag 属性控制证书模板处理使用者名称和注册行为的方式。这是概述:msPKI-证书-名称-标志值:0x0/0 → 仅从AD 构建(安全)
0x1/1 → 根据请求提供(易受ESC9 攻击)
0x3/3 → 根据AD 构建+ 根据请求提供(也容易受到攻击)
0x10/16 → 在SAN 中强制执行UPN(如果与请求中的供应结合使用,则为ESC9 所必需)
msPKI-Enrollment-Flag 位值:0x1/1 → 包括对称算法
0x2/2 → 允许密钥存档
0x10/16 → 从存储中删除吊销的证书
0x20/32 → 不要保留主题
0x40/64 → 在主题中包含电子邮件
其他标志:flags(常规)→ 控制模板可用性、自动注册等。
msPKI-Template-Schema-Version1=旧模板
3=现代模板
如果msPKI-Certificate-Name-Flag=1 或3 并且SAN 包含UserPrincipalName,则ESC9 可被利用。Note: 有关更多详细信息,请参阅有关msPKI-Certificate-Name-Flag 和msPKI-Enrollment-Flag 属性的Microsoft 文档
证书映射
ESC9 是Active Directory 证书服务(AD CS) 中的严重错误配置,允许攻击者绕过强身份验证并冒充特权用户。此问题的核心是证书映射,即将证书链接到AD 帐户的过程。问题的核心是证书映射:
隐式映射: 将证书的使用者备用名称(SAN) 与AD 帐户属性(例如userPrincipalName)相匹配。易于使用,但如果不采取强有力的强制措施,则容易受到攻击(SAN 欺骗风险)。
显式映射: 需要通过altSecurityIdentities 手动链接证书如果攻击者可以修改用户属性,则更安全,但存在风险。
通常,当证书包含特殊安全扩展(szOID_NTDS_CA_SECURITY_EXT) 时,会强制执行强映射。此扩展确保只有受信任的证书颁发机构(CA) 颁发的证书才能安全地对用户进行身份验证。
但是,当证书模板设置了CT_FLAG_NO_SECURITY_EXTENSION 标志时,该关键扩展将被排除。即使系统配置为强制执行强映射(StrongCertificateBindingEnforcement=1),这也会禁用强映射。
因此,允许弱映射,攻击者可以:
注册基于易受攻击的模板的证书
修改AD 帐户的altSecurityIdentities 属性
使用该证书以任何用户(甚至域管理员)身份进行身份验证这是ESC9: 的核心,通过利用错误配置的证书模板,攻击者可以将弱映射转变为权限升级的强大路径。
先决条件
Windows Server 2019 作为支持PKINIT 的Active Directory域必须配置Active Directory 证书服务和证书颁发机构。
Kali Linux 包含各种工具
Tools: Evil-Winrm、certipy-ad
实验室设置
第 1 步:打开证书模板控制台
首先,打开证书颁发机构(certsrv.msc)。然后,右键单击证书模板→ 单击管理。
第 2 步:复制“用户”模板
找到用户,然后右键单击→ 选择复制模板。
第 3 步:配置通用模板信息
在“常规”选项卡下:将模板显示名称更改为ESC9。
然后,根据需要设置有效期/续订期限。
选中在Active Directory 中发布证书。
然后单击“应用”,然后单击“确定”。
第 4 步:配置主题名称 - 默认(安全)状态
然后,转到主题名称选项卡: 确保选择从此Active Directory 信息构建。
未选中主题名称中包含电子邮件名称。
用户主体名称(UPN) 在SAN 下进行检查。
Note: 这是默认配置。它限制冒充。
第 5 步:返回证书颁发机构控制台
返回certsrv.msc,右键单击“证书模板”→“新建”→“要颁发的证书模板”。
第 6 步:确认 ESC9 现已发布
验证ESC9 是否显示在CA 控制台的“证书模板”节点下。从列表中选择新创建的ESC9 模板。
单击“确定”。