尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Kerberos黄金票据与白银票据攻击:原理、实战与防御指南

Kerberos黄金票据与白银票据攻击:原理、实战与防御指南 1. 项目概述从攻击者视角看票据的“含金量”在攻防对抗的深水区权限维持是攻击者得手后、防守方溯源前最关键的“中场战事”。你费尽心思拿到了一个域管理员的密码哈希登录进去转了一圈然后呢下次还想进来难道每次都去撞密码或者利用漏洞吗防守方的安全设备可不是摆设频繁的异常登录行为很快会触发告警。这时候一种近乎“艺术”的隐蔽后门技术就登场了——Kerberos协议下的黄金票据Golden Ticket与白银票据Silver Ticket。这可不是真的金银而是攻击者对Kerberos身份认证协议核心组件进行伪造的两种攻击手法其目的在于实现长期的、难以被常规手段检测的权限维持。简单来说你可以把企业的Windows域环境想象成一个高度安全的俱乐部。Kerberos就是俱乐部的会员认证系统。你想进入俱乐部内的各个场馆如文件服务器、邮件服务器都需要向中心的票据授权服务TGT出示你的会员卡密码哈希来换取一张通用入场券TGT再用这张通用入场券去各个场馆门口换取具体的场馆门票ST。黄金票据就是攻击者直接伪造了俱乐部的“总会员卡模具”krbtgt账户的哈希可以自己签发任意用户的、永久有效的通用入场券。而白银票据则是攻击者针对某个特定场馆如文件服务器伪造了该场馆的“门票印刷机”服务账户的哈希直接制作进入该场馆的门票但无法去其他场馆。为什么安全从业者必须搞懂这个因为这是内网横向移动和高级持续性威胁APT攻击中的经典手段。防守方如果只盯着登录日志很可能完全发现不了这种利用合法协议机制的“隐身攻击”。通过本文我将以一个渗透测试员的视角带你彻底拆解这两种票据的生成原理、实战利用手法、关键依赖条件以及最重要的——如何从防御端进行检测和发现。我们不仅要知道怎么“攻”更要深刻理解如何“防”。2. Kerberos协议精要理解攻击的基石要伪造票据你必须先理解真票据是如何诞生的。Kerberos协议是一个三头犬守护的认证系统核心流程涉及三个角色客户端Client、密钥分发中心KDC在AD中通常由域控制器DC扮演、以及应用服务器Server。2.1 核心认证流程四步走整个标准流程可以概括为以下四个步骤这是所有票据攻击的“攻击面”来源第一步认证服务交换AS-REQ AS-REP—— 获取TGT客户端向KDC的认证服务AS发起请求说“我是用户Alice我想访问域内服务。”客户端不会直接发送密码而是发送用密码派生出的密钥加密的时间戳。KDC的AS检查这个时间戳如果解密成功且时间合理就认为密码正确。随后KDC会生成一个会话密钥Session Key这个密钥是后续客户端与KDC通信的临时密钥。然后KDC制作一个票据授予票据TGT。TGT里包含了客户端身份信息、时间戳、以及刚才生成的会话密钥等。关键来了这个TGT是用krbtgt账户的哈希NTLM Hash进行加密的。最后KDC将用客户端密钥由用户密码哈希派生加密的会话密钥和用krbtgt哈希加密的TGT一起打包回复给客户端。客户端拿到后能用自己密码解密出会话密钥但无法解密TGT因为那是krbtgt的密钥加密的。注意这里就引出了黄金票据攻击的第一个关键点krbtgt账户的NTLM Hash。谁拥有它谁就拥有了签发TGT的“玉玺”。第二步票据授予服务交换TGS-REQ TGS-REP—— 获取ST现在客户端有了TGT和会话密钥当它想访问某个具体服务比如文件服务器CIFS/HOST-SRV01时它会向KDC的票据授予服务TGS发起新的请求。这个请求里包含用会话密钥加密的客户端身份信息、时间戳称为认证器Authenticator以及刚才那个加密的TGT。TGS收到后用krbtgt的密钥解密TGT取出里面的会话密钥再用这个会话密钥去解密认证器。如果认证器里的时间戳和TGT里的信息匹配认证就通过了。接着TGS会生成一个新的服务会话密钥用于客户端和最终服务之间的通信。然后TGS制作一张服务票据ST里面包含了客户端身份、新的服务会话密钥等。这个ST是用目标服务账户的哈希NTLM Hash加密的。最后TGS将用客户端-TGS会话密钥加密的服务会话密钥和用服务哈希加密的ST回复给客户端。注意这里引出了白银票据攻击的关键点特定服务账户的NTLM Hash。谁拥有它谁就可以绕过KDC直接伪造访问该服务的ST。第三步客户端-服务器交换AP-REQ AP-REP—— 访问服务客户端拿着从TGS那里得到的ST和用会话密钥加密的服务会话密钥去连接目标服务器。它向服务器发送一个请求包含用服务会话密钥加密的认证器以及那个加密的ST。服务器用自己的哈希解密ST取出服务会话密钥再用这个密钥解密认证器进行验证。成功后服务器就允许客户端访问了。2.2 关键数据结构与密钥理解票据的构成才能知道伪造要填哪些字段TGT核心字段包括客户端用户名、域名、登录时间戳、TGT有效期、会话密钥等。全部由krbtgt hash加密。ST核心字段包括客户端用户名、服务名SPN、服务会话密钥、有效期等。全部由服务账户hash加密。加密类型现代Windows域默认使用AES256_CTS_HMAC_SHA1_96或RC4_HMAC。获取哈希时需注意对应类型。RC4对应的是NTLM HashAES对应的是AES Key可从内存或NTDS.dit中提取。3. 黄金票据攻击深度解析伪造“玉玺”黄金票据攻击的本质是攻击者已经掌握了域内最高权限如域管理员并成功获取了krbtgt账户的NTLM哈希。之后他可以在完全脱离域控的情况下为任意用户包括不存在的用户伪造一张有效的TGT。3.1 攻击前提与条件要成功实施黄金票据攻击你必须集齐以下“龙珠”域的SIDSecurity Identifier即域的安全标识符格式如S-1-5-21-123456789-1234567890-123456789。这可以通过whoami /user、nltest /dsgetdc:域名或Get-ADDomainPowerShell轻松获取。krbtgt账户的NTLM哈希或AES密钥这是攻击的核心。通常需要通过域控权限如域管理员来转储NTDS.dit数据库使用secretsdump.py、mimikatz的lsadump::dcsync等工具或者从域控的内存中直接提取mimikatz的lsadump::lsa /patch。要伪造的用户名可以是任何用户名如administrator、fakeuser甚至是一个域中不存在的用户。域名完全限定域名FQDN例如contoso.com。3.2 实战操作流程假设我们已经通过漏洞拿到了域控权限并成功提取了所需信息域名contoso.com域SIDS-1-5-21-123456789-1234567890-123456789krbtgt NTLM Hashb0974b8f8c7c4e2f9a5d3b8c7a6f5e4d步骤一信息收集在域控或拥有域管理员权限的主机上执行# 使用 mimikatz 转储 krbtgt 哈希 mimikatz # privilege::debug mimikatz # lsadump::dcsync /domain:contoso.com /user:krbtgt从输出中找到NTLM或AES密钥。步骤二生成黄金票据我们使用mimikatz在攻击者机器上无需连接域控生成票据文件.kirbimimikatz # kerberos::golden /domain:contoso.com /sid:S-1-5-21-123456789-1234567890-123456789 /rc4:b0974b8f8c7c4e2f9a5d3b8c7a6f5e4d /user:fakeadmin /id:500 /groups:512 /ptt/user指定伪造的用户名这里用fakeadmin。/id指定用户的RID500通常是内置管理员账户的RID这会让目标系统将其识别为管理员。/groups指定用户所属的组RID512是“Domain Admins”组的RID赋予其域管理员权限。/ptt表示“Pass The Ticket”直接将生成的票据注入到当前Windows会话的内存中立即生效。步骤三验证与利用票据注入后你可以立即尝试访问域内资源无需密码dir \\dc01.contoso.com\c$如果成功列出目录说明黄金票据生效。此时你可以使用PsExec、WMI、Scheduled Task等工具以fakeadmin的身份在域内任何机器上执行命令实现持久的横向移动。3.3 黄金票据的威力与局限威力持久性极强黄金票据的有效期默认与krbtgt账户的密码策略一致。在Windows Server中krbtgt账户密码默认每30天自动更改一次。但关键在于即使密码更改之前使用旧哈希生成的黄金票据在有效期内依然有效。只有重置两次密码使所有历史密钥失效才能彻底清除威胁。攻击者一旦获得哈希几乎可以获得域的“永久”访问权。完全离线制作生成票据不需要与域控有任何网络通信隐蔽性高。权限任意指定可以伪造任意用户、任意高权限组如Enterprise Admins, Schema Admins。局限与实操心得依赖初始高权限你必须先拿到域管理员或同等权限才能获取krbtgt哈希。这通常不是攻击的起点而是横向移动的结果。无法更新PACPAC特权属性证书是TGT中包含的授权数据。黄金票据是静态伪造的其PAC信息在创建时就固定了。如果域内用户权限发生变化如被踢出管理员组黄金票据的权限不会自动更新但初始赋予的高权限通常已足够。检测点由于黄金票据是伪造的TGT它不会在域控的TGT颁发日志事件ID 4768中留下对应记录。但目标服务端如文件服务器在验证ST时如果记录了事件ID 4769其中可能会包含一个来自“未知”或异常KDC因为票据是伪造的的请求。这是检测的突破口之一。4. 白银票据攻击深度解析伪造“门票”白银票据攻击的粒度更细。攻击者获取了某个特定服务如CIFS文件共享、HTTPWeb服务账户的哈希然后直接伪造访问该服务的ST。它完全绕过KDC不与域控产生任何交互。4.1 攻击前提与条件实施白银票据攻击你需要目标服务账户的NTLM哈希或AES密钥例如文件服务器SRV01$计算机账户的哈希或者一个专门注册了SPN的用户账户如MSSQLSvc/sql01.contoso.com的哈希。域名contoso.com。目标服务器名srv01.contoso.com。服务类型SPN如cifs文件共享、httpWeb服务、mssqlSQL Server等。要伪造的用户名通常可以是一个域内存在的低权限用户甚至可以是任意用户名因为服务端只验证票据加密是否正确而不总是去KDC验证用户取决于配置。4.2 实战操作流程假设我们通过横向移动在服务器SRV01上获取了其本地SYSTEM权限并导出了其计算机账户的哈希目标服务器srv01.contoso.com服务类型cifs计算机账户NTLM Hasha1b2c3d4e5f67890123456789abcdef0步骤一获取服务账户哈希在已攻陷的服务器SRV01上mimikatz # privilege::debug mimikatz # sekurlsa::logonpasswords在输出中寻找SRV01$账户的NTLM或AES密钥。步骤二生成白银票据在攻击者机器上同样使用mimikatz生成并注入票据mimikatz # kerberos::golden /domain:contoso.com /target:srv01.contoso.com /service:cifs /rc4:a1b2c3d4e5f67890123456789abcdef0 /user:lowprivuser /ptt注意这里使用的命令模块仍然是kerberos::golden但参数不同指定了具体的/target和/service这实际上生成的是白银票据。步骤三验证与利用票据注入后直接访问该服务器的共享dir \\srv01.contoso.com\c$成功访问。由于白银票据只针对特定服务你无法用这张票据去访问srv01上的其他服务如HTTP除非你拥有对应服务的哈希并伪造了另一张票据。4.3 白银票据的特性与防御难点特性高度隐蔽整个攻击过程不与KDC域控通信。域控上完全看不到相关的票据请求事件ID 4769日志因为请求根本没发到域控。作用范围精准只针对单一服务不影响其他服务动作小不易引发全局告警。权限灵活伪造的用户可以是低权限用户因为很多服务如CIFS主要验证票据真伪对用户权限的检查可能发生在文件系统ACL层面。如果你伪造了一个管理员用户就能直接获得高权限访问。防御难点与实操心得哈希获取相对容易服务账户尤其是计算机账户的哈希可以通过本地提权如获取SYSTEM权限后从内存LSASS进程中导出。这比获取krbtgt哈希的门槛低得多。检测完全依赖终端由于不经过KDC检测只能发生在承载服务的终端服务器上。需要仔细分析安全日志事件ID 4624登录、4648登录尝试、4672特殊权限分配等寻找异常的用户登录行为尤其是来自非常规IP或用户的、针对特定服务的高权限访问。白银票据的“有效期”伪造的ST有效期可以任意设置默认10小时。但服务端在验证时会检查票据的时间戳。如果客户端与服务端的时间差超过策略允许的时钟偏差默认5分钟票据会被拒绝。因此攻击者有时需要先同步时间。5. 黄金票据与白银票据的对比与抉择在真实的渗透测试或攻击中选择哪种票据取决于你的目标、已获取的权限和想要达到的隐蔽程度。特性维度黄金票据 (Golden Ticket)白银票据 (Silver Ticket)攻击核心伪造TGT入场券伪造ST具体场馆门票所需密钥krbtgt账户的Hash特定服务账户的Hash攻击影响全域性。可访问域内任何服务。局部性。仅能访问特定服务。与KDC交互获取ST时需要与KDC交互TGS-REQ。完全绕过KDC直接访问服务。隐蔽性相对较低。在域控的TGS请求日志事件ID 4769中可能留下异常记录如请求来自非域控。极高。全程不与域控通信域控无日志。获取难度高。需要域管理员级别权限来导出krbtgt Hash。较低。只需要目标服务器的本地管理员权限。典型用途建立稳固的、全域的后门用于长期控制。针对特定高价值目标如数据库、文件服务器进行精准、隐蔽的访问。如何选择如果你已经拿下域控优先获取krbtgt哈希制作黄金票据。这是建立战略级后门的第一步。同时也可以针对关键业务服务器制作白银票据作为备用通道。如果你只拿下一台服务器优先获取该服务器的机器账户哈希制作白银票据。用它来维持对该服务器的访问并尝试以此为跳板通过PsExec等工具使用白银票据认证横向移动获取更多服务器的哈希最终目标仍是域控和krbtgt哈希。追求极致隐蔽在已获取域控权限后针对核心业务系统如SQL Server、文件服务器额外制作白银票据。日常渗透使用白银票据避免触发与域控相关的监控。黄金票据作为“核武器”备用。6. 防御、检测与响应实战指南理解了攻击防御才能有的放矢。防御黄金/白银票据攻击是一个系统工程需要层层设防。6.1 预防阶段让攻击者拿不到“钥匙”保护krbtgt账户定期重置krbtgt密码这是最有效的措施。微软官方建议在怀疑krbtgt账户泄露时应连续重置两次。因为Kerberos协议会保留当前和上一次的密码用于票据解密重置一次后旧票据在有效期内仍可能被使用。重置两次才能彻底让所有旧票据失效。操作需谨慎需参考微软官方文档并在维护时段进行因为会暂时影响域内所有计算机的认证。监控krbtgt账户活动该账户正常情况下绝不应该有登录行为。任何针对krbtgt的登录事件事件ID 4624都是最高级别的警报。实施最小权限原则与凭据保护限制域管理员使用域管理员账户仅用于域管理任务禁止用于登录普通服务器和工作站。使用“受保护用户”组、Just Enough Administration (JEA)等机制。启用Credential GuardWindows 10/11, Server 2016这是一项基于虚拟化的安全功能能将LSASS进程中的密钥、凭据隔离在安全内核中使mimikatz等工具无法直接从内存中读取哈希。这是防御哈希窃取的关键。应用本地管理员密码解决方案LAPS确保每台计算机的本地管理员密码不同且定期随机更改增加攻击者通过本地提权获取哈希的难度。强化服务账户管理为服务使用组托管服务账户gMSA其密码由AD自动管理长且复杂定期自动轮换降低了服务账户哈希被窃取和利用的风险。避免高权限账户注册SPN。6.2 检测阶段发现“异常”的票据域控制器日志监控针对黄金票据事件ID 4769票据请求服务操作仔细查看该事件中的Client Address字段。如果TGS请求不是来自域控本身即票据不是由本域控签发的但却收到了一个有效的TGT这极可能是黄金票据的迹象。因为攻击者用伪造的TGT来申请ST时请求是从攻击者主机直接发到域控的TGS服务。事件ID 4672特殊权限分配监控是否有异常用户尤其是新创建或非常用用户被添加进高权限组这可能与伪造票据时指定的高权限有关。终端服务器日志监控针对白银票据事件ID 4624账户成功登录、事件ID 4648使用显式凭据登录尝试关注登录类型。Kerberos服务票证对应登录类型3网络登录。寻找异常例如一个普通用户账户频繁通过类型3登录访问敏感服务器来自非企业IP范围的Kerberos网络登录。对比分析白银票据攻击在服务端会产生登录成功日志4624但在域控上没有对应的4769票据请求日志。这种“成功登录却无票据颁发记录”的割裂现象是检测白银票据的强信号。可以通过SIEM如Splunk, Elastic SIEM关联分析来自动化发现此类异常。使用专业工具进行狩猎Mimikatz (defensive mode)是的攻击工具也可以用于防御。在受控环境下使用mimikatz的kerberos::list命令可以查看当前会话中的票据。检查票据的End Time是否异常长黄金票据可能被设置为数年或者检查票据的Server Name是否与预期不符。Rubeus这是一个强大的Kerberos安全测试工具其monitor命令可以用于监控域内的票据活动。Microsoft Defender for Identity原Azure ATP这款企业级产品能基于域控制器流量和日志利用机器学习模型检测包括黄金票据、白银票据在内的多种Kerberos攻击例如“异常协议实现”、“来源异常票据请求”等。6.3 响应与处置清除后门一旦检测到疑似票据攻击必须快速响应立即重置krbtgt账户密码两次这是遏制黄金票据扩散的首要措施。按照微软KB文章步骤操作。重置受影响的服务账户密码如果怀疑是白银票据重置目标服务账户计算机账户或用户账户的密码。全面清查强制域内所有用户重新登录或重启所有计算机以清除可能缓存在内存中的恶意票据。在域控上可以尝试使用klist purge命令清除所有Kerberos票据但更有效的是重启域控的Kerberos Key Distribution Center服务。溯源与根除审查攻击路径找出最初被攻陷的点可能是钓鱼邮件、未打补丁的漏洞等修补漏洞更改所有可能泄露的凭据。7. 高级技巧与攻防演进攻防永远在博弈中升级。除了基础用法还有一些进阶场景和检测规避技巧。7.1 黄金票据的“变种”与检测增强时间戳欺骗Kerberos票据包含开始时间和结束时间。攻击者可以将黄金票据的起始时间设置为过去结束时间设置为很远的未来如10年后。这能绕过一些基于票据有效期的简单检测。防御方需要监控票据生命周期异常长的账户。PAC签名绕过MS14-068这是一个古老的漏洞但原理重要。PAC由KDC签名。早期版本的黄金票据伪造可能不包含有效的PAC签名导致访问某些服务失败。现代工具如mimikatz在生成黄金票据时会使用获取的krbtgt密钥正确签名PAC。防御方可以启用Kerberos的“始终提供PAC验证”策略强制服务端验证PAC签名。7.2 白银票据的“服务绑定”与约束服务绑定Sname必须匹配伪造的ST中的服务主体名称SPN必须与目标服务运行账户注册的SPN完全一致。例如如果IIS网站运行在NETWORK SERVICE账户下其SPN可能是HTTP/webserver.contoso.com。如果你用计算机账户HOST/...的哈希伪造HTTP服务的票据可能会失败。攻击前需要精确枚举目标服务的SPN使用setspn -L 用户名。AES密钥与RC4哈希现代系统更倾向于使用AES加密。如果目标服务账户配置了AES密钥而你只拿到了NTLM HashRC4生成的票据可能会被拒绝。因此在提取哈希时最好同时获取AES密钥aes256_hmac和NTLM Hash。7.3 面向未来的防御思考迈向无密码和强认证广泛部署Windows Hello for Business、FIDO2安全密钥等减少对传统密码哈希的依赖从根本上削弱Pass-the-Hash和票据攻击的基础。深度行为分析结合UEBA用户实体行为分析建立每个用户和服务账户的访问基线。例如一个开发部门的用户突然在凌晨3点通过Kerberos网络登录访问财务部的SQL服务器即使票据本身有效行为模型也会将其标记为高风险。定期攻防演练使用自动化攻击模拟工具定期在环境中测试票据攻击的可行性验证现有防御和检测措施的有效性持续优化安全策略。理解黄金票据和白银票据不仅仅是掌握两种攻击技术更是深入理解Windows域安全核心——Kerberos认证协议的一把钥匙。从防御角度看这迫使我们将安全监控从简单的“登录成功/失败”提升到对认证协议流、票据生命周期和用户行为模式的深度关联分析层面。真正的安全始于对攻击链的每一环都了如指掌。
返回列表