基于仿真技術的工控現場通信及安全實踐
一 背景介紹
自從1968年第一個可編程邏輯控制器(PLC)發明至今,可編程邏輯控制器已經被廣泛應用在電力、能源、交通、核能和水處理等關鍵基礎設施領域。而隨著通信網絡和萬物互聯的發展,這些設施比之前任何時候都更容易受到外界的攻擊。
近十年全球針對關鍵基礎設施攻擊的事件頻繁發生,最近發生且影響較大的是今年5月7日(當地時間)美國成品油管道公司Colonial(占據東海岸全部供應量45%)遭遇黑暗面黑客組織的勒索軟件攻擊,導致全美油價上漲(平均油價漲到了3.028美元/加侖,東南部州的油價更是高達9.99美元/加侖)和汽油供應緊張,制造了社會恐慌并極大地影響了公眾的生活秩序。

網絡安全廠商若想對關鍵基礎設施進行安全防護,必須要了解工控現場的實際情況及設備間通信,但由于工控現場需要24小時不間斷運行及安全性考慮,不具備現場研究的條件;同時,工控現場使用的設備和技術種類繁多,使得全面地了解工控領域的現場通信更加困難。
安全界有句名言,“你無法保護你所不了解的”,那么是否有一種方法或者一種等價方法,可以相對容易、快速地對工控現場的通信進行深入研究呢?
答案是肯定的,工業控制系統離不開上位機監控系統和下位機控制器即PLC,上位機軟件相對比較容易獲得,獲得下位機PLC比較困難。
下面就介紹一種符合IEC 61131-3標準的開源PLC,即OpenPLC,并且基于OpenPLC和具體的SCADA協議來模擬工控現場的通信并進行網絡安全實踐。
二 OpenPLC介紹及體系結構
OpenPLC 項目是根據IEC 61131-3標準(國際電工委員會)創建的,該標準定義了PLC的基本軟件架構和編程語言。 這意味著OpenPLC可以像真正PLC那樣,支持5種標準的編程語言(圖形化編程語言和文本化編程語言)。
OpenPLC支持的五種標準編程語言:梯形圖(LD)、功能塊圖(FBD)、順序功能圖(SFC)、指令列表(IL)和結構化文本(ST)。

OpenPLC內部結構及說明:

OpenPLCWeb服務器是一個允許上傳和編譯PLC程序的實用程序。它運行在8080端口上,可以在大多數的Web瀏覽器中打開。可編程邏輯控制器程序作為單個文件上傳,其中包含由OpenPLC提供的IEC 61131-3圖形編輯器生成的代碼。一旦文件被接收,它就被發送到MatIEC編譯器。
MatIEC編譯器將上傳的PLC程序編譯成等效的C程序。但是這個C程序是不完整的,因為它只包含用戶創建的邏輯。
OpenPLC提供額外的C文件,添加對網絡連接、內部映像表、硬件接口(用于處理物理I/O)的支持,以及一個為OpenPLC添加實時行為的實時庫。網絡層通過SCADA協議進行網絡通信。
目前,OpenPLC支持Modbus/TCP和DNP3,將來可以通過在網絡層插入相應的源代碼來添加更多的協議。為了響應來自SCADA協議的網絡請求,該層必須能夠訪問輸入和輸出圖像表。
OpenPLC在TCP/IP之上支持Modbus和DNP3這兩個SCADA協議,來自任何一個協議的讀寫請求都可以直接訪問所有物理I/O點。默認情況下,Modbus在502端口可用,DNP3在20000端口可用。但是,OpenPLC有可選的命令行參數,這些參數只允許在特定端口上運行Modbus、DNP3,或者在非標準端口上同時運行兩者。
Modbus實現是基于Modbus應用協議規范從零開始構建的。DNP3應用的實現基于opendnp3庫(opendnp3 2017)。Opendnp3是用C++11編寫的可移植、可伸縮的DNP3協議棧,并且經過嚴格的測試。
三 OpenPLC對工控現場的模擬
1、OpenPLC 的安裝及驗證



從安裝過程中可以看到,OpenPLC的安裝會支持Modbus TCP和DNP3協議。最后顯示“finished successfully”則說明OpenPLC安裝成功了。
驗證:在瀏覽器(Chrome)中輸入訪問URL: http://ip:8080,如果可以打開登錄頁面,則說明安裝成功,功能正常。


2、OpenPLC Editor安裝





3、PLC梯形圖邏輯執行測試
實驗內容:使用梯形圖編程語言創建一個邏輯電路,電路的邏輯功能為按下PB1開關,LED燈亮;按下PB2開關,LED燈滅。
電路圖:

操作步驟:






按下PB1開關,電路顏色變為綠色,LED燈被點亮。

按下PB2開關,電路顏色再次變為黑色,LED燈滅。

至此,已經驗證了電路功能與電路邏輯相一致。
最后,為了讓該邏輯電路的功能可以在OpenPLC中運行,還需要生成OpenPLC運行時程序。

4、工控現場上位機和下位機(PLC)通信實踐
1) 測試拓撲

2)上位機(組態王6.5.3)配置










3)下位機(PLC)配置
上傳程序文件openplc_test.st,該程序是模擬對電機的啟動和停止。




點擊“Monitoring”,可以看到電機沒有運轉,所有的值都為FALSE。

點擊綠色的start按鈕去啟動電機。

再次查看“Monitoring”,可以看到電機已經運轉,Start和MV1的值都變成True,Stop的值仍然為FALSE。

點擊紅色的stop按鈕去停止電機。

再次查看“Monitoring”,可以看到電機已經停止運轉,Start和MV1的值都變成FALSE,Stop的值變成TRUE。

四 針對工控現場的攻擊行為
1、Modbus 協議學習
ModbusTCP報文格式

從報文的格式中可以看出Modbus TCP是以太格式封裝,上層Modbus ADU由三部分構成:Modbus應用協議頭+功能碼+數據,數據部分的內容和長度要根據具體的事務來定。
MBAP Header:

Modbus 應用協議頭長度為7字節,含4部分。
事務處理標識符:用于區分事務,可以理解為報文的序列號,每次通信之后加1以區別不同的通信數據報文。
協議標識符:對于Modbus協議為0;
長度:長度域標識后續字節的個數;
單元標識符:標識不同的遠端設備。
功能碼及對應事件:

從列表中可以看出,功能碼涉及到兩大類,數據訪問和診斷。在Modbus TCP中使用到的數據訪問包含了線圈、離散量、輸入寄存器、保持寄存器。
其中線圈和離散量的訪問方式為按位訪問,寄存器相關的為16位訪問。
診斷中還會涉及到子功能碼。
數據:
數據部分參見下圖的Modbus TCP事務通信模型,數據分為兩種:客戶端的請求數據和服務端的響應數據。

了解了C/S的通信方式,再結合功能碼表中的不同類型事務,下面就以功能碼05(0x05)為例來說明“寫單個線圈”的客戶端請求報文和服務器端的響應報文。
上面實驗中涉及到的“啟動/停止”電機的動作,實際上就是Modbus協議執行“寫單個線圈”的動作。


寫單線圈輸出狀態圖:

2、針對Modbus協議進行攻擊

在詳細掌握了Modbus 特定功能碼(寫單個線圈)的請求報文格式、響應報文格式及輸出狀態邏輯圖之后,就可以構造特定的modbus攻擊報文(寫單個線圈)去驗證執行效果了。



通過該python代碼的運行能夠達到同樣的效果,讓電機停止運轉,直觀地驗證了工控現場是存在被攻擊的風險的。
五 使用威努特產品
對工控現場進行安全防護實踐
1、VPN技術
傳統的TCP/IP體系架構在進行通信時沒有基于安全和認證的機制,任何人接入網絡后都可以對通信進行“窺視”。
IPSec即“IP安全性”,是一種開放標準的框架協議,通過使用加密的安全和認證服務以確保端到端可以進行安全通訊。
威努特的防火墻產品支持標準的IPSec VPN協議,能夠為工控現場的設備之間通信搭建一條安全的強加密通信隧道,提升安全性。
ESP封裝報文(隧道模式)

從報文的封裝格式可以看出,原始的報文內容會被ESP加密,同時進行認證;另外,隧道的IP地址會作為新的IP頭。這樣即使進行sniffer,抓取到的報文也只能看到外部的IP地址(即隧道兩端的IP地址),無法知道真實的主機IP地址和通信內容。這尤其適合用來解決工控網絡現場使用明文通信而帶來的低安全性問題。
1)測試拓撲

2)上位機配置


在上位機pingPLC,驗證連通性。

在上位機進行操作,啟動電機,可以看到報文通過VPN隧道傳輸,電機被成功啟動。

3)下位機

啟動PLC

查看監控頁面,電機已經被啟動。

防火墻1上查看VPN隧道

防火墻2上查看VPN隧道

ping上位機,驗證連通性。

Tunnel ip地址:
100.100.100.26,100.100.100.37;協議號50(ESP)
真實IP地址:報文解密后可以看到源IP 50.50.50.8,目的IP 60.60.60.200
報文內容:Modbus協議,寫單線圈。

2. 白名單Whitelist
白名單是對工控現場的通信(使用哪些協議和進行哪些動作)進行提前定義,只有符合白名單的通信才被允許;違反白名單的報文將觸發告警,并被攔截(防護模式下)。
1) 上位機
點擊3次stop按鈕去停止電機運轉,結果失敗!原因是防火墻應用了“Modbus只讀白名單”,即任何嘗試Modbus寫的操作都被視為非法,報文將被攔截并發送告警信息。

2) 防火墻白名單識別異常動作
可以看到3次嘗試停止電機的“動作”被兩臺防火墻感知到,因為這一“動作”違反了兩臺防火墻中定義的“Modbus只讀白名單”。防火墻1發送了告警信息,因為其被配置為告警模式;而防火墻2在發送告警信息的同時對報文進行攔截(被配置為防護模式),成功地阻止了停止電機運轉的“動作”。





、、、
3)下位機
電機仍然在正常運行,沒有被停止。防火墻2攔截了違反白名單的停止電機運轉的報文,成功地保障了設備穩定運行。

3. ACL
訪問控制列表ACL可以對執行的具體動作、動作時間、服務、設備的二層地址、三層地址等進行精確控制,違反ACL的報文將被丟棄。
在這里就不做詳細展開了。

六 OpenPLC對網絡安全實踐的意義
由于工控現場對設備運行具有高安全性和高可靠性的強需求,加之工控領域使用的技術和產品具有高度的非標準化特點,對工控領域的技術研究及防護不可能像在實驗室中那樣輕易地、快速地進行。
而OpenPLC技術的出現為解決上述問題提供了便利和技術可行性,同時也為安全廠商提供了一種快速搭建貼近客戶現場仿真環境的方法,便于其對防護技術及效果進行驗證,這對于安全廠商幫助工業領域的企業提高其自身運行的安全性具有積極的推動作用。