原創 | 三菱PLC MELSOFT通信協議淺析
原創 | 三菱PLC MELSOFT通信協議淺析
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協議的部分解析,希望對同行研究者有所幫助,不當之處還請批評指正。
原文來源:網絡安全應急技術國家工程研究中心