三菱PLC MELSOFT通信协议浅析

VSole2022-07-19 14:47:28

1.概述

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

2.环境配置

GX WORKS2:三菱PLC编程软件,适用于Q、QnU、L、FX等系列可编程控制器,并且支持PLC仿真。

L61P-CM:L06系列CPU,默认使用TCP/5007或UDP/5008端口与编程软件进行通信。该通信协议为三菱私有协议melsoft。

逆向工具:IDA 7.5

调试工具:x64dbg

3.分析过程

3.1 信息搜集及分析

3.1.1 通信端口

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

3.1.2 协议相似性

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

3.1.3 协议交互流程整理

根据网络搜集的资料,初步整理出协议的交互流程如下:

3.2 动态调试GX Works2编程软件

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

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中的相关函数。

3.3.2 协议数据封装分析

3.3.2.1数据头封装函数

Packet函数位于(ECUNIT_PLC_LN.dll + 0x6C2F)

HeaderMake00位于(ECHEADER_ETHER_PLC_LN.dll + 0x5E3)

3.3.2.2命令数据封装函数

以0101功能码为例, BroadCastDataSend_fn57_0101位于 (ECUNIT_PLC_LN.dll + 0x257BF)

3.3.3 授权码计算

位于(UNIT_PLC_LN.dll + 0x16461),根据CPU型号生成密钥,然后对challenge_code进行编码,最后生成授权码。

3.4 PLC模拟器分析

分析过程与编程软件类似,此处不再赘述,分析对象为QnUDSimRun2.exe。

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

4.分析结果

4.1 通信交互流程

根据分析结果,推测Melsoft协议通信交互流程。

4.2 数据包结构示例

表1 数据帧类型

表2-1读取CPU型号请求报文 header

表2-2读取CPU型号请求报文 data

表3-1读取CPU型号响应报文header

表3-2读取CPU型号响应报文 data

4.3 协议解析插件

以读取CPU型号功能码0101为例,wireshark解析插件效果如下:

5.协议Fuzz

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

5.1 获取响应数据

将Challenge Code响应报文中偏移16位置开始的10个字节存储到全局字典当中,key为challenge_code。

5.2 扩展算法

在checksum模块新增MelsoftAuth算法

在数据块定义中调用扩展的MelsoftAuth算法

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/

原文来源:网络安全应急技术国家工程研究中心

三菱通信协议
本作品采用《CC 协议》,转载必须注明作者和本文链接
三菱MELSOFT协议为三菱PLC私有组态协议,用于编程软件与三菱PLC通信。针对该协议公开资料并不多,本次主要对该协议进行分析,并基于分析结果对三菱PLC进行MELSOFT协议模糊测试。
三菱MELSOFT协议为三菱PLC私有组态协议,用于编程软件与三菱PLC通信。针对该协议公开资料并不多,本次主要对该协议进行分析,并基于分析结果对三菱PLC进行MELSOFT协议模糊测试。
工业互联网安全的落地第一步,是确保工控环境中的防护能力,之后是检测/审计能力。本次《工业互联网安全能力指南》的发布内容为报告中的工控防护能力部分,以及工控检测/审计能力部分。
6月10日,第十三届全国人民代表大会常务委员会第二十九次会议通过《中华人民共和国数据安全法》。本法自2021年9月1日起施行。相较于《数据安全法(二次审议稿)》,最终稿做出以下修改:一是建立工作协调机制,加强对数据安全工作的统筹;二是明确对关系国家安全、国民经济命脉、重要民生、重大公共利益等数据实行更严格的管理制度;三是要求提供智能化公共服务应当充分考虑老年人、残疾人的需求,不得对老年人、残疾
提到工控系统恶意软件,人们首先会想第一个能直接攻击OT网络的震网病毒(Stuxnet),但是震网病毒之后,又涌现大量新型恶意软件,对工控系统构成严重威胁。 近年来,针对工控系统的恶意软件正变得更加复杂且易用。最初的震网病毒需要通过U盘来潜入伊朗设施,但最新的工控恶意软件工具可通过网络远程攻击。
Signal在端到端加密消息协议中加入抗量子加密算法。
在新一轮科技革命和产业变革背景下,智能网联汽车是新兴技术与汽车产业融合创新的重要组成部分,汽车已不再是孤立的单元,而逐步成为智能交通、智慧能源、智慧城市等系统的重要载体和节点,被视为可移动的智能网络终端。随着人工智能、信息通信技术加速发展和跨界融合,智能网联汽车与外界的交互手段不断丰富,智能网联汽车在积极融入网络时代的同时,也不可避免地面临信息安全问题。2015年,两名黑客实现远程操控行驶中的切诺
MQTT协议是1999年IBM公司发布的一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议。MQTT协议的底层构建基于TCP/IP协议,它的特点是其规范简单,非常适用于低性能、低开销和有限带宽的物联网场景。作为一种轻量级的传输协议,MQTT协议的传输过程有三方构成,分别是发布者(Publish)、代理(Broker)和订阅者(Subscribe)。
6G移动通信网络将通信的领域边界从物理世界进一步拓展至数字世界,通过在物理世界和数字世界之间提供即时、高效和智能的超连接来重塑世界,这一趋势将开启移动通信的新篇章。6G网络超大规模的全局性连接将给网络的运营和管理带来巨大挑战,亟待革命性的理论和技术创新。
VSole
网络安全专家