
使用 Zeek 日志分析检测横向移动从 SMB 管理共享到 NTLM 口令喷洒的实战指南【免费下载链接】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本指南基于 Anthropic-Cybersecurity-Skills 仓库中的detecting-lateral-movement-with-zeek技能文档系统讲解如何利用 Zeek前身 Bro网络流量日志检测内网横向移动行为。通过解析conn.log、smb_mapping.log、smb_files.log、dce_rpc.log、kerberos.log与ntlm.log六类日志你能够识别 SMB 管理共享访问、DCE/RPC 远程服务创建、NTLM 账号喷洒、Kerberos 票据异常以及主机间大流量数据传输等典型横向移动迹象并借助仓库附带的自动化分析 Agent 快速完成全量日志研判。技能定位与适用场景该技能以 SKILL.md 为核心文档对应 MITRE ATTCK 横向移动战术TA0008下的多个技术点T1021 SMB/DCOM/RDP、T1550.002 传递哈希、T1570 横向工具传输等并映射到 NIST CSF 2.0 的检测与响应能力项PR.IR-01、DE.CM-01、ID.AM-03、PR.DS-02。仓库的框架映射目录 mappings/README.md 也印证了 T1021.002 在本库技能体系中的覆盖定位。典型使用场景包括在某台端点出现初始入侵迹象后对内网横向移动行为进行主动狩猎调查疑似 NTLM 账号喷洒或 Pass-the-TicketPtT攻击在内网的传播范围监控 SMB 流量中对管理共享C$、ADMIN$、IPC$的未授权文件传输通过 DCE/RPC 检测 PsExec、schtasks、WMI 等远程服务执行模式在基于 Zeek 的 NSM网络安全管理环境中建设内网异常告警规则事后利用 Zeek 日志作为网络层证据源进行时间线重建。需要明确的边界Zeek 只能看到网络流量因此该技能不应作为独立检测机制必须与端点遥测Sysmon、EDR结合以获得完整可见性。此外加密的 SMB3 流量会限制 Zeek 对文件级细节的解析能力。环境前置要求在开始检测之前需要满足以下条件全部来自技能文档与脚本的实际依赖前置条件说明Zeek 6.0部署在网络 TAP 或 SPAN 端口上覆盖内网 VLAN 流量SMB 分析器load base/protocols/smb默认加载DCE/RPC 分析器load base/protocols/dce-rpcKerberos 分析器load base/protocols/krbPython 3.8仅使用标准库无第三方依赖Zeek 日志目录访问权限默认路径/opt/zeek/logs/current/Zeek TSV 日志格式认知字段以\t分隔头部行以#前缀仓库配套的两个脚本——综合检测 agent.py 与单类日志专项检测 process.py——均只用 Python 标准库实现可直接在 Zeek 服务器或日志采集机上运行。检测工作流总览整体检测流程可分为六个阶段详见 workflows.md数据采集SPAN/TAP → Zeek 传感器 → 各日志文件→ 检测规则Zeek 脚本与后处理结合→ 告警分诊 → 调查 → 响应 → 事后改进。技能文档给出了从日志验证到自动化分析的可执行六步路径下面逐一展开。Step 1验证 Zeek 日志采集是否正常首先确认横向移动检测所需的六类日志文件均已产出并对conn.log做快速字段抽查# 确认所有必需分析器均在产出日志 ls -la /opt/zeek/logs/current/conn.log ls -la /opt/zeek/logs/current/smb_mapping.log ls -la /opt/zeek/logs/current/smb_files.log ls -la /opt/zeek/logs/current/dce_rpc.log ls -la /opt/zeek/logs/current/kerberos.log ls -la /opt/zeek/logs/current/ntlm.log # 对 conn.log 做快速字段检查 zeek-cut id.orig_h id.resp_h id.resp_p proto service /opt/zeek/logs/current/conn.log | head -20zeek-cut是 Zeek 附带的列裁剪工具是后续所有手工分析命令的基础。若日志目录尚未轮转logs/current/下只会有少量文件属正常现象。Step 2解析 conn.log 定位内网横向连接模式conn.log记录全部连接元数据。横向移动检测关注内网主机之间访问特定端口的行为。从源码结构看agent.py 定义了八类横向移动关联端口及其服务标签端口服务MITRE ATTCK 技术445SMBT1021.002 SMB/Windows 管理共享135DCE/RPCT1021.003 DCOM139NetBIOS-SSNT1021.002 SMB/Windows 管理共享3389RDPT1021.001 远程桌面协议5985WinRM-HTTPT1021.006 Windows 远程管理5986WinRM-HTTPST1021.006 Windows 远程管理22SSHT1021.004 SSH23Telnet—手工提取这三类连接的命令# 提取内网主机间的 SMB 连接端口 445 zeek-cut ts id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes \ /opt/zeek/logs/current/conn.log \ | awk $5 445 $7 smb # 提取 DCE/RPC 连接端口 135 zeek-cut ts id.orig_h id.resp_h id.resp_p service \ /opt/zeek/logs/current/conn.log \ | awk $4 135 # 提取 WinRM 连接端口 5985/5986 zeek-cut ts id.orig_h id.resp_h id.resp_p service \ /opt/zeek/logs/current/conn.log \ | awk $4 5985 || $4 5986注意awk的字段序号取决于zeek-cut输出的列顺序实际使用时以你裁剪出的列数为准。Step 3分析 SMB 管理共享访问管理共享C$、ADMIN$、IPC$是 PsExec 类工具进行横向移动的主要向量。技能文档提供了两条手工分析命令# 检查 smb_mapping.log 中的管理共享访问 zeek-cut ts id.orig_h id.resp_h path share_type \ /opt/zeek/logs/current/smb_mapping.log \ | grep -iE (C\$|ADMIN\$|IPC\$) # 检查 smb_files.log 中对管理共享的文件写入 zeek-cut ts id.orig_h id.resp_h action path name size \ /opt/zeek/logs/current/smb_files.log \ | grep -i SMB::FILE_WRITE自动化版本agent.py中的analyze_smb_mapping()agent.py用正则(C\$|ADMIN\$|IPC\$|D\$|E\$)匹配共享路径命中即标记为HIGH严重级的admin_share_access发现analyze_smb_files()agent.py则对WRITE动作按文件扩展名二次分级——写入.exe、.dll、.bat、.ps1、.vbs、.scr、.cmd、.msi、.hta、.sys等可执行/脚本扩展名时升级为CRITICAL其余文件写入为MEDIUM。部署 Zeek 告警脚本在local.zeek或独立脚本中加载以下内容可在管理共享被访问时实时写入notice.logload base/protocols/smb load base/frameworks/notice redef enum Notice::Type { Admin_Share_Access }; event smb1_tree_connect_andx_request(c: connection, hdr: SMB1::Header, path: string, service: string) { if ( /\$/ in path ) NOTICE([$noteAdmin_Share_Access, $msgfmt(Admin share access: %s - %s (%s), c$id$orig_h, c$id$resp_h, path), $connc]); }该脚本监听 SMB1 的 Tree Connect 请求只要共享路径中包含$字符即产生告警。适用于 SMB1 明文流量可见的场景对 SMB2/3 会话可参考 Zeek SMB 分析器提供的对应事件自行扩展。Step 4检测 DCE/RPC 远程服务操作远程服务创建与计划任务注册通过 DCE/RPC 协议完成。手工查询聚焦服务控制管理器PsExec 模式与任务调度器# 查找 svcctl / atsvc / ITaskSchedulerService 相关操作PsExec 模式 zeek-cut ts id.orig_h id.resp_h endpoint operation \ /opt/zeek/logs/current/dce_rpc.log \ | grep -iE (svcctl|atsvc|ITaskSchedulerService)agent.py内置了一张可疑 DCE/RPC 端点表agent.py其端点、描述与严重级如下端点描述严重级svcctl服务控制管理器PsExec 模式CRITICALatsvcAT 调度服务at.exe / schtasksCRITICALITaskSchedulerService任务计划程序 v2schtasksCRITICALwinreg远程注册表操作HIGHsamrSAM 远程协议用户枚举HIGHlsarpcLSA 远程协议策略枚举HIGHwkssvc工作站服务NetWkstaUserEnumHIGHsrvsvc服务器服务NetShareEnum/NetSessionEnumHIGHepmapper端点映射器RPC 枚举HIGHStep 5检测 NTLM 账号喷洒与认证异常ntlm.log记录 NTLM 认证事件。需要明确的是Zeek 的 ntlm.log 不会暴露密码哈希因此该检测的核心思路是识别单个账号在短时间内向大量主机认证的网络特征——这正是 CrackMapExec 等凭据喷洒工具的行为模式# 提取 NTLM 认证记录 zeek-cut ts id.orig_h id.resp_h username domainname server_nb_computer_name success \ /opt/zeek/logs/current/ntlm.log # 失败的 NTLM 认证暴力破解或凭据试探 zeek-cut ts id.orig_h id.resp_h username success \ /opt/zeek/logs/current/ntlm.log \ | awk $5 F # 按时间戳排序用于时间线分析 zeek-cut ts id.orig_h id.resp_h username success \ /opt/zeek/logs/current/ntlm.log \ | sort -k1,1NTLM 账号喷洒告警脚本以下 Zeek 脚本维护一个 5 分钟滚动窗口的账号 → 已访问主机集合映射当单个账号触碰的主机数达到阈值默认 3时产生告警load base/protocols/ntlm load base/frameworks/notice redef enum Notice::Type { NTLM_Account_Spray }; global ntlm_tracker: table[string] of set[addr] create_expire5min; const spray_threshold 3 redef; event ntlm_log(rec: NTLM::Info) { if ( ! rec?$username || rec$username - ) return; if ( rec$username !in ntlm_tracker ) ntlm_tracker[rec$username] set(); add ntlm_tracker[rec$username][rec$id$resp_h]; if ( |ntlm_tracker[rec$username]| spray_threshold ) NOTICE([$noteNTLM_Account_Spray, $msgfmt(NTLM account spray: %s - %d hosts, rec$username, |ntlm_tracker[rec$username]|), $subrec$username, $connrec$id]); }spray_threshold和create_expire5min均可按需调整——阈值越低、窗口越短告警越敏感但误报越多。专项检测脚本 process.pydetect_ntlm_spray()process.py实现了滑动窗口突发分析对同一账号在时间窗口默认 300 秒内触达的不同目标主机数进行统计达到阈值默认 3即输出[CRITICAL] NTLM ACCOUNT SPRAY告警。运行方式python3 process.py ntlm ntlm.log [--window 300] [--threshold 3]Step 6运行自动化分析 Agent技能文档推荐使用仓库配套的agent.py做全量综合检测。它一次扫描六类日志、自动识别 TSV 或 JSON 格式parse_zeek_log()通过首条非注释行的{前缀自动判别见 agent.py并默认以 RFC1918 地址10.、172.16.-31.、192.168.判定内网主机python3 agent.py /opt/zeek/logs/current/ python3 agent.py /opt/zeek/logs/2026-03-18/ # 分析指定日期 # 将 JSON 输出管道化处理 python3 agent.py /opt/zeek/logs/current/ 2/dev/null | python -m json.toolagent.py除上述六步外还内置了横向移动关联检测能力对应源码函数与规则摘要检测类型严重级检测逻辑源码位置lateral_port_connectionINFO内网主机间访问横向移动端口agent.pyadmin_share_accessHIGH管理共享路径正则命中agent.pysmb_file_writeMEDIUM/CRITICAL共享写入可执行扩展名升级为 CRITICALagent.pysuspicious_dce_rpcHIGH/CRITICAL命中可疑 DCE/RPC 端点表agent.pymulti_source_ntlm_authHIGH单账号从 3 个源 IP 认证PtH 迹象agent.pyntlm_brute_forceHIGH同一源主机对同一账号 5 次失败认证agent.pymulti_source_tgt_requestHIGHTGT 从 3 个源 IP 请求PtT 迹象agent.pykerberos_preauth_failureMEDIUMKerberos 预认证失败凭据测试agent.pypsexec_patternCRITICALSMB 可执行文件写入 svcctl 服务创建的关联agent.py其中psexec_pattern是源码中最具价值的关联逻辑detect_psexec_pattern()将同一源-目的主机对上的 CRITICAL SMB 文件写入与svcctl端点调用做时间关联命中即判定为 PsExec 风格攻击属于典型的多源日志关联检测思路。检测完成后generate_report()agent.py输出结构化报告包含按严重级与类型统计的汇总、连接数 Top 20 主机对以及传输字节 Top 20 主机对同时给出 MB 换算{ summary: { total_findings: 42, by_severity: {CRITICAL: 3, HIGH: 15, MEDIUM: 24}, by_type: {admin_share_access: 8, suspicious_dce_rpc: 5} }, top_connection_pairs: [ {pair: 10.0.1.50-10.0.1.100:445, connections: 287} ], top_data_transfer_pairs: [ {pair: 10.0.1.50-10.0.1.100:445, bytes: 104857600, megabytes: 100.0} ], findings: [] }其中top_data_transfer_pairs直接服务于技能文档提到的内网主机间大流量数据传输数据暂存或外渗迹象检测目标。报告字段的完整定义可参见 api-reference.md。深入专项检测与 RDP 跳跃链agent.py是全量扫描而process.py提供了四个可独立调用的专项检测器process.py# 1. 管理共享检测仅限内网主机之间默认内网段 10/8、172.16/12、192.168/16 python3 process.py smb_mapping smb_mapping.log [--internal-nets 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16] # 2. RDP 跳跃链检测默认 10 分钟窗口 python3 process.py conn conn.log [--window 10] # 3. NTLM 喷洒检测默认 300 秒窗口、3 主机阈值 python3 process.py ntlm ntlm.log [--window 300] [--threshold 3] # 4. DCSync 检测需提供域控 IP 才生效 python3 process.py dce_rpc dce_rpc.log [--dc-ips 10.0.1.1,10.0.1.2]值得关注的是RDP 跳跃链检测detect_rdp_pivots()process.py它先从conn.log提取所有 RDP 会话目标端口 3389再在图层面寻找A→B 之后 B 又在窗口期内发起→C的链式结构输出[HIGH] RDP PIVOT: A - B - C (delta: Ns)——这是横向移动中经典的跳跃主机pivot node模式也是源码中图分析思路的体现。DCSync 检测detect_dcsync()process.py需要显式传入域控 IP当非 DC 源主机向 DC 发起DrsGetNCChanges复制调用时输出[CRITICAL] DCSYNC告警。未提供--dc-ips时该检测器会跳过并给出警告这是以领域知识为前提条件的典型设计。验证与确认清单技能文档的 Verification 部分给出了一套可操作的验证路径确认conn.log正确捕获内网 SMB445与 DCE/RPC135连接字段解析无误验证smb_mapping.log能正确记录管理共享路径C$、ADMIN$、IPC$在实验环境中执行一次已知的 PsExec预期看到 SMB 服务二进制FILE_WRITE之后紧跟 DCE/RPCsvcctl的 CreateService 操作通过一次测试认证验证 NTLM 日志解析用户名、域、success 字段并确认 NTLM 账号喷洒 Zeek 脚本在超过阈值时生成notice.log条目将 Zeek 告警与目标主机的 Sysmon 事件 ID 1进程创建交叉比对确认端到端检测闭环验证agent.py能同时正确处理 TSV 与 JSON 两种 Zeek 日志格式源码中parse_zeek_log()已实现自动判别agent.py。告警分诊与响应策略日志命中只是开始。workflows.md提供了分诊决策框架详见 workflows.md先判断源主机是否为已知管理工作站是则记录并降级、活动是否落在变更窗口内是则核对变更工单、是否出现多个指标叠加是则立即升级。三者均未命中才进入常规调查。仓库还提供了完整的调查清单模板template.md覆盖 SMB 管理共享分析T1021.002、RDP 跳跃分析T1021.001、Pass-the-Hash 分析T1550.002、DCSync 分析T1003.006、横向工具传输分析T1570、影响范围评估、证据保全与遏制措施可直接作为事件响应剧本使用。对应的响应策略要点发现响应动作确认横向移动隔离受影响主机NTLM 账号喷洒对被入侵账号强制重置密码DCSync轮换 krbtgt 与受影响凭据审计 DC 访问工具传输提取并分析传输的文件RDP 跳跃链对非必要主机禁用 RDP强制启用 NLA自动化集成与持续改进workflows.md还给出了将本检测体系接入安全运营流水线的建议SIEM 转发在local.zeek中load policy/tuning/json-logs.zeek启用 JSON 日志再通过 rsyslog/filebeat 将日志送往 SIEMSOAR 剧本触发非管理工作站访问管理共享 → 自动隔离 派单非 DC 触发 DCSync → 紧急告警 自动隔离NTLM 喷洒超阈值 → 自动禁用账号持续改进每月复盘检测有效性每季度通过红队演练验证规则随 ATTCK 子技术演进更新映射并与 EDR 端点遥测关联以获得更高检测保真度。小结本技能的核心价值在于把网络层证据系统化conn.log勾勒连接画像、SMB 日志定位管理共享滥用、DCE/RPC 日志暴露远程执行、NTLM/Kerberos 日志揭示凭据滥用模式而agent.py与process.py将这些信号整合为带严重级与关联逻辑的结构化发现可直接用于狩猎、告警与事后取证。使用中请牢记其边界Zeek 只看得到网络流量加密的 SMB3 会削弱文件级可见性务必与端点遥测配合使用才能构成完整的横向移动检测闭环。【免费下载链接】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),仅供参考