针对AD CS中ESC7的滥用

渗透技巧 2年前 (2022) admin
756 0 0
针对AD CS中ESC7的滥用

技术背景

之前的文章介绍过AD CS攻击面以及弱配置证书模板的滥用技术,本次文章将详细讲解一种新的滥用技术,即针对证书颁发机构CA的滥用——ESC7。由于CA负责所有证书模板的管理以及证书的批准颁发,因此一旦CA的配置不当,对于攻击者来说更容易实现对AD CS的滥用,达到权限提升的目的。


01 ESC7技术

针对AD CS的滥用攻击多是围绕证书模板展开工作的,但是作为证书模板的管理者,CA本身的安全相对于证书模板的安全更加重要。其中在《Certified_Pre-Owned》白皮书中攻击技术ESC7即是针对AD CS中的证书颁发机构CA权限的滥用,其中涉及到管理证书(ManageCertificates)和管理CA(ManageCA)两个权限:

1.ManageCA:CA管理权限。允许用户更改CA的设置,包括为CA管理的所有模板打开SAN(主体备用名称)。SAN是一种扩展,允许用户请求链接到其他用户身份的证书。如果模板具有此扩展,则可以为任何域账户请求有效证书。

2.ManageCertificates:证书管理权限,允许向用户颁发挂起的证书。 

针对AD CS中ESC7的滥用

在证书颁发机构(certsrv.msc)中查看CA的ACL信息


02 ESC7利用方法

如果存在低权限用户拥有两个权限,则有了滥用CA的可能。ManageCA与ManageCertificates作为扩展权限,可以通过PSPKI查询当前CA的ACL信息并过滤扩展权限。图中用户Test拥有相关权限,下面利用用户Test即可完成ESC7攻击,达到权限提升的效果。

针对AD CS中ESC7的滥用

PSPKI查找ESC7利用条件


PSPKI是一款Powershell开发的工具,在对域环境的PKI进行安全审计时可以达到不错的效果,但文件大依赖多不适用于环境复杂的红蓝对抗。相比而言Certify.exe文件更小,虽然某些模块存在兼容性问题,但在修改后可以有效应用于各种Windows系统。如在Windows Server2012系统使用时,由于在旧操作系统上处理CERTENROLLLib时会出现不兼容的问题,需要对代码进行如下的更改。

IX509CertificateRequestPkcs10V3 objPkcs10 = (IX509CertificateRequestPkcs10V3)Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509CertificateRequestPkcs10"));

var context = machineContext
? X509CertificateEnrollmentContext.ContextMachine
: X509CertificateEnrollmentContext.ContextUser;
objPkcs10.InitializeFromPrivateKey(context, privateKey, "");
CX509ExtensionTemplateName objExtensionTemplate = new CX509ExtensionTemplateName();
objExtensionTemplate.InitializeEncode(templateName);
objPkcs10.X509Extensions.Add((CX509Extension)objExtensionTemplate);


private static IX509PrivateKey CreatePrivateKey(bool machineContext)
{
var cspInfo = new CCspInformations();
cspInfo.AddAvailableCsps();
var privateKey = (IX509PrivateKey)Activator.CreateInstance(Type.GetTypeFromProgID("X509Enrollment.CX509PrivateKey"));
privateKey.Length = 2048;
privateKey.KeySpec = X509KeySpec.XCN_AT_SIGNATURE;
privateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_ALL_USAGES;
privateKey.MachineContext = machineContext;
privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_EXPORT_FLAG;
privateKey.CspInformations = cspInfo;

privateKey.Create();
return privateKey;
}


Certify中的find /vulnerable命令可以帮助攻击者查找目前域环境下所有AD CS相关的滥用点,包括ESC7是否可用。下图为使用Certify查找到的CA的配置信息,其中CA的ACL信息显示用户Test拥有ManageCA和ManageCertificates权限,可进一步利用。

针对AD CS中ESC7的滥用

Certify查找ESC7利用条件


拥有该权限后,使用COM接口ICertAdminD2::SetConfigEntry可以设置CA的持久配置数据[1],配置数据中包含Config_CA_Accept_Request_Attributes_SAN[2],该数据段为一个指示CA是否接受为所请求证书指定客体名称的属性[3]。也就是说拥有该权限后可通过修改EDITF_ATTRIBUTESUBJECTALTNAME2从而改变证书模板的SAN属性,该属性位于主注册表项HKLMSYSTEMCurrentControlSetServicesCertSvcConfiguration\PolicyModulesCertificateAuthority_MicrosoftDefault.Policy中名为EditFlags的值中。该值包含多个与CA配置有关的字段,其中EDITF_ATTRIBUTESUBJECTALTNAME2 的掩码为16进制的4000,即262144。

针对AD CS中ESC7的滥用

查看CA持久数据配置信息


PSPKI实现了利用COM接口 ICertAdminD2::SetConfigEntry 修改CA配置的功能,其中1376950是开启所有配置项的掩码,包括EDITF_ATTRIBUTESUBJECTALTNAME2。

针对AD CS中ESC7的滥用

使用PSPKI配置EDITF_ATTRIBUTESUBJECTALTNAME2


虽然当前拥有管理CA的权限,但是也要巧妙的选择证书模板才能申请到可用的证书,与其他所有的证书滥用情况相同,所选取的证书模板即能申请又要能用于身份认证,因此至少满足以下三个要求:

1.要求不需要授权签名

2.证书扩展可用于身份认证

3.允许低权限账户申请

针对AD CS中ESC7的滥用

满足要求的证书模板


使用Test用户申请管理员账户admin的证书,虽然返回了证书的信息,但是发现该证书被CA挂起导致无法使用。

针对AD CS中ESC7的滥用

挂起的证书


出现这种情况的原因是有些证书模板在申请后会被CA置于挂起状态,直到具有ManageCertificates权限的用户批准才能够使用。在针对证书模板的滥用时,如果拥有证书模板的写权限则可以对该配置项进行修改。而ESC7拥有ManageCA权限可以直接对CA进行修改,从而使得所有的证书模板都不需要批准直接颁发。在修改并重启证书服务后,就能够直接申请证书。但是这种操作做出的改动较大,可能会影响正常业务的运行,需要谨慎使用。

针对AD CS中ESC7的滥用


除了直接利用ManageCA权限修改CA属性外,由于Test账户同时拥有了ManageCertificates权限,因此可以借助DCOM方法ICertAdmin2::ResubmitRequest按照Request ID批准挂起的证书。下图为使用PSPKI请求ID为77的挂起证书。

针对AD CS中ESC7的滥用

使用PSPKI批准挂起的请求


03 写入Webshell

除了修改CA的配置以外,拥有ManageCA权限还可以实现对任意文件的写入。其实现同样利用了COM接口ICertAdminD2::SetConfigEntry,对注册表项HKLMSYSTEMCurrentControlSetServicesCertSvcConfiguration\PolicyModules中的值CRLPublicationURLs进行修改。

针对AD CS中ESC7的滥用

利用Certify写入Webshell


如果当前域存在IIS服务,利用ManageCA权限还能够写入任意Webshell。默认配置下,Webshell以DefaultAppPool用户的身份运行,可以滥用SeImpersonate特权进行权限提升。同时由于利用了CA的身份进行了文件写入,而CA是以SYSTEM权限运行的,所以理论上可以写入任意文件,关于这一点的利用具有进一步探索的价值。

针对AD CS中ESC7的滥用

使用Webshell查看特权


04 总结

本篇文章主要描述了ESC7进行权限提升和远程写入Webshell的方法,可以看出CA作为AD CS中的核心管理组件,相比证书模板在对抗中具有更高的利用价值。ESC7中主要利用了ManageCA和ManageCertificates两个扩展权限,目前常见的访问控制问题主要聚焦在读写等通用权限,但是许多Windows安全主体的扩展权限也存在很多问题。扩展权限相对通用权限更加晦涩且很少被注意,其安全问题还有进一步探索的空间。


参考

[1].3.1.4.2.15 ICertAdminD2::SetConfigEntry (Opnum 45),https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-csra/a31ea036-eaec-4b35-a50d-c4fe11843a4b

[2].3.1.1.10 Configuration Data,https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-csra/1b69ebd9-a728-4cd2-ba67-fc5c9f2fc7c8.

[3].3.2.1.1.4 Configuration List,https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/b3ac7b46-8ea7-440d-a4c5-656bb1286d56.



针对AD CS中ESC7的滥用

绿盟科技天元实验室专注于新型实战化攻防对抗技术研究。

研究目标包括:漏洞利用技术、防御绕过技术、攻击隐匿技术、攻击持久化技术等蓝军技术,以及攻击技战术、攻击框架的研究。涵盖Web安全、终端安全、AD安全、云安全等多个技术领域的攻击技术研究,以及工业互联网、车联网等业务场景的攻击技术研究。通过研究攻击对抗技术,从攻击视角提供识别风险的方法和手段,为威胁对抗提供决策支撑。


针对AD CS中ESC7的滥用

M01N Team

聚焦高级攻防对抗热点技术

绿盟科技蓝军技术研究战队


往期推荐

AD CS攻击面剖析

针对AD CS中ESC7的滥用


原文始发于微信公众号(M01N Team):针对AD CS中ESC7的滥用

版权声明:admin 发表于 2022年2月23日 下午6:00。
转载请注明:针对AD CS中ESC7的滥用 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...