Anthropic Cybersecurity Skills 实战指南:基于 Windows 事件 4768/4769/4771 检测 Kerberos Pass-the-Ticket 攻击
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
本文是 Anthropic-Cybersecurity-Skills 仓库中 detecting-pass-the-ticket-attacks 技能文档的完整技术展开。文章以该技能文档为骨架,结合其 API 参考 与 检测脚本 agent.py 的源码实现,系统讲解如何通过 Windows Security Event ID 4768(TGT 请求)、4769(TGS 请求)与 4771(预认证失败)的异常模式识别 Kerberos 票据窃取与重放行为。读完本文,你将掌握 PtT 攻击的原理与杀伤链、域控审计日志的开启方法、Splunk 与 Elastic SIEM 的完整检测查询、基于标准差的异常基线建模,以及用 Python 对离线事件日志做批量研判的实操方案,从而直接落地为 SOC 可运行的检测规则与威胁狩猎流程。
背景:为什么 Pass-the-Ticket 难以被传统手段发现
Pass-the-Ticket(PtT)是 MITRE ATT&CK 中编号T1550.003(Use Alternate Authentication Material: Pass the Ticket)的横向移动技术。攻击者从一台已失陷主机的内存(LSASS)中窃取 Kerberos 票据(TGT 或 TGS),然后在另一台主机上重放该票据完成认证——整个过程不需要也不依赖用户密码,因此传统的密码破解检测、失败登录告警完全失效。
其杀伤链通常如下(可参考同仓库的对抗侧技能 conducting-pass-the-ticket-attack 得到印证):
- 窃取票据:在失陷主机上用 Mimikatz
sekurlsa::tickets /export或 Rubeusdump导出票据; - 转移票据:以
.kirbi(Mimikatz)或 base64(Rubeus)格式带到目标主机; - 注入重放:在目标会话中执行
kerberos::ptt注入票据,随后访问远程资源完成横向移动。
由于 Windows 域环境默认信任 Kerberos 票据本身,被重放的票据在认证层面"合法有效",这就迫使检测方必须依赖行为与协议层面的异常信号。本技能给出的核心思路是:将 4768 / 4769 / 4771 三类事件作为主数据源,围绕以下三类异常做关联分析:
- RC4 加密降级:现代 Windows 环境默认使用 AES(0x12),出现 RC4-HMAC(0x17)的票据异常值往往意味着降级攻击;
- 跨主机票据重用:同一用户在同一时间窗口内从多个来源 IP 请求服务票据;
- TGS 请求量异常:单用户/单主机的服务票据请求量显著偏离自身基线。
前置条件:让"检测"有据可依
要复现本文全部检测能力,环境需满足:
- Windows 域控制器:开启高级审核策略,至少启用 "Audit Kerberos Authentication Service"(审计 Kerberos 认证服务)与 "Audit Kerberos Service Ticket Operations"(审计 Kerberos 服务票证操作)两类子类别,否则不会产生 4768/4769 事件;
- SIEM 平台:Splunk 或 Elastic SIEM 正在采集 Windows Security 事件日志;
- 端点补充遥测:终端部署 Sysmon,为进程链、网络连接提供佐证(例如识别发起票据重放的进程与工具特征);
- Python 环境:Python 3.8+ 且安装
requests库(用于离线日志研判脚本运行)。
事件源剖析:三个核心 Event ID 的关键字段
对 PtT 检测而言,日志字段比事件本身更重要。本技能 API 参考文档对三个事件的核心字段做了完整定义,这是所有检测规则的地基。
Event ID 4768 —— TGT 请求
| 字段 | 含义 |
|---|---|
TargetUserName | 请求 TGT 的账户 |
TargetDomainName | 账户所属域 |
IpAddress | 请求来源 IP |
TicketEncryptionType | 0x12(AES256)、0x17(RC4-HMAC) |
PreAuthType | 15(PA-ENC-TIMESTAMP) |
该事件的异常信号包括:TGT 请求来源 IP 与票据使用者后续登录 IP 不一致、使用旧式加密类型、非工作时间的高频请求。
Event ID 4769 —— TGS 请求
| 字段 | 含义 |
|---|---|
TargetUserName | 使用票据的账户 |
ServiceName | 所请求服务的 SPN |
IpAddress | 来源 IP |
TicketEncryptionType | 0x17表示 RC4 降级 |
TicketOptions | Kerberos 票据标志 |
这是PtT 检测最重要的数据源:服务票据的每一次使用都会产生该事件,跨主机重用、Kerberoasting 的 SPN 枚举、加密降级都能在此体现。
Event ID 4771 —— Kerberos 预认证失败
| 字段 | 含义 |
|---|---|
TargetUserName | 认证失败的账户 |
IpAddress | 失败来源 |
Status | 0x18(密码错误)、0x12(账户过期) |
该事件服务于**密码喷洒(T1110.003)**类前置攻击的关联检测——攻击者往往先用喷洒拿到初始凭据,再通过 PtT 横向扩散,因此 4771 的失败高峰是完整攻击链的前兆。
从源码实现看,agent.py 的 parse_evtx_xml 精确提取了上述全部字段(TargetUserName、TargetDomainName、IpAddress、ServiceName、TicketEncryptionType、Status、PreAuthType),并只保留 4768/4769/4771 三个事件——这与检测规则的数据面完全一致,可作为字段提取的权威参照。
加密类型速查:判断"降级"的依据
结合同仓库 conducting-pass-the-ticket-attack 的 API 参考 与本文档,Kerberos 加密类型常量对照如下:
| 值 | 算法 | 安全含义 |
|---|---|---|
0x17 | RC4-HMAC | 降级攻击指示器,也是 Kerberoasting / 黄金票据的常见特征 |
0x12 | AES-256 | 现代环境的预期值 |
0x11 | AES-128 | 可接受的加密 |
值得注意的细节:在脚本 detect_rc4_downgrade 中,同时匹配了"0x17"与"23"两种写法——因为不同导出工具对加密类型字段的序列化格式可能不同(十六进制字符串或十进制整数),实战中构建规则时应兼容两种表示。
七步检测实施流程
本技能文档给出的检测落地流程分为七个步骤,逐层递进:
- 通过组策略在域控制器上启用 Kerberos 审计日志(对应上文前置条件中的两类审核子类别);
- 将 Event ID 4768、4769、4771 转发至 SIEM 平台(Windows 事件转发或通用日志采集器);
- 部署 RC4 加密降级检测规则(
TicketEncryptionType 0x17); - 创建票据跨多来源 IP 重用的关联规则;
- 建立每用户/每主机的 TGS 请求量正常基线;
- 对票据请求模式的标准差偏离进行告警;
- 结合 Active Directory 上下文对标记事件开展调查与富化(账户角色、所属组、近期登录、是否属于敏感账户等)。
其中第 5、6 步的"基线 + 标准差"设计,直接对应下方 Splunk 查询中的eventstats avg / stdev统计逻辑,体现了"按用户个性化基线"而非"全局阈值"的检测思路,可显著降低误报。
Splunk SPL 检测查询实战
API 参考文档提供了四类可直接投放的 SPL 查询,generate_splunk_queries 中亦有对应的程序化版本(其中preauth_failures查询还额外按IpAddress聚合,便于定位喷洒来源)。
1. RC4 加密降级检测
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4769 TicketEncryptionType=0x17 | stats count by TargetUserName, IpAddress, ServiceName | where count > 3单个 RC4 请求可能是历史遗留应用所致,因此先用stats count按三元组聚合,再以count > 3过滤出高频降级——脚本默认逻辑与之对应:detect_rc4_downgrade对每个命中事件单独标记,而 SIEM 规则通过聚合抑制低频噪声。
2. 跨主机票据重用检测
index=wineventlog EventCode=4769 | stats dc(IpAddress) as ip_count, values(IpAddress) as ips by TargetUserName | where ip_count > 1 | sort -ip_countdc()计算每个用户出现过的不同 IP 数量,ip_count > 1即命中"同一用户从多个来源使用票据"。脚本侧 detect_cross_host_ticket_reuse 采用同一逻辑(同一用户出现 ≥2 个来源 IP 即标记为critical严重度),并会附带请求数与时间戳样本,便于快速时间线还原。
3. TGS 请求量异常(基于标准差)
index=wineventlog EventCode=4769 | bin _time span=1h | stats count by TargetUserName, _time | eventstats avg(count) as avg_count, stdev(count) as sd by TargetUserName | where count > avg_count + (3 * sd)先按小时分桶计算每用户请求数,再用eventstats计算该用户的历史均值与标准差,最后用3σ 准则(超过均值加三倍标准差)判定异常。这一查询体现的是"个体化基线"思想:对常年高频请求的服务账户与低频普通用户采用不同标尺。
脚本的 detect_anomalous_tgs_volume 提供了无历史数据时的简化替代——按绝对阈值(默认 50,可由--tgs-threshold调整)统计全量 TGS 请求数,适合无长窗口历史基线的小环境。
Elastic / KQL 检测查询实战
RC4 降级(KQL 一行式)
event.code: "4769" AND winlog.event_data.TicketEncryptionType: "0x17"适用于 Elastic Security 的 KQL 搜索栏或规则查询语言,字段路径遵循 Winlogbeat 默认映射。
跨主机重用(Elasticsearch 聚合)
POST security-*/_search { "size": 0, "query": { "term": { "event.code": "4769" } }, "aggs": { "by_user": { "terms": { "field": "winlog.event_data.TargetUserName" }, "aggs": { "unique_ips": { "cardinality": { "field": "source.ip" } } } } } }利用cardinality基数聚合近似统计每用户的去重 IP 数,效果等价于 Splunk 的dc(IpAddress);size: 0只返回聚合结果,不返回明细文档,查询开销更小。若需精确值,可改用terms嵌套或开启precision_threshold调优基数估计精度。
离线研判:用 agent.py 自动化 PtT 检测
当需要批量分析导出的安全日志(例如无 SIEM 的小环境、取证场景或规则验证)时,仓库提供了完整的 Python 实现 scripts/agent.py,其输入为 Windows 导出的 Security 事件日志 XML(wevtutil epl或wevtutil export-log产物)。
命令行用法
# 解析导出的安全事件日志 XML 并检测 PtT 指标 python agent.py --evtx-xml security_events.xml --output report.json # 直接打印内置的 Splunk 检测查询 python agent.py --show-splunk # 自定义阈值 python agent.py --evtx-xml events.xml --tgs-threshold 30 --preauth-threshold 5参数说明
| 参数 | 默认值 | 作用 |
|---|---|---|
--evtx-xml | 无 | 导出的安全事件日志 XML 路径(必需,除非使用--show-splunk) |
--tgs-threshold | 50 | TGS 请求量告警阈值 |
--preauth-threshold | 10 | 预认证失败告警阈值 |
--output | ptt_detection_report.json | 输出报告路径 |
--show-splunk | False | 仅打印内置 SPL 查询,不执行分析 |
四大检测器与输出结构
脚本内聚了四类检测逻辑,与上文 SIEM 查询一一对应:
- RC4 加密降级(
detect_rc4_downgrade):逐事件匹配0x17/23,严重度high,对应 SPL 查询一; - 跨主机票据重用(
detect_cross_host_ticket_reuse):同用户 ≥2 个来源 IP 即告警,严重度critical,对应 SPL 查询二; - 异常 TGS 请求量(
detect_anomalous_tgs_volume):按阈值统计,严重度high,对应 SPL 查询三; - 过度预认证失败(
detect_preauth_failures):关联 T1110.003 密码喷洒,严重度medium,补充 SPL 中的preauth_failures查询。
运行后输出 JSON 报告,包含:
{ "analysis_time": "...Z", "total_kerberos_events": 1234, "detections": { "rc4_downgrade": [...], "cross_host_ticket_reuse": [...], "anomalous_tgs_volume": [...], "preauth_failures": [...] }, "total_alerts": 5, "mitre_techniques": ["T1550.003", "T1558.003", "T1110.003"], "splunk_queries": {...} }每条告警包含mitre_technique、severity、description及原始字段快照,可直接作为事件工单或取证报告的证据附件。值得强调的是,报告顶层会带上splunk_queries——即使在没有 SIEM 的环境中完成初步研判,也能同时输出可供生产环境复用的查询规则,实现"离线验证 → 线上部署"的无缝衔接。
MITRE ATT&CK 技术映射
本技能文档将检测能力显式映射到 ATT&CK,便于在红蓝对抗、覆盖度审计中直接引用:
| 技术 | ID | 检测信号 |
|---|---|---|
| Use Alternate Authentication Material: Pass the Ticket | T1550.003 | RC4 降级、跨主机票据重用 |
| Steal or Forge Kerberos Tickets: Kerberoasting | T1558.003 | 面向 SPN 的高 TGS 请求量 |
| Brute Force: Password Spraying | T1110.003 | 预认证失败尖峰 |
在 ATTACK_COVERAGE.md 的仓库级覆盖统计中,T1558.003(Kerberoasting)是全仓被引用最多的技术之一(14 个技能引用),且 T1550.003 的兄弟技术 T1550.002(Pass the Hash)在 detecting-pass-the-hash-attacks 中有平行实现——两者结合可覆盖"票据偷窃"与"哈希重用"两条主流的凭据横向移动路径。同时,本技能在仓库元数据中还关联了NIST CSF 2.0的DE.CM-01、DE.AE-02、DE.AE-06、ID.RA-05(覆盖持续监控、异常事件分析、攻击相关性)以及D3FEND的 Token Binding、Application Protocol Command Analysis 等对抗技术,可作为多框架合规映射的输入。
误报抑制与调查收尾建议
将上述规则投入生产前,建议按以下思路做调优(属于技能文档第 5、6 步的落地延伸):
- RC4 降级:先与资产清单交叉比对,排除遗留应用、旧式服务账户的合法 RC4 使用;将规则限定到非白名单主机,或要求同用户同时满足"多 IP"条件再升级告警;
- 跨主机重用:虚拟桌面/会话主机环境下,同一用户从多个跳板 IP 访问服务是常态,应结合
ServiceName白名单(如仅对敏感服务如域控、管理接口告警)及会话时长做上下文判断; - TGS 异常:3σ 规则要求足够的基线窗口(建议 ≥14 天),新账户与系统账户(
$结尾)建议单独建模或排除; - 终局确认:对命中用户执行 AD 富化(所属敏感组、最近密码修改时间、登录历史),配合 Sysmon 进程链确认是否存在 Mimikatz/Rubeus 类工具的注入特征,最终以 SKILL.md 定义的 JSON 报告格式输出结论,并附 MITRE 技术编号供工单与汇报引用。
总结
Pass-the-Ticket 攻击的检测核心在于对 Kerberos 事件语义的深刻理解与多维度关联:以 4768/4769/4771 三类事件为数据源,用 RC4 加密降级、跨主机票据重用、TGS 请求量异常三个信号做交叉印证,配合按用户的个性化基线与标准差阈值,即可在票据本身"合法"的前提下捕获攻击者的行为痕迹。本技能文档及其配套的 API 参考与 agent.py 源码,提供了一条从日志字段、SIEM 查询到离线批量研判的完整检测落地链路,可直接复制进 Splunk/Elastic 规则库或用于 SOC 覆盖度验证与紫队演练。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考