前言:
随着施耐德(Schneider)新款的Modicon M340可编程控制器集各种强劲功能和创新设计于一身,为复杂设备制造商和中小型项目提供各种自动化功能的最佳技术和高效、灵活、经济性的解决方案。且Modicon M340充分支持工业和基础设施自动化控制系统的“透明就绪”架构,成为Modicon Premium和Quantum系列产品线的最佳拓展。在灵活强大的Unity软件配合下,备受众多企业的喜爱。
随着前几篇对Modbus PLC的读写介绍,相信大家对Modbus协议已经比较熟悉了,这次我为大家演示Schneider的PLC M340停启操作以及中间涉及的流量分析。

M340介绍:
施耐德在整合了Modicon和TE品牌的自动化产品后,将Unity Pro软件作为未来中高端PLC的统一平台。支持Quantum、Premium和M340三个系列。施耐德大型PLC以昆腾系列为代表,中型的有Premium、Momentum、M340等,小型的有Twido等。
如今的控制系统和工厂自动化系统,以太网的应用几乎已经和PLC一样普及。且施耐德M340采用了以太网的网口连接方式,通过以太网不仅可以下载程序,也可以用于与第三方设备进行以太网通讯,以及运用在PLC与PLC之间的数据交换。当然,大容量的内存、高可靠性、高性能金属机架、内置WEB服务器和支持热插拔功能等多数优点,已让M340使用越来越广泛。

停启准备:
其实想偷个懒,找了一大堆资料,也没找到关于新的PLC M340停启的Exploit,都是关于老版本Quantum系列140的,如下图那种,并不想用这个,因为140可能快停产了,M340、M580才是现在厂家大力推广的用来替代140的新产品。最后一脸坦然……好吧,是越想越气,没办法,只能自己动手了,最直接的办法,用上位机的编程软件进行停启再抓包进行流量分析,提取停启的数据包再自己来验证。

抓取流量:
这一步比较简单,我开启wirkshark实时抓取流量后,找到Schneider编程软件连接上的M340,然后点击下图中的STOP按钮,停止PLC M340。

因为PLC的编程软件部署在上位机上,所以我抓取到了上位机和M340的通信流量,如下图所示:

分析流量:
首先需要讲清楚,关于Modbus读写线圈和寄存器,是不需要通过任何通信验证的,而关于Modbus PLC的停启,是需要引入Session Key这个概念的。Session Key 是会话使用的 Session 值,如果 Session 值不正确,则PLC会直接主动终止通信。FCcode 是 Modbus 协议的功能码,施耐德默认使用 0x5a 即 90 作为通信的功能码。下图是 Modbus 协议数据格式:

那大家会问了,Session值是怎么来的呢,当我们想停启PLC的时候,PLC会主动返回(Response)一个Session值给我们,我们需要找到那个数据包,查看在Data里面,最后两位十六进制0x33,这个就是Session 值:

那我怎么判定这个数据包携带的就是Session值呢,请看下图,红色代表上位机请求包,蓝色代表返回包,当1中返回携带了0x33这个Session值之后,之后2中所有红色的请求包都会带上0x33这个Session值,在抓取到的数据包中很好找,下图是我使用wireshark追踪TCP流看到的:

停启M340:
当我们获取到Session ID之后就很简单了,可以通过任意一台能连接PLC设备的电脑发送控制CPU停启的命令,下面是我用python通过socket模块简单构造的一个数据包,其中0x33是之前抓包得到的Session ID,41功能码代表关闭停止PLC,40功能码代表的是开启PLC,发送后成功关闭PLC:

下方是Modbus部分常用的功能码,大家可以了解下:

读写线圈和寄存器:
停启的讲完了,我想还是再补充一些读写线圈和寄存器的流量是啥样的吧,也是很有意思的。
众所周知,Modbus 协议使用串口传输时可以选择RTU或ASCII模式,并规定了消息、数据结构、命令和应答方式并需要对数据进行校验。ASCII 模式采用LRC校验,RTU模式采用16 位CRC校验。但是通过以太网传输时使用TCP,这种模式不使用校验,也就是上述说的只要能连接上就能读取线圈和寄存器。
下图是我读取线圈抓取的流量包:
1、选择读取的UID为1
2、Function Code:Read Coils读取线圈
3、右边是PLC返回的包,显示线圈里的值

下图是我写入寄存器的流量包:
1、选择写入的UID为1
2、Function Code:write Single Register写入单个寄存器
3、Data为0x08代表写入的值是0x08

总结:
由我上述的演示可以看出,Modbus 协议通信过程中,地址和命令全部采用明文传输,因此数据可以很容易的被攻击者捕获和解析,为攻击者提供便利。同时在Modbus 协议通信过程中,没有任何认证方面的相关定义,攻击者只需要找到一个合法的地址就可以建立一个Modbus 通信会话,轻易发送任意功能码进行攻击,而其中的Session值也很容易获取。
这些都是根本上Modbus协议的安全问题,我们只能通过一些外部措施来进行保护和防御,例如使用Modbus 系统专用的异常行为检测设备和即时更新使用最新的PLC固件和软件等,来提高Modbus系统的安全性。

​如果想了解更多安全知识,或者有问题,都可以关注以下公众号,私信我:

Modbus安全:M340停启和流量分析相关推荐

  1. 网络异常_网络异常易频发,流量分析来排查

    随着网络技术的飞速发展,越来越多的客户将关键业务迁移到网络之上,大量不同类型的网络设备应用于网络的构建中,一方面扩展了网络的业务种类,另一方面提高了故障出现的概率.如何保障关键业务持续高效.稳定的运行 ...

  2. 2021年中国工业互联网安全大赛核能行业赛道writeup之usb流量分析

    目录 一.USB协议 二.键盘流量 三.鼠标流量 四.writeup 附件题:usb流量分析 题目描述: 具体描述忘记了o(╯□╰)o 大概意思是有个U盘插到电脑上,然后经过一些操作导致该电脑重启了. ...

  3. 如何使用 Druid 和 Kafka 构造 Kappa 架构完成流量分析

    NTT 是一家全球电信公司,总部设在日本东京.在<财富>世界 500 强中,NTT 是世界第四大电信公司.NTT 通信 (NTT Com) 是 NTT 的子公司,其全球 IP 网络 (GI ...

  4. wireshark tcp data中文_wireshark流量分析入门

    点击蓝字关注我们吧! wireshark流量分析入门 打开wireshark后,按ctrl+K,勾选需要抓包的网卡,我这里勾选WLAN. 点击Start开始抓包. wireshark过滤器表达式 协议 ...

  5. 企业为什么需要网络流量分析

    摩卡网络流量分析(Mocha Network Traffic Analyzer)是一个综合网络分析系统,它通过捕获并分析网络中传输的数据包,有效反映网络通讯状况,帮助网络管理人员或非网络管理人员快速准 ...

  6. 网络管理员在预先分配和识别作为_14个网络管理员必备的最佳网络流量分析工具,收藏了...

    企业网络每天都会产生大量数据.企业可以分析这些数据,以深入了解网络运行情况或发现安全威胁.网络流量分析(NTA)解决方案允许网络管理员收集流经网络的流量数据.这些工具通常用于识别性能问题和/或发现安全 ...

  7. 数据分析方法论2——流量分析

    一.背景 有了指标体系和报表之后,最重要的事情就是每天看各种数据了,这也就是流量分析 流量分析:流量指的是广义的流量,从哪里来,经过什么,产生什么价值,如果它波动了,为何波动 1)渠道分析--从哪里来 ...

  8. CTF——MISC——流量分析

    目录 一.流量包修复 二.协议分析 三.数据提取 例题: 1,题目:Cephalopod(图片提取) 2,题目:特殊后门(icmp协议信息传输) 3,题目:手机热点(蓝牙传输协议obex,数据提取) ...

  9. 流量分析_安恒八月月赛

    前言: 流量分析很有意思,之前忙于考试,暂时没有学习了,考试结束了就来总结一下一些CTF下常见的流量分析的题型. 0x00:流量包修复 使用wireshark打开流量包发现报错,可以使用在线pacp包 ...

  10. 网络安全模型_基于数据驱动的网络安全流量分析总结

    导读 网络和社交流量分析是检测和防御网络攻击的基础.随着数据集的日益剧增,手工定义规则的传统方法逐渐被机器学习(ML)方法替代,这是因为ML有更好的工作性能.在数据驱动的研究背景下,通过研究社交流量和 ...

最新文章

  1. 25元、264KB内存的微处理器,树莓派官方出品,自带快速休眠模式
  2. jboss1.7_快速指南:剖析JBoss BPM跨进程通信
  3. opencv图像遍历方法速度对比
  4. ansible roles和django项目的整合
  5. LeetCode每日一题 844. 比较含退格的字符串
  6. Flutter实战一Flutter聊天应用(十九)
  7. 外连接OUTER JOIN(三十五)
  8. go语言学习---数据类型、运算符、表达式
  9. 如何安全的使用密码登录账号(在不知道密码的情况下)
  10. 统计分析——假设检验、中心极限定理
  11. 微信视频压缩画质怎么办?微信发视频怎么不压缩画质
  12. java里dialect_iBatis3基于方言(Dialect)的分页
  13. 信用卡收单业务--银行业务(七)
  14. java获取环境变量路径/java获取环境变量和系统属性
  15. 搜狗输入法状态栏闪烁解决办法
  16. php kingcms 模型调用,KingCMS PHP版安装使用教程(多图)
  17. python长整型怎么用_Python整型运算之布尔型、标准整型、长整型操作示例
  18. Windows定时开启或关闭声音音量
  19. android私密照片恢复,如何恢复手机删除照片? 超实用操作方法!
  20. UVM实战windows下运行

热门文章

  1. 禁用安全模式小方法!!~
  2. java爬虫微信公众号信息_微信公众号爬虫项目(reptile)
  3. 斐波那契数列——O(1)算法
  4. 帝国cms免登陆生成html,帝国cms7.5免登陆发布模块
  5. java对话框可以设置颜色吗_java文本域颜色设置对话框.doc
  6. html 页面循环判断值,变量交换,判断有值、数字,for循环.html
  7. java fso_asp之FSO大全
  8. 如果一台通用计算机的,一台计算机,之所以有相当的灵活性和通用性,能解决许多.doc...
  9. 概率论与环境数理统计 20210222
  10. DWR怎么调用java的方法_在DWR中实现直接获取一个JAVA类的返回值的两种方法