热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ModbusPLC攻击分析:从ModbusPoll/Slave到M340

前言:工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网

前言:
工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus 就是工业控制器的网络协议中的一种。在2004年,中国国家标准委员会正式把Modbus作为了国家标准,开启了Modbus为中国工业通信做贡献的时代。
本文主要研究Modbus Poll/Salve模拟器的使用以及对Schneider(施耐德)PLC M340的连接测试,文中涉及一些测试思路可能存在不严谨之处,欢迎大家指正哈。

协议介绍:
Modbus一种应用层消息传递协议,位于OSI模型的第7级,提供在不同类型的总线或网络上连接的设备之间的客户端/服务器通信。Modbus传输方式包括ASCII、RTU、TCP三种报文类型,协议本身并没有定义物理层,只是定义了控制器能够认识和使用的消息结构,通过对数据的校验来区分。文中均采用Modbus TCP协议来进行通信。
在这里插入图片描述

这里我主要介绍一下文中涉及的概念以及小伙伴们必须知道的Modbus的基础知识,详细的概念我就不展开介绍了,大家可以阅读:
https://www.freebuf.com/articles/ics-articles/148637.html
下表是由Modbus从设备提供给Modbus主设备的对象类型的表:
Object type Access Size Address Space
线圈Coil Read-write 1 bit 00001 - 09999
离散输入Discrete input Read-only 1 bit 10001 - 19999
输入寄存器Input register Read-only 16 bits 30001 - 39999
保持寄存器Holding register Read-write 16 bits 40001 - 49999

模拟器介绍:
要介绍Modbus的模拟器,就得从它的通信方式开始介绍了。Modbus使用一种简单的Master and Slave主从协议进行通信。客户机作为主站,向服务器发送请求;服务器(从站)接到请求后,对请求进行分析并作出应答。一般使用上,监控系统(HMI)都为Master,而PLC、电表、仪表等都为Slave。
所以,模拟器Modbus Poll就是Master,Modbus Slave就是Slave,和S7系列模拟器的Client和Server是一个道理。
在这里插入图片描述下载链接:https://www.modbustools.com/download.html

模拟器连接:
接下来就是实际连接啦,首先我们设置好我们虚拟的PLC(Modbus Slave),如下图所示:
1、点开上方connection,选择了连接协议为Modbus TCP/IP
2、默认地址为127.0.0.1无需设置,到时候Modbus Poll就连这个地址,其他的端口为502和Ipv4默认。
3、ID默认为1,是Slave的设备地址,F=03代表03的功能码
4、设置好一些供Poll读取的数据
在这里插入图片描述

如下图所示,这是Modbus Poll连接好Slave的示意图,也读取到了Slave中设置好的寄存器的值,其中Tx=112代表向PLC发送数据帧的次数,Err =0代表通讯错误次数,互相连接上之后就不会再出现No connection的红字。
在这里插入图片描述

因为Modbus能访问一条数据链路上的254个设备,Poll也支持读写同时来自不同设备的不同数据内容。下图显示了两个打开的窗口,从从站ID 1读取10个保持寄存器,从从站ID 2读取10个保持寄存器。
在这里插入图片描述

模拟器之间的连接就暂时只讲这么多,其实还有很多功能,例如读取输入寄存器和线圈、监控数据流量等,这些在接下来主要讲连接Schneider的PLC设备的时候具体说。

Modbus Poll 连接Schneider M340:
和西门子PLC需要编程软件博途一样,这次Schneider(施耐德)PLC在上位机部署的编程软件用的是EcoStruxure Control Expert 来连接M340设备,如下图所示:
在这里插入图片描述

Modicon M340是全球能效管理专家施耐德电气于2007年推出的高性能中型PLC平台,拥有“精巧、可靠、创新、易用、高性价比”等诸多新亮点,适用于中小型项目、复杂机械及过程装备,实验对象如下图所示:
在这里插入图片描述
首先我们先在编程软件上查看PLC的IP地址,用于Modbus Poll的连接:
在这里插入图片描述

接着我们通过之前的叙述了解到模拟器连接Slave(PLC)需要知道设备ID ,所以需要特地查看一下:
在这里插入图片描述

然后我们选择读取AI:Analog Input(模拟输入,输入寄存器)中的值,如下图所示:
在这里插入图片描述

最后通过对Modbus Poll设置好连接PLC的IP、ID以及Function进行设置,最终连接到M340的寄存器区域读取到数据。
在这里插入图片描述

总结:
由上述可见,虽然Modbus 协议获得了广泛的应用,但是在实现具体的工业控制系统时,安全问题在却很少被注意到。首先,TCP /IP 协议自身存在的安全问题不可避免地会影响到工控网络安全,例如中间人攻击,拒绝服务等攻击手段都会影响到Modbus系统安全,还有Modbus本身缺少身份认证,功能码滥用等问题都需要注意。这些安全问题都需要通过安全设计、安全审计和入侵防御等安全措施进一步深入的解决。
本篇文章是对Modbus PLC基础性的研究,主要关于模拟器的使用以及连接使用PLC的一些基本概念。后续会对Schneider PLC进行更深入的探讨,主要关于Modbus专门的Smod渗透框架研究以及Modbus流量分析等。

​如果想了解更多安全知识,或者有问题,都可以关注以下公众号,私信我:
在这里插入图片描述


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
author-avatar
晓小墨_641
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有