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