工業控制系統離不開上位機監控系統和下位機控制器即PLC,上位機軟體相對比較容易獲得,比如本文採用kingview6.53,但PLC的獲得相對來說就沒有那麼輕鬆,考慮這種情況,本文藉助一款模擬工業自動化環境的開源軟體OpenPLC基於modbus協議實現與組態王的通訊仿真。同時基於環境進行模擬測試,對組態王的組態畫面、OpenPLC Editor梯形圖簡單編程進行簡單介紹,親測效果不錯。
二、環境準備(1)Kali linux虛擬機(IP:192.168.180.146)安裝OpenPLC
安裝過程參考https://github.com/thiagoralves/OpenPLC_v3,安裝後,Kali linux虛擬機內置瀏覽器輸入如下地址,帳戶/密碼:openplc/openplc。
(2)Kali linux虛擬機(IP:192.168.180.146)安裝OpenPLC_Editor,安裝過程參考https://github.com/thiagoralves/OpenPLC_Editor,安裝後,在應用裡面搜索OpenPLC_Editor,打開後,編寫簡單程序如下,下載連結:openplc_test.st。
(3)winxp sp3虛擬機(IP:192.168.180.157)安裝組態王6.53,新建test工程下載連結https://github.com/sxd0216/kingview—test,並按下圖所示添加OpenPLC設備OpenPLC_test。
(4)設定變量並和OpenPLC_test連接
(5)組態簡單畫面,點擊Start,電機運行,點擊Stop,電機停止
三、仿真通訊(1)Kali linux虛擬機(IP:192.168.180.146)中運行OpenPLC,導入OpenPLC_Editor編輯好的程序openplc_test.st。
待程序編譯好後,Go to Dashboard,然後Start PLC
待PLC出現Running後,進入Monitoring
(2)winxp sp3虛擬機(IP:192.168.180.157)中運行test工程
(3)通過信息窗口查看,已經通訊成功
(4)點擊Start後,指示燈亮,電機啟動,進入PLC,發現Start和MV1變量值已經變為TRUE,對比圖如下:
(5)點擊Stop後,指示燈滅,電機停止,進入PLC,發現Start和MV1變量值已經變為FALSE,Stop變量值變為TRUE,對比圖如下:
四、模擬測試(1)winxp sp3虛擬機(IP:192.168.180.157)中利用wireshark抓取03.仿真通訊中Start(14幀、16幀)和Stop(19幀、21幀)的數據包,下載連結https://github.com/sxd0216/attack-packets。
查看數據包,搜索modbus協議」05」功能碼Write Coil,捕獲到Start(14幀、16幀)和Stop(19幀、21幀)的攻擊數據包,modbus協議常用功能碼如下:
01 :讀取線圈狀態
02:讀取輸入狀態
03:保持型寄存器讀取
05:寫單一線圈
06:寫單一寄存器
(2)基於wireshark捕獲的Write Coil,編寫Python攻擊包,下載連結https://github.com/sxd0216/attack-packets。
(3)利用攻擊包也可以達到(4)和(5)的效果
五、總結本文主要利用OpenPLC模擬modbus協議實現了OpenPLC實現了與Kingview的通訊仿真與模擬測試,大家如果感興趣也可以基於OpenPLC模擬其他協議,進而仿真其他環境;同時本文也對kingview如何建立工程、組態畫面,OpenPLC Editor編輯簡單梯形圖程序進行了簡單介紹,希望對熱愛工控的人士有所幫助。
*本文作者:fangyu0216,轉載請註明來自FreeBuf.COM