施耐德Tricon安全仪表系统TriStation通信协议浅析

  • A+
所属分类:安全文章

作者 | 彭广明、刘健飞、张晓明

1  概述

安全仪表系统(Safety instrumentation System,简称SIS)用于保障安全生产,其安全等级高于分散控制系统(DCS),当DCS出现异常时,SIS会进行干预,降低事故发生的可能性。SIS由传感器(如各类开关、变送器等)、逻辑控制器、以及最终元件(如电磁阀、电动门等)的组合组成。
Tricon SIS为施耐德电气公司的安全仪表系统,TriStation通信协议用于Tricon SIS中组态软件与安全控制器通信。由于工控恶意代码“海渊”(TRISIS)的影响,厂商对TriStation通信协议进行了相应的升级,本文主要针对升级后的TriStation通信协议进行研究。

2  环境配置

本次研究环境主要由组态软件以及控制系统硬件组成。具体配置如下:
组态软件:TriStation 1131 4.16.0
主要硬件:3009 Tricon Enhanced Performance MainProcessor(控制器 固件版本:v409.392.126)、TCM4351B(通信模块固件版本:v342.6428.0)

3  分析思路

由于无法获取控制器以及通信模块固件,本次研究主要基于组态软件逆向并结合通信流量对TriStation通信协议进行分析。

3.1查看程序行为

使用Process Monitor工具,查看TriStation 1131进程与Tricon控制器进行通信时的堆栈信息,寻找与通信相关的dll文件。
3.1.1 程序行为查看示例

施耐德Tricon安全仪表系统TriStation通信协议浅析

3.1.2 堆栈信息查看示例
查看UDP Send操作的堆栈窗口,可观察到dll调用顺序,大致为TS1131.exe -> TR1PIM.dll -> tr1com.dll -> ws2_32.dll。

施耐德Tricon安全仪表系统TriStation通信协议浅析

施耐德Tricon安全仪表系统TriStation通信协议浅析

3.2反编译通信dll

使用IDA反编译通信dll文件,结合Wireshark捕获的数据包进行报文解析,编写wireshark lua插件展示分析结果。
3.2.1 wireshark报文解析示例

施耐德Tricon安全仪表系统TriStation通信协议浅析

3.2.1 TCM层封装函数示例

施耐德Tricon安全仪表系统TriStation通信协议浅析

3.2.2 TS层数据封装函数示例
以Attach Tricon命令为例,函数调用路径为
Attach_Tricon -> CAPLTricon::SendRequest ->CAPLTricon::SendMessageA

施耐德Tricon安全仪表系统TriStation通信协议浅析

施耐德Tricon安全仪表系统TriStation通信协议浅析

施耐德Tricon安全仪表系统TriStation通信协议浅析

3.3动态测试

使用Debug工具进行动态调试分析,TriStation 1131程序具有反调试机制,调试时需要绕过该机制。另外需要注意的是 TriStation通信协议具有心跳检测机制,如果5秒钟内没有检测到心跳,当前会话将会失效。

施耐德Tricon安全仪表系统TriStation通信协议浅析

4  分析结果

4.1TriStation通信协议架构

TriStation通信协议基于UDP协议,使用UDP 1502端口,组态软件作为客户端,控制器作为服务端。经逆向分析并查阅其它相关资料,暂将应用层报文分TCM层以及TS层。TCM层主要负责建立/断开TCM连接、获取Session ID以及定期检测对端存活状态、封装/解封TS层数据。
TS层主要承载控制命令及其数据,TriStation 1131组态软件将控制命令封装到TS层,由TCM层封装后,通过UDP协议发送至控制器1502端口;接收控制器返回的数据后,先进行TCM层解封装,再交由TS层处理。

施耐德Tricon安全仪表系统TriStation通信协议浅析

4.2TriStation协议通信交互流程

施耐德Tricon安全仪表系统TriStation通信协议浅析

4.3TriStation通信报文解析示例

表1  connect请求/响应报文

施耐德Tricon安全仪表系统TriStation通信协议浅析

表2  Session Id请求/响应报文

施耐德Tricon安全仪表系统TriStation通信协议浅析

表3-1  GetCPStatus请求/响应报文

施耐德Tricon安全仪表系统TriStation通信协议浅析

表3-2  GetCPStatus请求/响应报文

施耐德Tricon安全仪表系统TriStation通信协议浅析

4.4TriStation协议特点总结

1、会话ID:服务端为每次会话生成Session ID,客户端获取到Session ID后需要将其填充到通信请求中的Session ID字段中。
2、包序号:每发送1个Kind Id为37的数据帧,包序号增加1。
3、数据包校验:目前发现的校验算法有5中,包括CRC16、CRC32、CRC32C以及厂商自定义的2种校验算法。TCM层的校验算法主要为CRC16、CRC32、CRC32C,TS层目前已发现2种自定义校验算法。
4、数据包分片:当TS层数据过长时,TS层将对数据进行分片。
5、数据冗余:TS层数据在通信数据包中会重复一次。
6、控制命令版本:同一个控制命令可能有若干个版本,不同版本的命令,命令参数会有所不同。

5  TriStation协议健壮性测试成果

根据当前协议分析结果,基于Acheron工业物联网测试平台,开发TriStation协议测试套件。已利用该套件发现一个拒绝服务漏洞,该漏洞可导致TCM4351B通信模块拒绝服务。在机架上的钥匙开关状态为RUN时,即可通过发送变异报文触发该漏洞。

施耐德Tricon安全仪表系统TriStation通信协议浅析

6  总结

TriStation协议复杂度较高,如对其进行安全性测试,需要正确计算数据包中的各处校验值,且使用正确的SessionID、序列号等信息。本次研究仅完成了TriStation协议的部分解析,希望对同行研究者有所帮助,不当之处还请批评指正。 

7  参考资料

[1] 安天发布针对工控恶意代码TRISIS的技术分析

https://mp.weixin.qq.com/s/motXGMqZ4Fz2F0QB84yjgQ

[2] TriStationdissector and Triconex Honeypot

https://github.com/NozomiNetworks/tricotools

[3] TRISIS /TRITON / HatMan Malware Repository

https://github.com/MDudek-ICS/TRISIS-TRITON-HATMAN



原文来源:关键基础设施安全应急响应中心

施耐德Tricon安全仪表系统TriStation通信协议浅析

本文始发于微信公众号(网络安全应急技术国家工程实验室):施耐德Tricon安全仪表系统TriStation通信协议浅析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: