三菱PLC MELSOFT通信协议浅析

admin 2022年7月19日20:07:43评论517 views字数 2604阅读8分40秒阅读模式

作者 | 网络安全应急技术国家工程研究中心 彭广明


1.概述

三菱MELSOFT协议为三菱PLC私有组态协议,用于编程软件与三菱PLC通信。针对该协议公开资料并不多,本次主要对该协议进行分析,并基于分析结果对三菱PLC进行MELSOFT协议模糊测试。

2.环境配置

GX WORKS2:三菱PLC编程软件,适用于Q、QnU、L、FX等系列可编程控制器,并且支持PLC仿真。
三菱PLC MELSOFT通信协议浅析
L61P-CM:L06系列CPU,默认使用TCP/5007或UDP/5008端口与编程软件进行通信。该通信协议为三菱私有协议melsoft。
三菱PLC MELSOFT通信协议浅析
逆向工具:IDA 7.5
三菱PLC MELSOFT通信协议浅析
调试工具:x64dbg
三菱PLC MELSOFT通信协议浅析

3.分析过程

3.1 信息搜集及分析

3.1.1 通信端口

GX WORKS2默认以UDP广播方式与PLC UDP 5008端口进行组态协议通信,在GX WORKS2上可通过配置连接目标,以TCP方式与PLC TCP 5007端口进行组态协议通信。
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析

3.1.2 协议相似性

经过网上的一些资料以及对真实PLC流量进行分析,发现MELSOFT协议与三菱MC协议有一些相似之处(三菱MC协议是一个公开协议,可直接从三菱官网下载通讯协议参考手册)。例如报文格式(MC协议3E帧)、“CPU型号读取”功能。
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析

3.1.3 协议交互流程整理

根据网络搜集的资料,初步整理出协议的交互流程如下:
三菱PLC MELSOFT通信协议浅析

3.2 动态调试GX Works2编程软件

在GX WORKS2运行后,使用x64dbg附加到程序,在“ws2_32.dll”的send/sendto函数设置断点。在GX WORKS2中执行“数据读取”、“远程操作”等操作,查看调用堆栈,分析函数调用关系。
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析

3.3 编程软件DLL调用分析

3.3.1 调用堆栈分析

从调用堆栈中可查找到相关的函数调用,以发送“5A 00 00 01”这条报文为例,主要函数调用顺序如下(部分函数已重命名,括号中为相对dll基址的偏移地址),可以看到函数调用主要集中于ECUNIT_PLC_LN.dll。
ws2_32.dll是用于执行TCP/IP网络通信的操作系统动态链接库。
ECUdp.dll是对ws2_32.dll的简单封装,主要作用是发送和接收UDP数据包。
ECUNIT_PLC_LN.dll主要负责的数据封包和解包,然后调用ECUdp.dll中的相关函数。
ECCommunication2.dll对ECUNIT_PLC_LN.dll进行封装。
_DNavi.dll:调用ECCommunication2.dll中的相关函数。
_DNaviPcEasyFunction.dll:调用_DNavi.dll中的相关函数。
三菱PLC MELSOFT通信协议浅析

3.3.2 协议数据封装分析

3.3.2.1数据头封装函数

三菱PLC MELSOFT通信协议浅析
Packet函数位于(ECUNIT_PLC_LN.dll + 0x6C2F)
三菱PLC MELSOFT通信协议浅析
HeaderMake00位于(ECHEADER_ETHER_PLC_LN.dll + 0x5E3)
三菱PLC MELSOFT通信协议浅析

3.3.2.2命令数据封装函数

三菱PLC MELSOFT通信协议浅析
以0101功能码为例, BroadCastDataSend_fn57_0101位于 (ECUNIT_PLC_LN.dll + 0x257BF)
三菱PLC MELSOFT通信协议浅析

3.3.3 授权码计算

位于(UNIT_PLC_LN.dll + 0x16461),根据CPU型号生成密钥,然后对challenge_code进行编码,最后生成授权码。
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析

3.4 PLC模拟器分析

分析过程与编程软件类似,此处不再赘述,分析对象为QnUDSimRun2.exe。
模拟器通信使用的通信协议与Melsoft略有不同,主要是数据包头部不相同,命令数据部分基本一致。通分析其命令处理函数,可推测数据包中命令数据的字段类型及作用。所有命令处理函数基本都在一个函数中统一进行注册(QnUDSimRun2.exe+0x9070),然后再进行调用。
三菱PLC MELSOFT通信协议浅析

4.分析结果

4.1 通信交互流程

根据分析结果,推测Melsoft协议通信交互流程。
三菱PLC MELSOFT通信协议浅析

4.2 数据包结构示例

表1 数据帧类型
三菱PLC MELSOFT通信协议浅析
表2-1读取CPU型号请求报文 header
三菱PLC MELSOFT通信协议浅析
表2-2读取CPU型号请求报文 data
三菱PLC MELSOFT通信协议浅析
表3-1读取CPU型号响应报文header
三菱PLC MELSOFT通信协议浅析
表3-2读取CPU型号响应报文 data
三菱PLC MELSOFT通信协议浅析
4.3 协议解析插件
以读取CPU型号功能码0101为例,wireshark解析插件效果如下:
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析
三菱PLC MELSOFT通信协议浅析

5.协议Fuzz

本次fuzz工具选择Fuzzowski,该工具由python3编写。根据逆向出melsoft协议格式定义出数据模型,然后进行fuzz测试。主要难点在于获取PLC响应数据,然后计算授权码,再发送到PLC,需要对工具中的checksum模块进行扩展。

5.1 获取响应数据

将Challenge Code响应报文中偏移16位置开始的10个字节存储到全局字典当中,key为challenge_code。
三菱PLC MELSOFT通信协议浅析

5.1 扩展算法

在checksum模块新增MelsoftAuth算法
三菱PLC MELSOFT通信协议浅析
在数据块定义中调用扩展的MelsoftAuth算法
三菱PLC MELSOFT通信协议浅析

6.总结

目前分析的报文中仍有部分字段语义不明,需要做进一步的分析。协议分析结果基于当前配置,不同配置环境下MELSOFT协议报文略有不同(如GX Works3和FX5U)。后续还需在其他配置下进行研究,以完善MELSOFT协议解析。本次研究仅完成了Melsoft协议的部分解析,希望对同行研究者有所帮助,不当之处还请批评指正。

参考资料:

1.Taking Apart and Taking Over ICS-SCADA Ecosystems A Case Study of Mitsubishi Electric
https://hitcon.org/2021/agenda/8335bbd7-5072-4fca-aae5-b657cbf60336/Taking%20Apart%20and%20Taking%20Over%20ICS%20_%20SCADA%20Ecosystems_%20A%20Case%20Study%20of%20Mitsubishi%20Electric.pdf
2.三菱Q系列PLC安全分析报告
http://plcscan.org/blog/2014/08/mitsubishi-electric-melsec-q-series-plc-analysis-report/


原文来源:网络安全应急技术国家工程研究中心
“投稿联系方式:孙中豪 010-82992251   [email protected]

三菱PLC MELSOFT通信协议浅析

原文始发于微信公众号(关键基础设施安全应急响应中心):三菱PLC MELSOFT通信协议浅析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月19日20:07:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   三菱PLC MELSOFT通信协议浅析https://cn-sec.com/archives/1187181.html

发表评论

匿名网友 填写信息