news 2026/8/16 23:14:59

深入解析Kerberos黄金票据与白银票据攻击:原理、实战与防御

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入解析Kerberos黄金票据与白银票据攻击:原理、实战与防御

1. 从一次“幽灵登录”说起:为什么需要了解票据攻击

几年前,我负责的一个内部系统监控告警突然响了,提示某个核心数据库服务器在凌晨出现了异常登录。我们立刻调取日志,发现登录记录显示的是一个早已离职半年的运维人员的账号。更诡异的是,这个账号的密码在离职时已经重置,且启用了双因素认证。当时团队里一片紧张,第一反应是遭遇了高级持续性威胁(APT)。经过一番紧张的排查,最终在系统的Kerberos票据缓存里找到了端倪——攻击者并没有窃取密码,而是伪造了一张可以“永久通行”的“黄金门票”。

这就是经典的“黄金票据”攻击。在Windows域环境或任何使用Kerberos协议进行身份认证的大型企业内网中,这类攻击是攻击者获取权限维持和横向移动能力的“核武器”。与之相对的“白银票据”,则更像一把精准的“万能钥匙”,可以悄无声息地访问特定服务。很多安全工程师对这两个概念耳熟能详,但往往停留在“知道名字”的层面,对于其原理、差异、利用条件和防御手段缺乏系统性的理解。今天,我就结合多年的实战踩坑经验,带你彻底搞懂黄金票据和白银票据,不仅知道“是什么”,更要明白“为什么”以及“怎么办”。

简单来说,你可以把Kerberos协议想象成一个高度安全的电影节验票流程。你想看电影(访问服务),需要先到官方售票处(密钥分发中心KDC)凭身份证(密码哈希)买票(票据授予票据TGT)。拿着这张TGT,你才能去具体的放映厅门口(服务)换电影票(服务票据ST)入场。黄金票据,就是直接伪造了售票处的公章和空白票根,可以自己签发任意场次的TGT;而白银票据,则是直接伪造了某个放映厅的验票章,可以自己制作该厅的假电影票。前者权限极大但容易被发现,后者权限精准但极其隐蔽。

2. Kerberos认证协议精要:理解票据的“原材料”

要理解票据攻击,必须先吃透Kerberos认证的基本流程。很多文章一笔带过,但这里恰恰是理解后续所有攻击手法的基石。Kerberos协议的核心是“票据”,而票据的安全完全依赖于“密钥”。

2.1 核心参与方与密钥体系

一个标准的Kerberos域环境(以Active Directory为例)包含三个核心角色:

  1. 客户端:想要访问某个服务的用户或计算机。
  2. 服务:客户端想要访问的目标,如文件共享、SQL数据库、Web应用等。
  3. 密钥分发中心:包含两个部分:
    • 身份验证服务:负责验证客户端的初始身份。
    • 票据授予服务:负责颁发访问服务的票据。

这里的关键在于密钥。在Kerberos的世界里,密码本身并不直接在网络上传输,而是通过哈希算法生成的密钥来进行加密和解密。

  • 用户密钥:由用户密码的哈希值生成。只有用户自己和KDC知道。
  • 服务密钥:由服务账户密码的哈希值生成。只有服务自身和KDC知道。
  • KDC密钥:这是域控制器上一个特殊的、极其强大的密钥,对应的是krbtgt这个内置账户的密码哈希。它是整个Kerberos信任体系的根。

注意:这里说的“密钥”在Windows AD中通常指的就是NTLM哈希或AES密钥。krbtgt账户的密码哈希,就是整个域森林的“皇冠上的明珠”。

2.2 认证流程三步走与票据生成

现在我们看一个完整的、简化的认证流程,重点关注票据是如何产生的:

第一步:获取票据授予票据

  1. 客户端向AS发送一个认证请求,包含自己的用户名。
  2. AS在AD中查找该用户,用该用户的密钥(由密码哈希派生)加密生成一个“会话密钥A”。
  3. AS将这个用用户密钥加密的“会话密钥A”,连同用KDC密钥加密的TGT(里面也包含了“会话密钥A”和客户端信息等),一起打包发给客户端。
  4. 客户端收到后,用自己的密码哈希解密第一部分,得到“会话密钥A”。至此,客户端拥有了TGT和会话密钥A,但无法读取TGT的内容,因为TGT是用KDC密钥加密的。

第二步:获取服务票据

  1. 当客户端需要访问特定服务时,它会构建一个认证器(用会话密钥A加密的时间戳等信息),连同TGT一起发送给TGS。
  2. TGS用KDC密钥解密TGT,验证其有效性,并取出里面的会话密钥A。
  3. TGS用会话密钥A解密认证器,验证时间戳(防重放)。
  4. 验证通过后,TGS生成一个新的“会话密钥B”供客户端和服务之间通信。
  5. TGS将两部分内容发回客户端:一部分用会话密钥A加密(包含会话密钥B),另一部分是服务票据ST(用服务密钥加密,里面包含了会话密钥B和客户端信息)。

第三步:访问服务

  1. 客户端用会话密钥A解密第一部分,得到会话密钥B。
  2. 客户端构建一个新的认证器(用会话密钥B加密),连同ST一起发送给目标服务。
  3. 服务用自己的密钥(服务账户密码哈希)解密ST,得到会话密钥B,再用它会话密钥B解密认证器进行验证。
  4. 验证通过,服务向客户端提供访问。

这个流程的精妙之处在于:密码哈希从未在网络上传输;TGT和ST都是被加密的票据,客户端不能篡改;整个信任链源于KDC密钥。而黄金和白银票据攻击,正是从不同位置撕裂了这个信任链。

3. 黄金票据攻击:伪造域内的“万能护照”

理解了Kerberos流程,黄金票据的原理就呼之欲出了。它的核心在于直接伪造TGT票据

3.1 攻击原理与必要条件

在正常的流程中,TGT是由KDC用krbtgt账户的密钥加密的。客户端无法伪造,因为它不知道krbtgt的密码哈希。黄金票据攻击的前提,就是攻击者已经通过某种手段(例如域控提权、抓取内存中的LSASS进程 dump)获取了krbtgt账户的密码哈希

拥有了这个哈希,攻击者就拥有了与KDC相同的加密能力。他可以:

  1. 完全脱离KDC,自己制作一张TGT。
  2. 在这张自制的TGT里,他可以声明自己是任何用户(包括不存在的用户),属于任何组(比如域管理员组)。
  3. 因为这张TGT是用正确的krbtgt密钥加密的,所以当攻击者拿着它去TGS请求服务票据时,TGS会完全信任它,认为这是一张由合法KDC颁发的票据。

攻击的必要条件有三个,缺一不可:

  1. krbtgt账户的密码哈希:这是最核心的素材。
  2. 域名:知道是哪个域。
  3. 域的安全标识符:每个域唯一的SID。

后两者信息在域内是公开的,很容易获取。所以,整个攻击的成败关键就在于能否拿到krbtgt的哈希。

3.2 实操步骤与深度解析

假设我们已经通过漏洞拿到了域控权限,并导出了krbtgt的哈希。接下来,在任意一台已加入域的机器(甚至是一台受控的域内机器)上,都可以发起攻击。这里以Mimikatz工具为例:

# 在Mimikatz中执行黄金票据生成命令 kerberos::golden /admin:Administrator /domain:contoso.com /sid:S-1-5-21-123456789-987654321-555555555 /krbtgt:a9bcf3e45d1e5e8f0123456789abcdef0 /ptt
  • /admin:Administrator:这里指定你要伪造的用户名。你可以填Administrator,也可以填FakeUser$,甚至CEO。TGS只验证票据的加密有效性,不关心票据里的用户名在AD里是否存在。
  • /domain/sid:公开信息。
  • /krbtgt:最关键的krbtgt账户的NTLM哈希。
  • /ptt:表示“传递票据”,即直接将生成的黄金票据注入到当前Windows会话的内存中,立即生效。

执行成功后,当前命令行窗口的会话就拥有了你所伪造用户的权限。你可以使用dir \\dc.contoso.com\c$psexec等工具进行横向移动,畅通无阻。

3.3 黄金票据的威力与局限性

威力:

  • 持久性极强:黄金票据的有效期在制作时可以设定,最长可达10年(Kerberos策略中的Maximum lifetime for user ticket)。这意味着攻击者可以制造一个持续数年有效的后门。
  • 权限至高:可以伪造域内任何用户,包括域管理员。
  • 独立于KDC:一旦生成,就不再需要与KDC交互。即使域控宕机或网络隔离,只要票据在有效期内,攻击者依然可以在域内横向移动。

局限性/可检测性:

  • 无法更新TGT:正常的TGT到期前,客户端会用它去TGS申请新的TGT(续订)。黄金票据是伪造的,无法完成这个续订流程。因此,在域控的日志中,你会看到某个用户(尤其是高权限用户)只有TGS请求日志,而没有对应的AS请求(首次获取TGT)日志。这是一个非常可疑的迹象。
  • 票据信息异常:黄金票据中的某些字段可能与正常票据不同,例如认证时间、加密类型等。专业的终端检测与响应工具或SIEM可以通过分析票据特征进行发现。
  • 依赖初始入侵:必须先拿到krbtgt哈希,这通常意味着域控已经失陷。

实操心得:在应急响应中,如果发现一个域管账号在非工作时间、从非常用终端发起大量横向移动,并且只有TGS日志,没有AS日志,黄金票据攻击的可能性就非常高了。此时,仅仅重置该域管账号的密码是没用的,必须重置krbtgt账户的密码。

4. 白银票据攻击:伪造通往特定服务的“后门钥匙”

如果说黄金票据是伪造护照,那么白银票据就是伪造某个国家的签证或者某个俱乐部的会员卡。它的攻击面更窄,但更隐蔽。

4.1 攻击原理与必要条件

白银票据攻击绕过了前两步,直接伪造访问特定服务所需的服务票据

在正常流程中,ST是由TGS用目标服务的密钥(服务账户的密码哈希)加密后发给客户端的。服务在收到ST后,用自己的密钥解密验证。白银票据攻击的前提是,攻击者获取了某个特定服务账户的密码哈希

拥有了这个哈希,攻击者可以:

  1. 完全不需要与KDC(AS和TGS)进行任何交互。
  2. 直接伪造一张访问该服务的ST。
  3. 因为这张ST是用正确的服务密钥加密的,所以目标服务会认为它是一张由合法TGS颁发的票据,从而允许访问。

攻击的必要条件:

  1. 目标服务账户的密码哈希:例如,要伪造访问C$共享的票据,就需要域控制器计算机账户(如DC$)的哈希;要伪造访问SQL服务,就需要SQL服务运行账户的哈希。
  2. 域名
  3. 域SID
  4. 目标服务的SPN:服务主体名称,用于唯一标识一个服务,如CIFS/dc.contoso.com

4.2 实操步骤与场景分析

假设我们通过横向移动,在一台Web服务器上抓取到了本地管理员哈希,并发现该服务器以域用户svc_sql的身份运行了SQL Server服务。我们获取了svc_sql的密码哈希。

现在,我们可以从域内任何位置(甚至是一台未加入域的机器,只要它能连接到目标服务器),直接伪造访问该SQL Server的票据:

# 使用Mimikatz伪造白银票据 kerberos::golden /domain:contoso.com /sid:S-1-5-21-123456789-987654321-555555555 /target:sqlsrv.contoso.com /service:MSSQLSvc /rc4:1a2b3c4d5e6f7890abcdef1234567890 /user:fakeuser /ptt
  • /target/service:这构成了SPN的一部分(MSSQLSvc/sqlsrv.contoso.com)。
  • /rc4:这里使用的是服务账户svc_sql的NTLM哈希(在命令中参数名仍为/rc4,但实际传入哈希值)。
  • /user:可以任意指定一个用户名,服务只验证票据加密,不验证用户是否存在或是否有权限(但服务内部可能仍有自己的ACL检查)。

注入票据后,你就可以使用sqlcmd等工具,以fakeuser的身份直接连接sqlsrv.contoso.com的SQL服务,而无需任何密码。

4.3 白银票据的隐蔽性与局限性

隐蔽性:

  • 无KDC交互:整个攻击过程不涉及与域控的通信。在域控的Kerberos日志中,完全不会留下任何记录。这是它比黄金票据隐蔽得多的根本原因。
  • 针对性极强:只针对单一服务,动静小。

局限性:

  • 权限受限于服务:你只能访问该票据所针对的服务。伪造了C$共享的票据,就能访问文件系统;伪造了LDAP服务的票据,就能查询或修改AD对象。但你不能用它去申请访问其他服务的票据。
  • 无法获取PAC验证:PAC是放在TGT和ST里的一个特权属性证书,包含了用户的组成员关系等信息。在白银票据攻击中,由于没有经过KDC,攻击者可以自己构造PAC,但通常构造一个“空PAC”或最小权限的PAC。一些敏感服务(如域控的LDAP服务)可能会要求验证PAC的KDC签名,而自制的PAC没有这个签名,可能导致访问被拒绝。但对于很多服务(如文件共享、普通Web服务)来说,它们不验证PAC,因此攻击依然有效。
  • 需要获取服务哈希:虽然不如krbtgt哈希那么核心,但获取特定服务账户的哈希也需要一定的入侵深度。

踩坑实录:在一次红队演练中,我们通过白银票据成功访问了一台文件服务器,并上传了工具。但在尝试通过WMI在该服务器上执行命令时失败了。原因是文件共享服务和WMI服务对应的是同一个计算机账户,但它们的SPN不同。我们伪造的是CIFS服务的票据,而WMI服务需要HOSTRPCSSSPN的票据。这是一个典型的对服务边界理解不清导致的错误。解决方案是,要么获取该计算机账户的哈希,然后为HOST服务也伪造一张白银票据;要么利用已有的文件访问权限,尝试抓取该服务器内存中的哈希,向更深处渗透。

5. 防御、检测与响应:构建票据攻击的免疫系统

了解了攻击原理,防御的思路就清晰了:保护密钥、监控异常、快速响应。

5.1 预防阶段:加固信任根基

  1. 保护krbtgt账户:这是防御黄金票据的重中之重。
    • 定期重置krbtgt密码:微软官方建议,在域功能级别为Windows Server 2008及以上时,至少每180天重置两次krbtgt账户密码。具体操作有严格顺序(先重置一次,等待复制,再重置一次),目的是同时让新旧哈希都失效。这是一个“伤筋动骨”的操作,需要仔细规划。
    • 启用Credential Guard:对于Windows 10/11和Server 2016+,启用Credential Guard可以基于虚拟化安全来保护派生凭证,能有效防止内存中抓取哈希,从而切断获取krbtgt和服务账户哈希的路径。
  2. 保护服务账户
    • 使用组托管服务账户:对于运行服务的账户,强烈建议使用gMSA。它的密码由AD自动管理,非常复杂且定期自动轮换,管理员都看不到明文密码,极大增加了获取其哈希的难度。
    • 遵循最小权限原则:为服务账户分配刚好够用的权限,避免使用域管理员等高权限账户运行服务。
    • 使用强密码和定期轮换策略
  3. 强化域控安全:域控是密钥的保管库。必须实施最严格的安全措施,包括及时打补丁、限制管理员登录、启用攻击面减少规则等。

5.2 检测阶段:发现异常活动的蛛丝马迹

防御不可能100%成功,因此检测至关重要。

  1. 监控Kerberos事件日志:在域控上启用详细的Kerberos服务日志。
    • 事件ID 4768:TGS票据请求成功。重点关注:同一个高权限用户在短时间内从大量不同计算机请求票据;请求的服务类型异常(如域管理员频繁请求访问普通文件共享)。
    • 事件ID 4769:服务票据请求成功。结合4768分析,如果只有4769而没有对应的4768(AS请求),是黄金票据的强指示器。对于白银票据,域控上根本不会有日志,这本身也是一个需要关注的异常点——重要的服务访问为何没有认证记录?
    • 事件ID 4771:Kerberos预身份验证失败。但黄金/白银票据攻击通常不触发此日志,因为攻击者绕过了预认证。
  2. 分析票据特征
    • 加密类型:正常的票据加密类型会遵循域策略。攻击工具生成的票据可能使用非标准的加密类型。
    • 票据有效期:攻击者可能设置超长的有效期。
    • 票据中的时间戳:票据的起止时间与认证时间的关系是否合理。
  3. 终端行为监控
    • 异常进程行为:检测如Mimikatz、Rubeus等攻击工具的执行。
    • 异常的票据缓存操作:监控对LsaCallAuthenticationPackage的调用,特别是用于票据传递的操作。
    • 网络流量分析:检测不经过域控的Kerberos服务访问(可能为白银票据),或异常的Kerberos流量模式。

5.3 应急响应:攻击发生后的补救措施

一旦确认发生票据攻击,必须快速、有序地响应。

  1. 遏制与隔离
    • 立即隔离被确认为攻击跳板的机器。
    • 如果攻击者使用了伪造的域管账号,在AD中临时禁用该账号(注意,这只是阻止其用真密码登录,对已存在的黄金票据无效)。
  2. 清除攻击者票据
    • 在受控的终端上,使用klist purge命令清除当前会话的所有Kerberos票据。
    • 在域控上,可以强制吊销特定用户的票据,但操作复杂且影响面广。
  3. 根除威胁
    • 对于黄金票据必须重置krbtgt账户密码两次。这是唯一能使所有已颁发的黄金票据失效的方法。重置后,所有域内计算机需要重新认证,可能会引起短暂的服务中断。
    • 对于白银票据:重置对应服务账户的密码。如果服务账户是gMSA,其密码会自动轮换,但需要确认轮换周期。
    • 全面排查域控,找出攻击者获取哈希的初始入侵途径并修复(如修补漏洞、清除后门、修复错误配置)。
  4. 恢复与加固
    • 在确认环境干净后,恢复被隔离的系统。
    • 实施更严格的监控策略。
    • 审查并加固所有服务账户和域控安全配置。

6. 进阶思考:从Kerberos到现代身份安全的延伸

黄金票据和白银票据虽然是基于传统Kerberos协议的经典攻击,但其背后“窃取或伪造信任根”的思想,在现代身份安全领域依然具有普遍意义。

  1. 云环境下的“票据”:在Azure AD中,相当于krbtgt的是租户根密钥。攻击者如果获取了应用程序的客户端密钥或证书,就可以伪造令牌来访问该应用代表的资源,这可以看作是云上的“服务票据”攻击。而如果攻击者能篡改或伪造SAML令牌签名证书,其影响范围则堪比“黄金票据”。
  2. 双因素认证的局限:Kerberos票据攻击清晰地展示了,在身份验证链的初始环节之后,后续的授权环节完全依赖于密码学票据。即使初始登录有双因素认证,一旦攻击者通过内存抓取等方式获得了有效的TGT或会话密钥,就可以完全绕过MFA。这强调了保护认证后令牌的重要性。
  3. 零信任架构的启示:零信任的核心理念是“从不信任,始终验证”。传统的Kerberos模型在第一次认证后,就基于票据授予了广泛的信任。零信任模型则要求对每一次访问请求,都进行更细粒度的、基于动态策略的重新评估,这能从架构上缓解票据传递攻击带来的风险。

理解黄金票据和白银票据,不仅仅是掌握两种攻击技术,更是深入理解整个基于票据的身份认证体系的安全边界和薄弱环节。作为防御者,我们需要像攻击者一样思考,才能构建出真正纵深、有效的身份安全防御体系。从保护最核心的密钥开始,到部署全方位的检测手段,再到建立成熟的应急响应流程,每一步都至关重要。安全是一场持续的攻防对抗,而对基础协议的深刻理解,永远是我们最坚实的盾牌。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 23:10:45

群晖NAS部署ddns-go实现IPv6动态域名解析,打造高速外网访问通道

1. 项目概述与核心价值最近在折腾家里的群晖NAS,一个绕不开的需求就是如何在外网随时访问它。虽然群晖自带的QuickConnect服务很方便,但速度嘛,有时候确实有点“随缘”。特别是当你需要稳定、高速地传输大文件,或者想流畅地远程播…

作者头像 李华
网站建设 2026/8/16 23:07:00

DM8 事务隔离级别:默认配置 + MySQL/Oracle 行为差异

一、简介事务隔离是并发数据库核心机制,用来控制多会话同时读写数据时的可见性规则,解决三类并发问题:脏读、不可重复读、幻读。 SQL 标准定义 4 种隔离级别(由低到高): 读未提交 Read Uncommitted 读已提交 Read Committed(RC) 可重复读 Repeatable Read(RR) 串行化…

作者头像 李华
网站建设 2026/8/16 23:03:28

华为OD机试真题 新系统 2026-08-09 Java、Go、C【查找最佳充电策略】

目录 题目 思路 Code 题目 题目内容: 给定一个电费组 priceArray,表示未来 priceRecords 小时内每小时的电价,单位为分/kWh。 找出充电成本最低的连续 hours 个小时的时间段开始时刻点。 若存在多种成本最低方案,优先返回成本最低方案中最早的时间点。 输入描述:…

作者头像 李华
网站建设 2026/8/16 23:03:14

江科大STM32入门:FLASH闪存详解——从结构原理到读写保护

STM32学习笔记 适用平台:本文基于 STM32F103C8T6(中容量产品,64KB Flash)讲解,使用标准库开发。 前言:为什么非要学FLASH? 学到这里,很多小伙伴可能有个疑问:我程序不是…

作者头像 李华