前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >西门子S7comm-plus通信过程及重放攻击分析

西门子S7comm-plus通信过程及重放攻击分析

作者头像
FB客服
发布2019-12-27 11:29:52
1.6K0
发布2019-12-27 11:29:52
举报
文章被收录于专栏:FreeBufFreeBuf

一、概述

西门子PLC广泛应用于工业控制系统。本文主要利用手上S7-1200 V3.0.2 固件版本的PLC和TIA13等环境进行S7comm-plus加密协议初步分析及防重放攻击分析,本文章只做交流学习使用,禁止应用于非法用途,欢迎各路大神进行交流,共同学习进步。

二、西门子PLC介绍

西门子PLC广泛应用于工业控制系统。西门子控制器包括S7-200、S7-300、S7-400、S7-1200以及S7-1500版本的西门子PLC,

S7-200、S7-300、S7-400系列的PLC采用早期的西门子私有协议S7comm进行通信。S7-1200/1500系列固件版本为V3.0以下的PLC采用西门子新一代的S7comm-Plus协议进行通信,该协议采用了一些特殊编码规范。S7-1200/1500系列固件版本为V3.0以上,采用了最新的S7comm-Plus协议,S7comm-plus协议引入了会话ID来防止重放攻击。

查看S7 plc系列有哪些型号及对应的固件版本,可以参考下图。

三、协议分析

3.1协议结构

S7Comm-plus以太网协议基于OSI模型如下:

通过抓包分析和wireshark源码解析,可以知道S7Comm-plus协议的帧结构大致由头部、数据域、和尾部组成,头部和尾部是固定的,而数据域对不同的帧结构和内容均有很大的差异。帧结构示意图如下图所示:

3.2 头部和尾部分析

Header和Trailer的组成是一样的,包含协议号、PDU类型和数据长度信息,其结构如下图所示:

其中头部和尾部的结构一致。Protocol id为一个字节、 PDU type 为一个字节Length为双字节。PDU type定义了该帧的类型。

3.3 数据域分析

Data域是帧结构中最复杂也是变化最多的区域,通过分析可以将Data域分为Integrity part 、D_header和Data三个部分。具体结构如下图所示:

(1)D_Head

当PDU type为0x01和0x02,数据包中没有32位 Integrity part,当pdu type为0x03,数据包中有32位Integrity part;在数据头中有两处reseved和一处unknown部分,对于不同的帧其值是不一样的,从wireshark抓包数据分析,其值分布如下所示:

(2)Data

data部分的结构、内容及格式与PDU type和opcode有关,Data部分情况种类多、较为复杂,详细分析可以阅读wireshark s7comm-plus协议解析代码。

四、防重放攻击分析

4.1 环境安装

(1) PC1(192.168.10.101):安装博图软件TIA13,用于连接S71200 plc设备,并进行启停PLC CPU控制,主要用于抓包分析,博图软件添加正确的PLC设备、并配置好PLC网络地址,确保能连接成功,如下所示:

(2)PLC (192.168.10.53):6ES7 214-1AG31-0xB0 V3.0.2,如下所示:

(3) pc2 (192.168.10.100): 该主机主要进行重放攻击实验。

4.2 抓包分析

(1)离线模式下,点击博图软件stop 和 start 按钮,进行抓包分析。

返回session id,以后每次请求均要带上该session id,达到防止重放攻击目的。

Stop 和 start cpu 启停包长的均为121字节,操作成功响应数据包为84字节

信息泄露,不知道为什么这么设计,需要返回设备信息。

(2)session id 计算方式,s7comm_plus[24]+0x80, s7comm_plus数据包第24位+0x80,如下图所示:

(3)stop cpu 指令分析,主要是AddressList和ValueList, 值为00000034019077000801, 将 值修改为00000034019077000803 则为 start cpu 指令

五、实施重放攻击

经过上面分析,只要获取到session id,并在每次请求plc的时候,添加上session id即可绕过S7comm-plus防重放攻击,编写如下验证代码,并抓包分析,观察现象:

运行以上代码,重放攻击成功,当进行stop时,plc RUN/STOP 灯显示黄色,当进行start cpu时候,RUN/STOP 指示灯显示绿色,如下所示:

重放攻击抓包分析如下所示:

六、总结分析

在实验过程中还发现两处问题,当完成COTP 连接后发送的第一个S7comm-plus CreateObject 数据包可以获取到plc的相关信息,造成信息泄露,可以推出cpu型号及固件版本,攻击者可以利用这些信息开展进一步攻击。另外,当TIA13软件在线连接上PLC,启停脚本失效,应该是PLC只允许一个工程师站客户端进行连接的原因。

相关资料文档如下:

1、工控资产嗅探与分析(S7 PLC) https://www.freebuf.com/articles/ics-articles/209786.html 2、西门子S7Comm协议分析 https://laucyun.com/3aa43ada8cfbd7eca51304b0c305b523.html#6-2-1 3、西门子S7-1200 CPU控制分析: https://github.com/dark-lbp/isf 4、西门子S7通信过程及重放攻击分析: https://www.freebuf.com/articles/ics-articles/212283.html# 5、刺穿S7CommPlus协议安全保护机制的长矛 https://www.freebuf.com/column/197267.html 6、S7comm_plus wireshark解析代码 https://github.com/QingChenHT/S7COMMM-Plus

*本文原创作者:yy0308,本文属于FreeBuf原创奖励计划,未经许可禁止转载

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、西门子PLC介绍
  • 三、协议分析
    • 3.1协议结构
      • 3.2 头部和尾部分析
        • 3.3 数据域分析
        • 四、防重放攻击分析
          • 4.1 环境安装
            • 4.2 抓包分析
            • 五、实施重放攻击
            • 六、总结分析
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档