西门子S7comm-plus通信过程及重放攻击分析
一、概述
西门子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为0×01和0×02,数据包中没有32位 Integrity part,当pdu type为0×03,数据包中有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]+0×80, s7comm_plus数据包第24位+0×80,如下图所示:
(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
西门子S7comm-plus通信过程及重放攻击分析相关推荐
- 从wireshake分析http和https的通信过程
参考文章: Wireshark基本介绍和学习TCP三次握手 [技术流]Wireshark对HTTPS数据的解密 Wireshark/HTTPS Journey to HTTP/2 以TCP/IP协议为 ...
- 30.jvm.gc(GC之详解CMS收集过程和日志分析)
30.jvm.gc(GC之详解CMS收集过程和日志分析) 30.1.话题引入 30.2.ParNew and CMS 30.3.日志 30.3.1.GC日志初体验 30.3.2.Minor GC 30 ...
- 【网络通信与信息安全】之深入解析两台主机之间的通信过程和原理
一.前言 本文通过在 Docker 容器中执行命令,来深入了解两台主机之间的通信过程.阅读完本文,您将熟悉以下内容: Docker 的基本操作: 创建 socket 并发送 HTTP 请求: 路由表. ...
- tcpdump 识别成dns_1.6.3 使用tcpdump观察DNS通信过程
1.6.3 使用tcpdump观察DNS通信过程 为了看清楚DNS通信的过程,下面我们将从ernest-laptop上运行host命令以查询主机www.baidu.com对应的IP地址,并使用tcpd ...
- TCP通信过程大讨论
转载地址:http://www.cricode.com/3568.html 本文通过两个图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道. ...
- IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析
IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析 1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低 ...
- 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)
更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,共同探讨软件知识经验,关注就有海量学习资料免费领哦: 目录 0背景 1.手机USB接口通信特点 1.1 使用方便 1.2 通用性强 1.3 ...
- 蓝牙协议分析(5)_BLE广播通信相关的技术分析
蓝牙协议分析(5)_BLE广播通信相关的技术分析 作者:wowo 发布于:2016-5-27 16:15 分类:蓝牙 1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广 ...
- SSL/TLS 通信过程
转载请以链接形式标明出处: 本文出自:103style的博客 目录 Wireshark抓包 Client Hello Server Hello.Certificate.Server Key Excha ...
最新文章
- iOS截取NSString字符串
- Strut2判断是否是AJAX调用
- java求职_Java 求职怎么积累知识才可以找到工作
- (JAVA)Random类
- 非常全面的阿里的Java面试题目,涵盖Java基础+高级+架构
- For in 详解
- JAVA RPC (六) 之thrift反序列化RPC消息体
- a king读后感 love of the_A华语电影高清合集
- 用python实现接口测试(八、实现序列化与反序列化)
- FKGE:合格的知识图谱嵌入已经学会保护隐私啦!
- PAT1021 Deepest Root
- 蓝桥杯 ALGO-27 算法训练 FBI树 Java版
- web.xml配置简介
- python进阶中文版_GitHub - lcm2179/Intermediate-Python: 《Python进阶》(Intermediate Python 中文版)...
- Linux下C语言编程资料
- linux系统下CPU利用率的计算
- MathType公式编辑器快捷键操作
- Qt设计的一个图片查看器
- 谷歌 浏览器二维码显示异常,形成的二维码无法被扫描
- 16 服务器无响应什么意思,dns电脑服务器未响应是什么意思如何处理