朱毅明
(和利時集團,北京 100176)
PLC是一種工業計算機系統,采用的硬件和軟件在基礎架構上與其他的計算機系統并無實質性的不同,不可避免地存在與其他計算機系統相同或相似的缺陷和漏洞,也不會免除在信息安全方面遇到的挑戰。
自20世紀70年代誕生以來,PLC硬件采用“主控制器+IO+通信”,在線軟件采用“嵌入式操作系統+實時控制運算引擎+應用組態代碼”,離線開發軟件采用“工程管理+硬件配置工具+IEC61131-3圖形化語言組態工具+編譯器工具+調試工具”的基本架構,并未發生革命性的變化。盡管各大PLC廠家每隔十年左右都會推出新一代產品,在控制性能、控制規模、開發環境等方面有很大的提高,但在PLC內部信息安全的改進卻乏善可陳。究其根本原因,并不是PLC廠商沒有技術能力在信息安全方面采取改進措施,而是由于PLC本身屬于廣泛應用、充分競爭的成熟工業控制設備,大部分工業客戶認為自身的信息安全風險不大,自然不會對增加的信息安全功能埋單。
由于PLC屬于工業關鍵控制設備,一旦停機,企業的損失遠大于PLC采購成本,工業用戶要求PLC滿足365天常年連續不間斷運行的要求。對于PLC設計人員,PLC的可靠性和穩定性一直都是一個巨大的挑戰。大型PLC系統的研發和測試周期長達2~3年,開發成本高昂,目前在市場上尚未出現成熟的、具備原生信息安全設計的PLC產品。

圖2 增加安全協處理器后的PLC硬件架構
隨著工業互聯網和物聯網技術的發展,PLC從單體化的工業控制設備逐步演變成網絡化的復雜控制系統,不但主控制單元與IO單元之間存在現場總線通信,而且在主控制器與主控制器之間也存在工業實時網絡通道;另一方面隨著智能制造系統集成技術的快速推進,必須打通PLC與SCADA或MES的雙向數據交換通道。原來相對封閉的PLC運行和開發環境已不復存在,現在的PLC面對的是開放、復雜、不確定的工業互聯網環境,信息安全的風險迅速增高。隨著2017年6月1日開始正式實施的《網絡安全法》的嚴格執行,企業承擔工業控制系統安全的主體責任,國內工業企業客戶對于PLC信息安全解決方案的需求快速增加。

圖1 傳統的PLC硬件架構
用于PLC外掛補丁式的信息安全升級措施確實能夠發揮很大的作用,對于大部分攻擊場景都有良好的防御性能,但是大部分外掛式補丁對于PLC系統的實時性和可靠性都有不小的影響。一方面,常見的具備網絡報文深度解析功能的工業防火墻需要增加大約幾十毫秒的傳輸延遲,如果用于PLC與MES的邊界防護問題不大,但是如果用于PLC與PLC之間的協同控制就很難滿足實時性要求。另一方面,如果將工業防火墻串接在PLC與SCADA(或DCS)之間,一旦工業防火墻故障,可能會導致整個生產工藝的中斷,而工業防火墻大多基于商用的Linux和X86平臺,軟硬件系統的復雜度遠高于工業控制系統,對于工業控制系統整體可靠性影響很大。
由于工業用戶對于長期運行可靠性和穩定性的強烈要求,PLC的總體設計是基于簡單即可靠的奧卡姆剃刀原則,如無必要,不應增加系統的復雜度。在這個原則的指導下,PLC開發的技術路線偏向于保守,大部分傳統的PLC軟硬件中都找不到與信息安全相關的設計。
傳統的PLC硬件架構如圖1所示,實質上它是一個典型的嵌入式計算機,主要包括處理器、RAM、程序存儲器、工業IO接口、通信接口等。
在傳統的PLC硬件的基礎上增加安全協處理器,實現可信啟動、完整性度量、報文加解密、身份認證等功能。為了滿足國家對于工業信息安全的需求,安全協處理器采用國產芯片產品和FPGA的組合,支持符合國密算法標準的對稱和非對稱算法。增加安全協處理器后的PLC硬件架構如圖2所示。
PLC冷啟動順序從原來的直接從主CPU啟動改為從先啟動安全協處理器,讀取程序存儲器,度量在Flash中系統程序代碼的完整性后,再可控啟動PLC主CPU。
PLC主CPU正常啟動后,讀取加密存儲的用戶代碼,交由安全協處理器校驗完整性并解密后進入正常的控制流程。在PLC正常運行狀態下,安全協處理器主要負責PLC運行狀態和網絡攻擊的監測,以及基于硬件芯片的網絡報文。安全協處理器一旦發現網絡攻擊,將觸發保護機制強制主CPU退出正常運行模式,進入網絡保護運行模式,嚴格過濾網絡報文,關閉遠程下裝、用戶代碼調試、配置修改等功能,維持正常的控制保護邏輯。
除了增加安全協處理器之外,PLC原有的一些硬件設計也需要進行修改。
丁主任看著潘美麗,潘美麗的臉依然拉得老長,甕聲甕氣地:最主要的是今后這些孩子怎么養啊?我的牛奶不喝了,給孩子們換茶葉鹽巴吧。
PLC采用的微控制器芯片大多支持在系統編程功能(ISP),在PCB設計時會保留JTAG接口,用于系統程序的燒錄和調試,通過這些接口可以訪問到PLC的核心代碼和數據,存在信息安全隱患。在原生信息安全的PLC設計中需要封閉微處理器的相關功能,并將存放于外置Flash的代碼和數據進行加密處理。
PLC存放系統程序和用戶程序的Flash需要在實體上分離,并在硬件電路上采取防范措施,嚴格控制對于系統程序的修改。
PLC軟件主要包括編程開發軟件、在線運行軟件、HMI軟件(可選)等部分。
PLC編程開發軟件一般運行于Windows或Linux操作系統,處于一個開放的運行環境,無論是操作系統還是網絡環境,都存在不少的漏洞和缺陷。大部分的惡意攻擊都是通過控制PLC編程開發軟件,將惡意控制代碼以合法的裝載方式遠程注入到在工業現場運行的PLC系統,對工業生產造成嚴重的破壞,震網病毒也正是通過STEP7編程軟件修改在線運行的用戶控制邏輯代碼和關鍵數據最終達成攻擊目的。
PLC編程開發軟件主要包括工程管理、硬件和網絡配置工具、IEC61131-3圖形化編程和編譯工具、用戶應用代碼下裝和調試工具等組成部分,主要存在的信息安全問題如下:
(1)用戶應用代碼缺少防護。PLC編程開發軟件在打開用戶工程時大多會要求輸入正確用戶名和密碼進行身份鑒別,但是實際上不少PLC的用戶程序代碼采用二進制或文本的方式明碼存儲,并且缺少文件完整性檢查措施,可以輕易打開并修改;另外就是存在無偽裝、簡單加密的用戶名和密碼存儲文件,這種身份鑒別措施基本上屬于防君子不防小人的,對于惡意的攻擊基本不具備防護能力。
(2)用戶應用代碼下裝過程缺少嚴格的身份鑒別。傳統的PLC用戶應用代碼下裝過程的過于簡單,極端情況下,只要正確輸入目標PLC的IP地址或設備名,任何一臺能夠連接到PLC編程網絡端口、運行PLC編程開發軟件的PC都具備裝載、修改、調試用戶程序的能力。
為了消除PLC編程開發軟件在基本架構設計上的信息安全風險,首先需要對用戶應用代碼的源文件、中間文件和目標文件采用基于用戶自定義私有秘鑰的加密措施,在文件和內存中不保留秘鑰,增加數字簽名等文件完整性檢驗手段,驗證源文件與目標文件的關聯一致性,設定兩級文件編輯權限,一級是查看,二級是修改,只有輸入正確秘鑰的用戶才能正常執行打開、編輯和編譯等操作;其次采用基于USBKey證書的身份認證,只有擁有合法證書的操作者采用對特定的PLC進行下裝和調試操作,編程開發軟件與在線控制運行軟件網絡傳輸的報文采用基于PKI的公私鑰協商方式進行加密處理,加解密符合國密算法標準。
采用嚴格的信息安全措施會降低PLC編程開發軟件的用戶體驗,特別是USBKey證書的應用對用戶在現場的編程操作造成很大的困擾。在整個體系中需要考慮PLC生產商、分銷商、集成商和最終用戶的需求,建立合理的CA、RA的證書管理體系,減少現場維護的靈活度。
PLC在線運行軟件是PLC長期穩定可靠工作的關鍵。PLC在線運行軟件主要包括嵌入式操作系統、控制算法引擎、在線自診斷和工業網絡通信協議棧等部分,主要存在如下信息安全問題:
(1)PLC在線運行軟件的系統程序代碼缺少完整性校驗,即使被惡意修改也無法及時發現。
(2)用戶應用程序代碼和數據的下裝缺少嚴格的授權。PLC編程開發軟件與在線運行軟件通過網絡實現用戶程序代碼下裝和在線調試的功能,簡單的“用戶名+口令”無法保證安全。
(3)全部網絡數據明碼傳輸,且上位機(HMI或SCADA)的身份無嚴格的校驗,容易受到重放攻擊,導致工業生產現場的誤動作。通過PLC外部的加密設備可以實現PLC網絡傳輸過程的透明加密,但是無法對PLC內部的授權管理模式進行改進。
(4)嵌入式操作系統和通信協議棧存在漏洞或缺陷。由于升級固件需要停止PLC運行,且大多數情況下工業現場操作規程規定在PLC固件升級后需要重新測試大部分控制功能和性能,因此PLC在工業現場基本不存在升級固件的可行性。
(5)PLC的用戶應用代碼權限過高。PLC編程開發軟件編譯生成的用戶應用代碼包括
中間代碼和目標機器碼兩大類型,為了提高運行效率,不少廠家的PLC采用直接下裝目標機器碼的方式,但是在運行過程中,為了保證控制的實時性,用戶應用代碼往往設定過高的運行級別,一旦被惡意修改,可能會產生嚴重的后果。
工業信息安全需求需要在PLC開發的需求分析階段加以考慮,通過開展安全分析,尋找危險和風險,并在設計過程中逐步化解風險,部分設計思路如下:
(1)在硬件上增加安全協處理器實現信任鏈的傳遞,并實現主處理器系統代碼的完整性度量。
(2)采用CA、RA、證書、公私鑰、數字簽名的身份鑒別體系,保證PLC用戶應用程序代碼和數據的完整性和正確性。
(3)采用基于公私鑰的秘鑰交換方式和對稱加密的網絡報文傳輸方式實現PLC與上位機的數據報文加密處理,為了降低PLC側的CPU負荷,可以采用安全協處理器完成相關的加解密工作。
(4)采用安全協處理器或單獨的通信處理器對網絡報文進行可配置策略的深度過濾,過濾策略需要與PLC的組態關聯,由PLC編程開發軟件自動生成基本規則模板,人工補充修改。
(5)下裝的用戶應用代碼采用中間代碼的方式,,可采用類似虛擬機的方式在PLC中執行用戶應用代碼,實現對于用戶應用代碼行為的有效監控。離線設定安全邊界條件或規則,在線實時檢查,一旦發現用戶應用代碼控制行為異常,可以立即采取措施降低危險發生的可能性。
本文討論了在PLC設計階段需要考慮的信息安全需求和原生的部分設計解決方案,可以為PLC內部的信息安全設計提供參考。
[1] 周浩,黃雙等.嵌入式PLC的信息安全策略設計與實現[J].計算機科學,2013,40(9):125-127.
[2] 于立業,薛向榮,張云貴,等,工業控制系統信息安全解決方案[J].冶金自動化,2013,37(1):5-11.
[3] 邵誠,鐘梁高,一種基于可信計算的工業控制系統信息安全解決方案[J].信息與控制,2015,44(5):628-633.