朱毅明
(和利時(shí)集團(tuán),北京 100176)
PLC是一種工業(yè)計(jì)算機(jī)系統(tǒng),采用的硬件和軟件在基礎(chǔ)架構(gòu)上與其他的計(jì)算機(jī)系統(tǒng)并無(wú)實(shí)質(zhì)性的不同,不可避免地存在與其他計(jì)算機(jī)系統(tǒng)相同或相似的缺陷和漏洞,也不會(huì)免除在信息安全方面遇到的挑戰(zhàn)。
自20世紀(jì)70年代誕生以來(lái),PLC硬件采用“主控制器+IO+通信”,在線(xiàn)軟件采用“嵌入式操作系統(tǒng)+實(shí)時(shí)控制運(yùn)算引擎+應(yīng)用組態(tài)代碼”,離線(xiàn)開(kāi)發(fā)軟件采用“工程管理+硬件配置工具+IEC61131-3圖形化語(yǔ)言組態(tài)工具+編譯器工具+調(diào)試工具”的基本架構(gòu),并未發(fā)生革命性的變化。盡管各大PLC廠(chǎng)家每隔十年左右都會(huì)推出新一代產(chǎn)品,在控制性能、控制規(guī)模、開(kāi)發(fā)環(huán)境等方面有很大的提高,但在PLC內(nèi)部信息安全的改進(jìn)卻乏善可陳。究其根本原因,并不是PLC廠(chǎng)商沒(méi)有技術(shù)能力在信息安全方面采取改進(jìn)措施,而是由于PLC本身屬于廣泛應(yīng)用、充分競(jìng)爭(zhēng)的成熟工業(yè)控制設(shè)備,大部分工業(yè)客戶(hù)認(rèn)為自身的信息安全風(fēng)險(xiǎn)不大,自然不會(huì)對(duì)增加的信息安全功能埋單。
由于PLC屬于工業(yè)關(guān)鍵控制設(shè)備,一旦停機(jī),企業(yè)的損失遠(yuǎn)大于PLC采購(gòu)成本,工業(yè)用戶(hù)要求PLC滿(mǎn)足365天常年連續(xù)不間斷運(yùn)行的要求。對(duì)于PLC設(shè)計(jì)人員,PLC的可靠性和穩(wěn)定性一直都是一個(gè)巨大的挑戰(zhàn)。大型PLC系統(tǒng)的研發(fā)和測(cè)試周期長(zhǎng)達(dá)2~3年,開(kāi)發(fā)成本高昂,目前在市場(chǎng)上尚未出現(xiàn)成熟的、具備原生信息安全設(shè)計(jì)的PLC產(chǎn)品。
圖2 增加安全協(xié)處理器后的PLC硬件架構(gòu)
隨著工業(yè)互聯(lián)網(wǎng)和物聯(lián)網(wǎng)技術(shù)的發(fā)展,PLC從單體化的工業(yè)控制設(shè)備逐步演變成網(wǎng)絡(luò)化的復(fù)雜控制系統(tǒng),不但主控制單元與IO單元之間存在現(xiàn)場(chǎng)總線(xiàn)通信,而且在主控制器與主控制器之間也存在工業(yè)實(shí)時(shí)網(wǎng)絡(luò)通道;另一方面隨著智能制造系統(tǒng)集成技術(shù)的快速推進(jìn),必須打通PLC與SCADA或MES的雙向數(shù)據(jù)交換通道。原來(lái)相對(duì)封閉的PLC運(yùn)行和開(kāi)發(fā)環(huán)境已不復(fù)存在,現(xiàn)在的PLC面對(duì)的是開(kāi)放、復(fù)雜、不確定的工業(yè)互聯(lián)網(wǎng)環(huán)境,信息安全的風(fēng)險(xiǎn)迅速增高。隨著2017年6月1日開(kāi)始正式實(shí)施的《網(wǎng)絡(luò)安全法》的嚴(yán)格執(zhí)行,企業(yè)承擔(dān)工業(yè)控制系統(tǒng)安全的主體責(zé)任,國(guó)內(nèi)工業(yè)企業(yè)客戶(hù)對(duì)于PLC信息安全解決方案的需求快速增加。
圖1 傳統(tǒng)的PLC硬件架構(gòu)
用于PLC外掛補(bǔ)丁式的信息安全升級(jí)措施確實(shí)能夠發(fā)揮很大的作用,對(duì)于大部分攻擊場(chǎng)景都有良好的防御性能,但是大部分外掛式補(bǔ)丁對(duì)于PLC系統(tǒng)的實(shí)時(shí)性和可靠性都有不小的影響。一方面,常見(jiàn)的具備網(wǎng)絡(luò)報(bào)文深度解析功能的工業(yè)防火墻需要增加大約幾十毫秒的傳輸延遲,如果用于PLC與MES的邊界防護(hù)問(wèn)題不大,但是如果用于PLC與PLC之間的協(xié)同控制就很難滿(mǎn)足實(shí)時(shí)性要求。另一方面,如果將工業(yè)防火墻串接在PLC與SCADA(或DCS)之間,一旦工業(yè)防火墻故障,可能會(huì)導(dǎo)致整個(gè)生產(chǎn)工藝的中斷,而工業(yè)防火墻大多基于商用的Linux和X86平臺(tái),軟硬件系統(tǒng)的復(fù)雜度遠(yuǎn)高于工業(yè)控制系統(tǒng),對(duì)于工業(yè)控制系統(tǒng)整體可靠性影響很大。
由于工業(yè)用戶(hù)對(duì)于長(zhǎng)期運(yùn)行可靠性和穩(wěn)定性的強(qiáng)烈要求,PLC的總體設(shè)計(jì)是基于簡(jiǎn)單即可靠的奧卡姆剃刀原則,如無(wú)必要,不應(yīng)增加系統(tǒng)的復(fù)雜度。在這個(gè)原則的指導(dǎo)下,PLC開(kāi)發(fā)的技術(shù)路線(xiàn)偏向于保守,大部分傳統(tǒng)的PLC軟硬件中都找不到與信息安全相關(guān)的設(shè)計(jì)。
傳統(tǒng)的PLC硬件架構(gòu)如圖1所示,實(shí)質(zhì)上它是一個(gè)典型的嵌入式計(jì)算機(jī),主要包括處理器、RAM、程序存儲(chǔ)器、工業(yè)IO接口、通信接口等。
在傳統(tǒng)的PLC硬件的基礎(chǔ)上增加安全協(xié)處理器,實(shí)現(xiàn)可信啟動(dòng)、完整性度量、報(bào)文加解密、身份認(rèn)證等功能。為了滿(mǎn)足國(guó)家對(duì)于工業(yè)信息安全的需求,安全協(xié)處理器采用國(guó)產(chǎn)芯片產(chǎn)品和FPGA的組合,支持符合國(guó)密算法標(biāo)準(zhǔn)的對(duì)稱(chēng)和非對(duì)稱(chēng)算法。增加安全協(xié)處理器后的PLC硬件架構(gòu)如圖2所示。
PLC冷啟動(dòng)順序從原來(lái)的直接從主CPU啟動(dòng)改為從先啟動(dòng)安全協(xié)處理器,讀取程序存儲(chǔ)器,度量在Flash中系統(tǒng)程序代碼的完整性后,再可控啟動(dòng)PLC主CPU。
PLC主CPU正常啟動(dòng)后,讀取加密存儲(chǔ)的用戶(hù)代碼,交由安全協(xié)處理器校驗(yàn)完整性并解密后進(jìn)入正常的控制流程。在PLC正常運(yùn)行狀態(tài)下,安全協(xié)處理器主要負(fù)責(zé)PLC運(yùn)行狀態(tài)和網(wǎng)絡(luò)攻擊的監(jiān)測(cè),以及基于硬件芯片的網(wǎng)絡(luò)報(bào)文。安全協(xié)處理器一旦發(fā)現(xiàn)網(wǎng)絡(luò)攻擊,將觸發(fā)保護(hù)機(jī)制強(qiáng)制主CPU退出正常運(yùn)行模式,進(jìn)入網(wǎng)絡(luò)保護(hù)運(yùn)行模式,嚴(yán)格過(guò)濾網(wǎng)絡(luò)報(bào)文,關(guān)閉遠(yuǎn)程下裝、用戶(hù)代碼調(diào)試、配置修改等功能,維持正常的控制保護(hù)邏輯。
除了增加安全協(xié)處理器之外,PLC原有的一些硬件設(shè)計(jì)也需要進(jìn)行修改。
丁主任看著潘美麗,潘美麗的臉依然拉得老長(zhǎng),甕聲甕氣地:最主要的是今后這些孩子怎么養(yǎng)???我的牛奶不喝了,給孩子們換茶葉鹽巴吧。
PLC采用的微控制器芯片大多支持在系統(tǒng)編程功能(ISP),在PCB設(shè)計(jì)時(shí)會(huì)保留JTAG接口,用于系統(tǒng)程序的燒錄和調(diào)試,通過(guò)這些接口可以訪(fǎng)問(wèn)到PLC的核心代碼和數(shù)據(jù),存在信息安全隱患。在原生信息安全的PLC設(shè)計(jì)中需要封閉微處理器的相關(guān)功能,并將存放于外置Flash的代碼和數(shù)據(jù)進(jìn)行加密處理。
PLC存放系統(tǒng)程序和用戶(hù)程序的Flash需要在實(shí)體上分離,并在硬件電路上采取防范措施,嚴(yán)格控制對(duì)于系統(tǒng)程序的修改。
PLC軟件主要包括編程開(kāi)發(fā)軟件、在線(xiàn)運(yùn)行軟件、HMI軟件(可選)等部分。
PLC編程開(kāi)發(fā)軟件一般運(yùn)行于Windows或Linux操作系統(tǒng),處于一個(gè)開(kāi)放的運(yùn)行環(huán)境,無(wú)論是操作系統(tǒng)還是網(wǎng)絡(luò)環(huán)境,都存在不少的漏洞和缺陷。大部分的惡意攻擊都是通過(guò)控制PLC編程開(kāi)發(fā)軟件,將惡意控制代碼以合法的裝載方式遠(yuǎn)程注入到在工業(yè)現(xiàn)場(chǎng)運(yùn)行的PLC系統(tǒng),對(duì)工業(yè)生產(chǎn)造成嚴(yán)重的破壞,震網(wǎng)病毒也正是通過(guò)STEP7編程軟件修改在線(xiàn)運(yùn)行的用戶(hù)控制邏輯代碼和關(guān)鍵數(shù)據(jù)最終達(dá)成攻擊目的。
PLC編程開(kāi)發(fā)軟件主要包括工程管理、硬件和網(wǎng)絡(luò)配置工具、IEC61131-3圖形化編程和編譯工具、用戶(hù)應(yīng)用代碼下裝和調(diào)試工具等組成部分,主要存在的信息安全問(wèn)題如下:
(1)用戶(hù)應(yīng)用代碼缺少防護(hù)。PLC編程開(kāi)發(fā)軟件在打開(kāi)用戶(hù)工程時(shí)大多會(huì)要求輸入正確用戶(hù)名和密碼進(jìn)行身份鑒別,但是實(shí)際上不少PLC的用戶(hù)程序代碼采用二進(jìn)制或文本的方式明碼存儲(chǔ),并且缺少文件完整性檢查措施,可以輕易打開(kāi)并修改;另外就是存在無(wú)偽裝、簡(jiǎn)單加密的用戶(hù)名和密碼存儲(chǔ)文件,這種身份鑒別措施基本上屬于防君子不防小人的,對(duì)于惡意的攻擊基本不具備防護(hù)能力。
(2)用戶(hù)應(yīng)用代碼下裝過(guò)程缺少?lài)?yán)格的身份鑒別。傳統(tǒng)的PLC用戶(hù)應(yīng)用代碼下裝過(guò)程的過(guò)于簡(jiǎn)單,極端情況下,只要正確輸入目標(biāo)PLC的IP地址或設(shè)備名,任何一臺(tái)能夠連接到PLC編程網(wǎng)絡(luò)端口、運(yùn)行PLC編程開(kāi)發(fā)軟件的PC都具備裝載、修改、調(diào)試用戶(hù)程序的能力。
為了消除PLC編程開(kāi)發(fā)軟件在基本架構(gòu)設(shè)計(jì)上的信息安全風(fēng)險(xiǎn),首先需要對(duì)用戶(hù)應(yīng)用代碼的源文件、中間文件和目標(biāo)文件采用基于用戶(hù)自定義私有秘鑰的加密措施,在文件和內(nèi)存中不保留秘鑰,增加數(shù)字簽名等文件完整性檢驗(yàn)手段,驗(yàn)證源文件與目標(biāo)文件的關(guān)聯(lián)一致性,設(shè)定兩級(jí)文件編輯權(quán)限,一級(jí)是查看,二級(jí)是修改,只有輸入正確秘鑰的用戶(hù)才能正常執(zhí)行打開(kāi)、編輯和編譯等操作;其次采用基于USBKey證書(shū)的身份認(rèn)證,只有擁有合法證書(shū)的操作者采用對(duì)特定的PLC進(jìn)行下裝和調(diào)試操作,編程開(kāi)發(fā)軟件與在線(xiàn)控制運(yùn)行軟件網(wǎng)絡(luò)傳輸?shù)膱?bào)文采用基于PKI的公私鑰協(xié)商方式進(jìn)行加密處理,加解密符合國(guó)密算法標(biāo)準(zhǔn)。
采用嚴(yán)格的信息安全措施會(huì)降低PLC編程開(kāi)發(fā)軟件的用戶(hù)體驗(yàn),特別是USBKey證書(shū)的應(yīng)用對(duì)用戶(hù)在現(xiàn)場(chǎng)的編程操作造成很大的困擾。在整個(gè)體系中需要考慮PLC生產(chǎn)商、分銷(xiāo)商、集成商和最終用戶(hù)的需求,建立合理的CA、RA的證書(shū)管理體系,減少現(xiàn)場(chǎng)維護(hù)的靈活度。
PLC在線(xiàn)運(yùn)行軟件是PLC長(zhǎng)期穩(wěn)定可靠工作的關(guān)鍵。PLC在線(xiàn)運(yùn)行軟件主要包括嵌入式操作系統(tǒng)、控制算法引擎、在線(xiàn)自診斷和工業(yè)網(wǎng)絡(luò)通信協(xié)議棧等部分,主要存在如下信息安全問(wèn)題:
(1)PLC在線(xiàn)運(yùn)行軟件的系統(tǒng)程序代碼缺少完整性校驗(yàn),即使被惡意修改也無(wú)法及時(shí)發(fā)現(xiàn)。
(2)用戶(hù)應(yīng)用程序代碼和數(shù)據(jù)的下裝缺少?lài)?yán)格的授權(quán)。PLC編程開(kāi)發(fā)軟件與在線(xiàn)運(yùn)行軟件通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)用戶(hù)程序代碼下裝和在線(xiàn)調(diào)試的功能,簡(jiǎn)單的“用戶(hù)名+口令”無(wú)法保證安全。
(3)全部網(wǎng)絡(luò)數(shù)據(jù)明碼傳輸,且上位機(jī)(HMI或SCADA)的身份無(wú)嚴(yán)格的校驗(yàn),容易受到重放攻擊,導(dǎo)致工業(yè)生產(chǎn)現(xiàn)場(chǎng)的誤動(dòng)作。通過(guò)PLC外部的加密設(shè)備可以實(shí)現(xiàn)PLC網(wǎng)絡(luò)傳輸過(guò)程的透明加密,但是無(wú)法對(duì)PLC內(nèi)部的授權(quán)管理模式進(jìn)行改進(jìn)。
(4)嵌入式操作系統(tǒng)和通信協(xié)議棧存在漏洞或缺陷。由于升級(jí)固件需要停止PLC運(yùn)行,且大多數(shù)情況下工業(yè)現(xiàn)場(chǎng)操作規(guī)程規(guī)定在PLC固件升級(jí)后需要重新測(cè)試大部分控制功能和性能,因此PLC在工業(yè)現(xiàn)場(chǎng)基本不存在升級(jí)固件的可行性。
(5)PLC的用戶(hù)應(yīng)用代碼權(quán)限過(guò)高。PLC編程開(kāi)發(fā)軟件編譯生成的用戶(hù)應(yīng)用代碼包括
中間代碼和目標(biāo)機(jī)器碼兩大類(lèi)型,為了提高運(yùn)行效率,不少?gòu)S家的PLC采用直接下裝目標(biāo)機(jī)器碼的方式,但是在運(yùn)行過(guò)程中,為了保證控制的實(shí)時(shí)性,用戶(hù)應(yīng)用代碼往往設(shè)定過(guò)高的運(yùn)行級(jí)別,一旦被惡意修改,可能會(huì)產(chǎn)生嚴(yán)重的后果。
工業(yè)信息安全需求需要在PLC開(kāi)發(fā)的需求分析階段加以考慮,通過(guò)開(kāi)展安全分析,尋找危險(xiǎn)和風(fēng)險(xiǎn),并在設(shè)計(jì)過(guò)程中逐步化解風(fēng)險(xiǎn),部分設(shè)計(jì)思路如下:
(1)在硬件上增加安全協(xié)處理器實(shí)現(xiàn)信任鏈的傳遞,并實(shí)現(xiàn)主處理器系統(tǒng)代碼的完整性度量。
(2)采用CA、RA、證書(shū)、公私鑰、數(shù)字簽名的身份鑒別體系,保證PLC用戶(hù)應(yīng)用程序代碼和數(shù)據(jù)的完整性和正確性。
(3)采用基于公私鑰的秘鑰交換方式和對(duì)稱(chēng)加密的網(wǎng)絡(luò)報(bào)文傳輸方式實(shí)現(xiàn)PLC與上位機(jī)的數(shù)據(jù)報(bào)文加密處理,為了降低PLC側(cè)的CPU負(fù)荷,可以采用安全協(xié)處理器完成相關(guān)的加解密工作。
(4)采用安全協(xié)處理器或單獨(dú)的通信處理器對(duì)網(wǎng)絡(luò)報(bào)文進(jìn)行可配置策略的深度過(guò)濾,過(guò)濾策略需要與PLC的組態(tài)關(guān)聯(lián),由PLC編程開(kāi)發(fā)軟件自動(dòng)生成基本規(guī)則模板,人工補(bǔ)充修改。
(5)下裝的用戶(hù)應(yīng)用代碼采用中間代碼的方式,,可采用類(lèi)似虛擬機(jī)的方式在PLC中執(zhí)行用戶(hù)應(yīng)用代碼,實(shí)現(xiàn)對(duì)于用戶(hù)應(yīng)用代碼行為的有效監(jiān)控。離線(xiàn)設(shè)定安全邊界條件或規(guī)則,在線(xiàn)實(shí)時(shí)檢查,一旦發(fā)現(xiàn)用戶(hù)應(yīng)用代碼控制行為異常,可以立即采取措施降低危險(xiǎn)發(fā)生的可能性。
本文討論了在PLC設(shè)計(jì)階段需要考慮的信息安全需求和原生的部分設(shè)計(jì)解決方案,可以為PLC內(nèi)部的信息安全設(shè)計(jì)提供參考。
[1] 周浩,黃雙等.嵌入式PLC的信息安全策略設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2013,40(9):125-127.
[2] 于立業(yè),薛向榮,張?jiān)瀑F,等,工業(yè)控制系統(tǒng)信息安全解決方案[J].冶金自動(dòng)化,2013,37(1):5-11.
[3] 邵誠(chéng),鐘梁高,一種基于可信計(jì)算的工業(yè)控制系統(tǒng)信息安全解決方案[J].信息與控制,2015,44(5):628-633.