【技术向】UMAS协议获取PLC工程文件的安全性探讨

发布者:星河Salaxy
发布于:2021-05-13 11:11

一.  UMAS协议简介


UMAS基于旧的Telemechanique PLC使用的Xway Unite协议。UMAS协议用于配置和监视Schneider-Electric PLC。它基于众所周知的Modbus协议,并使用Modbus协议规范中指定的保留功能代码之一  (十六进制功能代码0x5A)。


施耐德电气PLC收到Modbus数据包时,将检查功能代码是否为0x5A(即功能码90)。如果是,则使用某些特定的库,否则,将正常处理modbus请求,返回或修改指定的寄存器或PLC的线圈。(Nmap等工具探测PLC信息使用的功能码是43,即0x2b)


二. 研究目的  


本次针对UMAS协议的研究主要目的是深入分析PLC在上传下载项目工程文件时的安全性。


三.  研究过程


01

研究环境


本次研究对象是型号为M340的施耐德PLC:


  • PLC范围:Modicon M340

  • 处理器名称:BMX P34 2020

  • 处理器版本:03.10-1

  • 硬件ID:1030106

  • 网络地址:TCP:10.45.115.24


图片


  • 组态软件:Unity Pro XL


图片


  • 上位机IP10.45.115.27Windows 7 旗舰版)

  • PLCIP10.45.115.24M340


02

研究步骤


目前网络上已有许多关于Modbus和UMAS协议的资料,但仅局限于基本的协议介绍,本次研究将结合实际操作对M340PLC的上传项目工程文件进行详细分析。


具体步骤:


首先抓取组态软件读取PLC工程文件的数据包:


图片


上图可以看到M340与组态软件的通信过程都是使用的90功能码,这个只是UMAS的一个头部标识,具体的协议结构如下:


图片


0x5A后面才是UMAS协议的功能码,本次研究的对象就是UMAS Code为0x33, 0x34, 0x35时的工程文件上传过程(从PLC将工程文件上传到组态软件)


  • UMAS FunctionCode 0x33 - INITIALIZE_UPLOAD:初始化下载(从PLC复制工程到PC)


  • UMAS FunctionCode 0x34 - DOWNLOAD_BLOCK:下载块(从PLC复制工程到PC)


  • UMAS FunctionCode 0x35 - END_STRATEGY_DOWNLOAD:完成下载(从PLC复制工程到PC)


图片


从刚才抓取的数据包追踪TCP流,然后查找:5a为功能码,9a本次会话的标识,33开始上传,34上传中,35结束上传。


图片


图片


分析发现,组态软件在从PLC复制工程文件到PC时,并没有做会话识别,只需建立正常的Modbus/TCP连接便可获取PLC的工程文件。


编写相应的代码进行文件的获取,获取的文件存储为0414.apx,如下所示


图片


这个工程文件在组态软件原文件名为heatpowerplant_m340_20210414.stu,将后缀改为.zip,然后解压能得到一个名为Station.apx的文件。操作过程如下:


图片


利用diffmd5工具比较以上两个文件:


图片


完全一致!没有任何校验,只需发送特定的数据包,将返回的数据进行拼接便能得到M340 PLC正在运行的工程文件。



 防御建议


由于协议本身没有任何防护措施,建议从安全管理和整体的安全防护方案角度来降低安全风险,保障企业的安全生产和运营。



参考链接

https://community.checkpoint.com/t5/IoT-Protect/UMAS-Protocol-visibility-of-Engineering-and-configuration/td-p/40145



图片



声明:该文观点仅代表作者本人,转载请注明来自看雪