AD CS Domain Persistence
这是在 https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf 中分享的域持久性技术摘要。查看以获取更多详细信息。
使用窃取的 CA 证书伪造证书 - DPERSIST1
如何判断证书是否为 CA 证书?
如果满足以下几个条件,可以确定证书是 CA 证书:
证书存储在 CA 服务器上,其私钥由机器的 DPAPI 或硬件(如 TPM/HSM,如果操作系统支持)安全保护。
证书的颁发者和主题字段与 CA 的专有名称匹配。
CA 证书中独占存在“CA 版本”扩展。
证书缺少扩展密钥用途(EKU)字段。
要提取此证书的私钥,CA 服务器上的 certsrv.msc
工具是通过内置 GUI 支持的方法。然而,此证书与系统中存储的其他证书无异;因此,可以应用 THEFT2 技术 进行提取。
还可以使用 Certipy 获取证书和私钥,命令如下:
在获取了以 .pfx
格式的 CA 证书及其私钥后,可以利用类似 ForgeCert 的工具生成有效证书:
为了成功进行证书伪造,目标用户必须处于活动状态并能够在Active Directory中进行身份验证。对于像krbtgt这样的特殊帐户进行证书伪造是无效的。
这个伪造的证书将在指定的结束日期之前有效,并且只要根CA证书有效(通常为5到10年以上)。它也适用于机器,因此结合S4U2Self,攻击者可以在CA证书有效的情况下在任何域机器上保持持久性。 此外,使用此方法生成的证书是无法吊销的,因为CA不知道它们的存在。
信任恶意CA证书 - DPERSIST2
NTAuthCertificates
对象被定义为在其cacertificate
属性中包含一个或多个CA证书,Active Directory(AD)会使用这些证书。域控制器的验证过程涉及检查NTAuthCertificates
对象,以查找与认证证书的Issuer字段中指定的CA匹配的条目。如果找到匹配项,则进行身份验证。
攻击者可以将自签名的CA证书添加到NTAuthCertificates
对象中,前提是他们控制了这个AD对象。通常,只有企业管理员组的成员,以及域管理员或林根域的管理员被授予权限修改此对象。他们可以使用certutil.exe
编辑NTAuthCertificates
对象,命令为certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA126
,或者使用PKI Health Tool。
当与先前概述的使用ForgeCert动态生成证书的方法结合使用时,这种能力尤为重要。
恶意配置错误 - DPERSIST3
通过对AD CS组件的安全描述符进行修改,攻击者有很多机会实现持久性。在"域提升"部分描述的修改可以被具有提升访问权限的攻击者恶意实施。这包括向敏感组件(例如CA服务器的AD计算机对象、CA服务器的RPC/DCOM服务器、CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>
中的任何后代AD对象或容器(例如证书模板容器、证书颁发机构容器、NTAuthCertificates对象等)、默认或组织授予控制AD CS权限的AD组(例如内置的Cert Publishers组及其任何成员))添加“控制权限”(例如WriteOwner/WriteDACL等)。
恶意实施的一个例子是,攻击者在域中具有提升权限,向默认的**User
证书模板添加WriteOwner
权限,并将自己设置为权限的主体。为了利用这一点,攻击者首先会将User
模板的所有权更改为自己。随后,在模板上将mspki-certificate-name-flag
设置为1**,以启用**ENROLLEE_SUPPLIES_SUBJECT
,允许用户在请求中提供主题备用名称。随后,攻击者可以使用模板进行注册**,选择一个域管理员名称作为备用名称,并利用获得的证书进行DA身份验证。
最后更新于