| name | detecting-golden-ticket-attacks-in-kerberos-logs |
| description | 通过分析 Kerberos TGT 异常(包括加密类型不匹配、不可能的票据生命周期、不存在的账户以及域控制器事件日志中的伪造 PAC 签名),检测 Active Directory 中的黄金票据攻击。 |
| domain | cybersecurity |
| subdomain | threat-hunting |
| tags | ["threat-hunting","golden-ticket","kerberos","active-directory","mitre-t1558-001","credential-abuse"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
检测 Kerberos 日志中的黄金票据攻击
适用场景
- KRBTGT 账户哈希可能通过 DCSync 或 NTDS.dit 提取而遭到入侵时
- 狩猎用于持久域访问的伪造 Kerberos 票据时
- 事件响应揭示域级别的凭据盗取后
- 调查不可能的登录模式(用户同时从多地登录)时
- 泄露后评估以确定是否正在使用黄金票据时
前置条件
- 域控制器上的 Windows 安全事件 ID 4768、4769、4771
- Kerberos 策略配置知识(最大票据生命周期、加密类型)
- 启用 Kerberos 服务票据操作的域控制器审计策略
- SIEM 能够跨多个域控制器关联 Kerberos 事件
工作流程
- 监控 TGT 请求(事件 4768):跟踪 Kerberos 认证服务请求。黄金票据(Golden Ticket)完全绕过 AS-REQ/AS-REP 交换,因此在 4769 之前缺少 4768 是可疑的。
- 检测加密类型异常:黄金票据通常使用 RC4(0x17)加密。若您的域强制使用 AES(0x12),任何 RC4 TGT 都是危险信号。监控事件 4769 中的 TicketEncryptionType。
- 检查票据生命周期异常:默认 Kerberos TGT 生命周期为 10 小时,可续期 7 天。黄金票据可伪造为 10 年的生命周期。检测超过策略的票据持续时间。
- 狩猎不存在的 SID:黄金票据可包含任意 SID(包括不存在的账户或组)。将 TGS 请求与已知 AD SID 清单进行关联。
- 检测无先前 TGT 的 TGS:当来自相同 IP/账户的服务票据(4769)出现而没有先前的 TGT 请求(4768)时,这可能表明存在预先创建的黄金票据。
- 监控 KRBTGT 密码年龄:跟踪 KRBTGT 上次重置时间。若 KRBTGT 哈希自已知入侵后未更改,来自该时期的黄金票据仍然有效。
- 验证 PAC 签名:通过 KB5008380+ 和 PAC 验证执行,域控制器会拒绝伪造的 PAC。监控指示 PAC 验证错误的 Kerberos 失败。
检测查询
Splunk——Kerberos TGS 中的 RC4 加密
index=wineventlog EventCode=4769
| where TicketEncryptionType="0x17"
| where ServiceName!="krbtgt"
| stats count by TargetUserName ServiceName IpAddress TicketEncryptionType Computer
| where count > 5
| sort -count
Splunk——无先前 TGT 的 TGS
index=wineventlog (EventCode=4768 OR EventCode=4769)
| stats earliest(_time) as first_tgt by TargetUserName IpAddress EventCode
| eventstats earliest(eval(if(EventCode=4768, first_tgt, null()))) as tgt_time by TargetUserName IpAddress
| where EventCode=4769 AND (isnull(tgt_time) OR first_tgt < tgt_time)
| table TargetUserName IpAddress first_tgt tgt_time
KQL——黄金票据指标
SecurityEvent
| where EventID == 4769
| where TicketEncryptionType == "0x17"
| where ServiceName != "krbtgt"
| summarize Count=count() by TargetUserName, IpAddress, ServiceName
| where Count > 5
常见场景
- DCSync 后黄金票据:提取 KRBTGT 哈希后,攻击者伪造包含域管理员 SID 的 TGT,在 KRBTGT 被轮换两次前有效期可达数月。
- RC4 降级:仅 AES 环境中伪造的 RC4 加密黄金票据,可通过加密类型不匹配检测。
- 跨域黄金票据:伪造的跨域 TGT 用于在 AD 域/林之间横向移动。
- 修复后持久化:因 KRBTGT 仅被轮换一次(当前和之前的哈希均有效),黄金票据在密码重置后依然存活。
输出格式
Hunt ID: TH-GOLDEN-[DATE]-[SEQ]
Suspected Account: [使用伪造票据的账户]
Source IP: [客户端 IP]
Target Service: [访问的 SPN]
Encryption Type: [RC4/AES128/AES256]
Anomaly: [无先前 TGT/AES 环境中使用 RC4/超出生命周期]
KRBTGT Last Reset: [日期]
Risk Level: [Critical]