☰
黄金票据攻击与防御:从KRBTGT哈希到域控安全加固
2026/9/29 16:35:15 网站建设 项目流程

黄金票据攻击这个说法,做内网安全和域渗透的人应该都不陌生。简单说,它是我见过的域环境里最“一锤定音”的攻击方式之一:拿到域控的KRBTGT哈希,伪造一张谁都不会怀疑的TGT(票据授予票据),整个域就成了你自己的游乐场。攻击者有了这张票据,想给自己签发什么身份都行,横向移动、提权、持久化,在这些能力面前基本都不值得一提。本文从防御者视角拆解黄金票据攻击的完整链路,从Kerberos的认证底子讲起,讲清楚它为什么这么强、实际攻击时哪些条件缺一不可、域控日志里会留下什么,以及我们能做些什么把它堵住。适合刚接触域安全的运维、红队新人以及给客户做审计的乙方同学参考,我不会给你堆一堆抽象概念,尽量用大白话把这块讲透。

1. 黄金票据攻击的基本概念与核心定位

1.1 什么是黄金票据攻击

“黄金票据”其实是一个很形象的比喻。在Kerberos认证体系里,TGT是用户访问域内资源的第一道通行证,而签发TGT的根密钥掌握在域控的KRBTGT账号手里。黄金票据攻击就是攻击者拿到KRBTGT的密码哈希之后,离线伪造了一张生命周期极长的TGT,再用这张TGT去换取任意服务的访问票据。很多朋友容易把黄金票据和白银票据搞混,这里先做个最简单的区分:黄金票据伪造的是TGT,也就是所有服务访问的“总钥匙”;白银票据伪造的是服务票据,也就是某一把具体的“门钥匙”。就影响范围而言,黄金票据覆盖整个域,白银票据只影响单个服务。

从攻击定位来说,黄金票据攻击一般出现在攻击链的后期。攻击者通常已经拿下了域管权限或域控的某台机器,但这并不意味着攻击就结束了。因为域管理员密码可以更改、会话可以被清理,而KRBTGT哈希一旦改动会引发整个域所有票据失效,所以很多防御者根本不敢随便重置它。攻击者正是抓住了这个痛点,拿到哈希之后就立刻伪造长期有效的票据,把权限固化下来,哪怕后续管理员改了域管密码,他手里的TGT照样能用。这里有个很反常识的点:票据里写的用户名即使已经被禁用,服务端在验证时也未必会立刻拒绝,因为Kerberos协议里PAC的校验链路对票据内嵌信息的信任度很高。这也是为什么黄金票据能成为很多红队项目里最稳定的权限维持方案。

1.2 黄金票据在整体攻击链中的位置

在实际的事件响应里,黄金票据攻击很少单独出现,它前面通常跟着至少两三次前置突破。最常见的前置链路是:某台员工电脑中了钓鱼邮件,拿到一个普通账号;在内网里用漏洞或弱密码提到本地管理员;然后通过横向移动摸到域控或某台备份服务器,再从LSASS进程里抓出KRBTGT的哈希。整个过程可能持续几周甚至几个月,黄金票据只是最终“压轴”的那一下。理解了这一点,做防御时就不能只盯着“伪造票据”这一个动作,更要看它在整个攻击链中的前置信号。日志审计里如果频繁出现大量服务票据请求、异常的技术账号、不寻常的登录时段,就要怀疑是不是已经有人在为最后的票据伪造做准备了。

我给客户做应急响应时,最头疼的不是发现黄金票据本身,而是发现它之后往前回溯。因为攻击者在拿到哈希之前可能已经在域内活动了很久,清理日志、删掉上传的工具、关掉计划任务,最后留下一张票据。你如果只盯着4768这种TGT请求事件去查,大概率什么都找不到。所以从项目管理的角度来说,黄金票据攻击考验的不是某个点上的检测规则,而是整个域环境的日志留痕能力和账号行为基线,这块后面我会专门讲。

2. Kerberos认证机制:理解黄金票据的物理基础

2.1 认证流程里的三部曲

要理解黄金票据为什么难防,必须先明白Kerberos是怎么工作的。我用大白话描述这个过程:第一步,客户端拿用户名和密码向域控的认证服务(AS)发请求,域控验证通过后,返回一个TGT,里面包含用户的SID、PAC(特权属性证书)等信息,整个TGT用KRBTGT的哈希派生出来的密钥加密签名。第二步,客户端拿这个TGT向票据授予服务(TGS)申请访问某个服务的票据,TGS验证TGT合法后,返回一张服务票据(ST)。第三步,客户端拿着ST去访问具体的服务,比如文件共享、HTTP应用,服务端校验ST无误就放行。

这里最关键的是第一步的签名密钥。TGT不是明文存储的,它是用KRBTGT的密码哈希派生的密钥来加密签名的。域内所有域控共享同一个KRBTGT对象,所以任何一个域控上的KRBTGT哈希都能签发全网有效的TGT。攻击者不需要知道明文密码,只要拿到这个哈希,就能离线生成任意用户的TGT,而且TGT里的PAC可以按需伪造,因为PAC本身也需要通过KRBTGT密钥来验证,你拿着根密钥,自然想写什么就写什么。

2.2 KRBTGT账号的特殊地位

KRBTGT是Kerberos服务账号,它在创建域时自动生成,拥有一个随机长密码,且这个密码默认不随其他域管密码策略一起自动轮换。很多单位从搭建域到现在,很可能从来没改过KRBTGT的密码。这个账号无法直接登录、默认被禁用登录权限,但它掌握着签发TGT的根密钥,所以在整个域的安全体系里属于“核弹级”资产。如果给域内账号按敏感度打个分,KRBTGT的敏感度比域管理员账号还要高一档,因为域管账号还能靠改密码来止血,KRBTGT哈希泄露意味着整个域的认证根基都暴露了。

攻击者一旦通过DCSync(利用域控复制协议远程抽取密码哈希)或者拿到域控上LSASS内存,这个哈希就成了一切票据伪造的根。这里要注意一个隐蔽点:DCSync不一定要在域控上执行,只要域用户拥有复制目录变更的权限,就可能被滥用,这也是黄金票据前置步骤里最不容易被发现的一环。所以在权限设计上,对域对象“复制目录更改”权限的授予必须极其谨慎,我见过不少单位把这项权限给了备份账号,等于是把认证根密钥的备份通道主动交了出去。

2.3 时间戳和票据生命周期的影响

Kerberos协议对时间异常敏感,TGT和ST都有时效。正常TGT默认有效期一般是10小时,最长可续签7天。攻击者伪造的黄金票据最明显的特点是:生命周期被改得非常长,常见的有10年甚至“永远有效”。这种情况下,域内的安全日志就会出现异常的生命周期字段。另外,Kerberos还要求客户端和服务端时间偏差不能太大,默认通常是5分钟,如果域内时间没有严格同步,那么伪造票据的时间戳和后续服务票据请求会在日志里露出马脚。这也是为什么在检测黄金票据时,时间戳和lifetime是最优先排查的字段,后面我会具体展开。

这里额外提一句,有些攻击者会故意把票据的有效期改成和正常票据差不多的10小时,目的是躲避只查“超长生命周期”的检测规则。但那样做的话,他就必须每隔一段时间重新伪造一次,而且每次伪造的票据仍然需要对应KRBTGT哈希,这就在日志里引入了一定的周期性。真正高水平的检测不会只看单个票据,而是看一个用户在一段时间内的认证行为是否呈现出“无来源、无规律、高权限”的组合特征。

3. 攻击原理与前置条件拆解

3.1 伪造黄金票据的三个关键参数

从技术上来说,生成一张能用的黄金票据需要三样东西:KRBTGT的哈希(NTLM或AES256)、目标域的SID、要伪装的用户名(一般是域管理员或企业管理员)。如果是在跨域信任的场景,还需要知道对方的域名。满足这些条件后,攻击者就可以用工具离线生成TGT,完全不依赖当前在线状态、不用在域控上执行任何操作。这也是黄金票据和很多其他内网攻击不一样的地方:生成过程是离线的,只要参数正确,票据在几天甚至几个月后依然有效。

这里补充一个细节:很多文章只说“需要KRBTGT哈希”,但实际操作中如果域环境启用了AES加密,通常还需要AES256哈希。如果攻击者只拿得到NTLM哈希,生成的票据在某些服务上可能无法使用。所以攻击者会倾向于在拿到哈希后,同时确认域控的加密类型配置,避免出现票据被拒的尴尬。从防御角度讲,优先启用AES256、逐步禁用RC4,也是一条非常重要的加固路径,因为RC4密钥可作为降级攻击的入口。

3.2 攻击者如何拿到KRBTGT哈希

这里我用防御视角描述常见的哈希泄露途径,希望各位运维朋友能对着自查:

  • 域控上的ntds.dit文件被读取,离线解析出全部哈希。这个文件默认位于C:\Windows\NTDS\ntds.dit,很多备份软件会把它复制到共享目录甚至运维跳板机上,一旦那块区域失守,哈希就等于是送上门。
  • 通过DCSync攻击,利用复制协议从域控远程拉取KRBTGT的哈希。这一类在域控日志里会留下目录服务访问事件,但很多单位没有对“复制目录更改”权限做审计,导致漏报。
  • 攻击者在域控上拿到SYSTEM权限后,从LSASS进程内存里挖出Kerberos密钥。这类行为可以发生在任何一台域控上,所以对域控的登录防护要格外严格。
  • 备份文件和快照泄露。有些虚拟化平台会给域控做快照,快照文件如果放到普通存储或者运维网段被突破,攻击者直接把快照下载下来离线提取哈希,全程不需要碰在线域控。

防御者应该把注意力放在这些泄露点上,而不是只盯最后的伪造动作。安全设备常用入侵检测规则会盯“dcsync”和“lsass读取”这些行为,但事件响应时你往往会在会话清理之后才发现异常。这里最重要的原则是:在域环境里,任何非域控机器上的SYSTEM权限操作都要谨慎放行,任何备份域控数据的行为都必须走审批和加密通道。

3.3 黄金票据的影响范围

黄金票据的杀伤力在于“全域信任”。有了TGT之后,攻击者可以伪装成任何域用户,包括但不限于域管理员组的成员、禁用或已删除的账号,甚至可以伪造一个不存在的SID,然后把自己加入高权限组。票据机制决定了:服务端校验ST时会信任PAC里的信息,而PAC又由TGT传递。只要KRBTGT哈希没改,攻击者伪造的票据就一直有效,即使原始账号的密码已经重置、即使账号被删除。这就是为什么说它是“一道很难撤销的权限”。

影响范围还体现在跨域和森林信任上。如果两个域之间存在信任关系,而攻击者拿的是根域的KRBTGT哈希,那他甚至可以尝试去访问子域或其他信任域的资源,这会进一步放大攻击半径。所以在做域信任设计时,需要严格控制信任的方向和访问边界,不要让一个域的认证根被突破后直接波及其他域。

4. 实操视角:攻击在测试环境中的全过程与现场痕迹

4.1 一个典型的模拟实验设置

这里说下我在授权测试环境里怎么验证黄金票据。一般会准备两到三台Windows Server 2022域控和两台成员服务器,客户端加入域,配置好DNS、时间和Kerberos策略。模拟攻击时,拿到KRBTGT哈希后,可以生成一张用户名为“fakeadmin”的票据,然后把票据导入当前会话,再去访问某台文件服务器上的加密共享。整个过程里我不会碰业务域,只观察域控上的安全日志变化。整个验证的核心不是“能不能通”,能通是必然的,重点是要搞清楚“通了之后日志里到底长什么样”,这样才能回头去写检测规则。

这里面有个容易被忽略的细节:测试域的日志级别要和真实生产环境保持一致。很多人在测试环境把审核策略全开了,结果生产环境什么都没有,最后拿测试环境的检测经验去上线,等于纸上谈兵。我一般会把测试域先按生产域的审计策略配置好,再逐步打开更细的审核项,这样才能模拟出“在真实配置下黄金票据到底有没有痕迹”的效果。

4.2 攻击成功后域控日志里的关键异常

分享几个我在测试环境中观察到的技术指标,这些都是可以在生产环境预演的:

  • 事件ID 4768(Kerberos TGT已请求):请求者的IP与用户常规登录来源不一致,或者TGT生命周期和默认值差异过大。如果组织把默认生命周期设成10小时,突然出现一个几百天生命周期的4768,必须重点盯。
  • 事件ID 4769(Kerberos服务票据已请求):同一用户短时间内向大量服务请求ST,且服务端IP不在该用户业务范围,可能是在拿黄金票据“刷服务”。这里要尤其关注SPN异常,比如请求了多个非业务相关的服务。
  • 事件ID 4624(登录成功):登录类型3(网络登录)和类型10(远程交互登录)同时出现,或者一个被禁用的域管账号突然在域控上登录,都是信号。
  • 日志里出现加密套件异常:正常环境多数用AES256,突然出现RC4加密的TGT请求。如果组织已经禁用了RC4,这个直接可以定为高可疑。

需要注意的一点是,上述异常不一定在攻击成功当天就出现。黄金票据的加密特性决定了它可以用“后来再登录”的方式使用,攻击者完全可能在拿到哈希之后隔一个月再伪造并登录。因此检测黄金票据不能只看单点事件,要把时间窗口拉长到几天甚至几周。

4.3 为什么很多防护设备明明部署了,还是漏了

做SIEM的人经常会遇到一个尴尬:告警出来了,但因为没有上下文,只能按低危忽略。黄金票据的一个特点是,认证包本身完全合法,他拿着真钥匙走正门,刷卡、过闸机上全都有记录,但每一条记录单看都合理。所以规则层面很难直接封死,更多要靠“账户行为基线”来判断。比如某个账号三个月没登录过,突然在凌晨三点请求了一堆服务票据,这种偏离基线的行为,人工研判的价值远大于一条固定规则。

我见过不少单位上了很贵的态势感知,规则库里确实有“黄金票据检测”,但检出效果很差。原因很简单:规则默认了攻击者会把票据生命周期改成十年,而真实攻击者早就知道了这条规则,会改成正常时长。所以我在做检测项时,从来不以“生命周期超长”作为唯一的金标准,而是结合登录来源、服务请求数量、时间区间、加密类型四维一起来打点。这也是为什么我要在这里反复强调,别把黄金票据检测当成一个“签名匹配”问题,它本质上是“行为偏离”问题。

5. 防御与加固:从根上降低黄金票据的杀伤力

5.1 先保住KRBTGT哈希

防御黄金票据的第一原则,就是别让KRBTGT哈希落到攻击者手里。具体做法包括:

  • 域控安全加固:关闭不必要的服务、及时打补丁、限定管理口的来源IP。域控不能像普通应用服务器一样随便对外开放,管理网段要收敛到独立且受控的堡垒网络。
  • 保护好域管账号:不在普通机器上使用域管凭证,使用受保护的管理主机,有条件可以采用Privileged Access Workstation方案。
  • 对DCSync行为做监控:域对象上的“复制目录更改”权限要收紧,不要随意授予普通账号。更稳妥的做法是定期审查域内所有账号对该权限的持有情况。
  • 备份与快照要单独加密:ntds.dit的备份副本是泄露哈希最常见的路径之一。对备份系统做双因子认证、限定备份恢复的人员和机器,比给备份系统打补丁还重要。

提示:这个原则要从整体权限设计入手。我见过不少单位给“备份管理员”配了域对象复制权限,一旦该账号被拿走,DCSync直接可用,黄金票据只是时间问题。

5.2 定期重置KRBTGT密码的正确姿势

前面说过KRBTGT密码默认不轮换,但真正重置它是有讲究的。因为域内所有域控共享同一个KRBTGT对象,重置必须在短时间内传播到每台域控。最稳妥的操作是分两步走:

  1. 第一次重置KRBTGT密码,等待复制完成后,把之前可能存在的所有TGT全部作废。
  2. 至少等待12到24小时,确保所有域控复制状态健康、没有落伍的域控。
  3. 再重置一次,把以前可能已经泄露的、以旧哈希签发的票据彻底失效,同时避免AD密码历史里留下可追溯的旧值。

具体命令可以用PowerShell里的Set-ADAccountPassword,但执行前必须在测试域完整演练一遍。执行时要避开业务高峰,因为重置之后所有已签发的TGT会全部失效,域内客户端的首次认证会遇到短暂的重新认证过程。这个短期影响通常可以接受,但如果环境里有大量缓存的计划任务或服务账户,就需要提前准备。

重置KRBTGT密码不能做成“一年一次”的机械动作。如果你的域很大、分支很多,先做一次清点,统计DC的复制状态,把健康检查做了再动手。真正要养成习惯的是:每次重置后,观察24小时内的认证失败和复制错误,确认没有异常再结束操作。

5.3 利用安全事件线和日志基线做主动发现

除了被动等待告警,建议搭建一个简单的Kerberos异常分析管道。不一定要多贵,用现成的SIEM甚至ELK就能做。核心思路是这样:

  • 收集域控的4768、4769、4624日志,归一化到同一个平台,保留至少六个月。
  • 对每个用户建立TGT生命周期基线,生命周期超过三倍基线的直接高可疑。这里的基线不是固定值,要按用户类型分组。
  • 对服务票据的“请求服务数量”做阈值,比如一个账号十分钟内请求超过五十个不同服务,触发通知。
  • 对“TGT请求来源IP”和“用户常规登录来源”做资产关联,出现非法来源要重点看。

这一步不需要很高级的模型,一张聚合表加几个SQL查询就能做出很好的效果。我个人的经验是,不要只看单条日志,要看用户维度的时间切片。黄金票据最大的弱点是“生命周期长”,只要在检测模型里把生命周期和登录频率同时考虑,漏报的几率会大幅下降。当然恶意攻击者也可能伪造短生存期票据,但这种情况下他得持续依赖KRBTGT哈希,次数多了,一定会在来源和频率上留下线索。

6. 常见问题与排查技巧实录

6.1 黄金票据和白银票据怎么区分

很多人在应急响应时分不清这两个概念,我直接用表格总结几个关键差异:

维度黄金票据白银票据
伪造对象TGT服务票据(ST)
所需哈希KRBTGT哈希目标服务账号哈希
影响范围整个域单个服务
依赖在线不需要不需要
日志痕迹AS请求阶段(4768)异常TGS请求阶段(4769)异常
检测难度较高中等

实际排查时,先看是哪一类日志异常,再决定优先关注哪些资产。比如在4771或4768里发现大量异常,优先排查KRBTGT是否泄露;如果只在4769里发现某个服务的异常,优先排查那个服务账号的哈希是否泄露。这两条线的处置思路完全不同,用错方向会耽误很多时间。

6.2 发现可疑TGT之后怎么处理最快

如果怀疑环境中存在黄金票据,最紧急的处置不是去删除某个会话,而是考虑让旧票据快速失效。直接的思路是:

  1. 先确认KRBTGT是否已泄露,查看域控进程里有没有异常的内存读取行为,同时检查最近一周是否有DCSync相关的目录服务访问审计。
  2. 临时启用域管账号的登录限制,阻断用票据换取服务票证的后续访问。这里可以配合对High Value账号进行双因子保护。
  3. 重置KRBTGT密码,这是唯一能让旧票据彻底失效的办法。按前面说的两步重置来做,不要图快一次搞定。
  4. 在日志平台里针对伪造账号和异常生命周期做一次全量回溯,找出攻击者的首次出现时间,判断是否还有后门。

这个处置过程中最忌讳的是在没有确认哈希泄露范围的时候就重置密码。我有一个项目里,客户先重置了一次KRBTGT,结果攻击者已经通过其他后门控制了另一台域控,新哈希也被拿走了,重置等于白做。所以处置之前,必须先把攻击链上所有可能的域控权限都排查干净,否则治标不治本。

6.3 我做域安全评估时踩过的一些坑

最后说点个人经验。早期做域安全评估时,我总想把所有攻击行为都拦在门外,于是加了一堆严格的规则,结果业务账号因为票据续签经常报错,运维团队差点把我拉黑。后来才明白,对黄金票据这类认证层攻击,真正的防御底座是权限收敛和密钥管理,日志和规则只是发现工具。你不能指望靠一条规则就挡住所有攻击,但良好的密钥管理习惯能让攻击者即使进来了也拿不到最有价值的东西。

还有一个很真实的案例:某个客户在应急响应时,发现事件日志里根本没有4768,排查后才知道他们域控日志被清理过,之前的所有证据都没了。这件事提醒我,域控的日志必须实时外传,只存本地根本不安全。建议把域控安全日志接到独立的日志平台,设置保留期至少六个月,同时监控“清除安全日志”这个行为本身,一旦出现4639事件,立刻按事故处理。黄金票据攻击真正的可怕之处,在于它的密钥根源很少被轮换、日志痕迹又容易被清洗,所以我们要做的不是等它发生时去补救,而是提前把密钥管好、日志留好、权限收好。只要这三件事做到位,它就不再是无解的攻击了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询