ForgeCert工具解析:利用AD CS证书伪造实现域持久化攻击与防御

发布时间:2026/7/6 9:26:52

ForgeCert工具解析:利用AD CS证书伪造实现域持久化攻击与防御 1. 项目概述ForgeCert与证书伪造的攻防世界在Active DirectoryAD域安全领域证书服务AD CS长久以来被视为一个相对“安静”的角落许多安全团队对其配置和潜在风险的关注远不如对组策略或用户权限的审查。然而近年来一系列深入的研究表明AD CS的滥用已成为红队攻击和渗透测试中一条极具威力的路径能够实现从凭据窃取、权限提升到长期域持久化的完整攻击链。在这个背景下SpecterOps团队发布的ForgeCert工具作为一个专门用于伪造AD CS证书的开源项目将“黄金证书”Golden Certificates这一概念从理论推向了实战彻底改变了我们对域内身份认证边界的认知。简单来说ForgeCert是一个能够利用被盗的证书颁发机构CA私钥为域内任意主体用户或计算机账户伪造身份认证证书的工具。这听起来像是拿到了域的“万能钥匙”。在传统的Kerberos或NTLM认证中攻击者需要窃取哈希或票据。而ForgeCert所代表的攻击方式则是直接撼动了PKI公钥基础设施信任的根基——如果CA的私钥泄露攻击者便可以签发任何他们想要的证书而这些证书在CA的有效期内几乎无法被有效撤销为攻击者提供了极其隐蔽和持久的后门。这个工具的出现并非孤立的技术奇技而是SpecterOps团队在2021年Black Hat大会上发布的《Certified Pre-Owned》白皮书中系统性攻击方法的技术实现之一。它标志着针对AD CS的攻击从零散的技巧发展成了一整套有理论、有工具、有实践路径的成熟战术。对于防御方而言理解ForgeCert的原理和它所利用的脆弱性不再是可选项而是构建纵深防御体系的必修课。2. 核心原理深度拆解从PKI信任到“黄金证书”要理解ForgeCert的威力必须首先厘清AD CS中基于证书的身份验证是如何工作的以及信任链在何处被打破。2.1 AD CS证书认证的核心流程在AD环境中当一台主机或用户尝试使用证书进行身份验证例如通过Kerberos PKINIT或Schannel时域控制器DC会执行一系列验证证书链验证DC会验证提交的证书是否由一个受信任的根CA签发。这个信任根来源于AD中CNPublic Key Services,CNServices,CNConfiguration,DCdomain,DCcom容器下定义的受信任根CA证书列表这些证书会同步到每台域成员机的“受信任的根证书颁发机构”存储区。NTAuthStore验证更为关键的一步是DC会检查该证书的签发CA是否位于NTAuthCertificates对象中。这个对象定义了有权颁发用于域身份验证证书的CA。只有被其信任的CA签发的证书才能用于Kerberos或Schannel认证。证书有效性检查DC检查证书是否在有效期内以及是否未被吊销通过检查证书吊销列表CRL。账户映射验证通过后DC会将证书映射到一个AD账户。默认情况下优先使用证书的**使用者可选名称Subject Alternative Name, SAN**扩展中的用户主体名称UPN进行映射。如果SAN不存在则回退到使用证书主题Subject中的信息。这个流程的基石在于对CA的信任。只要CA是受信任的并且其证书在NTAuthCertificates中那么由它签发的、包含正确EKU如客户端身份验证OID1.3.6.1.5.5.7.3.2的证书就会被DC接受为对应账户的有效凭据。2.2 ForgeCert的攻击面信任的崩塌ForgeCert攻击的核心前提是攻击者已经获取了企业CA的证书和私钥。这通常通过以下方式实现THEFT3技术机器证书窃取在已攻陷的CA服务器上通常也是域控制器以SYSTEM权限运行工具如Mimikatz的crypto::capi/crypto::cng或SharpDPAPI提取受机器DPAPI保护的CA私钥和证书。系统备份如果攻击者拥有CA备份文件.p12其中也包含了CA的密钥材料。文件系统搜寻管理员可能不慎将CA证书和私钥文件如.pfx, .pem遗留在文件共享或服务器目录中。一旦获得了CA的私钥ca.pfx攻击者就拥有了“上帝视角”。ForgeCert工具的工作流程可以概括为输入提供被盗的CA证书/私钥文件ca.pfx及其密码、目标账户的UPN如administratordomain.com、以及为新伪造证书设置的密码。伪造ForgeCert在内存中构建一个新的X.509证书。这个证书的Issuer颁发者字段设置为被盗CA证书的主题Subject以此声明是由该CA签发的。证书的Subject字段可以任意设置通常设为通用名CNUser而关键的Subject Alternative NameSAN扩展则被设置为目标账户的UPN。证书的Extended Key UsageEKU会被设置为“客户端身份验证”Client Authentication。签名使用被盗的CA私钥对刚刚构建的证书进行数字签名。这个签名是证书有效性的关键DC在验证时会用CA的公钥来自受信任的CA证书来验证此签名。由于签名来自合法的CA私钥验证自然会通过。输出生成一个包含新伪造证书及其对应新生成密钥对的.pfx文件。这个文件就是所谓的“黄金证书”。2.3 为何难以防御黄金证书的特性由此产生的“黄金证书”具有几个令人头疼的特性任意身份可以为域内任何活跃的用户或计算机账户包括域管理员、域控制器计算机账户DC$伪造证书。注意不能为禁用账户或krbtgt这类特殊账户伪造。长期有效伪造证书的有效期可以设置为未来很长时间受限于CA证书本身的有效期通常为5-10年。只要根CA证书未被吊销且仍在有效期内伪造的证书就持续有效。难以检测与撤销不在CA数据库中该证书并非通过正常的证书注册流程如certreq或Web注册颁发因此不会出现在CA管理控制台certsrv.msc的“颁发的证书”列表中。防御者无法通过常规审计发现它。无法直接吊销因为证书不在颁发列表中所以无法将其序列号添加到证书吊销列表CRL中。唯一的根治方法是吊销整个CA证书但这将导致该CA签发的所有合法证书如用户智能卡登录证书、服务器SSL证书等立即失效对业务造成毁灭性打击通常不可行。独立于密码即使目标用户定期修改密码甚至启用了双因素认证只要该账户未被禁用基于证书的认证依然有效。这完全绕过了传统的凭据更新策略。实操心得在实际测试中ForgeCert生成的证书与通过正常Certify request命令申请的证书在用于Rubeus请求TGT时行为完全一致。这意味着一旦获得CA私钥攻击者就获得了一种比黄金票据Golden Ticket在某些方面更持久的权限维持手段。黄金票据依赖于krbtgt账户的哈希而该哈希理论上可能被定期重置尽管实践中很少这样做。而吊销CA证书的代价极高使得“黄金证书”的生存周期可能更长。3. 工具实战ForgeCert的使用与武器化理解了原理后我们来看如何将ForgeCert用于实战。假设我们已经通过某种方式例如在CA服务器上提权后使用SharpDPAPI获取了CA证书文件ca.pfx和其密码CaPassword123!。3.1 基础使用伪造域管理员证书ForgeCert是一个C#编写的命令行工具编译后使用非常简单。# 基本语法 ForgeCert.exe --CaCertPath CA证书路径 --CaCertPassword CA证书密码 --Subject 证书主题 --SubjectAltName 目标UPN --NewCertPath 输出路径 --NewCertPassword 新证书密码 # 示例为域管理员administratorpentestlab.com伪造证书 ForgeCert.exe --CaCertPath .\ca.pfx --CaCertPassword CaPassword123! --Subject CNUser --SubjectAltName administratorpentestlab.com --NewCertPath .\fake_admin.pfx --NewCertPassword FakeCertPass456!参数解析与注意事项--CaCertPath--CaCertPassword这是攻击的起点必须正确。如果密码错误工具会报错。--Subject这里设置的是证书的“主题”字段。在AD证书映射中SAN的优先级高于Subject。因此这个字段可以设置为任意值如CNForgeCert User, OUHacked但通常保持简单以避免引起怀疑如果证书被导出查看。关键不在这里而在SAN。--SubjectAltName这是核心参数。必须设置为目标账户的完整UPNUser Principal Name格式为usernamedomain.com。对于计算机账户格式为COMPUTERNAME$domain.com例如DC01$pentestlab.com。这个UPN必须与AD中账户的属性完全一致否则映射会失败。--NewCertPath--NewCertPassword指定输出伪造证书的路径和用于保护该.pfx文件的密码。这个密码在后续使用Rubeus等工具申请TGT时需要提供。执行成功后会在当前目录生成fake_admin.pfx文件。这个文件包含了伪造的证书和对应的新生成的私钥。3.2 证书的使用获取TGT与横向移动伪造的证书本身只是一个文件需要借助其他工具来完成身份认证。最常用的方式是使用Rubeus通过PKINIT协议向KDC请求Kerberos票据授予票TGT。# 使用Rubeus通过伪造的证书请求TGT并注入内存 Rubeus.exe asktgt /user:administrator /domain:pentestlab.com /dc:DC01.pentestlab.com /certificate:C:\Tools\fake_admin.pfx /password:FakeCertPass456! /ptt命令详解/user指定我们想要冒充的用户名不含域名。/domain/dc指定域名和域控制器。/certificate/password指向ForgeCert生成的.pfx文件及其密码。/ptt将成功请求到的TGT直接“传递到票据”Pass the Ticket注入当前Windows会话的LSASS内存中。执行成功后使用klist命令可以看到当前会话中已经有了administratorPENTESTLAB.COM的TGT。此后你就可以使用任何依赖于Kerberos认证的工具如dir \\dc01\c$、Mimikatz的lsadump::dcsync等以域管理员身份执行操作。为计算机账户伪造证书 针对计算机账户如域控制器的伪造同样有效且危害更大因为机器账户通常拥有更高的默认权限。# 伪造域控制器计算机账户证书 ForgeCert.exe --CaCertPath .\ca.pfx --CaCertPassword CaPassword123! --Subject CNMachine --SubjectAltName DC01$pentestlab.com --NewCertPath .\fake_dc01.pfx --NewCertPassword MachineCertPass789! # 使用该证书请求TGT Rubeus.exe asktgt /user:DC01$ /domain:pentestlab.com /dc:DC01.pentestlab.com /certificate:C:\Tools\fake_dc01.pfx /password:MachineCertPass789! /ptt获取到域控制器机器账户的TGT后你可以进行DCSync攻击导出所有域用户的哈希从而完全掌控整个域。3.3 进阶利用结合其他攻击链ForgeCert的价值不仅在于其本身更在于它能无缝嵌入到更复杂的攻击链中与ESC8NTLM Relay to AD CS HTTP Endpoints结合在通过PetitPotam等工具强制域控制器向攻击者机器进行NTLM认证并中继到AD CS Web接口为DC01$申请到一个合法证书后攻击者可能已经获得了域控权限。此时如果进一步提取CA服务器的私钥就可以利用ForgeCert创建更多、更隐蔽的后门证书即使最初的Relay攻击被修复或发现。持久化与备份通道在清理入侵痕迹时攻击者可能会删除通过Certify request申请的证书记录。但一个通过ForgeCert伪造的、不在颁发列表中的证书是极难被发现的。可以将伪造的证书存储在加密容器中作为备用持久化手段。绕过网络监控一些高级威胁检测系统可能会监控异常的证书申请行为如普通用户申请域管理员SAN的证书。但ForgeCert完全离线伪造不产生任何与CA服务器的网络交互从而绕过了这类基于请求行为的检测。避坑指南UPN格式必须正确最常见的错误是SAN中的UPN格式不对。计算机账户的UPN必须包含$符号和域名如DC01$domain.com。可以通过Get-ADUser或Get-ADComputercmdlet来确认准确的UPN。账户状态只能为启用状态的账户伪造证书。尝试为已禁用账户或krbtgt账户伪造会失败。证书有效期ForgeCert生成的证书默认有效期可能较短。如果需要更长的有效期需要修改工具源码在创建X509Certificate2对象时设置更远的NotAfter日期。但要注意不能超过CA证书本身的有效期。工具依赖ForgeCert需要.NET环境。在目标机器上执行时需确保相应版本的.NET运行时已存在。4. 防御视角如何检测与缓解“黄金证书”攻击面对ForgeCert这类工具带来的威胁防御必须从预防、检测、响应三个层面展开。4.1 预防措施加固AD CS环境预防是成本最低的防御。核心原则是保护CA私钥如同保护域控的KRBTGT哈希。物理与逻辑隔离离线根CA部署多层级PKI时根CA应保持离线状态。只有从属的企业CAIssuing CA在线运行。这样即使企业CA私钥泄露攻击者也无法伪造根CA证书其影响范围受限于该企业CA。专用服务器CA服务器应是一台独立的、高度加固的成员服务器非域控制器。严格限制其网络访问和登录权限。硬件安全模块HSM对于高安全环境应将CA私钥存储在HSM中。HSM能防止私钥被提取即使服务器被完全攻陷。严格的访问控制用户权限遵循最小权限原则。只有极少数受信任的管理员如专门的PKI管理员才能访问CA服务器和控制台。移除Domain Admins组对CA的默认管理权限。证书模板权限定期审计证书模板的注册权限Enroll和AutoEnroll。确保没有普通用户或计算机能注册高权限模板如包含Client Authentication、Any PurposeEKU或允许指定SAN的模板。禁用高危设置审查所有证书模板确保没有模板同时启用Client AuthenticationEKU和CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT标志允许请求者提供SAN。这是导致ESC1漏洞的关键配置。启用证书管理审批对于高价值身份的证书模板如域管理员、服务器身份验证强制启用“CA证书管理程序批准”。这样所有证书申请都需要管理员手动审批能有效阻断自动化的恶意注册。4.2 检测手段寻找攻击痕迹尽管ForgeCert伪造的证书不在CA数据库中但它的使用仍然会留下日志痕迹。Windows事件日志Kerberos认证日志事件ID 4768当使用证书通过PKINIT请求TGT时域控制器会生成事件ID 4768。仔细检查该事件的Certificate Information字段。虽然你无法直接看到证书序列号因为不在库中但可以关注Certificate Issuer Name。如果发现大量来自同一CA但用户身份各异、且申请时间异常的4768事件可能是调查线索。Schannel日志在Applications and Services Logs Microsoft Windows Schannel Operational中可以启用日志记录来捕获基于证书的Schannel认证事件。CA审计日志确保在CA服务器上启用“对象访问审计”。记录对CA数据库和配置的访问尝试。虽然ForgeCert不直接访问CA但提取CA私钥的行为如使用Mimikatz可能会触发相关日志。SIEM/SOC分析异常时间与来源在非工作时间或从非常用工作站发起的证书认证尝试。账户行为分析一个通常只在办公室登录的用户账户突然从海外IP通过证书认证。关联分析将4768事件与4624登录成功、4672特权分配等事件关联。如果一个低权限用户通过证书认证后立即进行了DCSync或修改域组等敏感操作这是极高的风险信号。主动狩猎内存扫描使用EDR或内存扫描工具在端点尤其是CA服务器和域控制器上寻找Mimikatz、SharpDPAPI、ForgeCert、Rubeus等工具的运行痕迹或内存残留。文件系统扫描在服务器和用户终端上搜索常见的证书文件格式.pfx,.p12,.pem,.cer特别是包含私钥的.pfx和.p12文件。可以使用脚本定期扫描并比对已知的合法证书列表。网络流量分析虽然ForgeCert本身不产生网络流量但使用伪造证书进行认证如Kerberos AS-REQ会产生网络包。可以监控域控制器上来自非受信任CA的证书认证请求但这要求能解密或分析Kerberos流量难度较高。4.3 应急响应遭遇攻击后怎么办如果怀疑或确认发生了CA私钥泄露和证书伪造攻击响应必须果断。立即隔离与取证立即将CA服务器从网络中断开。对CA服务器进行完整的磁盘和内存镜像取证重点寻找私钥提取工具如Mimikatz的运行痕迹、可疑的登录记录、以及被导出的证书文件。审查所有域控制器上最近一段时间从怀疑泄露的时间点开始的4768等认证日志尝试定位攻击者使用的伪造证书所对应的账户和时间。撤销信任与密钥更新最彻底方案破坏性大吊销受损的CA证书。这将使该CA颁发的所有合法证书立即失效导致大规模业务中断。必须提前准备好新的CA和重新颁发所有业务证书的方案。这是清除“黄金证书”威胁的唯一根本方法。缓解方案如果无法立即吊销CA可以考虑从NTAuthCertificates存储中移除该CA的证书。但这只会阻止基于该CA的新证书认证已经缓存的TGT可能仍然有效直到票据过期。同时这会影响所有合法的证书认证。更新KRBTGT密码虽然不能阻止证书攻击但作为整体域恢复的一部分应按照微软建议的方式两次更新krbtgt账户的密码以消除黄金票据攻击的可能。账户与凭证重置重置所有高权限账户域管理员、企业管理员等的密码。审查所有服务账户的凭据。强制所有用户重新注册其智能卡或用户证书如果环境使用了的话。加强监控与恢复在恢复CA服务或部署新CA后立即实施前述的所有预防和检测措施。建立对CA服务器和证书认证行为的基线监控。5. 延伸思考ForgeCert在红蓝对抗中的定位ForgeCert的出现将AD CS攻击从“权限提升”的单一环节提升到了“域持久化”的战略层面。在红队评估中它通常不是初始入侵的工具而是中期横向移动或后期持久化阶段的“王牌”。对红队的价值它提供了一种极其隐蔽、难以清除的持久化方式。一旦获得CA私钥就等于获得了域的“终身签证”。相比于容易被检测的持久化后门如计划任务、WMI订阅伪造的证书更难以被常规安全扫描发现。它也是横向移动的利器尤其是在严格限制NTLM、强制使用Kerberos或证书认证的环境中。对蓝队的挑战它迫使蓝队必须将AD CS纳入核心安全监控范围。不能再将PKI视为单纯的“应用基础设施”。需要像管理域控、管理特权账户一样去管理CA服务器和证书模板。审计CA服务器的登录、监控对CA相关AD对象如NTAuthCertificates、证书模板的修改、分析异常的证书认证事件都成为了必备技能。最后一点个人体会安全是一个动态对抗的过程。像ForgeCert这样的工具其可怕之处不在于工具本身而在于它揭示了我们基础设施中长期被忽视的脆弱假设——我们默认CA是绝对安全的。这个项目的出现是一次响亮的警钟。它告诉我们在复杂如Active Directory这样的系统中信任链的每一个环节都必须被审视和保护。作为防御者我们的工作就是不断审视这些环节加固它们并准备好当某个环节失守时我们如何能最快地发现、响应并恢复。而对于渗透测试者和红队成员理解并善用这些技术则能更真实地模拟高级威胁行为帮助客户发现这些深层的风险。

相关新闻