一. 施耐德UMAS協議簡介
UMAS基於舊的Telemechanique PLC使用的舊的Xway Unite協議。Umas協議用於配置和監視Schneider-Electric PLC。它基於眾所周知的Modbus協議,並使用Modbus協議規範中指定的保留功能程式碼之一 (十六進位制功能程式碼0x5A)。施耐德電氣PLC收到Modbus資料包時,將檢查功能程式碼是否為0x5A(即功能碼90),如果是,則使用某些特定的庫,否則,將正常處理modbus請求,返回或修改指定的暫存器或PLC的線圈。(Nmap等工具探測PLC資訊使用的功能碼是43,即0x2b)
二. 研究目的
上一篇文章主要研究了從PLC獲取工程檔案的安全性。本次研究下載程式到PLC的安全性,然後嘗試不透過上位機,直接透過程式碼的方式下載程式到PLC是否能正常執行。
三. 研究內容
3.1. 研究環境
研究物件不變,依舊使用的是施耐德型號為M340的PLC:


組態軟體是Unity Pro XL:

上位機的IP:10.45.115.27(Windows 7 旗艦版)
PLC的IP:10.45.115.24(M340)
3.2. 具體步驟
3.2.1. 抓包分析
首先還是從組態軟體下載PLC程式到PLC,抓取上位機和PLC互動的資料包。此過程比從PLC獲取程式要複雜許多,抓取多個資料包進行分析。


透過多個資料包的對比分析,可以確定下載程式的過程也有3個狀態,如下:
* UMAS Function Code 0x30 - INITIALIZE_UPLOAD: Initialize Strategy upload
* UMAS Function Code 0x31 - UPLOAD_BLOCK: Upload strategy block to the PLC
* UMAS Function Code 0x32 - END_STRATEGY_UPLOAD: Finish strategy Upload
0x30初始化下載,0x31是下載過程中,0x32是下載結束最後的確認資料包。


5a是正常功能碼,66是本次會話的ID,後面的30,31,32就是狀態碼。
從第一張截圖可以看到,從第一個0x30的包開始,中間還穿插了幾個校驗的包,經過多次抓包對比確認其是始終存在的,在寫指令碼時也要把這兩個包加進去。
現在確認了其通訊過程,然後就需要對傳輸的Payload進行對比,確認傳輸是APX檔案的內容。這裡使用Winhex軟體開啟APX檔案:

為了方便對比,把Wireshark的顯示也切換為Hex模式:

經過對比可以確認傳輸的檔案是完全一致的。Wireshark資料包的前面16個位元組包含了Modbus/TCP的頭部和UMAS的頭部,可以看到資料包的長度欄位1022位元組,減掉10位元組就是APX檔案切片的長度。

可以看到APX檔案的頭部就是ASCII碼16進位制的41 50 58的APX。
3.2.2. 編寫指令碼
首先總結一下前面抓包分析的內容:
*建立會話的過程需要會話ID,會話ID可以透過傳送特定的握手包取得;
*下載程式分為三個過程,分別對應3種狀態碼,30狀態碼的包傳送之後還有一次校驗;
*傳送資料包過程中的transid和UMAS id是遞增的;(transid並不重要)
*APX檔案的切片大小為1012位元組;
檔案處理模組:

發包的程式碼:

裡面還涉及到位元組序處理的問題,多注意一下就好。
3.2.3. 測試
準備了兩個APX檔案,一個是透過前文指令碼的方式獲取的,一個是透過組態軟體的專案檔案改字尾解壓後得到的。透過winHex開啟是可以看到工程檔案的原檔名的,見下圖:


下圖是組態軟體裡面顯示的PLC程式當前版本:

現在直接透過指令碼下載檔案到PLC,然後再到組態軟體裡面確認。
這時候透過組態軟體連線PLC會提示使用監控模式,因為指令碼與PLC建立了會話,使用的機器名就是WIN-VOJE6I12LCK。

稍等一會再進行連線即可,然後選擇從PLC中上傳專案,會顯示如下對話方塊:

可以看到專案版本已經變了,從0.0.66變成了0.0.65。執行起來跑的也是我下發的程式的結果,PLC的啟動、停止、執行等功能也可以透過指令碼來實現。

3.3. 總結
至此整個環節已形成閉環,從程式獲取、修改後重新下發、PLC啟動、停止、執行等都可以用指令碼來實現。
四. 防禦建議
協議本身目前沒有提供任何防護措施,建議從安全管理和整體的安全防護方案角度來降低安全風險,保障企業的安全生產和運營。
五. 參考連結
https://community.checkpoint.com/t5/IoT-Protect/UMAS-Protocol-visibility-of-Engineering-and-configuration/td-p/40145
