Anthropic-Cybersecurity-Skills 实战:基于 NTLM 多目标登录模式检测 Pass-the-Hash 攻击(T1550.002)

发布时间:2026/9/13 4:20:26
Anthropic-Cybersecurity-Skills 实战:基于 NTLM 多目标登录模式检测 Pass-the-Hash 攻击(T1550.002) Anthropic-Cybersecurity-Skills 实战基于 NTLM 多目标登录模式检测 Pass-the-Hash 攻击T1550.002【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, 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导读Pass-the-HashPtH哈希传递是横向移动中最经典的攻击手法之一攻击者复用窃取到的 NTLM 密码哈希无需明文口令即可在其他主机上完成身份认证对应 MITRE ATTCK 技术 T1550.002。本文以 Anthropic-Cybersecurity-Skills 仓库中detecting-pass-the-hash-attacks技能的 api-reference.md 为核心骨架完整讲解其提供的 Windows 事件字段参考、python-evtx 解析示例、PtH 检测判定逻辑、Splunk SPL / Sentinel KQL 检测查询、NTLM 限制加固命令以及 CLI 使用方式并深入仓库源码 agent.py 与 process.py 剖析底层实现。读完后你将具备从原始 EVTX 到 SIEM 查询、再到脚本化告警输出的完整 PtH 检测落地能力。一、检测原理为什么盯着“Type 3 NTLM 多目标”看1.1 攻击机制与检测假设Pass-the-Hash 攻击的核心是攻击者通过 Mimikatzsekurlsa::pth、Impacketpsexec.py、CrackMapExec 哈希喷洒等手段把窃取的 NTLM 哈希注入认证流程冒充合法账户向多台主机发起网络登录。检测这种行为的天然信号就在 Windows 安全事件日志的 4624 登录成功事件中。api-reference.md 给出的核心判定依据是Type 3网络登录使用 NTLM 认证包且同一来源在短时间内认证了大量目标主机。正常的域环境里网络登录应当首选 Kerberos当 NTLM 在横向移动窗口内集中出现就高度疑似哈希复用。1.2 4624 事件关键字段参考api-reference.md 提供了一张即查即用的字段对照表这是所有后续查询与解析的基础字段PtH 信号LogonType3Network网络登录AuthenticationPackageNameNTLM而非 KerberosLogonProcessNameNtLmSspIpAddress认证来源 IPTargetUserName被使用的账户名说明以上字段为 Windows 安全事件 4624 的实际字段名。在 SIEM 归一化后如 Splunk 的Logon_Type、Authentication_Package、Source_Network_Address字段名会发生变化但语义一一对应详见下文各查询示例。1.3 为什么要过滤系统账户与回环地址直接对全量 4624 事件做统计会产生大量误报。仓库源码给出了两层过滤依据agent.py 中定义LEGITIMATE_SOURCES {127.0.0.1, ::1, -, }跳过回环地址与空来源process.py 中定义SYSTEM_ACCOUNTS {system, anonymous logon, anonymous, local service, network service}并跳过以$结尾的机器账户。这两层过滤正是实际检测中减少误报的关键系统账户与机器账户的 NTLM 网络登录多为正常服务行为不应计入 PtH 喷洒统计。二、从 EVTX 原始日志解析python-evtx 用法2.1 基础用法示例api-reference.md 提供的 python-evtx 基础代码是最小可运行的解析骨架import Evtx.Evtx as evtx with evtx.Evtx(Security.evtx) as log: for record in log.records(): xml record.xml() # Filter EventID 4624, LogonType3, AuthPackageNTLM2.2 仓库中的完整解析实现在 agent.py 中上述骨架被扩展为完整的生产级解析函数parse_logon_events其核心步骤为用正则检查 XML 中是否包含EventID4624/EventID快速跳过无关记录依次提取LogonType、AuthenticationPackageName、TargetUserName、TargetDomainName、IpAddress、Computer与SystemTime只保留LogonType 3且认证包名包含NTLM的事件并结构化为字段字典返回。关键解析片段见 agent.pylogon_type re.search(rData NameLogonType(\d), xml) auth_pkg re.search(rData NameAuthenticationPackageName([^]), xml) ... if lt 3 and NTLM in ap.upper(): events.append({ timestamp: time_match.group(1) if time_match else , logon_type: int(lt), auth_package: ap.strip(), account: account.group(1) if account else , domain: domain.group(1) if domain else , source_ip: src_ip.group(1) if src_ip else , computer: computer.group(1) if computer else , })注意python-evtx 是可选依赖未安装时parse_logon_events会返回错误字典{error: python-evtx not installed: pip install python-evtx}后续检测逻辑会直接透传该错误避免脚本崩溃——这是依赖缺失时优雅降级的良好实践。三、PtH 检测判定逻辑多目标喷洒模式的实现3.1 api-reference.md 的核心算法api-reference.md 给出的判定逻辑本质是**“按来源 IP 账户聚合统计独立目标主机数超过阈值即告警”**src_targets defaultdict(set) for event in ntlm_logons: src_targets[event[source_ip]].add(event[computer]) # Alert when single source authenticates to 3 targets via NTLM3.2 仓库中的增强版实现agent.py 的detect_pth_patterns在此基础上做了三处工程化增强以“来源 IP 账户”为聚合键key f{src}|{evt.get(account, )}避免多个账户共用来源 IP 造成误聚合双重检测规则ntlm_type3_multi_target单个来源认证的独立目标主机数 ≥ 阈值默认 3即告警target_count 10时严重级别升级为CRITICAL否则为HIGH每个告警携带mitre: T1550.002标记admin_ntlmadministrator/admin账户在同一来源出现 ≥ 2 次 NTLM 登录即产生HIGH告警——管理员账户往往是哈希喷洒的优先目标输出结构化 JSON每条告警包含type、source_ip、account、target_count、targets最多列出 20 个、total_logons与严重级别。此外process.py 的analyze_velocity提供了速度检测视角按账户聚合去重后的目标主机集合当独立目标数 ≥ 阈值默认 3时输出CRITICAL级别的“NTLM auth to N hosts - PtH spray pattern”告警风险分数为 80。两个脚本恰好互为补充agent.py偏来源视角process.py偏账户视角。3.3 阈值是检测灵敏度的核心旋钮无论是--target-thresholdagent.py默认 3还是analyze_velocity的threshold3阈值直接决定误报与漏报的平衡阈值越低越敏感易误报阈值越高越保守易漏报。建议结合 workflows.md 中的基线方法——收集 30 天历史数据计算均值与标准差将阈值设为“均值 3 倍标准差”级别的异常界限而非拍脑袋定一个固定数。四、SIEM 检测查询Splunk SPL 与 Sentinel KQL4.1 Splunk SPLSplunk Enterpriseapi-reference.md 提供的基础版查询indexwineventlog EventCode4624 Logon_Type3 | where Authentication_PackageNTLM | stats dc(Computer) as targets by Source_Network_Address, Account_Name | where targets 3 | sort -targetsworkflows.md 在此基础上给出误报过滤增强版——排除匿名/机器账户并聚合账户与来源indexwineventlog EventCode4624 Logon_Type3 Authentication_PackageNTLM | where NOT match(Account_Name, (?i)(ANONYMOUS|\\$|SYSTEM)) | stats count dc(Computer) as targets by Account_Name Source_Network_Address | where targets 3 | sort -targets两条查询的关键差异在于where targets 3与where targets 3的边界语义不同是否包含恰好 3 台增强版在统计前用正则排除了ANONYMOUS、以$结尾的机器账户与SYSTEM显著降低基线噪音。dc(Computer)即distinct_count统计的是不重复目标主机数这是识别“哈希喷洒”的核心度量绝不能换成count后者会被同一主机的多次登录放大。4.2 KQLMicrosoft Sentinel / Defender for Endpointapi-reference.md 的 Sentinel 版查询SecurityEvent | where EventID 4624 and LogonType 3 | where AuthenticationPackageName NTLM | summarize TargetCountdcount(Computer) by IpAddress, TargetUserName | where TargetCount 3workflows.md 的 MDE 版与之几乎一致仅聚合字段换为SubjectUserName与IpAddressSecurityEvent | where EventID 4624 and LogonType 3 | where AuthenticationPackageName NTLM | summarize TargetCountdcount(Computer) by SubjectUserName, IpAddress | where TargetCount 3使用提示AuthenticationPackageName字段仅当 Windows 安全日志完整记录认证包时可用若环境中该字段缺失可退化为LogonProcessName NtLmSsp作为替代条件对应第一节字段表中LogonProcessName的 PtH 信号。此外process.py的queries子命令python process.py queries会直接打印出可复制的 Splunk 查询文本方便在 SIEM 控制台快速粘贴执行。五、CLI 使用一行命令跑完一次 PtH 猎捕api-reference.md 提供的 CLI 用法python agent.py --security-log Security.evtx python agent.py --security-log Security.evtx --target-threshold 5对应 agent.py 的参数定义--security-log必填Windows Security 事件日志 EVTX 文件路径--target-threshold可选默认 3独立目标主机数阈值。运行后以 JSON 输出完整结果包含total_ntlm_type3_logons命中的 Type 3 NTLM 登录总数、findings与total_findings。process.py则提供子命令式接口# 猎捕模式支持 JSON/CSV 两种输入输出目录可指定 python process.py hunt --input Security.json --output ./pth_output # 打印可复制的 Splunk 查询 python process.py queriesprocess.py的hunt子命令会同时执行detect_pth单事件判定风险分数 45 /MEDIUM与analyze_velocity速度聚合告警风险分数 80 /CRITICAL将结果合并写入pth_findings.json文件内包含hunt_id格式TH-PTH-YYYY-MM-DD便于归档追踪。六、缓解与加固限制 NTLM 传输api-reference.md 给出的核心加固措施是限制 NTLM 外发流量防止本机作为 PtH 跳板# Restrict NTLM authentication Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name RestrictSendingNTLMTraffic -Value 2参数含义与实施注意该注册表项位于HKLM:\SYSTEM\CurrentControlSet\Control\LsaRestrictSendingNTLMTraffic取值 0/1/2值 2 表示完全拒绝向域外主机发送 NTLM 流量是最严格的设置值 1 仅拒绝向域成员服务器发送 NTLM值 0 为默认允许。注意NTLM 是许多旧应用与跨林信任的依赖直接设 2 可能影响业务。建议先在测试环境启用借助NetSec审计模式RestrictSendingNTLMTraffic之前的过渡方式收集使用方清单再逐步收紧。这是检测类技能配套的纵深防御动作不能替代监控本身。七、从检测到闭环五阶段猎捕流程与报告模板7.1 五阶段猎捕工作流workflows.md 将一次完整的 PtH 猎捕拆解为五个阶段与上述查询/脚本一一对应数据收集与查询执行第二节的 Splunk/KQL 查询或第三节的脚本收集候选事件基线与异常检测收集 30 天历史数据建立统计基线均值、标准差标记超过 3 个标准差的异常并与威胁情报 IOC 交叉比对调查与关联对每条异常收集完整进程树上下文关联网络活动、文件操作与认证事件结合 MITRE ATTCK 杀伤链重构攻击路径验证与响应与系统所有者、变更管理记录核对区分真阳性/假阳性对确认威胁启动应急响应对检测缺口更新规则文档与上报输出猎捕报告更新威胁情报平台与 ATTCK 覆盖热力图通过 Sigma 格式共享规则。该流程在 SKILL.md 中被浓缩为七步工作流形成假设 → 识别数据源 → 执行查询 → 分析结果 → 验证发现 → 关联活动 → 文档上报并在技能元数据中声明了 NIST CSF 映射DE.CM-01、DE.AE-02、DE.AE-07、ID.RA-05与 D3FEND 技术Token Binding、Execution Isolation 等方便 AI Agent 按框架快速检索定位。7.2 猎捕报告模板assets/template.md 提供了可直接套用的猎捕模板核心要素包括猎捕元数据Hunt ID: TH-DETECT-YYYY-MM-DD-NNN、分析师、起止日期、优先级假设声明写明可测试假设及其依据威胁情报 / ATTCK 缺口 / 异常 / 事件跟进目标技术清单T1550.002、T1550.003、T1078数据源勾选Sysmon、Windows Security 日志、EDR、SIEM、网络日志等查询记录每条查询的文本、命中数与执行耗时发现与 IOC 表按网络 IOC / 主机 IOC 分类记录含置信度结果汇总指标总事件数、异常数、真/假阳性数、新建/更新检测规则数假设结论确认 / 部分确认 / 证伪 / 无法定论建议即时行动、检测改进、可见性缺口、加固措施、后续猎捕方向。7.3 可用的数据源与事件 ID 清单standards.md 提供了检测数据源速查表PtH 猎捕不应只盯 4624还要联合以下事件SysmonEvent 1进程创建捕获 Mimikatz/psexec 命令行、3网络连接、7DLL 加载、10进程访问尤其是对 LSASS 的访问关联凭据转储 T1003、11文件创建、12/13注册表、22DNS 查询、25进程篡改Windows Security4624成功登录、4625失败登录、4648显式凭据登录、4672分配特权、4688进程创建、4697服务安装、4698计划任务创建、4769Kerberos TGS 请求、5140网络共享访问。将 4624 的多目标统计与 Sysmon 10 的 LSASS 访问、4688 的进程创建关联起来可以完整还原“凭据转储 → 哈希复用 → 横向移动”的整条攻击链。八、常见攻击场景对照SKILL.md 列出了四个典型场景便于在狩猎时对号入座Mimikatzsekurlsa::pth注入窃取的 NTLM 哈希——特征是本地进程行为配合 Sysmon 10LSASS 访问与 Event 1命令行含sekurlsa::pth检测Impacketpsexec.py使用哈希远程执行——特征是 Type 3 NTLM 网络登录 随后 5140 网络共享访问ADMIN$CrackMapExec 跨主机哈希喷洒——特征是单个来源 IP 在短时间内对多个目标发起 NTLM 登录正是本文聚合查询的核心命中场景通过 WMI 的横向移动——特征为 WMI 相关进程活动叠加 Type 3 NTLM 认证。每种场景都可通过“4624 聚合告警 对应事件 ID 交叉验证”得到证据链最后按模板中的输出格式记录Hunt ID: TH-DETECT-[DATE]-[SEQ] Technique: T1550.002 Host: [Hostname] User: [Account context] Evidence: [Log entries, process trees, network data] Risk Level: [Critical/High/Medium/Low] Confidence: [High/Medium/Low] Recommended Action: [Containment, investigation, monitoring]结语把 api-reference 变成可运行的检测闭环本文以 api-reference.md 为骨架完整覆盖了 4624 事件字段参考、python-evtx 解析、多目标喷洒判定逻辑、Splunk SPL / Sentinel KQL 双平台查询、NTLM 加固命令与 CLI 用法并借助 agent.py 与 process.py 源码揭示了阈值、账户过滤、双重检测规则等实现细节同时引入 standards.md、workflows.md 与 template.md 补齐了数据源清单、五阶段猎捕流程与报告模板。实际落地建议按以下顺序推进先运行python agent.py --security-log Security.evtx验证脚本解析与告警输出是否正常 → 将 Splunk/KQL 查询部署到 SIEM 并建立 30 天基线 → 依据基线调优target_threshold→ 告警收敛后把缓解策略限制 NTLM纳入变更流程 → 每次猎捕用模板归档形成可复用的检测知识。这套方法论既能被安全分析师手工执行也能作为结构化技能被 AI AgentClaude Code、GitHub Copilot、Codex CLI 等支持 agentskills.io 标准的平台直接加载驱动实现 T1550.002 的持续主动检测。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, 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),仅供参考