6.2 工业协议解析与特征工程(检测算法前置层)

工业协议解析与特征工程:Modbus、IEC 104、S7comm解析要点、四层特征体系、Zeek与Suricata规则及公开数据集。

6.2 工业协议解析与特征工程(检测算法前置层)

信源等级:L1/L2/L3 | 最后核验:2026-09-24 核心来源:IEC 60870-5-104/IEC 60870-5-101 标准、Modbus 协议规范、《信息与控制》期刊论文(DPI 功能码检测)、Zenodo/RICSel21 公开数据集、Zeek/Suricata 开源解析器文档 关联文档:5.3 工业通信协议与安全脆弱性(协议安全档案)、6.1 工控时序异常检测算法(过程侧检测)

一、定位:网络侧检测的前置层

6.1 解决**过程数据(传感器时序)的异常检测;本文解决网络流量(协议报文)**侧的检测前置问题:

原始报文 → 协议解析(DPI) → 特征工程 → 检测算法(规则/ML/DL) → 告警
         └── 本篇范围 ────────────────────────┘        └─ 规则见本篇,ML 基线见 6.1 ─┘

两条路线互补:过程侧(6.1,物理量时序建模,可发现未改变流量形态的隐蔽攻击)与网络侧(本篇,功能码/地址/时序的协议语义违规,可发现注入、重放、扫描、DoS)。

二、主流工控协议的解析要点

2.1 Modbus/TCP(端口 502)

报文结构:MBAP 报文头(事务处理标识符 2B + 协议标识符 2B + 长度域 2B + 单元标识符 1B)+ PDU(功能码 1B + 数据)。

协议完整性检测三步(《信息与控制》2016 论文,L2[1]):

  1. 源或目的端口是否为 502;
  2. MBAP 协议标识符是否为 0x0000(Modbus/TCP 规定以此识别);
  3. MBAP 长度域 == TCP 载荷长度 - 6(事务标识符+协议标识符+长度三个域占 6 字节,L_len(MBAP) = L_TCP - 6)——防超长载荷导致从站缓存区溢出。

功能码分类深度解析(同上,L2[1]):

类别功能码数据部分解析
读操作类01 读线圈、02 读离散输入、03 读保持寄存器、04 读输入寄存器、20 读文件记录、43 读设备识别码起始地址(2B)+ 数量(2B)
写操作类05 写单个线圈、06 写单个寄存器、15(0x0F) 写多个线圈、16(0x10) 写多个寄存器、21 写文件记录输出地址(2B)+ 输出值(2B)/ 数量 + 字节计数
其它操作类22 屏蔽写寄存器、23 读/写多个寄存器屏蔽/寄存器域值字段

白名单规则粒度可细至:源/目的 IP、协议、端口、功能码、寄存器地址范围、写入域值范围(例:FC06、地址 100200、写入值 050 → Pass)[1]。 其余功能码(供完整基线参考):07 读异常状态、08 诊断、11/12 事件计数/事件日志、17 报告从站 ID、43 封装接口传输(L1,Modbus 协议规范)。

2.2 IEC 60870-5-104(端口 2404)

结构:TCP 承载;APCI(应用规约控制信息)三类帧——I 格式(信息帧,带发送/接收序号)、S 格式(确认帧)、U 格式(控制帧:启动/停止/测试);ASDU(应用服务数据单元)含 TypeID(类型标识)、COT(传送原因)、公共地址、IOA(信息对象地址)、信息体值、CP56Time 时间标签[2][3]。

Zeek 解析日志字段(icsnpp-iec60870-5-104,L3[2]):asdu_length、apdu_type、send_num/rec_num、ioa_num、cot、asdu_type(TypeID)、origin(发起方地址)、asdu_address、ioa、state_on/off、nva/sva/shortfloat(归一化/标度/短浮点值)、质量位(blocked/substituted/topical/valid/overflow)、初始化原因、总召唤/分组计数召唤限定词、CP56 时间七字段。

支持 ASDU 类型样例:M_SP_NA_1(1)、M_DP_NA_1(3)、M_ME_NA_1(9)、M_ME_NC_1(13)、M_SP_TB_1(30)、M_ME_TF_1(36)、C_SC_NA_1(45)、C_DC_NA_1(46)、C_IC_NA_1(100 总召唤)、C_RP_NC_1(105 复位) 等[2]。

2.3 S7comm(端口 102)

封装栈:IP | TCP | TPKT(ISO-on-TCP, RFC 1006, 4B 版本+长度) | COTP(ISO 8073, TSAP 寻址: rack+slot) | S7 头 + 参数段 + 数据段[4]。

S7 头关键字段:Protocol ID(标准 0x32 / 新型 0x72)、ROSCTR(读写服务类型)、Function Code、Parameter Length、Data Length、Error Code、Item Count[4]。

状态机建模(GW 模型,Goldenberg & Wool,特拉维夫大学网络安全实验室)[4]:

  • 学习阶段:对 PLC-HMI 连接以”PDU 字段哈希”为符号构建 DFA(确定有限自动机),状态表示合法查询/响应交替;
  • 执行阶段:4 类事件计数——Normal(正常)/ Retransmission(重传)/ Miss(丢失)/ Unknown(异常转换 → 告警);
  • 配置:Max pattern length 75 符号、Validation window 300 符号;
  • 实测:>98.16% 包判为 Normal;S7 流量呈周期性(固有 1 秒周期,AER ≈ PDU 符号率);良率提升技巧——将 S7 PDU 拆分为逐 item 的人工包再建 DFA(%Normal 升至 99.6%~99.9%)。

2.4 其他协议(解析器现状)

协议端口主流开源解析支持
Modbus/TCP502Suricata 内置解析器(默认启用)、Zeek Modbus analyzer、Wireshark、pymodbus[5][6]
DNP320000Suricata 内置(默认启用)、Zeek[6]
EtherNet/IP + CIP44818Suricata 内置(默认禁用需开启)[6]
IEC 60870-5-1042404Zeek Spicy 插件(DINA-community/icsnpp、georgemakrakis/zeek-iec104)、Wireshark packet-iec104.c[2][3]
S7comm102Wireshark;Suricata 不原生解析,需 Rust 插件 suricata-ics-parsers[6]
OPC UA4840⚠️ 待核实(本次信源未覆盖其开源解析生态)

三、特征工程:从报文到特征向量

3.1 四层特征体系

层次特征示例来源依据
L1 包/流级(通用)Flow Duration、Tot Fwd/Bwd Pkts、SYN/RST/PSH/ACK/URG/CWE/ECE flag 计数、包长分布、双向包间隔CICFlowMeter 标准流统计(Zenodo 数据集[7])
L2 协议语义级功能码分布与频率、COT 分布、TypeID 分布、IOA 集合、寄存器访问域、APCI 帧类型比(I/S/U)、写/读比、广播(unit_id=0)写IEC104 自定义解析器特征[7];Modbus 功能码 DPI[1]
L3 会话/时序级flow idle time(max/min/mean/std/variance)、轮询周期 z-score、请求-响应配对完整性(GW 模型 Miss/Unknown)、帧长时序IEC104 数据集流统计[7];GW 模型[4]
L4 图/行为级进程-网络关联、攻击链图、跨传感器关联(衔接 6.1 GDN 类方法)行业通用认知 L4

IEC104 专用流统计特征全表(Zenodo 自定义 Python 解析器,基于 Scapy,L3[7]):

  • 流级:flow idle time {max, min, mean, std, variance};
  • 速率:flow/fw/bw iec104 packets/s;
  • 帧型计数:total IEC104_I_Message_SeqIOA packets(正向/反向)、I/S/U_Message packets;
  • TCP:SYN/RST/PSH/ACK/URG/CWE/ECE flag 计数。

3.2 检测规则样例(结构/行为型,映射 MITRE ATT&CK for ICS)

基于开源规则集(L3[6])归纳的六类规则,均以 1-2 周正常基线为前提:

规则判据ATT&CK for ICS 映射
未授权客户端src_ip ∉ 授权主站清单T0886 ⚠️ 待核实(编号以官方为准)
未授权功能码func_code ∉ 该会话白名单(写类 FC05/06/15/16/22/23 升为 critical)T0855 Unauthorized Command Message
写操作审计写类功能码 + 寄存器地址提取T0836 Modify Parameter
时序异常轮询间隔 z-score > 5(vs 基线均值/方差)T0831 Manipulation of Control
协议违规MBAP 协议标识符 ≠ 0x0000 等T0830 Man in the Middle
广播写unit_id=0 且写功能码结构异常类

3.3 规则引擎适配(Suricata/Zeek)

  • Suricata(逐包、无状态亦可):公开 ICS/OT 规则库示例——Modbus:oversized MBAP 长度(byte_test > 254,关联 CVE-2017-16740)、重复发送 DoS、超规格读写数量(关联 CVE-2021-22659);DNP3:len_too_small/flooded/bad_link_crc、Operate/Direct-Operate、Cold/Warm Restart;EtherNet/IP:外源 RegisterSession、CIP Write Tag/Set_Attribute_Single/Forward_Open(映射 CISA AA26-097A 活动)[6]。规则风格偏结构/行为检测(协议异常、越界值、控制面操作)而非固定 exploit 字节签名;
  • Zeek(有状态解析、携带完整会话上下文):与 Suricata 互补——Suricata 逐包检查独立于解析器状态,Zeek 状态化解析给出行为 notice[6];
  • 工控部署要点:设置 $HOME_NET 为 OT 网段;阈值(detection_filter 计数)可内联调整[6]。

四、公开数据集与工具(评估必用)

资源内容链接/出处
IEC 60870-5-104 Intrusion Detection Dataset(2022)12 种攻击(未授权命令 + DoS);pcap + CICFlowMeter TCP/IP 流统计 CSV + 自定义 IEC104 解析器流统计 CSV;含平衡训练/测试集;DOI: 10.21227/fj7s-f281Zenodo 7108614[7]
RICSel21(Linköping 大学,CRITIS 2021)仿真 SCADA 电网 12 种攻击:扫描/ARP 欺骗、丢包 DoS、SYN flood、流量洪泛、间歇丢包、序列号篡改(MitM)、传感器值篡改、时间戳篡改、IOA 篡改、重放、设定点注入、伪装第二 HMI;电力值每 5 秒采样RICS-el 测试床论文(CRITIS 2021)[8]
ICS-pcap公开工控协议 pcap 合集(iec104 等)github.com/automayt/ICS-pcap[3]
Suricata ICS 规则库Modbus/DNP3/ENIP 结构行为规则 + 测试 pcap 生成脚本github.com/LeargasSecurity/leargas-suricata-public-rules[6]
Zeek 工控解析插件icsnpp-iec60870-5-104(Spicy)等github.com/DINA-community/icsnpp-iec60870-5-104[2]
SWaT/HAI 网络流量部分网络数据 185Hz(SWaT,衔接 6.1 数据集表)6.1 已载[9]
Wireshark 协议解析packet-iec104.c 等标准 dissectorgithub.com/wireshark/wireshark[3]

五、选型决策(工程落地建议)

需求:协议白名单/合规基线(写保护、地址域限定)  → 功能码+地址+域值 DPI 白名单(3.1 方法[1])
需求:已知攻击特征(畸形帧/越界值/控制面滥用)    → Suricata ICS 结构规则[6]
需求:会话上下文与行为异常(重放/序列错乱/召唤异常)→ Zeek 有状态解析 + GW 式 DFA 状态机[4]
需求:统计/ML 异常检测(未知威胁)               → L2/L3 协议语义特征 + 流级特征 → RF/孤立森林/LSTM(基线见 6.1)
需求:评估基准                                  → Zenodo IEC104 数据集 / RICSel21[7][8]

六、来源引用

  1. 董海云 等,《基于功能码深度检测的 Modbus/TCP 通信访问控制方法》,《信息与控制》(DOI: 10.13976/j.cnki.xk.2016.0248)— https://xk.sia.cn/cn/article/pdf/preview/10.13976/j.cnki.xk.2016.0248.pdf (L2 学术)
  2. DINA-community,icsnpp-iec60870-5-104:Zeek Spicy 协议解析插件(字段与 ASDU 类型支持表,2025-05)— https://github.com/DINA-community/icsnpp-iec60870-5-104 (L3 开源)
  3. georgemakrakis,zeek-iec104:Zeek IEC 104 解析器(基于 Wireshark dissector 与 Brno UT 技术报告 Matoušek 2017;pcap 来源 ICS-pcap/Zenodo)— https://github.com/georgemakrakis/zeek-iec104 (L3 开源)
  4. Goldenberg & Wool(特拉维夫大学)/ IBM Research 演示材料,Accurate Modeling of the Siemens S7 SCADA Protocol for Intrusion Detection and Digital Forensics(GW 模型/TPKT-COTP-S7 栈/实测数据)— https://slideblast.com/download/presentation-ibm-research_59645ddb1723dd1771ae48ec.html (L2 学术)
  5. Anthropic-Cybersecurity-Skills(开源),detecting-modbus-protocol-anomalies(功能码表、基线与六类检测规则样例、ATT&CK 映射)— https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/detecting-modbus-protocol-anomalies/SKILL.md (L3 开源,编号以 MITRE 官方为准)
  6. LeargasSecurity,leargas-suricata-public-rules(开源 Suricata ICS 规则库:Modbus/DNP3/ENIP 内置解析器适配、CVE/CISA 映射、Suricata vs Zeek 互补说明)— https://github.com/LeargasSecurity/leargas-suricata-public-rules (L3 开源)
  7. Panagiotis et al.,IEC 60870-5-104 Intrusion Detection Dataset(2022,Zenodo,DOI: 10.21227/fj7s-f281;CICFlowMeter + 自定义 Python/Scapy 解析器特征表)— https://zenodo.org/records/7108614 (L3 数据集)
  8. Westring et al.,RICSel21: A dataset with network attacks targeting IEC-60870-5-104 in SCADA systems(CRITIS 2021,RICS-el 测试床)— https://www.ida.liu.se/labs/rtslab/publications/2021/CRITIS_2021_Westring.pdf (L2 学术)
  9. 衔接 6.1 工控时序异常检测算法(SWaT/HAI 数据集与 ML 基线,见本知识库 06 模块)
标签:特征工程协议解析
发布日期:2026-09-17 | 最后核验:2026-09-24 | 信源等级:L1/L2/L3
选择区号