企业网络横向移动检测实战:基于 Anthropic-Cybersecurity-Skills 的 Zeek、SIEM 与威胁狩猎技能指南

发布时间:2026/9/12 14:53:46
企业网络横向移动检测实战:基于 Anthropic-Cybersecurity-Skills 的 Zeek、SIEM 与威胁狩猎技能指南
企业网络横向移动检测实战基于 Anthropic-Cybersecurity-Skills 的 Zeek、SIEM 与威胁狩猎技能指南【免费下载链接】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导读本文以本仓库技能库中的 detecting-lateral-movement-in-network 技能为核心系统讲解如何在企业内网检测攻击者拿下第一台主机之后、继续向其他系统渗透的横向移动Lateral Movement行为。你将掌握一条完整可落地的检测链路Windows 安全事件与网络流的日志采集配置、基于 Splunk/Elastic/Sigma 的检测规则编写、基于 Zeek 日志的网络层横向移动分析、威胁狩猎技巧、SOAR 自动化遏制流程以及调查报告的标准化输出格式同时结合仓库配套脚本 agent.py 与 api-reference.md理解检测背后的源码级实现原理。技能定位何时使用、何时不要用适用场景监控企业内网中失陷后的横向移动模式Pass-the-Hash、RDP 跳板、PsExec 服务创建等为 MITRE ATTCK 常见横向移动技术T1021、T1570、T1550 等构建 SIEM 检测规则与告警通过分析认证模式与内网主机间的网络连接调查疑似入侵事件狩猎异常的东西向流量East-West Traffic识别攻击者在网络中的横向跳板路径验证网络分段与访问控制是否有效限制了横向移动路径。明确不适用的情况不能替代端点检测与响应EDR工具——端点行为如 LSASS 内存访问不在本技能的覆盖范围不能只监控南北向流量进出企业网络的流量而忽略内部流量——横向移动恰恰主要发生在内网东西向不能在缺乏正常内网通信基线的情况下使用——没有基线就无法识别认证异常与连接异常。前置条件在内网关键汇聚点choke point部署网络监控Zeek、Suricata 或网络 TAP有 SIEM 平台Splunk、Elastic、Microsoft Sentinel收集 Windows Security Event Log、DNS 与 NetFlow 数据Windows 事件日志转发已配置覆盖 Security 事件4624、4625、4648、4672、4768、4769以及 4776已建立正常内网认证与连接模式的基线理解 MITRE ATTCK 横向移动战术TA0008的基本概念。核心概念速查术语定义横向移动Lateral MovementMITRE ATTCK 战术TA0008描述攻击者在一台系统失陷后利用技术手段在网络中从一台系统移动到另一台系统的行为Pass-the-HashT1550.002使用捕获的 NTLM 密码哈希在不知道明文密码的情况下认证远程系统PsExecT1569.002远程服务执行工具会在目标系统上创建临时服务可通过事件 ID 7045 检测东西向流量East-West Traffic内网系统之间的网络通信区别于内外网之间的南北向流量认证异常Authentication Anomaly偏离认证基线的模式例如某用户登录了从未访问过的系统KerberoastingT1558.003请求服务账户的 Kerberos 服务票据并在离线状态下破解可通过事件 ID 4769 异常检测六步工作流从日志采集到响应闭环Step 1为横向移动检测配置日志采集横向移动检测依赖两个数据源Windows 安全/系统事件日志与网络层Zeek日志。首先明确需要收集的 Windows 事件 ID 及其横向移动语义# Security Log通过 WEF 或 Agent 收集: # 4624 - Successful logonType 3Network, Type 10RemoteInteractive # 4625 - Failed logon # 4648 - Logon using explicit credentialsRunAs, PsExec # 4672 - Special privileges assignedadmin logon # 4768 - Kerberos TGT request # 4769 - Kerberos service ticket request # 4776 - NTLM authenticationcredential validation # System Log: # 7045 - New service installedPsExec 指示器 # 7036 - Service started/stoppedWindows Event ForwardingWEF订阅可在收集服务器上通过wecutil cs lateral-movement-subscription.xml导入订阅配置。日志集中后用 Filebeat 将 Windows 事件与 Zeek 日志统一送入 SIEM# Filebeat configuration for Windows Event Log shipping cat /etc/filebeat/modules.d/security.yml EOF - module: system auth: enabled: true var.paths: [/var/log/auth.log] syslog: enabled: true - module: zeek connection: enabled: true var.paths: [/opt/zeek/logs/current/conn.log] dns: enabled: true var.paths: [/opt/zeek/logs/current/dns.log] smb_mapping: enabled: true var.paths: [/opt/zeek/logs/current/smb_mapping.log] dce_rpc: enabled: true var.paths: [/opt/zeek/logs/current/dce_rpc.log] EOFZeek 侧需要加载 SMB、连接元数据与威胁情报相关脚本然后重新部署# Zeek configuration for lateral movement detection # 启用 SMB、DCE-RPC、Kerberos 日志 cat /opt/zeek/share/zeek/site/local.zeek EOF load policy/protocols/smb load policy/protocols/conn/known-hosts load policy/protocols/conn/known-services load frameworks/intel/seen EOF sudo zeekctl deploy从配套速查表 references/api-reference.md 可以看到横向移动检测涉及的 Zeek 日志文件包括conn.log全部连接需过滤内网到内网、smb_mapping.logSMB 共享访问、smb_files.logSMB 文件操作、dce_rpc.logDCE/RPC 调用PsExec/WMI 特征、kerberos.logKerberos 票据操作、ntlm.logNTLM 认证事件与rdp.logRDP 连接元数据。其中dce_rpc.log是检测 WMI/PsExec 横向移动的关键来源。Step 2为常见横向移动技术构建检测规则Splunk SPL 规则# 1. 检测 PsExec 使用远程主机新建服务 # indexwineventlog EventCode7045 ServiceNamePSEXESVC OR ServiceName*psexec* # | stats count by ComputerName, ServiceName, ImagePath # | where count 0 # 2. 检测 Pass-the-HashType 3 登录 NTLM # indexwineventlog EventCode4624 LogonType3 AuthenticationPackageNameNTLM # | where TargetUserName!ANONYMOUS LOGON AND TargetUserName!$ # | stats count dc(ComputerName) as unique_hosts by TargetUserName, IpAddress # | where unique_hosts 3 # 3. 检测 RDP 横向移动来自内网 IP 的 Type 10 登录 # indexwineventlog EventCode4624 LogonType10 # | where cidrmatch(10.0.0.0/8, IpAddress) OR cidrmatch(192.168.0.0/16, IpAddress) # | stats count dc(ComputerName) as rdp_hosts by TargetUserName, IpAddress # | where rdp_hosts 2Elastic SIEM 规则KQL# event.code: 4624 and winlog.event_data.LogonType: 3 # and winlog.event_data.AuthenticationPackageName: NTLM # and not winlog.event_data.TargetUserName: *$ # and source.ip: (10.0.0.0/8 or 172.16.0.0/12 or 192.168.0.0/16)Sigma 规则与跨平台转换Sigma 是厂商无关的检测规则格式可将同一份规则转换为 Splunk SPL、Elasticsearch Query 等目标 SIEM 格式保证检测逻辑在各平台一致# 安装 sigma 并转换为目标 SIEM 格式 pip3 install sigma-cli cat lateral_movement_pth.yml EOF title: Pass-the-Hash Lateral Movement Detection id: f8d98d6c-7a07-4d74-b064-dd4a3c244528 status: experimental description: Detects network logon with NTLM authentication to multiple hosts logsource: product: windows service: security detection: selection: EventID: 4624 LogonType: 3 AuthenticationPackageName: NTLM filter: TargetUserName|endswith: $ condition: selection and not filter timeframe: 15m count: field: ComputerName min: 3 group-by: TargetUserName level: high tags: - attack.lateral_movement - attack.t1550.002 EOF # 转换为 Splunk SPL sigma convert -t splunk lateral_movement_pth.yml # 转换为 Elastic query sigma convert -t elasticsearch lateral_movement_pth.yml注意上述 Sigma 规则的结构selection命中EventID 4624 LogonType 3 NTLM三重条件filter排除以$结尾的机器账户避免系统账户噪声再叠加 15 分钟时间窗内同一账户访问 ≥3 台主机的计数条件从而把单点登录与横向扫荡区分开。Step 3使用 Zeek 进行网络层检测网络层检测能捕获不产生 Windows 事件日志的横向移动工具这是纯事件日志方案的盲区。以下命令分别针对 SMB 共享映射、445 端口扩散、DCE-RPC/WMI、RDP 内网跳板与 Kerberos 异常# 检测 SMB 横向移动admin$ 与 c$ 共享访问 cat /opt/zeek/logs/current/smb_mapping.log | \ zeek-cut ts id.orig_h id.resp_h path | \ grep -iE (admin\$|c\$|ipc\$) | \ sort -t$\t -k2 | uniq -c | sort -rn # 检测连接大量内网主机 445 端口的主机SMB 扩散 cat /opt/zeek/logs/current/conn.log | \ zeek-cut ts id.orig_h id.resp_h id.resp_p | \ awk $4 445 | \ awk {print $2} | sort | uniq -c | sort -rn | head -10 # 检测 WMI 横向移动DCE-RPC 到 IWbemServices cat /opt/zeek/logs/current/dce_rpc.log | \ zeek-cut ts id.orig_h id.resp_h operation | \ grep -i wbem\|wmi | sort | uniq -c | sort -rn # 检测内网主机之间的 RDP 连接连接时长 60 秒 cat /opt/zeek/logs/current/conn.log | \ zeek-cut ts id.orig_h id.resp_h id.resp_p duration | \ awk $4 3389 $5 60 | \ sort -t$\t -k2 | head -20 # 检测 Kerberos 票据授予异常 cat /opt/zeek/logs/current/kerberos.log | \ zeek-cut ts id.orig_h id.resp_h client service success error_msg | \ grep -v true | head -20除了手工命令还可编写自定义 Zeek 脚本将检测自动化。下面的脚本基于SumStats框架统计单一内网主机在 15 分钟内连接的不同 SMB 主机数量超过阈值默认 5即触发SMB_Lateral_Spread告警# 自定义 Zeek 脚本横向移动检测 sudo tee /opt/zeek/share/zeek/site/custom-detections/lateral-movement.zeek ZEEKEOF load base/frameworks/notice load base/frameworks/sumstats module LateralMovement; export { redef enum Notice::Type { SMB_Lateral_Spread, RDP_Lateral_Chain }; const smb_host_threshold: count 5 redef; const smb_time_window: interval 15min redef; } event zeek_init() { local r1 SumStats::Reducer( $streamlateral.smb, $applyset(SumStats::UNIQUE) ); SumStats::create([ $namedetect-smb-lateral, $epochsmb_time_window, $reducersset(r1), $threshold_val(key: SumStats::Key, result: SumStats::Result) { return result[lateral.smb]$unique 0.0; }, $thresholdsmb_host_threshold 0.0, $threshold_crossed(key: SumStats::Key, result: SumStats::Result) { NOTICE([ $noteSMB_Lateral_Spread, $msgfmt(Host %s connected to %d SMB hosts in %s, key$str, result[lateral.smb]$unique, smb_time_window), $identifierkey$str ]); } ]); } event connection_state_remove(c: connection) { if ( c$id$resp_p 445/tcp c$id$resp_h in Site::local_nets ) { SumStats::observe(lateral.smb, [$strcat(c$id$orig_h)], [$strcat(c$id$resp_h)] ); } } ZEEKEOF sudo zeekctl deploy这段脚本的关键点在于SumStats::UNIQUE还原器会对每个源主机去重统计其 SMB 目标数Site::local_nets保证只统计内网目标从而天然聚焦东西向流量阈值与时间窗均可通过redef覆盖调优。与之呼应references/api-reference.md 中还提供了一份更轻量的connection_established事件脚本对任意内网到内网且目标端口为 445SMB、3389RDP或 5985WinRM的连接直接抛出LateralMovement::Suspicious通知适合作为快速试运行的入门版本。Step 4横向移动指标的威胁狩猎检测规则解决已知模式威胁狩猎解决未知异常。以下查询用于主动寻找横向移动前兆# 从异常源主机认证的用户 # indexwineventlog EventCode4624 LogonType3 # | stats values(IpAddress) as source_ips dc(IpAddress) as source_count by TargetUserName # | where source_count 5 # | sort - source_count # 交互式登录的服务账户服务账户不应被交互使用 # indexwineventlog EventCode4624 (LogonType2 OR LogonType10) # | where match(TargetUserName, ^svc-.*) # | table _time ComputerName TargetUserName IpAddress LogonType# 网络流分析突然与大量内网主机通信的主机 cat /opt/zeek/logs/current/conn.log | \ zeek-cut ts id.orig_h id.resp_h | \ awk { key $2 targets[key][$3] 1 } END { for (src in targets) { count 0 for (dst in targets[src]) count if (count 20) print src, count } } | sort -k2 -rn # 检测凭据转储产物异常大的 445 端口回传字节数可能伴随转储后的工具投递 cat /opt/zeek/logs/current/conn.log | \ zeek-cut ts id.orig_h id.resp_h id.resp_p orig_bytes | \ awk $4 445 $5 10000000 | sort -t$\t -k5 -rn# 时间线分析映射攻击路径阶段 # indexwineventlog (EventCode4624 OR EventCode7045) # | eval stagecase( # EventCode4624 AND LogonType3, Network Logon, # EventCode4624 AND LogonType10, RDP Logon, # EventCode7045, Service Creation # ) # | timechart span5m count by stageStep 5自动化响应与遏制SOAR告警触发后应立即进入遏制流程。以下 SOAR playbook伪代码概括了从上下文丰富到取证保留的完整链路# 当横向移动告警触发时 # 1. 丰富告警上下文 # - 查询 AD 获取用户组成员与角色 # - 检查源 IP 是否为已知管理工作站 # - 查询受影响主机的近期漏洞扫描结果 # 2. 自动化遏制动作 # 方案 A通过交换机端口关闭隔离主机 # ssh adminswitch conf t; interface Gi1/0/5; shutdown # 方案 B通过 VLAN 变更隔离破坏性更小 # ssh adminswitch conf t; interface Gi1/0/5; switchport access vlan 999 # 方案 C在防火墙上阻断 sudo iptables -I FORWARD -s 10.10.5.23 -j DROP # 3. 禁用被入侵账户 # PowerShell: Disable-ADAccount -Identity compromised_user # 4. 强制重置密码 # PowerShell: Set-ADAccountPassword -Identity compromised_user -Reset # 5. 在完全遏制前收集取证证据 # velociraptor artifact collect Windows.KapeFiles.Targets --target BasicCollection实践中建议优先采用VLAN 变更隔离 保留网络可达性的方案 B让取证工作与后续调查仍可进行彻底shutdown端口方案 A虽然隔离最彻底但会阻断取证通道。第 5 步强调先取证后遏制避免证据丢失。Step 6构建检测仪表盘# Elastic Kibana 横向移动监控仪表盘查询 # 面板 1认证热力图源 vs 目标 # 聚合source.ip行与 destination.ip列的 Terms 聚合 # 指标event.code:4624 计数 # 面板 2内网主机之间的 SMB 连接 # 过滤destination.port:445 and source.ip:10.0.0.0/8 # 聚合按唯一目标数排序的 Top 20 源 IP # 面板 3RDP 会话时间线 # 过滤destination.port:3389 and event.code:4624 and winlog.event_data.LogonType:10 # 可视化按 source.ip 拆分的时间线 # 面板 4新服务安装 # 过滤event.code:7045 # 聚合winlog.event_data.ServiceName 的 Terms 聚合 # 面板 5失败认证突增检测 # 过滤event.code:4625 # 聚合带异常检测的日期直方图 # 导出 Kibana 仪表盘 # curl -X GET elastic-siem:5601/api/saved_objects/_export \ # -H kbn-xsrf: true \ # -d {type:dashboard,objects:[{id:lateral-movement-dashboard,type:dashboard}]} \ # lateral_movement_dashboard.ndjson仓库配套脚本从命令行到源码级实现本技能目录下附带了一个可直接运行的 Python 检测脚本 scripts/agent.py它把前述手工分析固化为可复用的工具支持四种子命令# 解析 Zeek conn.log提取内网对内网的横向移动指标 python3 agent.py zeek-conn /opt/zeek/logs/current/conn.log # 解析 Zeek smb_mapping.log统计共享访问模式 python3 agent.py zeek-smb /opt/zeek/logs/current/smb_mapping.log # 解析 Windows Security.evtx统计横向移动相关事件 python3 agent.py windows Security.evtx # 生成综合检测报告Zeek 目录 EVTX 文件 python3 agent.py report /opt/zeek/logs/current Security.evtx从源码结构看脚本的核心逻辑与上文工作流一一对应事件 ID 映射LATERAL_MOVEMENT_EVENT_IDS定义4624/4625/4648/4672/7045五个关键事件SUSPICIOUS_LOGON_TYPES将LogonType3与LogonType10分别标记为 Network 与 RemoteInteractive(RDP)对应 references/api-reference.md 中的事件速查表parse_zeek_conn_log按 Tab 切分 Zeek conn.log 字段仅统计源/目标均为内网地址10.、172.16.、192.168.前缀的连接对分别累计 SMB445/139、RDP3389、WinRM5985/5986端口计数并在连接对基础上给出 HIGH/MEDIUM 风险分级——对应工作流 Step 3 的网络层检测analyze_windows_auth_logs基于python-evtx解析 Security.evtx用正则从 XML 中提取LogonType字段如Data NameLogonType3/Data将网络登录、失败登录、显式凭据使用、新服务安装分别归类统计——对应工作流 Step 2 的事件日志检测detect_pass_the_hash_pattern对单一源主机的认证事件做目标去重当唯一目标数超过 5 时判定为PASS_THE_HASH_CANDIDATEHIGH 严重级与 Sigma 规则中同一账户 15 分钟访问 3 台主机的计数思想同源。需要说明的是analyze_windows_auth_logs依赖python-evtx库脚本顶部通过 try/except 捕获ImportError未安装时对应子命令会返回pip install python-evtx的提示不会导致整个脚本崩溃。这一可选依赖设计让 Zeek 分析子命令在无该库的环境下仍可独立使用。实战场景检测勒索软件操作者的横向移动场景背景SOC 在凌晨 2:00 收到文件服务器10.10.20.15上出现 PsExec 服务创建的告警随即触发横向移动调查。该组织已部署 Zeek 网络监控并将 Windows 事件日志转发至 Splunk。调查方法七步闭环在 Splunk 中查询 10.10.20.15 的事件 ID 7045服务创建确认 PsExec 执行并定位源 IP 为 10.10.5.23追溯 10.10.5.23 的认证历史查询事件 ID 4624 Type 3 登录发现该主机在过去一小时内使用 NTLM 认证了 8 台服务器Pass-the-Hash 模式检查 10.10.5.23 在 Zeek conn.log 中的记录识别出对 12 个内网主机的 SMB 连接445 端口以及一次向外部 IP 的大流量文件传输构建攻击时间线1:15 钓鱼初始入侵 → 1:25 凭据转储 → 1:30–2:00 横向移动至 8 台服务器通过认证链追溯识别全部受影响主机10.10.5.23 → 10.10.20.15 → 10.10.20.16 → 10.10.20.17遏制将全部识别主机隔离到 VLAN 999禁用被入侵账户阻断外部 C2 IP输出完整攻击链报告包含时间线、受影响主机与检测缺口。常见陷阱实战中最容易犯的错误只调查单条告警而不追溯跨主机的完整横向移动链在宣布遏制完成前未检查每台受影响主机的持久化机制仅依赖 Windows 事件日志而不关联网络流数据漏掉不产生 Windows 事件的横向移动工具未建立正常内网认证模式基线导致异常检测无从谈起。调查报告标准输出格式调查结束时建议按以下模板输出结构化报告便于复盘、汇报与跨团队交接## Lateral Movement Investigation Report **Case ID**: IR-2024-0312 **Initial Alert**: PsExec on 10.10.20.15 at 02:00 UTC **Investigation Period**: 2024-03-15 01:00 to 03:00 UTC ### Attack Timeline | Time (UTC) | Source | Destination | Technique | Evidence | |------------|--------|-------------|-----------|----------| | 01:15 | External | 10.10.5.23 | Initial Access (Phishing) | Email log HTTP download | | 01:25 | 10.10.5.23 | Local | Credential Dumping | LSASS access (Sysmon EID 10) | | 01:32 | 10.10.5.23 | 10.10.20.15 | Pass-the-Hash (SMB) | EID 4624 Type 3 NTLM | | 01:38 | 10.10.5.23 | 10.10.20.16 | PsExec | EID 7045 Zeek SMB | | 01:45 | 10.10.20.16 | 10.10.20.17 | RDP | EID 4624 Type 10 | | 02:00 | 10.10.20.17 | 10.10.20.15 | PsExec (triggered alert) | EID 7045 | | 02:10 | 10.10.5.23 | 203.0.113.50 | Data Exfiltration | Zeek conn.log 2.3 GB | ### Affected Systems - 10.10.5.23 (workstation-045) - Initial compromise - 10.10.20.15 (file-server-01) - Data accessed - 10.10.20.16 (app-server-02) - Pivoted through - 10.10.20.17 (db-server-01) - Final target ### Detection Gaps 1. Initial phishing email not blocked by email gateway 2. Credential dumping not detected (no LSASS monitoring) 3. 30-minute gap between first lateral movement and alert关键工具与框架映射工具清单Zeek网络安全监控器生成 SMB、Kerberos、DCE-RPC 与连接日志是网络层横向移动分析的核心数据源Splunk / Elastic SIEM日志聚合平台跨企业关联认证事件、网络流与服务创建Sigma厂商无关的检测规则格式可移植到各类 SIEM 平台Velociraptor端点取证工具用于从横向移动链涉及的主机收集证据BloodHoundActive Directory 攻击路径分析工具可在攻击者利用前识别潜在的横向移动路径。MITRE ATTCK 横向移动相关技术TA0008来自 references/api-reference.md技术ID检测要点Remote Services: SMBT1021.002445 端口 7045 事件Remote Services: RDPT1021.0013389 端口 4624 Type 10Remote Services: WinRMT1021.0065985/5986 端口Lateral Tool TransferT1570SMB 文件操作Pass the HashT1550.002来自工作站的 NTLM Type 3 登录该技能的 frontmatter 同时声明了多框架映射mitre_attack覆盖 T1046网络服务发现、T1040网络嗅探、T1557中间人、T1071应用层协议、T1021远程服务nist_csf覆盖 PR.IR-01、DE.CM-01、ID.AM-03、PR.DS-02d3fend_techniques覆盖应用协议命令分析、网络隔离、网络流量分析、客户端-服务器载荷画像、网络流量社区偏差检测。这与仓库 mappings/mitre-attack/coverage-summary.md 中Lateral Movement (TA0008) — 28 skills的统计一致——本技能是该战术下 28 个技能中的一员可与 detecting-lateral-movement-with-splunk、detecting-pass-the-hash-attacks 等相邻技能组合形成更完整的横向移动检测矩阵。完整的技能级技术映射见 mappings/attack-navigator-layer.jsonT1021、T1550.002 等技术的 comment 字段均引用本技能。小结横向移动检测的本质是认证事件 网络流双源关联Windows 事件日志回答谁用什么凭据登录了哪里Zeek 网络流回答哪台主机在真实访问哪些系统。本技能通过六步工作流日志采集 → 规则构建 → 网络层检测 → 威胁狩猎 → 自动化遏制 → 仪表盘监控配合 agent.py 脚本的源码级支撑提供了一条从被动告警到主动狩猎的完整检测路径。落地时请务必记住两条基线原则先建立正常内网通信基线再谈异常检测先取证后遏制避免破坏攻击链证据。【免费下载链接】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),仅供参考