工控流量分析-Modbus
做流量分析做到一道Modbus流量分析的题,第一次见遂记录。
流程核心:主站发起、从站响应
- 主站发起请求
SCADA/PLC(主站)生成 Modbus/TCP 包:
Transaction ID
Unit ID
Function Code
目标地址
数据值
- 从站接收并执行
执行器(从站)收到包后,先检查 Unit ID 是否匹配自己的 Node ID,如果匹配就执行指令:
解析 Function Code,例如写单个线圈
定位至线圈并设置数据值
从站返回响应:阀门执行器生成响应包,带上和请求包相同的 Transaction ID,返回:
Function Code
线圈地址
数据值
- 主站接收响应
SCADA/PLC 收到响应包后,通过 Transaction ID 匹配到之前的请求,确认动作已执行,并在 HMI 上更新状态。
常见的功能码:
1 | 1:读线圈 |
此外,注意:
写线圈后,Data为0xff00说明置1,可以理解成“打开”的意思
为0x0000即说明置0,对应“关闭”
Reference Number为线圈寄存器地址
NodeId为工业网络里标识设备的 “地址”
题中也出现了SNMPv2协议,也和工控流量相关:
SNMPv2 是简单网络管理协议(SNMP)的一个常用版本,用于网络设备(路由器、交换机等)的监控与管理,延续了SNMP主从式(管理站与代理)的通信模式,管理站可通过Get、GetNext等操作查询设备参数,也可通过Set操作配置设备,代理则部署在被管理设备上,接收指令并返回响应,SNMPv2支持批量查询,能更高效地获取多个设备参数,其认证方式仍采用共同体名(Community String),分为只读(public,仅查询数据)和读写(private,可配置设备)两种,同时依赖MIB(管理信息库)定义可监控参数及对应OID(对象标识符),相较于SNMPv1提升了查询效率和错误处理能力,但未添加加密和更严格的身份验证机制,安全性较弱,常应用于对安全要求不高的内部网络环境。
MIB(Management Information Base,管理信息库)是MO(Managed Object管理对象)定义的集合。MIB文件是按照ASN.1定义的文本文件。每个管理对象都对应一个节点,并且用OID(Object Identifier)来标识;数据管理对象对应叶子节点;所有的管理对象形成了一棵管理树。对象标识从顶部开始,顶部没有标识,以root表示。所有的MIB变量都从1.3.6.1.2.1这个标识开始。树上的每个节点还有文字名,例如:1.3.6.1.2.1就和iso.org.dod.internet.memt.mib对应。
例如:
0000 00 2f 14 27 16 3a 00 45 3a 2c 5b 62 08 00 45 00 ./.’.:.E:,[b..E.
0010 00 59 00 01 00 00 40 11 f6 46 c0 a8 01 98 c0 a8 .Y....@..F……
0020 01 64 d0 9c 00 a1 00 45 c8 a2 53 4e 4d 50 76 32 .d…..E..SNMPv2
0030 63 3b 43 6f 6d 6d 75 6e 69 74 79 3d 70 75 62 6c c;Community=publ
0040 69 63 3b 50 44 55 3d 47 65 74 52 65 71 75 65 73 ic;PDU=GetReques
0050 74 3b 4f 49 44 3d 31 2e 33 2e 36 2e 31 2e 34 2e t;OID=1.3.6.1.4.
0060 31 2e 36 33 36 2e 31 1.636.1
Community=public:public,代表是只读权限的请求,只能查询设备数据,不能修改配置。
PDU=GetRequest:表示这是一个GetRequest类型的协议数据单元(PDU),也就是管理站向设备代理发起的查询请求。
OID:指定了要查询的对象标识符(OID)
这个包是 IP 为 192.168.1.152 的管理站,向 IP 为 192.168.1.100 的网络设备,发送了一个 SNMPv2c 只读查询请求,目标是获取 OID 1.3.6.1.4.1.636.1 对应的设备私有 MIB 信息(通常是厂商自定义的设备参数)。