一、概述

西门子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通信过程及重放攻击分析相关推荐

  1. 从wireshake分析http和https的通信过程

    参考文章: Wireshark基本介绍和学习TCP三次握手 [技术流]Wireshark对HTTPS数据的解密 Wireshark/HTTPS Journey to HTTP/2 以TCP/IP协议为 ...

  2. 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 ...

  3. 【网络通信与信息安全】之深入解析两台主机之间的通信过程和原理

    一.前言 本文通过在 Docker 容器中执行命令,来深入了解两台主机之间的通信过程.阅读完本文,您将熟悉以下内容: Docker 的基本操作: 创建 socket 并发送 HTTP 请求: 路由表. ...

  4. tcpdump 识别成dns_1.6.3 使用tcpdump观察DNS通信过程

    1.6.3 使用tcpdump观察DNS通信过程 为了看清楚DNS通信的过程,下面我们将从ernest-laptop上运行host命令以查询主机www.baidu.com对应的IP地址,并使用tcpd ...

  5. TCP通信过程大讨论

    转载地址:http://www.cricode.com/3568.html 本文通过两个图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道. ...

  6. IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析

    IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析 1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低 ...

  7. 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,共同探讨软件知识经验,关注就有海量学习资料免费领哦: 目录 0背景 1.手机USB接口通信特点 1.1 使用方便 1.2 通用性强 1.3 ...

  8. 蓝牙协议分析(5)_BLE广播通信相关的技术分析

    蓝牙协议分析(5)_BLE广播通信相关的技术分析 作者:wowo 发布于:2016-5-27 16:15 分类:蓝牙 1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广 ...

  9. SSL/TLS 通信过程

    转载请以链接形式标明出处: 本文出自:103style的博客 目录 Wireshark抓包 Client Hello Server Hello.Certificate.Server Key Excha ...

最新文章

  1. iOS截取NSString字符串
  2. Strut2判断是否是AJAX调用
  3. java求职_Java 求职怎么积累知识才可以找到工作
  4. (JAVA)Random类
  5. 非常全面的阿里的Java面试题目,涵盖Java基础+高级+架构
  6. For in 详解
  7. JAVA RPC (六) 之thrift反序列化RPC消息体
  8. a king读后感 love of the_A华语电影高清合集
  9. 用python实现接口测试(八、实现序列化与反序列化)
  10. FKGE:合格的知识图谱嵌入已经学会保护隐私啦!
  11. PAT1021 Deepest Root
  12. 蓝桥杯 ALGO-27 算法训练 FBI树 Java版
  13. web.xml配置简介
  14. python进阶中文版_GitHub - lcm2179/Intermediate-Python: 《Python进阶》(Intermediate Python 中文版)...
  15. Linux下C语言编程资料
  16. linux系统下CPU利用率的计算
  17. MathType公式编辑器快捷键操作
  18. Qt设计的一个图片查看器
  19. 谷歌 浏览器二维码显示异常,形成的二维码无法被扫描
  20. 16 服务器无响应什么意思,dns电脑服务器未响应是什么意思如何处理

热门文章

  1. JGG:青岛大学苏晓泉团队利用条件致病菌指数评估环境微生物风
  2. 这篇纯数据分析文章被拒8次,发到行业顶刊
  3. 1.13 编程基础之综合应用_14求满足条件的3位数 python
  4. 第43课 最大公约数 《小学生C++趣味编程》
  5. 解决jQuery聚焦时光标在input最前面的问题
  6. 单条MySQL最长_MySQL 单条记录长度最大65535
  7. 信息安全工程师-AES密码技术及XOR图像遮盖技术(JavaC++)
  8. 编码风格工作笔记-初步模仿大佬编码风格
  9. MySQL入门之视图
  10. 4.3串的模式匹配算法(BF算法)