三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

黄金票据与白银票据:Kerberos协议下的权限维持攻击与防御实战

黄金票据与白银票据:Kerberos协议下的权限维持攻击与防御实战

1. 项目概述:从“票据”到“权限维持”的攻防博弈

在域渗透和安全评估的实战中,我们经常会听到“黄金票据”和“白银票据”这两个听起来颇具诱惑力的名词。它们不像传统的漏洞利用那样直接获取权限,而是像拿到了通往城堡后门的万能钥匙,能够在目标系统上实现一种极其隐蔽且持久的权限维持。很多刚接触内网安全的朋友,可能会被Kerberos协议、票据、加密算法等概念绕晕,感觉门槛很高。今天,我就以一个从业者的视角,结合大量实战踩坑的经验,带大家彻底搞懂这两种“票据”到底是什么、怎么来的、怎么用,以及最关键的——如何防御。

简单来说,你可以把Windows域环境想象成一个高度安全的公司。Kerberos协议就是公司的门禁系统。员工(用户)要进入某个办公室(访问某个服务),需要先去前台(域控)用工牌(TGT票据)换取一张进入特定办公室的访客单(服务票据ST)。黄金票据,就是伪造了前台用来签发所有工牌的那个“总经理印章”(krbtgt账户的NTLM Hash),从而可以给自己签发任意员工的工牌,想去哪就去哪。而白银票据,则是直接伪造了进入某个特定办公室(如文件服务器)的访客单,但前提是你得知道那个办公室门锁的密码(服务账户的NTLM Hash)。搞懂它们,不仅能让你在红队行动中多几种迂回渗透的思路,更能让蓝队成员深刻理解,为什么仅仅打补丁是不够的,还必须保护好那些核心的“密钥”。

2. 核心原理深度拆解:Kerberos协议与票据的生命周期

要理解黄金和白银票据,必须先把它们的“出生地”——Kerberos协议捋清楚。很多文章一上来就讲攻击步骤,却不讲为什么能这么做,导致读者只能照猫画虎,遇到环境变化就束手无策。我们抛开复杂的RFC文档,用生活化的场景来重建这个过程。

2.1 Kerberos认证的三步舞曲

假设用户Alice想访问服务器S上的文件共享服务。

第一步:获取“门票兑换券”(TGT - Ticket Granting Ticket)

  1. Alice向认证服务器AS(Authentication Server)发送请求:“我是Alice,我想申请一张门票兑换券。”
  2. AS检查域里是否有Alice这个用户。如果存在,AS会生成一个会话密钥(Session Key A)。这个密钥是后续Alice和票据授予服务器TGS(Ticket Granting Server)秘密通信用的。
  3. AS准备两样东西:
    • TGT票据本身:里面包含了Alice的用户名、会话密钥Session Key A的拷贝、时间戳、有效期等信息。这个TGT是用krbtgt账户的密码Hash加密的。所以,只有域控(持有krbtgt密码)才能解密和验证这个TGT。
    • 登录会话密钥(Logon Session Key):这是用Alice的密码Hash加密的Session Key A。
  4. AS把这两样东西一起发给Alice。Alice收到后,用自己的密码解密出Session Key A。至此,Alice手里有了一张自己无法阅读的TGT(因为被krbtgt的密钥加密着),以及一个只有自己和TGS知道的秘密会话密钥Session Key A。

关键点1:TGT的核心加密密钥是krbtgt账户的NTLM Hash。谁拥有这个Hash,谁就拥有了签发任意用户TGT的能力。这就是黄金票据攻击的根源。

第二步:用兑换券换取“具体门票”(ST - Service Ticket)

  1. Alice现在想访问服务器S。她构建一个请求,里面包含:
    • 她刚才拿到的TGT(还是加密状态)。
    • 一个用Session Key A加密的“认证器”(Authenticator),里面包含她的用户名、当前时间戳等,用于向TGS证明“此刻是我本人在用这个TGT”。
    • 她要访问的服务名(例如,cifs/fileserver.domain.com)。
  2. Alice将这个请求发送给TGS。
  3. TGS收到请求后,首先用krbtgt的密码Hash解密TGT,取出里面的Session Key A和Alice的用户信息。然后,用Session Key A解密认证器,核对时间戳(防重放)、用户名是否与TGT内一致。验证通过后,TGS认为Alice是合法的。
  4. TGS为Alice访问服务器S生成一张服务票据ST。ST里包含Alice的用户名、用户所属的组(SID)、一个新的服务会话密钥(Service Session Key B)的拷贝、时间戳、有效期等。整个ST是用服务器S的计算机账户(或服务账户)的NTLM Hash加密的。
  5. TGS同时生成一个回复给Alice,里面包含用Session Key A加密的Service Session Key B,以及那个加密后的ST。
  6. Alice收到回复,用Session Key A解密出Service Session Key B。现在,她手里有了访问服务器S的“门票”ST(但她自己打不开),以及和服务器S通信的临时密钥Session Key B。

关键点2:ST的核心加密密钥是目标服务账户的NTLM Hash。谁拥有这个Hash,谁就可以伪造访问该服务的ST,且不需要与域控(TGS)交互。这就是白银票据攻击的根源。

第三步:持门票入场(AP - Application Request)

  1. Alice连接服务器S,发送:
    • 加密的ST。
    • 一个用Service Session Key B加密的新的认证器(包含当前时间戳等)。
  2. 服务器S用自己的密码Hash解密ST,取出Session Key B和Alice的用户信息。然后用Session Key B解密认证器,验证时间戳。验证通过后,服务器S就允许Alice访问了,并根据ST中Alice的组信息(SID)进行授权。

整个流程的精妙之处在于:密码Hash(密钥)本身不在网络上传输;票据是重用的,但每次认证都附带一个新鲜的时间戳加密块(认证器)来防重放;通过多层会话密钥实现了安全的委派通信。

2.2 黄金票据 vs 白银票据:核心差异对照表

理解了基础流程,两者的区别就一目了然了:

特性黄金票据 (Golden Ticket)白银票据 (Silver Ticket)
伪造对象TGT票据特定服务的ST票据
所需密钥krbtgt账户的NTLM Hash目标服务账户的NTLM Hash
签发机构攻击者自己(冒充域控的AS/TGS)攻击者自己(冒充TGS)
验证机构域控的TGS和所有服务仅目标服务本身
与域控交互完全不需要。TGT是攻击者自签发的,后续申请ST时,攻击者可以自己充当TGS。完全不需要。ST是攻击者直接伪造给服务的,服务自己验证。
权限范围极广。可以申请访问域内任何服务的ST,因为TGS信任这张TGT。极窄。只能访问特定服务(如cifs, http, mssql等)。
隐蔽性相对较低。因为如果使用黄金票据生成的TGT去申请ST,这个行为会记录在域控的日志中(Kerberos TGS请求)。极高。通信完全在客户端与服务端之间,不经过域控,域控上没有日志
持久性极强。只要krbtgt的Hash不变(默认180天强制改一次),且票据在有效期内,就一直有效。可以设置超长有效期(如10年)。依赖服务。只要服务账户的密码/Hash不变,票据就有效。但服务账户密码可能更改。
核心攻击前提获取域管理员权限,从而导出krbtgt的Hash。获取目标服务账户的Hash(可通过本地管理员权限在服务器上导出)。

一个生动的比喻

  • 黄金票据:你伪造了公安局的印章和空白身份证制作机(krbtgt Hash)。你可以给自己制作任何人的身份证(TGT),然后用这个身份证去任何需要查验身份证的场所(服务)办理业务。虽然办业务时场所可能会记录(域控日志),但他们无法当场鉴别身份证真伪,因为印章是真的。
  • 白银票据:你偷偷复制了某个高端会所的会员卡磁条数据(服务Hash)。你可以直接给自己造一张该会所的会员卡(ST)。进门时刷卡(提交ST),门禁系统(服务)用自己的数据一比对,通过!而且会所总部(域控)完全不知道有人进来了。

3. 实战操作:票据的生成与利用

原理清晰后,我们进入实战环节。这里我会使用最常用的工具Mimikatz进行演示,并穿插大量工具之外的细节和注意事项。

3.1 环境准备与前置条件

在动手之前,必须明确你的操作环境和已经获得的权限。

  1. 已控机器:一台已经取得权限的域内机器。无论是通过漏洞利用、钓鱼还是其他方式,你需要在这台机器上执行命令。
  2. 权限要求
    • 对于黄金票据:你需要域管理员(Domain Admin)权限,或者至少是能够访问域控并导出krbtgt账户Hash的权限(例如,通过Volume Shadow Copy服务远程读取域控的NTDS.dit文件)。这是黄金票据攻击的最高门槛。
    • 对于白银票据:你需要目标服务器的本地管理员权限,以便导出运行在该服务器上的服务账户的Hash。例如,要伪造访问文件服务器(FS01)的CIFS服务票据,你需要先攻陷FS01,并导出其计算机账户FS01$的NTLM Hash。
  3. 信息收集:除了Hash,还需要收集以下信息:
    • 域名(FQDN):例如,demo.com
    • 域SID:域的安全标识符,可以通过whoami /user查看当前用户的SID,然后去掉最后的-500-1001等RID部分。例如,S-1-5-21-3912242732-261903931-207895847
    • 要冒充的用户名:可以是任意存在的域用户,甚至是可以不存在的用户(黄金票据支持创建“幽灵用户”)。通常使用administrator或一个不引人注目的低权限用户。
    • 要访问的服务SPN(仅白银票据需要):例如,cifs/fs01.demo.comhttp/webapp.demo.comMSSQLSvc/sql01.demo.com:1433等。

3.2 黄金票据攻击全流程

假设我们已经通过某种方式(如DCSync攻击)获取了以下关键信息:

  • 域名:demo.com
  • 域SID:S-1-5-21-3912242732-261903931-207895847
  • krbtgt用户的NTLM Hash:6c8318e21d33c9e0c2fd8b4ecb4c5a5d
  • 我们想冒充的用户:fakeuser

步骤一:在已控主机上使用Mimikatz生成黄金票据

# 以管理员权限运行Mimikatz mimikatz # privilege::debug mimikatz # kerberos::golden /domain:demo.com /sid:S-1-5-21-3912242732-261903931-207895847 /rc4:6c8318e21d33c9e0c2fd8b4ecb4c5a5d /user:fakeuser /id:500 /groups:512,513,520,518,519 /ptt

参数详解与避坑指南:

  • /domain/sid/rc4:这是核心三要素,必须绝对准确。/rc4后面跟的就是krbtgt的NTLM Hash。
  • /user:伪造的用户名。这里设置为fakeuser,一个域中不存在的用户。这是一个重要的隐蔽技巧:使用一个不存在的用户名,在域控的用户列表和登录日志中不会出现,但票据依然有效,因为Kerberos验证的是票据签名(krbtgt Hash),而不是去AD数据库查询用户是否存在。
  • /id:用户的RID。500是内置管理员Administrator的RID。这里我们虽然用户名叫fakeuser,但给了它500的RID,意味着在权限上它会被识别为“管理员”。
  • /groups:用户所属的组RID列表。这里是关键中的关键!
    • 512: Domain Admins (域管理员组)
    • 513: Domain Users (域用户组)
    • 520: Group Policy Creator Owners (组策略创建者所有者)
    • 518: Schema Admins (架构管理员,仅林根域有)
    • 519: Enterprise Admins (企业管理员,仅林根域有)
    • 为什么这么设置?在Kerberos的PAC(特权属性证书,包含在TGT和ST中)里,记录了用户的组关系。服务端(如文件服务器)在授权时,是看PAC里的组信息,而不是实时去AD查询。我们把fakeuser放进所有最高权限组,那么用它申请的ST里就会包含这些高权限组的SID,从而在访问任何服务时都拥有最高权限。
  • /pttPass The Ticket的缩写。这个参数会将生成的黄金票据直接注入到当前Windows会话的内存中,而不是保存到文件。这是最常用、最隐蔽的方式,票据只存在于内存,重启即消失。

执行成功后,Mimikatz会输出票据的详细信息,并提示“Golden ticket for ‘fakeuser @ demo.com’ successfully submitted for current session”。此时,黄金票据已经加载到你的内存票证缓存中。

步骤二:验证与利用

现在,你可以像真正的域管理员一样行动了,而且不需要知道域管理员密码

# 使用 dir 命令访问域控的C$共享,这是域管理员才有的权限 dir \\dc01.demo.com\c$ # 使用 wmic 在域控上执行命令 wmic /node:dc01.demo.com process call create "cmd.exe /c whoami > c:\test.txt" # 甚至可以使用 psexec 或 wmiexec 等工具直接获取域控的交互式shell

你会发现,所有这些操作都成功了,因为你的请求中携带的ST,是由那个“合法”的黄金TGT签发出来的,服务端无法拒绝。

实操心得1:关于票据有效期Mimikatz的kerberos::golden命令默认生成的票据有效期是20小时(72000秒)。但在实战中,为了持久化,我们通常会使用/startoffset/endin参数来设置一个超长的有效期,例如10年。

mimikatz # kerberos::golden /domain:demo.com /sid:S-1-5-21-... /rc4:... /user:fakeuser /id:500 /groups:512 /startoffset:0 /endin:5256000 /ptt

/endin的单位是分钟,5256000分钟约等于10年。请注意:过于异常的有效期可能在高级安全监控工具中产生告警。

3.3 白银票据攻击全流程

假设我们已经攻陷了文件服务器FS01,并获取了其计算机账户FS01$的NTLM Hash:a1b2c3d4e5f67890123456789abcdef0。现在我们想从另一台已控主机WORKSTATION01上,伪造票据直接访问FS01的共享,而不触发域控日志。

步骤一:生成白银票据

WORKSTATION01上运行Mimikatz:

mimikatz # privilege::debug mimikatz # kerberos::golden /domain:demo.com /sid:S-1-5-21-3912242732-261903931-207895847 /target:FS01.demo.com /service:cifs /rc4:a1b2c3d4e5f67890123456789abcdef0 /user:fakeuser /id:1105 /groups:513 /ptt

参数详解与避坑指南:

  • /domain/sid:同样需要,用于构建票据中的域信息。
  • /target:目标服务器的完全限定域名(FQDN),必须与服务的SPN严格匹配。如果服务注册的是cifs/fs01.demo.com,这里就必须是fs01.demo.com
  • /service服务类型,这是白银票据的灵魂。它决定了票据能用来做什么。
    • cifs:用于文件共享(dir \\fs01\c$)。
    • http:用于Web服务(如访问IIS站点,或用于WinRM的wsman服务)。
    • host:用于通用主机访问(如WMI、计划任务schtasks)。
    • ldap:用于查询/修改活动目录(需要域控机器账户Hash)。
    • MSSQLSvc:用于访问SQL Server。
    • 选错服务类型,票据将完全无效。
  • /rc4:这里填的是目标服务账户(FS01$)的NTLM Hash,不再是krbtgt的Hash。
  • /user/id/groups:与黄金票据类似,但这里设置的权限仅对当前伪造的服务有效。例如,你即使把/groups设为512(Domain Admins),这个组信息也只会被FS01上的CIFS服务看到,用于决定文件访问权限,而不会让你获得域管理员的其他权限。通常为了隐蔽,可以设置为一个普通域用户(RID>1000)和Domain Users组(513)。
  • /ptt:同样,注入内存。

步骤二:验证与利用

票据注入后,立即尝试访问目标服务:

# 访问文件共享 dir \\fs01.demo.com\c$ # 如果成功列出目录,说明白银票据生效。 # 尝试创建文件 echo test > \\fs01.demo.com\c$\test_silver.txt

整个过程,域控DC01完全不知情。所有认证流量只在WORKSTATION01FS01之间发生。

实操心得2:服务类型的选择与局限白银票据的威力取决于服务类型。cifshost非常实用,能直接操作文件系统和执行命令。但有些服务,如LDAP,虽然可以伪造票据,但当你尝试用该票据向域控发起LDAP修改请求时,域控可能会进行额外的验证(例如检查票据中的PAC签名),导致失败。而HOST服务通常用于WMI,结合schtasks可以非常隐蔽地在目标服务器上创建计划任务来执行payload。记住一个原则:白银票据让你“成为”服务眼里的合法用户,但你能做什么,取决于该服务赋予这个用户的权限以及服务本身的功能。

4. 高级技巧、检测与防御

掌握了基础攻击方法只是开始,实战环境复杂得多,如何用得巧、如何防得住,才是真正的价值所在。

4.1 高级利用技巧

  1. 黄金票据的“无文件”持久化: 生成黄金票据后,除了注入内存(/ptt),还可以保存为文件(/ticket:golden.kirbi)。这个.kirbi文件可以上传到任何域内机器,在需要时用Mimikatz的kerberos::ptt golden.kirbi命令注入。可以将此文件隐藏在注册表、图片隐写中,或者作为计划任务定期从远程服务器下载并注入,实现“无文件”的持久化后门。

  2. 白银票据的“服务组合拳”: 如果获取了服务器计算机账户的Hash,你可以同时为该服务器的多个服务生成票据。例如,为FS01生成cifshosthttp(如果它运行Web服务)的票据,依次注入。这样你就可以通过文件共享上传工具,通过WMI或计划任务执行,通过Web服务管理界面配置,实现多维度的控制。

  3. 票据传递(Pass The Ticket, PTT)与哈希传递(Pass The Hash, PTH)的抉择

    • PTH:需要目标服务开启NTLM认证(现在很多环境已强制要求Kerberos)。在横向移动时,如果目标系统不支持NTLM或受限,PTH会失败。
    • PTT(使用白银票据):是纯粹的Kerberos认证,只要目标服务使用Kerberos(域环境默认),就能通行。在如今NTLM日益受限的环境中,PTT的适用性更广。
  4. 绕过“Kerberos约束委派”监控: 一些高级安全产品会监控异常的Kerberos请求,特别是TGS-REQ(申请ST的请求)。黄金票据攻击在申请ST时,会向域控发起TGS-REQ,可能被记录。而白银票据攻击根本不发起TGS-REQ,直接从客户端到服务端,完美绕过这类监控。对于高度敏感的服务,白银票据是更隐蔽的选择。

4.2 如何检测票据攻击?

作为防守方,不能只依赖预防,必须假设攻击者已经拿到了一些Hash,并开始检测异常行为。

  1. 检测黄金票据

    • 域控事件ID 4769:记录每一次Kerberos服务票据请求。虽然黄金票据本身无法直接检测,但可以关注异常:
      • 请求的账户名不存在:攻击者常用不存在的用户名。可以监控4769事件中“账户名”字段,对比AD中是否存在该用户。
      • 异常的加密类型:虽然黄金票据可以使用RC4(对应NTLM Hash),但正常环境可能更多地使用AES256。监控使用RC4加密的TGS请求,特别是来自非域控、非服务器的客户端。
      • 异常的时间戳:票据的起始时间(StartTime)是否在请求时间之后?或者有效期长得离谱(如几年)?
    • 专用检测工具:如微软的ATA(高级威胁分析)或Azure Sentinel中的相关检测规则,可以基于机器学习模型识别异常的Kerberos活动模式。
    • 蜜罐账户:创建一个名为krbtgt_audit的诱饵域用户,并监控是否有使用该用户名的Kerberos请求(攻击者可能尝试使用此用户名)。
  2. 检测白银票据

    • 极其困难:因为认证不经过域控。检测点必须放在服务端(目标服务器)
    • 服务端安全日志(事件ID 4624、4634):关注登录事件。虽然票据有效,但登录的账户名可能异常(如不存在的用户、低权限用户从非常规IP登录并执行高权限操作)。
    • 服务端Kerberos日志:在目标服务器上启用Audit Kerberos Service Ticket Operations,会生成事件ID 4769。在这里,你可以看到是谁(客户端用户名)用什么票据(服务票据)来访问本机服务。检查其中的“客户端用户名”是否可疑。
    • 网络流量分析:如果环境部署了全流量审计,可以分析Kerberos AP-REQ数据包。虽然内容加密,但可以观察通信模式:是否缺少了前期的AS-REQ和TGS-REQ阶段?一个直接发起的AP-REQ可能暗示票据是预先伪造好的。

4.3 核心防御策略

防御的核心理念是:提高攻击者获取关键Hash的难度,并缩短Hash的有效期。

  1. 保护krbtgt账户——这是生命线

    • 定期更改krbtgt密码:这是最有效、最根本的防御措施。微软官方建议,在从攻击中恢复后,必须连续更改两次krbtgt账户密码。因为Kerberos协议设计,新旧密码在短时间内同时有效(用于票据续订)。只改一次,攻击者用旧的黄金票据依然可以申请到有效的ST。连续改两次,才能彻底让所有基于旧Hash的票据失效。可以考虑每180天(与票据最大生命周期对齐)或更短时间主动更改。
    • 监控krbtgt账户活动:任何对krbtgt账户的直接登录、复制或修改尝试都应是最高级别警报。
  2. 实施凭证分层管理与保护

    • 限制域管理员登录:域管理员账户只能登录到域控和必要的管理跳板机,绝不允许登录到普通工作站、成员服务器。这能极大降低域管理员凭证在非受控设备上被窃取的风险。
    • 使用“受保护用户”组:将高权限账户(如域管理员、企业管理员)添加到“Protected Users”安全组。这会强制使用更安全的Kerberos AES加密,并禁止使用NTLM、缓存凭据等,增加攻击者获取可用的Hash的难度。
    • 启用LSA保护:防止Mimikatz等工具从lsass.exe进程内存中抓取明文密码和Hash。
    • 部署Credential Guard(Windows 10/11, Server 2016+):使用基于虚拟化的安全(VBS)将凭证隔离到安全内核中,使传统的内存转储攻击失效。
  3. 强化服务账户管理

    • 使用组托管服务账户(gMSA):gMSA由域自动管理其复杂密码,并定期轮换,管理员都无需知道密码。这从根本上解决了服务账户密码泄露的问题。对于白银票据攻击,如果目标服务使用的是gMSA,攻击者即使拿到服务器权限,也无法获取到该gMSA的长期有效Hash。
    • 为服务账户设置强SPN唯一性:避免SPN冲突,并确保SPN注册准确。
    • 遵循最小权限原则:服务账户只拥有完成其功能所必需的最小权限,不要赋予域管理员等过高权限。
  4. 启用高级审计与实时监控

    • 在域控和关键服务器上启用详细的Kerberos审计策略(如前文所述的事件ID 4769)。
    • 部署SIEM(安全信息和事件管理)系统,集中收集日志,并建立针对异常Kerberos活动的检测规则,例如:短时间内同一客户端为大量不同服务申请票据(可能是黄金票据在枚举)、使用RC4加密的高权限请求、不存在的用户名成功认证等。
    • 考虑部署EDR(终端检测与响应)或专门的威胁狩猎团队,主动在环境中搜寻与票据攻击相关的IOC(入侵指标),如Mimikatz的执行痕迹、异常的Kerberos票证缓存操作等。

5. 常见问题与疑难排查

在实际操作中,你会遇到各种各样的问题。这里我整理了几个最典型的案例和解决思路。

问题1:使用黄金票据后,访问某些服务(如LDAP)被拒绝,但访问文件共享正常。

  • 原因分析:这很可能是因为PAC(特权属性证书)验证失败。高敏感度的服务(如域控上的LDAP、Kerberos更改密码服务KPasswd)在收到票据后,可能会向域控发起一个额外的“PAC验证”请求,以确认票据中的用户和组信息是真实有效的。而黄金票据是自签发的,域控在验证时发现签发者(krbtgt)虽然对,但并没有签发过这张TGT的记录,因此可能拒绝PAC验证请求。
  • 解决方案
    • 尝试在生成黄金票据时,使用/ptt注入后,立即用这个身份去访问一次普通的服务(如cifs),触发一次完整的TGS交换,让域控“看见”这个TGT,有时能“预热”PAC验证通道。
    • 更可靠的方法是,在生成命令中尝试添加/pac参数(某些Mimikatz版本支持),但并非总是有效。
    • 终极方案:对于需要PAC验证的服务,黄金票据可能受限。此时,如果条件允许,可以考虑使用钻石票据蓝宝石票据等更高级的攻击方式(它们涉及修补PAC或获取更高级别的密钥),或者转而使用白银票据(如果已获取目标服务Hash)。

问题2:白银票据生成成功并注入,但访问目标服务时提示“访问被拒绝”或“登录失败”。

  • 排查步骤
    1. 检查服务类型(/service):这是最常见错误。确认目标服务实际使用的SPN。用setspn -L FS01$命令在目标服务器上查看。如果服务是HOST,而你用了cifs,肯定会失败。
    2. 检查目标主机名(/target):必须使用FQDN,且严格匹配SPN中的主机名部分。如果SPN是cifs/fs01.demo.com/target必须是fs01.demo.com,不能是IP地址,也不能是FS01(短名称)。
    3. 检查Hash有效性:确认你使用的NTLM Hash确实是当前目标服务账户正在使用的密码Hash。如果服务账户密码在你获取Hash之后被更改了,旧的票据将立即失效。
    4. 检查用户权限:你伪造的用户(/user)在目标服务上是否有访问权限?例如,你伪造了一个普通用户访问c$共享,自然会被拒绝。尝试访问一个该用户有权限的共享,如\\fs01\share
    5. 检查时间同步:Kerberos严重依赖时间同步。确保攻击者主机与域的时间偏差在5分钟以内。使用net time \\dc01进行同步。

问题3:在Mimikatz中执行kerberos::golden命令时,提示“ERROR kuhl_m_kerberos_golden_data ; no data supplied”。

  • 原因:这是Mimikatz版本或参数语法问题。较新版本的Mimikatz对参数格式要求更严格。
  • 解决
    • 确保所有必要参数都已提供且格式正确,特别是/domain/sid/rc4
    • 尝试使用/aes128/aes256参数代替/rc4,如果你有服务账户的AES密钥(可以从lsass或NTDS.dit中获取)。AES是更现代、更推荐的加密类型。
    • 查阅你所使用的Mimikatz版本的官方文档或帮助(kerberos::golden /?)。

问题4:如何清理内存中的票据?

  • 在Mimikatz中,可以使用命令kerberos::purge来清除当前会话中的所有Kerberos票据。
  • 重启计算机或注销用户会话也会清除内存票据。
  • 对于防守方,如果怀疑某台主机被注入了票据,强制重启是最直接的清除方式。

理解黄金票据和白银票据,不仅仅是掌握两种攻击技术,更是深入理解Windows域安全核心——Kerberos认证协议——的绝佳途径。从防御角度看,它揭示了“信任链”中最脆弱的环节:密钥(Hash)的保管。一旦核心密钥失守,建立在它之上的整个认证体系都可能被绕过。因此,真正的安全建设,必须从最基础的凭证保护、权限最小化和积极监控做起。攻击技术在进化,防御思路也必须从“边界防护”转向“假设失陷”的深度防御。希望这篇长文能帮你建立起关于Kerberos票据攻击与防御的完整知识框架,在实战中多一份把握,在防御中多一份洞察。

← 返回列表