AD CS Domain Escalation
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
这是对帖子中升级技术部分的总结:
企业 CA 授予低权限用户注册权。
不需要经理批准。
不需要授权人员的签名。
证书模板上的安全描述符过于宽松,允许低权限用户获得注册权。
证书模板配置为定义促进身份验证的 EKU:
包含客户端身份验证 (OID 1.3.6.1.5.5.7.3.2)、PKINIT 客户端身份验证 (1.3.6.1.5.2.3.4)、智能卡登录 (OID 1.3.6.1.4.1.311.20.2.2)、任何目的 (OID 2.5.29.37.0) 或无 EKU (SubCA) 等扩展密钥使用 (EKU) 标识符。
模板允许请求者在证书签名请求 (CSR) 中包含 subjectAltName:
如果存在,Active Directory (AD) 在证书中优先考虑 subjectAltName (SAN) 进行身份验证。这意味着通过在 CSR 中指定 SAN,可以请求证书以冒充任何用户(例如,域管理员)。请求者是否可以指定 SAN 在证书模板的 AD 对象中通过 mspki-certificate-name-flag
属性指示。该属性是一个位掩码,存在 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT
标志允许请求者指定 SAN。
上述配置允许低权限用户请求具有任何选择的 SAN 的证书,从而通过 Kerberos 或 SChannel 作为任何域主体进行身份验证。
此功能有时被启用以支持产品或部署服务的 HTTPS 或主机证书的即时生成,或由于缺乏理解。
需要注意的是,使用此选项创建证书会触发警告,而当复制现有证书模板(例如,启用了 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT
的 WebServer
模板)并修改以包含身份验证 OID 时则不会。
要查找易受攻击的证书模板,您可以运行:
要利用此漏洞冒充管理员,可以运行:
然后您可以将生成的 证书转换为 .pfx
格式,并再次使用 Rubeus 或 certipy 进行 身份验证:
The Windows binaries "Certreq.exe" & "Certutil.exe" 可以用来生成 PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
在 AD Forest 的配置架构中枚举证书模板,特别是那些不需要批准或签名、具有客户端身份验证或智能卡登录 EKU,并且启用了 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT
标志的,可以通过运行以下 LDAP 查询来执行:
第二个滥用场景是第一个场景的变体:
企业 CA 授予低权限用户注册权限。
禁用经理批准的要求。
省略授权签名的需要。
证书模板上的安全描述符过于宽松,授予低权限用户证书注册权限。
证书模板被定义为包含任何目的 EKU 或没有 EKU。
任何目的 EKU 允许攻击者为 任何目的 获取证书,包括客户端身份验证、服务器身份验证、代码签名等。可以使用与 ESC3 相同的 技术 来利用此场景。
具有 无 EKU 的证书,作为下级 CA 证书,可以被用于 任何目的,并且 也可以用来签署新证书。因此,攻击者可以利用下级 CA 证书指定任意 EKU 或字段在新证书中。
然而,如果下级 CA 未被 NTAuthCertificates
对象信任(这是默认设置),则为 域身份验证 创建的新证书将无法正常工作。尽管如此,攻击者仍然可以创建 具有任何 EKU 和任意证书值的新证书。这些证书可能会被 滥用 用于广泛的目的(例如,代码签名、服务器身份验证等),并可能对网络中其他应用程序(如 SAML、AD FS 或 IPSec)产生重大影响。
要枚举与此场景匹配的模板,可以运行以下 LDAP 查询:
这个场景与第一个和第二个场景类似,但利用了不同的 EKU(证书请求代理)和两个不同的模板(因此有两组要求),
证书请求代理 EKU(OID 1.3.6.1.4.1.311.20.2.1),在 Microsoft 文档中称为注册代理,允许一个主体代表另一个用户进行证书注册。
“注册代理”在这样的模板中注册,并使用生成的证书代表其他用户共同签署 CSR。然后,它将共同签署的 CSR发送到 CA,注册一个允许“代表注册”的模板,CA 返回一个属于“其他”用户的证书。
Requirements 1:
企业 CA 授予低权限用户注册权。
省略了经理批准的要求。
没有授权签名的要求。
证书模板的安全描述符过于宽松,授予低权限用户注册权。
证书模板包括证书请求代理 EKU,允许代表其他主体请求其他证书模板。
Requirements 2:
企业 CA 授予低权限用户注册权。
经理批准被绕过。
模板的架构版本为 1 或超过 2,并指定了需要证书请求代理 EKU 的应用程序策略发行要求。
证书模板中定义的 EKU 允许域身份验证。
CA 上未对注册代理应用限制。
您可以使用 Certify 或 Certipy 来利用此场景:
The 用户 who are allowed to 获取 an 注册代理证书, the templates in which enrollment 代理 are permitted to enroll, and the 账户 on behalf of which the enrollment agent may act can be constrained by enterprise CAs. This is achieved by opening the certsrc.msc
管理单元, 右键点击 CA, 点击属性, and then 导航 to the “Enrollment Agents” tab.
However, it is noted that the 默认 setting for CAs is to “不限制注册代理.” When the restriction on enrollment agents is enabled by administrators, setting it to “Restrict enrollment agents,” the default configuration remains extremely permissive. It allows 所有人 access to enroll in all templates as anyone.
The 安全描述符 on 证书模板 defines the 权限 specific AD 实体 possess concerning the template.
Should an 攻击者 possess the requisite 权限 to 更改 a 模板 and 建立 any 可利用的错误配置 outlined in 之前的部分, privilege escalation could be facilitated.
Notable permissions applicable to certificate templates include:
所有者: Grants implicit control over the object, allowing for the modification of any attributes.
完全控制: Enables complete authority over the object, including the capability to alter any attributes.
写入所有者: Permits the alteration of the object's owner to a principal under the attacker's control.
写入 DACL: Allows for the adjustment of access controls, potentially granting an attacker FullControl.
写入属性: Authorizes the editing of any object properties.
An example of a privesc like the previous one:
ESC4 is when a user has write privileges over a certificate template. This can for instance be abused to overwrite the configuration of the certificate template to make the template vulnerable to ESC1.
As we can see in the path above, only JOHNPC
has these privileges, but our user JOHN
has the new AddKeyCredentialLink
edge to JOHNPC
. Since this technique is related to certificates, I have implemented this attack as well, which is known as Shadow Credentials. Here’s a little sneak peak of Certipy’s shadow auto
command to retrieve the NT hash of the victim.
Certipy 可以通过一个命令覆盖证书模板的配置。默认情况下,Certipy 将覆盖配置,使其对 ESC1 易受攻击。我们还可以指定 -save-old
参数以保存旧配置,这在我们攻击后 恢复 配置时将非常有用。
广泛的基于ACL的关系网络,包括证书模板和证书颁发机构之外的多个对象,可能会影响整个AD CS系统的安全性。这些对象可能显著影响安全性,包括:
CA服务器的AD计算机对象,可能通过S4U2Self或S4U2Proxy等机制被攻陷。
CA服务器的RPC/DCOM服务器。
在特定容器路径CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>
内的任何后代AD对象或容器。该路径包括但不限于证书模板容器、认证机构容器、NTAuthCertificates对象和注册服务容器等容器和对象。
如果低权限攻击者设法控制这些关键组件中的任何一个,PKI系统的安全性可能会受到威胁。
在CQure Academy帖子中讨论的主题也涉及**EDITF_ATTRIBUTESUBJECTALTNAME2
标志的影响,如微软所述。当在认证机构(CA)上激活此配置时,允许在任何请求的主题备用名称中包含用户定义的值**,包括那些由Active Directory®构建的请求。因此,这一条款允许入侵者通过为域认证设置的任何模板进行注册——特别是那些对无特权用户注册开放的模板,如标准用户模板。结果,证书可以被获取,使入侵者能够作为域管理员或域内的任何其他活动实体进行身份验证。
注意:通过certreq.exe
中的-attrib "SAN:"
参数将备用名称附加到证书签名请求(CSR)的方法(称为“名称值对”)与ESC1中SAN的利用策略存在对比。在这里,区别在于账户信息的封装方式——在证书属性中,而不是扩展中。
要验证该设置是否已激活,组织可以使用以下命令与certutil.exe
:
此操作本质上使用 远程注册表访问,因此,另一种方法可能是:
像 Certify 和 Certipy 这样的工具能够检测到这种错误配置并加以利用:
要更改这些设置,假设拥有域管理员权限或同等权限,可以从任何工作站执行以下命令:
要在您的环境中禁用此配置,可以使用以下命令删除标志:
在2022年5月的安全更新之后,新发行的证书将包含一个安全扩展,该扩展包含请求者的 objectSid
属性。对于ESC1,此SID源自指定的SAN。然而,对于ESC6,SID反映请求者的 objectSid
,而不是SAN。
要利用ESC6,系统必须易受ESC10(弱证书映射)的影响,该漏洞优先考虑SAN而不是新的安全扩展。
证书颁发机构的访问控制通过一组权限来维护,这些权限管理CA的操作。可以通过访问certsrv.msc
,右键单击CA,选择属性,然后导航到安全选项卡来查看这些权限。此外,可以使用PSPKI模块和以下命令枚举权限:
这提供了对主要权限的洞察,即 ManageCA
和 ManageCertificates
,分别与“CA管理员”和“证书管理器”的角色相关。
在证书颁发机构拥有 ManageCA
权限使得主体能够使用 PSPKI 远程操控设置。这包括切换 EDITF_ATTRIBUTESUBJECTALTNAME2
标志,以允许在任何模板中指定 SAN,这是域提升的一个关键方面。
通过使用 PSPKI 的 Enable-PolicyModuleFlag cmdlet,可以简化此过程,允许在不直接与 GUI 交互的情况下进行修改。
拥有 ManageCertificates
权限可以促进对待处理请求的批准,有效地绕过“CA 证书管理器批准”保护措施。
可以结合 Certify 和 PSPKI 模块来请求、批准和下载证书:
在之前的攻击中,Manage CA
权限被用来启用 EDITF_ATTRIBUTESUBJECTALTNAME2 标志以执行 ESC6 攻击,但这在 CA 服务(CertSvc
)重启之前不会产生任何效果。当用户拥有 Manage CA
访问权限时,用户也被允许重启服务。然而,这并不意味着用户可以远程重启服务。此外,由于 2022 年 5 月的安全更新,ESC6 可能在大多数已修补的环境中无法正常工作。
因此,这里提出了另一个攻击。
前提条件:
仅有 ManageCA
权限
Manage Certificates
权限(可以从 ManageCA
授予)
证书模板 SubCA
必须启用(可以从 ManageCA
启用)
该技术依赖于拥有 Manage CA
和 Manage Certificates
访问权限的用户可以发出失败的证书请求。SubCA
证书模板易受 ESC1 攻击,但只有管理员可以注册该模板。因此,用户可以请求注册 SubCA
- 这将被拒绝 - 但随后由管理员发放。
您可以通过将自己添加为新官员来授予自己 Manage Certificates
访问权限。
SubCA
模板可以通过 -enable-template
参数在 CA 上 启用。默认情况下,SubCA
模板是启用的。
如果我们满足了此攻击的先决条件,我们可以开始请求基于 SubCA
模板的证书。
此请求将被拒绝,但我们将保存私钥并记录请求 ID。