freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Modbus PLC攻击分析:Smod渗透框架研究
2020-05-27 08:00:48

前言:

Modbus 是由Modicon公司1979年发行的,已经被广泛应用于工业控制现场的应用层协议,如Modbus协议已被广泛应用于在监控和控制现场设备。Modbus协议最初是通过串行数据进行通信的,也就是Modbus Serial协议。随着工业现代化的发展,产生了Modbus TCP协议,即通过与TCP协议相结合来发送和接收Modbus Serial数据。Modbus的出现是为了使工业现场设备实时地接收和发送相关命令和数据,然后最重要的安全措施在Modbus的设计之初并没有被考虑进去。

通过前一篇对Moubus模拟器的使用和基础知识的理解,本文主要深入研究Modbus专属的渗透框架Smod,以及一些对Modbus PLC设备的扫描和漏洞利用脚本。

安全环境介绍:

自1979年以来,作为业界系列上的标准,Modbus已经使数百万自动化设备能够进行通信。这些设备在全世界分布着,下图是SHODAN搜集协议使用分布区域的动态立体图。大家可以看一下,链接:https://ics-radar.shodan.io/

然而广泛的使用也必然引起黑客们的注意,随之而来的是爆出各种各样的安全问题,包括拒绝服务、远程代码执行和堆栈缓冲区溢出等漏洞,下方是部分关于Modbus协议和Schneider设备的漏洞:

Smod介绍:

Smod是一个模块化的Modbus渗透测试框架,可以用来测试Modbus协议所需的各种诊断和攻击功能。这是一个使用Python和Scapy的完整的Modbus协议实现。这个软件可以在python 2.7.x下的Linux / OSX上运行。

近年来,SummerySCADA(过程控制网络)系统已经从专有封闭网络转向开源解决方案和支持TCP / IP的网络。这使他们容易受到我们传统计算机网络面临的相同安全漏洞的影响。由于Modbus/TCP协议简单且容易实现,而且广泛应用于电力、水力等工业系统。所以Smod框架均使用Modbus/TCP协议。而且Smod框架可以用来评估一个Modbus协议系统的漏洞。下图是启动Smod:

下载链接:https://download.csdn.net/download/weixin_43977912/12366214

扫描PLC:

在对PLC设备进行一系列渗透测试操作之前,我们先对网段PLC设备进行一次扫描,了解有哪些设备。虽然Smod框架里面也有扫描脚本,但并没有Nmap里面的Scripts脚本效率高,当然也可以用PLCScan(通过先检测端口TCP/502,若开放会调用其他函数来进行更深层次的扫描检测的工具)。这里我选择Nmap里的三个模块:

modbus-discover.nse(nmap自带)识别并发现Modbus PLCS设备及版本

modicon-info.nse(需添加)识别并列举Schneider Electric Modicon PLC

modbus-enum.nse (需添加)识别并枚举使用Modbus的设备

检测脚本下载地址:https://download.csdn.net/download/weixin_43977912/12369553

使用modbus-discover.nse脚本,发现了一系列Schneider Electric的设备及版本号,还有开启的502端口和sid(设备ID)。

使用modicon-info.nse脚本获取更详细的信息:

BMX P34 2020:BMX P34 高性能CPU,内置USB口,Modbus,Ethernet TCP/IP

Fireware:固件版本v3.2      

Memory Card:BMXRMS008MP 内存卡8MB

Smod渗透:

接下来我们来使用Smod,看看它有哪些厉害的功能:

1、 暴力破解PLC的UID

2、 网络嗅探进行ARP地址欺骗

3、 枚举Modbus PLC的功能

4、 模糊读写单一或多个线圈功能

5、 模糊读写单一或多个输入寄存器功能

6、 测试读写单一或多个保持寄存器功能

7、 测试单个PLC 所有功能

8、 对单个或多个线圈写值进行Dos攻击

9、 对单个或多个寄存器写值进行Dos攻击

10、对ARP地址欺骗进行Dos攻击

首先我们暴力破解PLC的UID,因为接下来的操作,例如读写线圈和寄存器或者Dos攻击,都需要带上UID,所以我们先使用/modbus/scanner/uid这个模块。如下图所示,我们填写好RHOSTS IP后直接exploit,获取到的UID为1。

接着我们对Modbus PLC的功能进行枚举(/modbus/scanner/getfunc),携带上UID,查看我们可以针对其PLC做哪些渗透工作,如下图所示,发现基本常用的功能码(Function Code)都支持,那接下来就好办了。

知道了该PLC支持的功能,我们先选择读取线圈看一下是否成功(/modbus/function/readCoils),发现读取成功了Coils给了回应,如下图所示:

接下来我们主要对保持寄存器进行读取(/modbus/function/readHoldingRegister),需要设置的参数如下:

RHOSTS:xx.xx.xx.xx(IP)

Quantity:0x0010(为读取寄存器连续个数,默认为10个,对应组态软件的通道数量,这里我们读取16个,所以换成16进制是0010)

StartAddr:0x0064(为寄存器起始地址,默认从0开始,这里我们从100开始,所以换成16进制是0064)

UID:1

如下图所示,读取到了registerval(寄存器的值):

Dos这块的攻击我就不演示了,把我一群PLC设备弄挂了我上哪哭去……篇幅原因,我再演示对单个寄存器的写值功能,其他模块的功能大同小异,大家有空可以一一尝试哈,如果有不理解的地方,可以直接评论或者私信俺。如下图所示,设置好了寄存器的数据存放地址和值,成功写入。

总结:

使用了Smod渗透框架才知道,我们在一个PLC的网络里,居然可以做这么多坏事!读写线圈和寄存器,还有Dos攻击,这些对PLC都是致命的,所以一个Modbus协议系统里需要多层次的安全防御手段,例如流量异常行为检测,只有可信任的设备,才能接入工控系统网络,且需要进行身份认证,确保登陆者也是可信任者。对Modbus 系统进行日志记录和安全审计功能,记录操作的时间、地点、操作者和操作行为等关键信息从而提供安全事件爆发后的追查能力。

当然,之前讲述了很多Modbus协议和PLC设备被爆出的漏洞,所以企业也要定期对工控系统进行漏洞扫描,即时修补漏洞更新软硬件。后续将与大家一起更深入研究Modbus协议,通过Python的modbus_tk模块进行读写PLC并进行详细的流量分析。

*本文作者:黄一113530,转载请注明来自FreeBuf.COM

# 渗透框架 # Modbus PLC # Smod
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者