欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

工控安全入门(二)—— S7comm协议

来源:本站整理 作者:佚名 时间:2019-09-10 TAG: 我要投稿

在上一次的文章中我们介绍了施耐德公司的协议modbus,这次我们把目标转向私有协议,来看看另一家巨头西门子的S7comm。首先要说明,这篇文章中的内容有笔者自己的探索,有大佬们的成果,但由于S7comm是私有协议,一些结论和看法不可能完全正确,希望各位有认为不对的地方或是更好的看法可以评论告诉我。
ps:有些专业名词可能不对,因为没找到准确的翻译或者是根本没找到官方定义(毕竟是私有协议),笔者就自己起了名……
建议阅读本篇前首先阅读:工控安全入门(一)—— Modbus协议
 
S7comm简介
西门子是德国的一家超大型企业,在能源、工业、医疗、基建等等方面都有它的身影,同时它也位列全球500强第66名。作为一个以电报起家的大型企业,它对于通信更是重视,S7comm就是西门子为了它生产的PLC之间、SCADA与PLC之间的通信而设计的专属协议。
和Modbus的应用层协议不同,S7comm的协议栈修改程度更高,在应用层组织的数据经过COTP协议、TPKT协议的进一步处理后,最终通过TCP进行传输,下面是wireshark wiki给出的S7comm的协议栈:
OSI layer
Protocol
Application Layer
S7 communication
Presentation Layer
S7 communication(COTP)
Session Layer
S7 communication(TPKT)
Transport Layer
ISO-on-TCP (RFC 1006)
Network Layer
IP
Data Link Layer
Ethernet
Physical Layer
Ethernet
我们说的题目虽然是对S7comm的分析,实际上是对整个协议栈的探索。鉴于数据包逻辑上是由高层进行封装再一步步的转递给较低层,但我们接收到包后是低层一层层拆卸交给上层,基于逆向思维,我们之后的分析应该是由低向高展开的
 
TPKT协议
我相信大家对于传输层往下的内容应该比较熟悉了,都是TCP/IP的基本内容,我就不再赘述,直接从会话层来看。
TPKT协议是一个传输服务协议,它为上层的COPT和下层TCP进行了过渡。我们常用的RDP协议(remote desktop protocol,windows的远程桌面协议)也是基于TPKT的,TPKT的默认TCP端口为102(RDP为3389),其实它本身为payload增加的数据并不多,主要就是以下几个:

version,1byte,表明版本信息
reserved,1byte,看到这个名字就知道是保留的了
length,2byte,包括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 Fuction Packet)
首先来看COPT连接包,通过上面的wireshark的分析我们可以看到,主要有以下几个字段:
length,1byte,数据的长度,但并不包含length这个字段(个人感觉很奇怪……)
PDU type,1 byte,标识类型,图中的0x0d即为连接确认的类型,常有的还有
0xe,连接请求
0x0d,连接确认
0x08,断开请求
0x0c,断开确认
0x05,拒绝
DST reference,2byte,目标的引用,可以认为是用来唯一标识目标
SRC reference,2byte,源的引用,同上
option,1byte,可以看到wireshark将8位拆为了前四位和后两位:
前四位标识class,也就是标识类别
倒数第二位对应Extended formats,是否使用拓展样式
倒数第一位对应No explicit flow control,是否有明确的指定流控制
parameter,附加的参数字段,参数可以有多个,每个参数又由以下几个字段构成:
code,1byte,标识类型,主要有:
0xc0,tpdu的size,tpdu即传送协议数据单元,也就是传输的数据的大小(是否和前面的length有重复之处?)
0xc1,src-tsap,翻译过来应该叫源的端到端传输(在完整的TCP/IP协议栈中,这个字段代表的是应用与应用之间的通信,我这里猜测可能是为了),但从西门子给的手册来看,它标记的应该是机架号,可是不管我怎么查,也没有找到wireshark解析出的字符串。那么逆向我们找不到答案,就只能正向来了,在parameter字段的最后我们再来详细说这到底是个啥。

0xc2,dst-tsap,同上,之后我们再探索
length,长度
对应的数据
接着COPT功能包,其实个人感觉这两种包可以归为一种,但是看到文献都是分为两种的,那我们也就划分为两种吧

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载