IEC 60870-5-104协议解析与模糊测试策略
1. 协议简介
IEC 60870-5-104远动规约用于厂站与调度主站间的通讯,是电力系统中重要的通信协议。
1.1 设备角色
- 调度端(主站/控制站/客户机):典型设备如SCADA系统
- 服务端(子站/被控站/服务机):典型设备包括:
- FTU(馈线终端)
- DTU(站所终端)
- TTU(配变终端)
- RTU(远程终端单元)
1.2 协议基础
- IEC 60870-5-104是基于IEC 60870-5-101协议在TCP/IP协议上的扩展
- 默认端口:TCP 2404
- 101协议基于串口通信,104协议基于以太网通信
2. 协议数据结构
2.1 基本结构
数据报文分为三个部分:
- APCI (Application Protocol Control Information):应用规约控制信息
- ASDU (Application Service Data Unit):应用服务数据单元
- APDU (Application Protocol Data Unit):应用规约数据单元
关系:APDU = APCI + ASDU
- APDU最大长度为255字节
- ASDU最大长度为249字节
2.2 APCI解析
APCI结构:
- 启动字符:68H(1字节)
- APDU长度域:包含APCI的四个控制域和ASDU长度
- 控制域:
- 控制域1和2:发送序列号(控制域1最后一位不参与计算)
- 控制域3和4:接收序列号(控制域3最后一位不参与计算)
序列号计算:
- 采用小端模式
- 实际序列号 = 存储值 × 2
示例:
-
主站发送(0,0):
- 控制域1和2:0000 0000 0000 0000 (0000H)
- 控制域3和4:0000 0000 0000 0000 (0000H)
-
子站回复(0,1):
- 控制域1和2:0000 0000 0000 0000 (0000H)
- 控制域3和4:0000 0010 0000 0000 (0200H) → 传输为0002H
2.3 帧类型
I帧(信息帧)
- 带有ASDU并确认对方帧
- 发送和接收序列号有效
- 最大长度255字节
- 控制域1最低位为0
S帧(短帧)
- 不带信息,仅用于确认
- 仅接收序列号有效
- 长度6字节
- 控制域1最低位为1,倒数第二位为0
U帧(短帧)
- 用于启动控制信息
- 仅控制域1有效,其余为0
- 长度6字节
- 控制域1最低位为1,倒数第二位为1
U帧命令示例:
- 启动命令:0x07 → 68 04 07 00 00 00
- 启动确认:0x0B → 68 04 0B 00 00 00
- 停止命令:0x13 → 68 04 13 00 00 00
- 停止确认:0x23 → 68 04 23 00 00 00
- 测试命令:0x43 → 68 04 43 00 00 00
- 测试确认:0x83 → 68 04 83 00 00 00
2.4 ASDU解析
ASDU是I帧中的有效数据载荷,不同ASDU数据类型对应不同信息元素内容。
2.4.1 类型标识
完整类型标识分类:
-
监视方向过程信息(上行):
- 1: 单点信息
- 2: 带短时标的单点信息
- 3: 双点信息
- 4: 带短时标的双点信息
- 5: 步长位置信息
- 9: 测量值,归一化值
- 11: 测量值,标度化值
- 13: 测量值,短浮点数
- 15: 累计值
- 30-40: 带CP56Time2a时标的各类信息
-
控制方向过程信息(下行):
- 45: 单命令
- 46: 双命令
- 47: 步调节命令
- 48: 设点命令,归一化值
- 58-64: 带CP56Time2a时标的各类命令
-
监视方向系统信息(上行):
- 70: 初始化结束
-
控制方向系统信息(下行):
- 100: 总召唤
- 101: 电能脉冲召唤命令
- 102: 读命令
- 103: 时钟同步命令
- 104: 测试命令
- 105: 复位进程命令
2.4.2 可变结构体(VSQ)
- SQ=0:信息对象地址不连续(每个对象都有地址),信息无序
- SQ=1:信息对象地址连续(只有第一个有地址,后续+1),信息有序
2.4.3 传送原因(COT)
两字节组成:
- 第1字节高两位:
- T:测试标志(0=非测试,1=测试)
- P/N:积极/消极确认(0=肯定确认,1=否定确认)
- COT:6比特
常见传送原因:
- 1: 周期、循环(上行)
- 2: 背景扫描(上行)
- 3: 突发(上行)
- 4: 初始化(上行)
- 5: 请求或被请求(上行/下行)
- 6: 激活(下行)
- 7: 激活确认(上行)
- 20: 响应站召唤(上行)
- 44: 未知类型标识(上行)
2.4.4 地址结构
-
ASDU公共地址(Addr):
- 站地址:1-254(255为广播地址)
- 通常一对一通信,默认值为1
-
信息对象地址(IOA):
- 3字节
- IOA=000000H表示功能性报文(如总召、对时)
- 典型地址范围:
- 遥信:0001H-4000H
- 遥测:4001H-5000H
- 遥控:6001H-6100H
- 遥调:6201H-6400H
2.4.5 信息元素集
示例:单点信息(SIQ)解析:
- SPI(最低位):单点遥信状态(0=分,1=合)
- IV:有效性(0=有效,1=无效)
- NT:刷新标志(0=当前值,1=非当前值)
- SB:取代标志(0=正常,1=人工置数)
- BL:封锁标志(0=未封锁,1=封锁)
3. 典型通信流程
3.1 总召唤流程
- 主站下发总召命令
- 子站回复确认总召命令
- 子站上送信息
- 子站回复激活终止报文
报文示例:
-
总召激活:68 0e 04 00 1a 00 64 01 06 00 01 00 00 00 00 14
- 64: 总召类型标识
- 06: 激活总召
- 14: 总召信息元素(全局询问)
-
确认激活:68 0e 1a 00 06 00 64 01 07 00 01 00 00 00 00 14
-
子站上送单点信息:68 17 1c 00 06 00 01 8a 14 00 01 00 01 00 00 01...
- 01: 单点信息类型
- 14: 响应总召
- 010000: IOA地址01
- 01: SIQ(合位)
-
激活终止:68 0e 2a 00 06 00 64 01 0a 00 01 00 00 00 00 14
- 0a: 激活终止
3.2 遥控命令
3.2.1 控制方式
-
直接控制:
- 主站下发执行命令 → 子站回复确认执行
-
选择控制:
- 主站下发选择命令 → 子站确认选择
- 主站下发执行命令 → 子站确认执行
- 子站回复激活终止
3.2.2 单点命令示例
-
单点遥合:
-
激活预置:68 0e 0c 00 22 00 2d 01 06 00 01 00 01 60 00 81
- 2d: 单点命令
- 81: 合位(1) + 选择(1)
- IOA: 24577(0x006001)
-
确认预置:68 0e 22 00 0e 00 2d 01 07 00 01 00 01 60 00 81
-
激活执行:68 0e 0e 00 24 00 2d 01 06 00 01 00 01 60 00 01
- 01: 合位(1) + 执行(0)
-
激活终止:68 0e 26 00 10 00 2d 01 0a 00 01 00 01 60 00 01
-
-
单点遥分:
- 报文结构与遥合类似,最后一位改为00(分位)
3.2.3 双点命令示例
-
双点遥分:
-
激活预置:68 0e 08 00 1c 00 2e 01 06 00 01 00 01 60 00 81
- 2e: 双点命令
- 81: 低2位01(分位) + 选择(1)
-
激活执行:68 0e 0a 00 1e 00 2e 01 06 00 01 00 01 60 00 01
-
-
双点遥合:
- 报文类似,低2位改为10(合位)
3.3 时钟同步流程
- 主站下发时钟同步命令
- 子站回复确认
报文示例:
- 时钟同步激活:68 14 04 00 1e 00 67 01 06 00 01 00 00 00 00 ab b8 3a 10 0b 01 18
- 67: 时钟同步类型
- ab b8 3a 10 0b 01 18: 时间值(Jan 11, 2024 16:58:47.275)
3.4 复位进程流程
- 主站下发复位命令
- 子站回复确认
报文示例:
- 复位激活:68 0e 08 00 2e 00 69 01 06 00 01 00 00 00 00 01
- 69: 复位进程类型
- 01: QRP复位信息
4. 模糊测试策略
4.1 测试目标
针对IEC 60870-5-104协议的实现进行模糊测试,发现潜在漏洞。
4.2 测试方法
-
协议字段变异:
- APCI控制域异常值
- ASDU类型标识无效值
- 传送原因异常值
- 地址越界测试
-
报文序列测试:
- 异常序列(如未激活直接执行)
- 重复报文
- 序列号异常
-
边界值测试:
- 最大/最小长度APDU
- 极端时间值
- 特殊浮点数值
-
性能测试:
- 高频报文冲击
- 长会话测试
4.3 重点关注点
-
协议解析:
- 异常格式报文处理
- 长度字段校验
- 序列号处理
-
状态机测试:
- 非法状态转换
- 超时处理
- 并发操作
-
安全机制:
- 认证绕过
- 拒绝服务漏洞
- 内存破坏漏洞
4.4 工具建议
-
通用模糊测试工具:
- AFL
- Peach Fuzzer
- Sulley
-
协议专用工具:
- 基于Scapy的自定义脚本
- 协议模拟器(如OpenDNP3)
-
监控工具:
- Wireshark(带104解析插件)
- 目标系统日志监控
5. 总结
IEC 60870-5-104协议是电力系统关键基础设施的重要组成部分,其安全性至关重要。通过深入理解协议结构和典型通信流程,可以设计有效的测试策略来验证协议实现的健壮性和安全性。模糊测试作为重要的测试手段,可以帮助发现潜在的协议实现漏洞,提高系统整体安全性。