山石网科
- 关注

1、PLC指令可被利用发起蠕虫传播
问题名称 | PLC“自由通讯指令”可被利用发起蠕虫传播 |
检测工具 | Arpspoof Python PLC_Config |
问题描述 | 通过劫持PLC_Config下载程序流程,篡改PLC下载程序内容,导致PLC向局域网设备发送任一带功能报文(例:发送停止指令),从而导致其他局域网内PLC设备停机,实现类似PLC感染病毒功能 |
测试步骤描述 | 1、 “自由通讯”指令中的“UDP_AFC”,可以向其他PLC发送任意UDP数据,若构造恶意控制指令(如启停),将造成网络内其他设备宕机。可通过编程,实现plc自动向内网发送udp报文。 2. UDP报文内容可使局域网内其他plc设备停止的命令,可以使其他内网中plc设备停止。 |
其他说明 | 此方法也可结合其他攻击方法,实现更多功能,例如重写其他plc设备中某些内存值或者IO输出值 |
其他说明 |
2、PLC远程控制任意I/O读写
问题名称 | PLC远程控制任意I/O读写 |
检测工具 | Python发包脚本 wireshark |
问题描述 | EPA协议可以实现PLC内部参数配置、程序上下载和变量监控,由于没有认证,攻击者可远程向PLC发送特殊构造的数据包实现这些操作的远程操纵。 |
测试步骤描述 | 1、可利用EPA变量读写报文访问各变量区,通过0c读操作码实现对控制器的监控。通过0d写操作码可以对各种位变量、单字双字多字变量修改 2、 3、 |
其他说明 |
3、PLC软件多种配置文件易篡改
问题名称 | PLC编程软件多种配置文件易被篡改 |
检测工具 | Notepad |
问题描述 | 软件安装目录“C:\Program Files\DCCE\PLC_Config”下存在7个扩展名为.cfg的配置文件,明文存储,虽然文件中提示了“请勿手工编辑此文档”,但恶意篡改此类配置文件中的参数,将导致软件使用异常,逻辑功能错误,编写PLC程序时会产生安全风险,具体文件列表请见截图中打开的TXT窗口标题: |
测试步骤描述 | 1、打开软件安装目录“C:\Program Files\DCCE\PLC_Config” 2、可见目录下存在7个扩展名为.cfg的配置文件 3、以打开编辑nc.cfg文件为例,包含了‘opcode’操作码明文,如果随意更改操作码,将导致编写出的组态程序无法实现正确操作,在生产环境中可能造成高速运转的刀具碰撞等严重问题。 |
其他说明 |
4、PLC软件卸载不全导致敏感信息泄露
问题名称 | PLC软件卸载不全导致敏感信息泄露 |
检测工具 | 软件目录下uninst.exe |
问题描述 | 软件卸载时处理不完全,残留的文件中记录了工程文件打开列表,若包含敏感信息,存在泄密风险; |
测试步骤描述 | 1、运行...软件目录下uninst.exe卸载 2、在询问“保留工程文件夹”时选择否(无论选是还是否,原软件安装目录下都会有残留,且重启也不会消失) 3、卸载完成后,原软件安装目录下仍有残留文件,包括最近使用工程列表,最近打开文件,软件配置等文件。 4、打开残留的ProjSave.txt后,可以看到之前使用过的工程文件名称,若包含涉密信息,则存在敏感信息泄露安全风险。如图该文件,可见“绝密-核电反应堆冷却塔项目”、“绝密-歼10航空发动机零件生产项目”等记录,存在情报安全隐患。 |
其他说明 |
5、PLC软件存在未加固等安全问题
问题名称 | PLC软件存在未加固和DLL劫持风险 |
检测工具 | IDA Pro |
问题描述 | PLC没有对PLC编程软件做加固,可轻易逆向其软件结构,甚至可以通过逆向PLC编程软件DLL库,可以发现关键加密函数、编译函数等敏感函数、明文保存密码、口令。 |
测试步骤描述 | 1、逆向分析plc_config.exe可以找到明文保存的用户名密码:admin/123456 user1/123456 user2/123456,疑为内置账户。如图: 2、逆向plc_config.exe还可发现其大量调用ShellExecuteA函数执行外部命令,存在高危风险。 3、 软件目录下面的dll中,core.dll,ReadWriteDll.dll等为系统设置相关: 逆向其core.dll核心dll,可以看到核心系统参数,可以修改这些参数达到修改plc_config系统的目的。 4、 逆向readWrite.dll可以发现其读写函数,可以通过劫持dll达到执行任意代码目的。 |
其他说明 | 本身plc_config 程序没有加壳保护,很容易被逆向 |
6、PLC存在未知变量区
问题名称 | 扫描变量区,发现未知的变量区 |
检测工具 | Python 脚本 |
问题描述 | 发现使用特殊的读变量区指令,指定变量区号,可以发现10022,11001,11003,11005,11007,11008,11014。这些变量区未在文档中说明。 |
测试步骤描述 | 1、 编写Python脚本直接发送‘区读取’命令,逐一测试变量区。 2、 发现了以下变量区,以及读取的结果。 |
其他说明 |
7、PLC软件上载程序报错内存不足
问题名称 | PLC远程控制任意I/O读写 |
检测工具 | Python发包脚本 wireshark |
问题描述 | 当需要上载PLC程序时,经常提示内存不足,无法进行。 |
测试步骤描述 | 1、将组态软件目录下的PLC_Config\Sample\灯板管理下载到PLC上,运行后取消监控,再上载,这时软件会发生内存不足异常,程序长时间无响应。如图: 2、此时无法获取PLC上运行程序。 |
其他说明 |
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)