"Golden"证书

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/GhostPack/ForgeCert

小编推荐

ForgeCert是一个使用BouncyCastle C# API的工具,可以使用窃取的CA证书和私钥为任意用户伪造出证书,使其能够认证到Active Directory。该工具的作用是利用私钥签署伪造的证书,使得该证书可以被认证为合法的证书,从而实现身份认证。

相关技术点

  • BouncyCastle C# API:BouncyCastle是一个流行的、用于处理加密、数字签名和密钥交换的Java库,其C# API是其的.NET版本,用于在.NET环境下进行加密、数字签名和密钥交换。
  • Certificate Authority (CA):证书颁发机构,负责颁发和管理数字证书。
  • Active Directory:一种广泛使用的目录服务,主要用于在Windows域网络中管理用户、计算机和其他资源。

项目用途

ForgeCert的用途是伪造证书,使得攻击者可以使用这些证书来进行身份认证,进而获取更高的权限或者敏感信息。具体来说,该工具可以用于以下场景:

  • 窃取CA证书和私钥:攻击者可以使用Mimikatz或SharpDPAPI等工具窃取CA证书和私钥。
  • 伪造证书:使用窃取的证书和私钥,攻击者可以使用ForgeCert工具来伪造证书,从而使得该证书可以被认证为合法的证书,进而进行身份认证。
  • 身份认证:使用伪造的证书,攻击者可以通过身份认证,进而获取更高的权限或者敏感信息。

ForgeCert

ForgeCert使用BouncyCastle C# API和盗取的证书颁发机构(CA)证书+私钥,为能够进行Active Directory身份验证的任意用户伪造证书。

这种攻击在我们的《“认证二手车”白皮书》中被编码为DPERSIST1。此代码库在白皮书发表约45天后发布。

@tifkin_是ForgeCert的主要作者。

@tifkin_@harmj0y是相关的Active Directory证书服务研究的主要作者(博客白皮书)。

背景

如我们的白皮书中的“背景”和“使用盗取的CA证书伪造证书-DPERSIST1”部分所述,证书颁发机构CA证书的私钥在CA服务器上通过DPAPI或硬件(HSM/TPM)进行保护。此外,证书(除私钥外)发布到NTAuthCertificates森林对象中,该对象定义了启用对AD的身份验证的CA证书。综合起来,存在于NTAuthCertificates的CA使用其私钥对请求客户端的证书签名请求(CSR)进行签名。此图形总结了此过程:

ad1a1b7183172539

 

 

CA私钥的安全性至关重要。如前所述,如果私钥未受硬件解决方案(如TPM或HSM)的保护,则该密钥将使用数据保护API(DPAPI)进行加密并存储在CA服务器上的磁盘上。如果攻击者能够入侵CA服务器,则可以使用@gentilkiwiMimikatz或GhostPack的SharpDPAPI项目提取未受硬件保护的任何CA证书的私钥。白皮书中的THEFT3描述了这个过程。

因为签发证书的唯一密钥材料是CA的私钥,如果攻击者窃取这样的密钥(用于NTAuthCertificates中的证书),则可以伪造能够进行域身份验证的证书。这些伪造的证书可以用于域中的任何主体(尽管帐户需要“活动”才能进行身份验证,因此诸如krbtgt之类的帐户将无法使用),并且证书将在CA证书有效期内有效(通常默认为5年,但可以设置更长)。

此外,由于这些证书不是正常签发过程的产物,因此CA不知道它们是如何创建的。因此,这些证书无法撤销

注意:NTAuthCertificates中的任何CA证书(根或下级CA)的私钥都可以用于伪造能够在森林中进行身份验证的证书。如果证书/密钥来自下级CA,则必须提供用于验证证书链的合法CRL。

ForgeCert使用BouncyCastle的X509V3CertificateGenerator执行伪造。

命令行用法```

C:\Temp>ForgeCert.exe ForgeCert 1.0.0.0 版权所有 c 2021

错误: 缺少必需选项“CaCertPath”。 缺少必需选项“SubjectAltName”。 缺少必需选项“NewCertPath”。 缺少必需选项“NewCertPassword”。

--CaCertPath 必需。CA私钥作为.pfx或.p12文件

--CaCertPassword CA私钥文件的密码

--Subject (默认值: CN=User) 证书中的主题名称

--SubjectAltName 必需。要进行身份验证的用户的UPN

--NewCertPath 必需。新的.pfx证书保存的路径

--NewCertPassword 必需。.pfx文件的密码

--CRL 欺骗证书的LDAP路径

--help 显示此帮助屏幕。

--version 显示版本信息。


## 用法

**注意**: 要完整了解如何窃取CA私钥并伪造身份验证证书,请参阅[白皮书](https://specterops.io/assets/resources/Certified_Pre-Owned.pdf)中的`DPERSIST1`。

背景:

* 被窃取的CA证书是 `ca.pfx`,密码为 `Password123!`
* 主题是任意的,因为我们为证书指定了主题备用名称。
* 主体备用名称(即我们要伪造证书的用户)是 `localadmin@theshire.local`。
* 伪造的证书将保存为 `localadmin.pfx`,并使用密码 `NewPassword123!` 进行加密。

C:\Tools\ForgeCert>ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword "Password123!" --Subject "CN=User" --SubjectAltName "localadmin@theshire.local" --NewCertPath localadmin.pfx --NewCertPassword "NewPassword123!" CA证书信息: 主题: CN=theshire-DC-CA, DC=theshire, DC=local 发行者: CN=theshire-DC-CA, DC=theshire, DC=local 开始日期: 1/4/2021 10:48:02 AM 结束日期: 1/4/2026 10:58:02 AM 指纹: 187D81530E1ADBB6B8B9B961EAADC1F597E6D6A2 序列号: 14BFC25F2B6EEDA94404D5A5B0F33E21

伪造的证书信息: 主题: CN=User 主题备用名称: localadmin@theshire.local 发行者: CN=theshire-DC-CA, DC=theshire, DC=local 开始日期: 7/26/2021 3:38:45 PM 结束日期: 7/26/2022 3:38:45 PM 指纹: C5789A24E91A40819EFF7CFD77150595F8B9878D 序列号: 3627A48F90F6869C3215FF05BC3B2E42

完成。使用密码“NewPassword123!”将伪造的证书保存到localadmin.pfx中。

```

这种伪造可以在攻击者控制的系统上完成,并且可以与Rubeus一起使用以请求TGT(和/或检索用户的NTLM;)。

防御考虑当前ForgeCert代码库的TypeRefHash是b26b451ff2c947ae5904f962e56facbb45269995fbb813070386472f307cfcf0。

ForgeCert的TypeLib GUID是bd346689-8ee6-40b3-858b-4ed94f08d40a。这反映在当前存储库中的Yara规则中。

请参见我们的白皮书中的PREVENT1DETECT3DETECT5,以获取预防和检测指南。

Fabian Bader 发布了一篇关于如何通过微调Microsoft OCSP来减轻许多"Golden Certificates"的使用的优秀文章。请注意,他在Final Thoughts部分提到This method is not bulletproof at all. Since the attacker is in charge of the certificate creation process, she could just change the serial number to a valid one.虽然这在他的PR中已实现,但请记住,串行号默认将被随机化,这意味着OSCP预防在许多情况下都可以工作,并且值得我们实施。

我们认为,可能有机会为此项目生成的伪造证书类型构建Yara/其他检测规则-如果有任何防御性研究人员找到一种良好的方法来为这些文件签名,请告诉我们,我们将在此更新Yara规则/防御指南。

反思

“Golden Tickets”(伪造的TGT)和这些“Golden Certificates”(强制AD CS证书)之间存在明显的相似之处。krbtgt哈希和CA私钥都是对Active Directory环境安全至关重要的加密材料,都可以用于伪造任意用户的认证器。然而,尽管krbtgt哈希可以通过DCSync远程检索,但CA私钥必须(至少我们知道的)通过对CA机器本身的代码执行来恢复。虽然krbtgt哈希可以相对容易地轮换,但轮换CA私钥要困难得多。

关于公开披露,我们自我禁止了我们的攻击工具(ForgeCert和Certify)的发布约45天,之后我们发表了我们的白皮书,以便机构有机会掌握与Active Directory证书服务相关的问题。然而,我们发现,直到有人用概念证明了某些东西是可能的,机构和供应商历史上通常没有修复问题或建立检测“理论性”攻击。

这反映在一些人对this IS StUPId, oF COurse YoU Can FORge CERts WITH ThE ca PriVAtE KeY.的反应中。我们声明,是的,许多事情是可能的,但是PoC||GTFO

标签:工具分享, 思路分享, 学习笔记