尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于 AnThropIC Cybersecurity Skills 的 Modbus 命令注入攻击检测实战指南:从协议基线到 FrostyGoop 防护

基于 AnThropIC Cybersecurity Skills 的 Modbus 命令注入攻击检测实战指南:从协议基线到 FrostyGoop 防护 基于 AnThropIC Cybersecurity Skills 的 Modbus 命令注入攻击检测实战指南从协议基线到 FrostyGoop 防护【免费下载链接】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-modbus-command-injection-attacks 技能文档展开系统讲解在 ICS/SCADA 环境中检测 Modbus TCP/RTU 命令注入攻击的完整方法论从构建通信基线、解析 MBAP 报文到部署 Suricata 检测规则、落地 Zeek 日志分析再到 FrostyGoop 这类真实威胁的应急处置流程。读者读完将掌握一套可复制的授权主站白名单 函数码白名单 寄存器范围 写频率 广播写多维检测体系并能在 OT SOC 中直接落地对应告警与响应动作。为什么 Modbus 天生容易遭受命令注入Modbus 是工业控制领域使用最广泛的通信协议之一其 TCP 变体运行在 502 端口。从源码与文档可以确认它缺乏任何身份认证与加密机制见 SKILL.md 的 Key Concepts 定义任何一个能触达 OT 网段的设备都可以直接向 PLC 下发读写指令。这意味着攻击者一旦获得 OT 网络访问权即可伪造合法主站向 PLC 写入线圈/寄存器实现物理层面的破坏检测方只能依赖源 IP 通信行为基线来识别异常而无法依赖协议自身的可信标识FrostyGoop 是首个利用 Modbus TCP 造成真实物理影响的已知恶意软件2024 年曾导致乌克兰区域供热系统中断正是此类攻击的典型样本。因此检测策略的核心逻辑是把什么算正常先固化下来基线再把一切偏离基线的行为视为可疑。检测场景与适用边界该技能在以下场景中适用详见 SKILL.md 的 When to Use为使用 Modbus TCP端口 502或 Modbus RTU 的环境部署入侵检测调查 PLC 寄存器或线圈疑似被未授权修改的事件为 OT SOC 中 Modbus 密集型环境建设检测分析能力响应 FrostyGoop 式借助 Modbus TCP 造成运营影响的攻击在 Modbus 主站疑似失陷后进行基线有效性验证。不适用的边界同样清晰非 Modbus 协议的检测应参考 detecting-dnp3-protocol-anomaliesDNP3等技能通用 IT 网络入侵检测不在其范围Modbus 设备本身的配置审计属于 performing-ot-vulnerability-scanning-safely 的职责。前置条件清单开始之前需要具备以下条件在承载 Modbus TCP 流量的网段部署SPAN/TAP 镜像口典型端口 502拥有正常 Modbus 通信模式的基线主站、从站、函数码、寄存器范围、轮询间隔已部署Suricata、Zeek 或商业 OT IDS并启用 Modbus 协议解析器理解环境中使用的 Modbus 函数码读操作 vs 写操作具备 PLC 编程文档访问权限用于验证预期的寄存器范围。核心概念速查术语定义Modbus TCP运行在 TCP 502 端口的工业协议无认证与加密易受命令注入函数码Function CodeModbus PDU 中单字节字段指定操作类型读线圈、写寄存器、诊断等监控未授权函数码是检测关键MBAP 头Modbus TCP 变体中的应用协议头包含事务 ID、协议 ID、长度与单元 IDFrostyGoop首个利用 Modbus TCP 造成真实物理影响的已知恶意软件2024 年致乌克兰区域供热中断单元 IDUnit ID目标 Modbus 从站地址单元 ID 0 为广播影响网段内所有从站寄存器范围PLC 中特定内存地址合法操作访问已知范围越界访问暗示侦察或篡改构建 Modbus 通信基线基线是一切检测规则的参照系主要采集以下要素授权主站集合哪些 IP 允许向 PLC 发送 Modbus 命令授权通信对主站 → 从站哪些源-目的组合是合法的允许的函数码集合每个会话允许哪些函数码读 vs 写允许的寄存器范围合法操作访问哪些寄存器区间轮询间隔正常周期性读写的时间特征。SKILL.md 给出了完整的检测器实现其基线数据结构authorized_masters、authorized_pairs、allowed_function_codes、allowed_register_ranges、polling_intervals与 JSON 基线文件modbus_baselines一一对应。基线文件格式如下由load_baseline方法解析逻辑推断{ modbus_baselines: { 10.0.0.1 - 10.0.0.100: { allowed_function_codes: [1, 3, 4, 6, 16], register_ranges: [{start: 0, end: 100}, {start: 400, end: 500}], polling_interval_avg_sec: 5.0 } } }深入解析Python 检测器实现MBAP 报文解析原理检测器通过parse_modbus_mbap手工解析 MBAP 头与 PDU见 SKILL.md 源码transaction_id struct.unpack(H, payload[0:2])[0] # 事务 ID protocol_id struct.unpack(H, payload[2:4])[0] # 协议 ID必须为 0 length struct.unpack(H, payload[4:6])[0] # 长度 unit_id payload[6] # 单元 ID func_code payload[7] # 函数码关键细节protocol_id ! 0即判定为非 Modbus 报文直接丢弃对读/写类函数码1、2、3、4、5、6、15、16进一步解析start_address与quantity用于寄存器范围校验。函数码分类如下读函数{1, 2, 3, 4}读线圈、读离散输入、读保持寄存器、读输入寄存器写函数{5, 6, 15, 16}写单线圈、写单寄存器、写多线圈、写多寄存器诊断函数{8, 17, 43}诊断、报告从站 ID、封装接口传输。六条检测规则analyze_packet方法逐包执行六类检测规则触发条件严重级关联 MITRE ATTCK ICS1. 未授权主站源 IP 不在authorized_masters且目标端口为 502CRITICALT0843 Program Download2. 未授权写操作写函数码来自非allowed_write_sources源CRITICALT0855 Unauthorized Command Message2b. 写洪泛同一源 60 秒内写操作 20 次HIGHT0836 Modify Parameter3. 异常函数码会话内出现非基线函数码HIGHT0855 Unauthorized Command Message4. 广播写单元 ID 为 0 且为写函数CRITICALT0855 Unauthorized Command Message5. 越界寄存器寄存器地址数量超出基线范围HIGHT0836 Modify Parameter6. 诊断/重启命令出现诊断函数码HIGHT0814 Denial of Service值得注意的工程细节写洪泛检测使用滑动窗口仅保留 60 秒内的写时间戳避免时间无限增长越界判断为start addr and addr qty end同时校验起始地址与数量防止通过超长 quantity 绕过单点检查。运行方式# 实时监控指定网卡可选基线文件 python modbus_detector.py eth0 baseline.json # 离线分析 pcap 抓包文件 python modbus_detector.py capture.pcap baseline.json离线模式支持.pcap与.pcapng两种格式通过rdpcap读入实时模式使用 Berkeley Packet Filtertcp port 502过滤仅分析 Modbus 流量以降低 CPU 开销。输出报告包含分析时间、报文总数、Modbus 报文数、告警数、严重级别分布及逐条告警详情含 MITRE 技术映射。Zeek 日志驱动的分析 Agent除在线抓包外仓库还提供了基于 Zeekmodbus.log的离线分析实现 agent.py。该脚本支持两种输入源python agent.py --zeek-log modbus.log python agent.py --zeek-log modbus.log --authorized-masters 10.0.0.1 10.0.0.2 python agent.py --zeek-log modbus.log --flood-threshold 20其实现要点可与 api-reference.md 对照阅读危险函数集更广DANGEROUS_FUNCTIONS {5, 6, 15, 16, 22, 23}额外包含掩码写寄存器22与读写多寄存器23Zeek 字段解析按#fields行读取表头支持func或function字段别名授权主站校验未授权主站根据函数是否危险分 CRITICAL / HIGH 两级非标准函数码单独报告为unknown_function_code写洪泛检测对每个源的时间戳排序后滑动检查timestamps[i threshold] - timestamps[i] window_seconds即判定洪泛阈值可经--flood-threshold调整默认 20 次/60 秒。该脚本输出 JSON 格式结果包含函数码分布、写操作清单、通信对统计、发现项与写洪泛列表便于与 SIEM/编排系统集成。Zeek 侧只需保证modbus.log包含id.orig_h、id.resp_h、func、ts等字段即可。部署 Suricata 检测规则SKILL.md 提供了可直接落地的 Suricata 规则集覆盖 502 端口上的关键攻击面# 未授权写操作非工程站来源 alert modbus !$MODBUS_AUTHORIZED_WRITERS any - $OT_PLC_SUBNET 502 ( msg:MODBUS-INJECT Unauthorized write operation detected; modbus_func:write_single_coil; flow:to_server,established; classtype:attempted-admin; sid:4000001; rev:1; priority:1; ) alert modbus !$MODBUS_AUTHORIZED_WRITERS any - $OT_PLC_SUBNET 502 ( msg:MODBUS-INJECT Unauthorized write multiple registers; modbus_func:write_multiple_registers; flow:to_server,established; classtype:attempted-admin; sid:4000002; rev:1; priority:1; ) # Modbus 广播写影响全部从站 alert modbus any any - $OT_PLC_SUBNET 502 ( msg:MODBUS-INJECT Broadcast write command (Unit ID 0); modbus_unit_id:0; flow:to_server,established; classtype:attempted-admin; sid:4000003; rev:1; priority:1; ) # 高频写操作疑似自动化攻击 alert modbus any any - $OT_PLC_SUBNET 502 ( msg:MODBUS-INJECT Excessive write rate - possible automated attack; modbus_func:write_multiple_registers; flow:to_server,established; threshold:type threshold, track by_src, count 20, seconds 60; classtype:attempted-admin; sid:4000004; rev:1; ) # 诊断/重启命令 alert modbus any any - $OT_PLC_SUBNET 502 ( msg:MODBUS-INJECT Diagnostics function code detected; modbus_func:diagnostics; flow:to_server,established; classtype:attempted-dos; sid:4000005; rev:1; ) # FrostyGoop 模式写供暖控制寄存器 alert modbus any any - $OT_PLC_SUBNET 502 ( msg:MODBUS-INJECT Potential FrostyGoop - write to heating control registers; modbus_func:write_multiple_registers; content:|00 10|; offset:8; depth:2; flow:to_server,established; classtype:attempted-admin; sid:4000010; rev:1; priority:1; )规则要点解析!$MODBUS_AUTHORIZED_WRITERS利用 Suricata 的负向 IP 变量集将非工程站来源直接表达为告警条件需要预先维护该变量列表threshold: type threshold, track by_src, count 20, seconds 60将写洪泛检测下沉到 IDS 引擎层与 Python 检测器的 20 次/60 秒阈值保持一致FrostyGoop 模式规则用content:|00 10|; offset:8; depth:2匹配 MBAP 头偏移 8 处的函数码0x10Write Multiple Registers十进制 16并针对供暖控制寄存器范围告警更基础的函数码匹配写法见 api-reference.md如modbus: function 5;与modbus: function 16;。实战场景FrostyGoop 式供暖控制攻击场景背景某楼宇自动化系统通过 Modbus TCP 控制 HVAC 设备。监控发现异常 IP 向供暖控制寄存器发送了意外写命令该 IP 不属于任何授权 BMS 控制器。响应流程源自 SKILL.md 的 Common Scenarios将源 IP 与授权 Modbus 主站列表比对核实确认是否有进行中的授权维护或配置变更捕获完整 Modbus 事务包括被写入的寄存器地址与数值将写入值与供暖设备的安全运行范围对比若确认未授权立即在工业防火墙上阻断源 IP检查源设备是否存在失陷迹象恶意软件、未授权远程访问核对所有受影响控制器的当前设定值是否与已知正常值一致确认篡改后恢复安全设定值。关键陷阱由于 Modbus 无认证源 IP 是唯一身份标识——若未部署 ARP 防护攻击者可伪造 IP同时不应假设所有写操作都是恶意的合法 SCADA 操作本身就包含大量写入。升级前必须先与变更管理日志核对。标准输出报告格式检测结果应输出为结构化的调查报告格式如下便于归档与汇报MODBUS INJECTION DETECTION REPORT Analysis Period: [start] to [end] Monitoring Point: [interface/SPAN description] TRAFFIC SUMMARY: Total Modbus Packets: [count] Read Operations: [count] Write Operations: [count] Unauthorized Writes Detected: [count] ALERTS: [CRITICAL] Unauthorized write from [IP] to PLC [IP] Function: Write Multiple Registers (FC 16) Registers: [start]-[end] MITRE: T0855 - Unauthorized Command Message BASELINE DEVIATIONS: New Modbus masters: [list] Unusual function codes: [list] Out-of-range register access: [list] RECOMMENDED ACTIONS: 1. Verify source [IP] authorization status 2. Block unauthorized sources at industrial firewall 3. Validate PLC register values against known-good state检测阈值速查异常类型阈值严重级写洪泛 20 次写操作 / 60 秒CRITICAL未知函数码出现即告警HIGH未授权主站不在白名单CRITICAL以上阈值同时体现在 api-reference.md 的 Detection Thresholds 表中且与 Python 检测器默认值、Suricatathreshold规则参数完全对齐实现多引擎同一标准。与框架的映射关系该技能在仓库中映射了明确的 MITRE ATTCK for ICS 技术见 ATTACK_COVERAGE.mdT0814Denial of Service→detecting-modbus-command-injection-attacksT0836Modify Parameter→ 本技能与detecting-modbus-protocol-anomalies、detecting-stuxnet-style-attacksT0843Program Download→ 本技能与performing-s7comm-protocol-security-analysisT0855Unauthorized Command Message→ 本技能与detecting-modbus-protocol-anomalies、detecting-dnp3-protocol-anomalies。同时技能元数据声明了 NIST CSF 2.0 相关控制项PR.IR-01、DE.CM-01、ID.AM-05、GV.OC-02可用于将检测能力对接到组织的合规框架。仓库以 agentskills.io 标准组织技能元数据方便 Agent/LLM 检索与调用同属 OT/ICS 检测域的相邻技能还包括 detecting-modbus-protocol-anomalies 与 detecting-dnp3-protocol-anomalies可组合构建更完整的 OT 检测矩阵。小结Modbus 命令注入检测的落地路径可以总结为一条清晰的链路先建基线授权主站、函数码、寄存器范围、轮询节奏→ 多引擎并行检测Scapy 在线/离线解析、Zeek 日志分析、Suricata 规则→ 统一映射 MITRE ATTCK ICS 技术 → 按标准报告格式输出并联动工业防火墙处置。仓库同时提供了协议层面的实现证据SKILL.md 的 MBAP 解析与六类检测规则和工程化落地组件agent.py 的 Zeek 日志分析、api-reference.md 的函数码/阈值参考可直接在 OT SOC 中按需选用。面对 FrostyGoop 这类以 Modbus 为攻击面的真实威胁这套以行为基线偏离为核心的检测体系是当前协议自身无法提供认证保障前提下的务实防御方案。【免费下载链接】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),仅供参考
返回列表