Kerberos认证协议中的票据传递攻击(Pass-the-Ticket Attack)详解
字数 2650 2025-12-08 10:28:40
Kerberos认证协议中的票据传递攻击(Pass-the-Ticket Attack)详解
描述:
票据传递攻击是Kerberos网络认证协议中的一种横向移动技术。攻击者在已攻陷的客户端上窃取到有效的Kerberos服务票据(Service Ticket,通常是TGS票据),然后将其传递到另一台机器上使用,以冒充合法用户身份访问网络中的特定服务,而无需知道用户的密码或长期密钥。这种攻击利用了Kerberos票据本身的可移植性,是内网渗透中常见的手段。
解题/讲解过程:
第一步:理解攻击依赖的Kerberos核心概念
- Kerberos票据(Ticket):是由密钥分发中心(KDC)签发的一种临时凭证,用于证明用户对特定服务的访问权限。最重要的两种票据是:
- 票据授予票据(TGT):用于向KDC申请其他服务票据的“门票”。
- 服务票据(ST,或TGS票据):用于直接访问特定服务(如文件共享、数据库等)。
- 票据缓存:为了用户体验,客户端操作系统(如Windows的LSASS进程,Linux的
ccache文件)会将获取到的TGT和ST缓存在内存或磁盘中。 - 可重用性:在票据的有效期内(通常默认为10小时),它可以被多次使用来访问对应的服务,而无需用户重新输入密码。
第二步:攻击前提与目标
- 前提:攻击者已经通过某种方式(如钓鱼、漏洞利用)在目标网络中的一台主机上获得了执行代码的权限(即立足点)。
- 目标:利用从当前主机窃取的票据,访问网络中其他主机上受Kerberos保护的服务,实现权限提升或横向移动,同时避免了在网络中传递密码哈希或明文密码可能触发的警报。
第三步:攻击步骤分解
阶段1:票据窃取
攻击者在已控制的主机上,从票据缓存中提取有效的Kerberos票据。
- 定位缓存:
- Windows:票据由本地安全机构子系统服务(LSASS)进程在内存中维护。可以使用
klist命令查看当前会话的票据。 - Linux/Unix:票据通常存储在
/tmp/krb5cc_<UID>文件中或由KEYRING:persistent管理。
- Windows:票据由本地安全机构子系统服务(LSASS)进程在内存中维护。可以使用
- 提取工具:
- Mimikatz(Windows):经典工具。命令
mimikatz # sekurlsa::tickets /export可以导出内存中所有用户的票据,并以.kirbi格式文件保存。 - Rubeus(Windows):.NET工具。命令
Rubeus.exe dump可以列出并导出票据。 - klist 和 kinit(Linux):结合脚本或手动复制缓存文件。
- Mimikatz(Windows):经典工具。命令
阶段2:票据传递
攻击者将窃取到的票据文件(如.kirbi)传输到攻击者控制的另一台主机(跳板机或已攻陷的另一台内网机器)上。
- 选择票据:通常优先选择具有高权限(如域管理员)账户的票据,或者是针对特定目标服务(如
cifs/文件服务器$,MSSQLSvc/数据库服务器)的服务票据。 - 文件传输:通过HTTP、SMB、FTP或编码后通过DNS/ICMP隧道等方式,将票据文件从受害主机传到攻击者控制的机器。
阶段3:票据注入与使用
在攻击者控制的目标机器上,将窃取的票据注入到当前会话的Kerberos缓存中,然后使用该票据访问服务。
- 票据注入:
- Mimikatz:
mimikatz # kerberos::ptt <票据文件路径.kirbi>。此命令将票据“传递”到当前会话的内存中。 - Rubeus:
Rubeus.exe ptt /ticket:<票据文件路径.kirbi>。
- Mimikatz:
- 验证与使用:
- 注入后,可以立即使用
klist命令查看当前缓存,确认票据已加载。 - 随后,无需提供密码,即可使用标准网络工具访问目标服务。例如,使用
dir \\目标服务器\share$访问文件共享,或使用PsExec.exe进行远程命令执行。
- 注入后,可以立即使用
第四步:攻击变种与进阶
- 白银票据 vs. 票据传递:
- 票据传递是窃取并使用合法的、由KDC签发的票据。
- 白银票据是伪造的服务票据,需要事先知道服务账户的密码哈希(NTLM Hash),但无需与KDC交互。票据传递的门槛更低,因为它不要求获取服务账户的哈希。
- 过期的黄金票据:如果窃取到的TGT(在票据传递攻击中较少单独使用,因为TGS_REQ仍需与KDC通信)来自一个已被管理员在KDC端撤销(重置密码)的账户,它依然可能在缓存有效期内被用于票据传递攻击,因为服务端在验证服务票据时,不直接与KDC通信校验吊销状态。
第五步:防御与检测措施
- 防御:
- 最小权限原则:严格限制用户和服务的权限,降低票据被窃取后的影响范围。
- 票据保护:启用Credential Guard(Windows 10/11, Server 2016+),它利用虚拟化安全技术隔离和保护LSASS中的密钥材料,使Mimikatz等工具无法直接读取。
- 缩短票据生命周期:在域策略中减少票据的最大有效期和最长续订期限,使被盗票据更快失效。
- 强制注销:对敏感账户,在可疑活动后立即强制注销其所有会话,清除票据缓存。
- 限制票据缓存:对于非交互式服务账户,考虑使用
DoNotStoreDelegatedCredentials等策略限制其缓存票据。
- 检测:
- SIEM告警:监控异常事件,例如:
- 同一用户票据从多个不同IP地址或主机名在短时间内使用。
- 使用
Kerberos Ticket Granting Ticket请求的事件(4768)与Kerberos Service Ticket请求的事件(4769)在时间、IP上存在不合理关联。
- 审计日志:确保启用Kerberos服务票据请求(事件ID 4769)的详细日志记录,并分析其中的
Client Address、Service Name等信息。 - 终端检测:使用EDR/AV工具检测Mimikatz、Rubeus等攻击工具的内存行为或命令行参数。
- SIEM告警:监控异常事件,例如:
总结:
票据传递攻击本质上是一种“凭证盗窃”在Kerberos协议中的具体体现。它不破解密码,而是滥用合法的、短期的会话凭证。防御的核心在于保护凭证缓存、缩短凭证寿命、加强权限控制,并通过日志分析检测异常的票据使用模式。理解此攻击有助于深刻认识到,在复杂的认证协议中,即使密码从未泄露,会话凭证本身也可能成为攻击链条中的关键一环。