2024年1月4日

MESSCADA下的数据采集西门子S7comm协议分析

作者 admin

大家好,我是智造之家的主人小智~

 

由于工控领域协议众多,大家在做MES或者SCADA项目的时候,总会因为各种协议而头疼。 上次我们介绍了Modbus、串口通讯等(以下链接只在微信公众号有效)

Modubs的RTU、ASCII、TCP你还不懂吗?这将是你见过的最全面的解析

浅谈串口通讯(232、485、422)及MES、SCADA、PLC项目中的常见问题

MES下的数据采集——扫描仪串口通讯

对于熟悉西门子的朋友来说,了解S7comm协议是必不可少的。 今天我们就对S7comm进行简单的分析

S7comm简介

西门子是德国的一家超大型公司。 在能源、工业、医疗、基础设施等领域都有涉足,在世界500强中也排名第66位。作为一家以电报起家的大型企业,它非常重视通讯。 S7comm是西门子专为PLC之间以及SCADA与PLC之间的通讯而设计的协议。

与Modbus应用层协议不同,S7comm协议栈修改程度更高。 应用层组织的数据经过COTP协议和TPKT协议进一步处理后,最终通过TCP传输。 下面是wireshark wiki栈给出的S7comm协议:

OSI层协议应用层S7通信表示层S7通信(COTP)会话层S7通信(TPKT)传输层ISO-on-TCP (RFC 1006)网络层IP数据链路层以太网物理层以太网

我们说的题目虽然是对S7comm的分析,但实际上是对整个协议栈的探索。鉴于数据包是经过上层逻辑封装,然后一步步转发给下层的,但是我们收到数据包后,下层会逐层拆解交给上层。 基于逆向思维,我们后面的分析应该是从lower层开始的。 高扩展

TPKT协议

传输层下面的内容相信大家应该都不陌生,都是TCP/IP的基本内容,就不赘述了,直接看会话层。

TPKT协议是在上层COPT和下层TCP之间转换的传输服务协议。 我们常用的RDP协议(远程桌面协议,windows远程桌面协议)也是基于TPKT的。 TPKT 的默认 TCP 端口是 102(RDP 是 3389)。 其实它并没有在payload中加入多少数据,主要有如下几个:

网络流量采集

再来看看我们之前分析过的2018年工控大赛的流量包。

网络流量采集

可以看到版本号是3号,长度是31,除此之外这一层没有任何有用的信息

COPT协议

COPT协议的全称是Connection-Oriented Transport Protocol,即面向连接的传输协议。 从这个名字就可以看出它的传输必须依赖于连接,所以在传输数据之前必须有一个类似于TCP握手建立链接的操作。 .

先来看看具体的流量套餐

网络流量采集

首先是TCP的三次握手。 在 192.168.25.146 和 192.168.25.139 之间建立了 TCP 连接,随后是两个 COTP 数据包。 注意这里wireshark给我们标记了CR和CC,后面的COTP包都是DT。 这里的CR和CC其实分别是connect request和connet confirm,也就是建立连接的过程。 连接建立成功后,发送一个DT包,即data,就是发送数据。

我们来看看他们携带的数据

网络流量采集

可以看出DT包和连接包明显不同。 连接包显然有很多内容。 这实际上是COPT包的两种形式,COTP连接包(COTP Connection Packet)和COTP功能包(COTP Function Packet)。

先看COPT连接包。 通过上面wireshark的分析,我们可以看出主要有以下几个字段:

DST reference,2byte,target reference,可以认为是唯一标识目标的src reference,2byte,source reference,同上option,1byte,可以看到wireshark将8位拆分为前四位和后两位: parameter,附加参数字段,可以有多个参数,每个参数由以下字段组成:

然后是COPT功能包,其实我个人觉得这两个包可以归为一类,但是看到文档分为两个,那我们就分成两个吧。

到目前为止,我们已经彻底分析了 COPT 包。 当然,还有一个小问题。 参数中的tsap是什么? 有哪些我们似乎不理解的参数? 既然逆向行不通了,我们再来看看正向发展,看看到底是个什么东西。 下面使用Simatic NET软件(做的时候忘记截图了。。。图片来自)。

我们在本地配置了一个OPC服务器(OPC服务器可以理解为一个进行协议转换的设备),目的是实现它与PLC的通讯。 我们选择使用以太网,分别配置机器的ip地址和子网。

台湾atm机采集设备_网络流量采集

然后我们输入详细的地址,发现TSAP和RACK/SLOT两个重要的选项。 在实际操作中,我们发现RACK是指CPU的机架号,SLOT是指CPU的插槽号。 通过这两个参数我们可以唯一指定一个CPU。

是说明书写错了吗? 这怎么可能? 毕竟他们也是大厂,玄机就在这个TSAP。 实际上它由三部分组成:

如图,我们给OPC server配置12.11,即双向通讯,rack 1的slot 1,而PLC是03.02,单向通讯,rack 0的slot 2。那么问题又来了,这与我们流量中的数据包完全不同!

网络流量采集

数据包是SNOPCCxxxx,怎么解释? 这根本不符合我们上面的描述。 这其实是另一种连接方式,叫做S7优化连接。 与之前的连接方式相比,这种连接可以以符号的形式访问数据块。

里面规定src-tsap是SNOPCC000x000xxx,第一个x我没看懂代表什么,第二个是连接数,图中有连接,dst-tsap必须是SIMATIC-ROOT-OTH。 刚好对应我们的数据包。 所以我们分析的数据包应该是单向连接,连接数是一个。

到目前为止,我们可以说 COPT 是精确到位的。 虽然还有一些瑕疵,但总体来说是没有问题的。

S7通讯协议

终于来到了最终的S7comm协议,它的结构很简单,主要分为三部分:

网络流量采集

首先我们来看看这个Header的奥秘。

工控数据采集设备_台湾atm机采集设备_网络流量采集

具体的错误类型和错误码可以自己搜索一下,因为太多了,这里就不一一解释了。参数取决于不同的pdu类型,这里就不说了,拿看看具体的流量套餐

工控数据采集设备_网络流量采集

可以看出pdu是一个job,也就是master设备在下命令,通过参数可以看出函数是0x04 read,也就是读取数据,item count表示几项后面都有,pdu只有一个。 所以是1。而且这一项的结构还得单独说一下:

网络流量采集

首先,它定义了格式为Address data S7-Any pointer-like DBx.DBXx.x,然后指定读取“某物”作为设备的输出,读取大小为word。 其实到这里这个pdu的所有信息就分析完了,但是为了让大家更好的理解上面定义的格式,还是继续看吧。

它读到的DB号是0,所以按照格式是DB0.DBXx.x,读到的地址是Byte是0,Bit是0,也就是DB0.DBX0.0,如果我们指定“something ” 作为一个数据块,以这种格式读取。 这就是格式的意思。 例如,0xb2 被描述为 S7-1200 的 Symbolic 地址模式。 其实格式就是符号地址,不再是这种组织形式了。

工控数据采集设备_台湾atm机采集设备_网络流量采集

我们先看看前面pdu的响应。 标题未在此处的屏幕截图中捕获。 header最值得注意的是pdu的类型。 这里是0x03,就是我们之前提到的job的response。

在paramter部分可以看到,功能和job pdu一样。 数据部分是返回的具体数据。 return code为返回码,用于标识job的结果。 这里是0xff,表示成功。 除此之外,还有以下几种:

接下来是数据的长度(真正数据的长度,不包括前面),最后是具体的数据,可以看到,这里读到的是0x0000。

至此,我们对S7comm协议已经了解的差不多了,下面来说说正题。

2018年工业信息安全技能大赛(东北赛区)工业协议数据分析

因为2019年的题目和S7comm有关,我们上次已经做过了,所以这次换了个题目。 首先我们来看一下流量包。

台湾atm机采集设备_工控数据采集设备_网络流量采集

可以看到很多协议,不过刚才总体思路还是很清楚的,首先是ARP协议找mac地址(如果不知道arp就补充一下计算机网络知识吧。。。),其次是标准的TCP三次握手,然后就是COPT的连接建立(或者我以后要不要让他握两次手?),接下来就是S7comm和modbus来做具体的工作了。

我们可以看到这个job和我们之前的不一样,打开仔细看看

网络流量采集

可以看出参数中的函数是0xf0,表示建立通信。 这个其实有点类似于上面的TCP和COPT,都是在两个设备之间建立通信,参数的主要信息是MAX AMQ calling和MAX AMQ called。

后面的ack_data的pdu自然是对应建立通信的意思。 TCP握手后,COPT建立连接,S7comm建立通信,设备间通信正式建立。

以后S7comm可以看到是读的,也就是读数据,数据包和上面说的一样,这里不再赘述。 查找后,没有flag。

这时候就要考虑modbus协议中是否有flag。 这时候就必须要用到之前的modbus技巧了。 功能码1、2、3、4不具备大规模取数据的能力,flag一般在它们之外。 ,进行简单的过滤,打印出相应的数据就ok了

上一篇的脚本大家还是可以用的,这里就不放了,需要的直接去上一篇拿(不计字数)。

最后的标志是 modbusICSsecurityWin

总结

S7comm作为一个私有协议,其实还有更多的疑问,而且因为是私有协议,所以很多地方还是有挖掘空间的。 本文只是带着大家按照我的思路从头分析S7comm。 书的每一部分肯定有不准确的地方,一定有没有考虑到的细节。 希望大家能走得更远,探索更多的秘密。