在工業(yè)網(wǎng)絡(luò)安全領(lǐng)域,可編程邏輯控制器(PLC)傳統(tǒng)上被認(rèn)為先天不安全。但一項(xiàng)新的安全計(jì)劃總結(jié)出了PLC編程的20個(gè)最佳實(shí)踐,旨在將PLC重新構(gòu)建為工業(yè)過(guò)程中的最后一道網(wǎng)絡(luò)安全防線(xiàn)。這個(gè)由一群網(wǎng)絡(luò)安全專(zhuān)家和自動(dòng)化工程師創(chuàng)建的開(kāi)源項(xiàng)目,總結(jié)了TOP20關(guān)于在工業(yè)網(wǎng)絡(luò)發(fā)生安全事件或錯(cuò)誤配置時(shí)改進(jìn)PLC彈性的建議。該項(xiàng)開(kāi)源目成果由ISA(國(guó)際自動(dòng)化協(xié)會(huì))全球網(wǎng)絡(luò)安全聯(lián)盟于6月15日正式發(fā)布,供自動(dòng)化工程師在編程PLC執(zhí)行物理過(guò)程時(shí)使用,如控制流體溫度和開(kāi)啟/關(guān)閉工廠或設(shè)施中的閥門(mén)或閘門(mén)。人們希望PLC廠商最終能在其產(chǎn)品中加入或提供模板,以幫助客戶(hù)在為其設(shè)備編程時(shí)能夠采用最佳實(shí)踐。這些實(shí)踐可指導(dǎo)工程師和技術(shù)人員對(duì)PLC進(jìn)行編程和維護(hù),而不是直接指導(dǎo)OT安全。有些實(shí)踐對(duì)于有編碼經(jīng)驗(yàn)的人來(lái)說(shuō)很熟悉,比如第8條,驗(yàn)證HMI輸入變量,使它們?cè)谟行У牟僮鞣秶鷥?nèi)(這肯定會(huì)阻止2021年2月份Oldsmar自來(lái)水廠的攻擊命令,無(wú)論從HMI發(fā)送什么)。第13條,禁用不需要/未使用的通信端口和協(xié)議是減少攻擊面的經(jīng)典方法。項(xiàng)目成果類(lèi)似于應(yīng)用程序安全編碼的最佳實(shí)踐,如Microsoft的安全開(kāi)發(fā)生命周期(SDL)或OWASP的安全編碼實(shí)踐。它利用設(shè)備的實(shí)時(shí)操作和它們狹窄而具體的任務(wù)作為安全性和彈性的超級(jí)能力。這份成果的貢獻(xiàn)者描述道:“我們?cè)噲D將PLC——通常被視為自動(dòng)化工廠的致命弱點(diǎn)——變成工廠的分布式、無(wú)情的保鏢,每個(gè)(后門(mén))門(mén)前都有一個(gè)。”安帝科技摘編該項(xiàng)目的相關(guān)成果和背景,供工業(yè)網(wǎng)絡(luò)安全行業(yè)學(xué)習(xí)參考。
一 安全的PLC編程實(shí)踐TOP20概述
1.模塊化PLC代碼
將PLC代碼分成模塊,使用不同的功能塊(子例程),獨(dú)立測(cè)試模塊。
2.跟蹤操作模式
保持PLC處于RUN模式。如果PLC不處于RUN模式,應(yīng)該向操作人員發(fā)出警報(bào)。
3.在可行的情況下,將操作邏輯留在PLC中
將盡可能多的操作邏輯,如求和或累積,直接留在PLC中。HMI沒(méi)有得到足夠的更新來(lái)做到這一點(diǎn)。
4.使用PLC標(biāo)志作為完整性檢查
在PLC錯(cuò)誤標(biāo)記上放置計(jì)數(shù)器來(lái)捕獲任何數(shù)學(xué)問(wèn)題。
5.對(duì)PLC代碼使用加密和/或校驗(yàn)和實(shí)施完整性檢查
使用加密散列(如果加密散列不可用,則使用校驗(yàn)和XX?)來(lái)檢查PLC代碼的完整性,并在更改時(shí)發(fā)出警報(bào)。
6.驗(yàn)證計(jì)時(shí)器和計(jì)數(shù)器
如果計(jì)時(shí)器和計(jì)數(shù)器的值被寫(xiě)入PLC程序,它們應(yīng)該被PLC驗(yàn)證是否合理,并驗(yàn)證向后計(jì)數(shù)低于零。
7.對(duì)成對(duì)的輸入/輸出進(jìn)行驗(yàn)證和警報(bào)
如果有成對(duì)的信號(hào),請(qǐng)確保兩個(gè)信號(hào)沒(méi)有同時(shí)斷言。當(dāng)出現(xiàn)物理上不可行的輸入/輸出狀態(tài)時(shí),向操作員發(fā)出警報(bào)??紤]使成對(duì)信號(hào)獨(dú)立或添加延遲計(jì)時(shí)器時(shí)切換輸出可能損害執(zhí)行器。
8.不僅在人機(jī)界面,而且在PLC層面驗(yàn)證人機(jī)界面輸入變量
HMI對(duì)PLC變量的訪(fǎng)問(wèn)可以(也應(yīng)該)限制在HMI的有效操作值范圍內(nèi),但應(yīng)在PLC中添加進(jìn)一步的交叉檢查,以防止或警告HMI中編程可接受范圍之外的值。
9.間接驗(yàn)證
通過(guò)對(duì)陣列末端投毒來(lái)驗(yàn)證間接指令,以捕捉柵欄柱(fence-post)錯(cuò)誤。
10.通過(guò)函數(shù)分配指定的寄存器塊(讀/寫(xiě)/驗(yàn)證)
為特定函數(shù)分配指定的寄存器塊以驗(yàn)證數(shù)據(jù),避免緩沖區(qū)溢出和阻塞未授權(quán)的外部寫(xiě)操作,以保護(hù)控制器數(shù)據(jù)。
11.真實(shí)性檢查工具
通過(guò)交叉檢查不同的測(cè)量值,以允許合理性檢查的方式來(lái)測(cè)量過(guò)程。
12.基于物理合理性驗(yàn)證輸入
確保操作人員只能輸入在過(guò)程中實(shí)際可行的或物理上可行的內(nèi)容。為操作設(shè)置一個(gè)定時(shí)器,使其持續(xù)時(shí)間達(dá)到它實(shí)際需要的時(shí)間。當(dāng)出現(xiàn)偏差時(shí),考慮發(fā)出警報(bào)。當(dāng)出現(xiàn)意外的不活動(dòng)時(shí)也要發(fā)出警報(bào)。
13.禁用不需要/不用的通信端口和協(xié)議
PLC控制器和網(wǎng)絡(luò)接口模塊一般支持默認(rèn)開(kāi)啟的多種通信協(xié)議。禁用應(yīng)用程序不需要的端口和協(xié)議。
14.限制第三方數(shù)據(jù)接口
限制第三方接口的連接類(lèi)型和可用數(shù)據(jù)。應(yīng)該對(duì)連接和/或數(shù)據(jù)接口進(jìn)行良好定義,并將其限制為只允許所需數(shù)據(jù)傳輸?shù)淖x/寫(xiě)功能。
15.定義一個(gè)在PLC重新啟動(dòng)時(shí)的安全進(jìn)程狀態(tài)
定義在PLC重新啟動(dòng)情況下過(guò)程的安全狀態(tài)(例如,通電、斷電或保持以前的狀態(tài))。
16.總結(jié)PLC的運(yùn)行周期并在人機(jī)界面上進(jìn)行趨勢(shì)分析
每2-3秒?yún)R總PLC的周期時(shí)間,并報(bào)告給人機(jī)界面以圖形顯示。
17 .記錄PLC的運(yùn)行時(shí)間并在人機(jī)界面上進(jìn)行趨勢(shì)分析
記錄PLC的正常運(yùn)行時(shí)間,以知道它何時(shí)重新啟動(dòng)。記錄HMI上的正常運(yùn)行時(shí)間的日志和趨勢(shì),以進(jìn)行診斷。
18.在人機(jī)界面上記錄PLC硬停止和趨勢(shì)
存儲(chǔ)因故障或關(guān)機(jī)導(dǎo)致的PLC硬停止事件,由HMI報(bào)警系統(tǒng)檢索,在PLC重新啟動(dòng)之前咨詢(xún)。時(shí)間同步更準(zhǔn)確的數(shù)據(jù)。
19.在人機(jī)界面上監(jiān)控PLC內(nèi)存的使用情況并進(jìn)行趨勢(shì)分析
測(cè)量并為部署在生產(chǎn)環(huán)境中的每個(gè)控制器的內(nèi)存使用情況提供基線(xiàn),并在HMI上對(duì)其進(jìn)行趨勢(shì)分析。
20.捕捉關(guān)鍵警報(bào)的假陰性和假陽(yáng)性
識(shí)別關(guān)鍵警報(bào)并為這些警報(bào)設(shè)置門(mén)限(trap)。設(shè)置trap以監(jiān)控任何偏差的觸發(fā)條件和警報(bào)狀態(tài)。
二 PLC安全編程實(shí)踐TOP20項(xiàng)目背景
多年來(lái),可編程邏輯控制器(PLC)的設(shè)計(jì)一直不安全的。經(jīng)過(guò)幾年的定制和應(yīng)用IT的最佳實(shí)踐,出現(xiàn)了安全協(xié)議、加密通信、網(wǎng)絡(luò)隔離等。然而,到目前為止,還沒(méi)有關(guān)注如何使用PLC(或SCADA/DCS)的特性來(lái)實(shí)現(xiàn)安全性,或者如何在考慮安全性的情況下對(duì)PLC進(jìn)行編程。這個(gè)項(xiàng)目—受現(xiàn)有的IT安全編碼實(shí)踐啟發(fā)—填補(bǔ)了這一空白。
本項(xiàng)目的最初動(dòng)議始于安全專(zhuān)家杰克·布羅斯基(Jake Brodsky)2020年4月1日在S4x20上題為“PLC的安全編碼實(shí)踐”的演講。
會(huì)后,OT安全專(zhuān)家Dale Peterson發(fā)起了Top 20項(xiàng)目。杰克·布羅斯基和莎拉·弗拉奇斯通過(guò)電話(huà),花了幾個(gè)小時(shí)將杰克提議的PLC安全編碼實(shí)踐付諸實(shí)施。
之后,Dale、Jake、Sarah在ISA GCA的支持下,于top20.isa.org上建立了一個(gè)平臺(tái),來(lái)組織和收集來(lái)自ICS安全和工程師社區(qū)的額外意見(jiàn)建議。
討論和鞏固實(shí)踐文本,并策劃一份最相關(guān)的前20個(gè)實(shí)踐清單花了大約一年的時(shí)間;Vivek Ponnada加快了這個(gè)過(guò)程,他不僅貢獻(xiàn)并審查了內(nèi)容,還組織了定期電話(huà)交流,直到所有關(guān)于實(shí)踐的評(píng)論都得到解決,Mohamed Abdelmoez Sakesli在一次大的努力中添加了所有的標(biāo)準(zhǔn)參考文獻(xiàn),MITRE CWE團(tuán)隊(duì)在最后一刻提供了CWE參考文獻(xiàn)等等,前后大約有70多人參與了這一項(xiàng)目。
大多數(shù)實(shí)踐是特定于PLC/過(guò)程的。其中5種實(shí)踐與記錄、趨勢(shì)和對(duì)周期時(shí)間和內(nèi)存使用等事項(xiàng)的監(jiān)視/警報(bào)有關(guān),這些事項(xiàng)在PLC中通常是一致的。這可以檢測(cè)到攻擊,也可以檢測(cè)到NIST對(duì)網(wǎng)絡(luò)事件的寬泛定義。
有一些驗(yàn)證實(shí)踐超出了輸入變量,在ICS世界中更常見(jiàn)。成對(duì)輸入就是一個(gè)很好的例子。不能同時(shí)打開(kāi)和關(guān)閉,也不能同時(shí)正反跑。
有許多實(shí)踐涉及到PLC編程,如配置寄存器、PLC標(biāo)志的使用、完整性檢查等等。每個(gè)實(shí)踐都有文檔頁(yè),更詳細(xì)地描述實(shí)踐,提供示例,列出好處,以及IEC 62443和MITRE ATT&CK用于ICS參考。
三 PLC安全編碼實(shí)踐TOP20的價(jià)值
現(xiàn)在TOP20編碼實(shí)踐已發(fā)布,需要讓工程師接受培訓(xùn)并使用它們。坦率地說(shuō),這與可能閱讀本文的OT安全人員是不同的群體,這代表了一個(gè)挑戰(zhàn)。國(guó)際自動(dòng)化協(xié)會(huì)的全球網(wǎng)絡(luò)安全聯(lián)盟(ISAGCA)正在努力促進(jìn)這些做法,這是令人鼓舞和有益的。ISA服務(wù)于工程界。眼下需要找到其他途徑來(lái)傳播信息,項(xiàng)目組歡迎任何建議。一些可能的推廣應(yīng)用方式包括:
將TOP20列表整合到現(xiàn)有的專(zhuān)業(yè)和學(xué)術(shù)培訓(xùn)計(jì)劃中,或創(chuàng)建一個(gè)新的前20名安全PLC編碼實(shí)踐課程(許可證允許對(duì)這個(gè)列表的任何使用)。
在RFP(意見(jiàn)征求)中包含TOP20 實(shí)踐清單作為需求,并編寫(xiě)相關(guān)的驗(yàn)收測(cè)試。
成為一個(gè)倡導(dǎo)者,幫助教育其所在領(lǐng)域的工程師。
若為供應(yīng)商,請(qǐng)將這些內(nèi)容包含在安全部署指南中,并盡可能包含在默認(rèn)設(shè)置中。
為T(mén)op 20團(tuán)隊(duì)提供更多的實(shí)踐示例和文檔。
項(xiàng)目中實(shí)施并訓(xùn)練團(tuán)隊(duì)。
目前發(fā)布的是1.0版。雖然項(xiàng)目團(tuán)隊(duì)在此方面做了出色工作,但在隨后的版本中會(huì)有所改進(jìn)。正常情況下,團(tuán)隊(duì)將開(kāi)始檢查評(píng)論和建議改進(jìn)。起草過(guò)程也為L(zhǎng)evel 1環(huán)境、HMI和其他ICS元素產(chǎn)生了一些良好實(shí)踐。
一個(gè)有趣的問(wèn)題是,這樣做是否能阻止勒索軟件。當(dāng)然,答案是否定的。他們將減少PLC相關(guān)的全因網(wǎng)絡(luò)事件數(shù)量。
1、PLC安全編碼規(guī)范的適用對(duì)象
這些實(shí)踐是為工程師編寫(xiě)的。這個(gè)項(xiàng)目目的是為正在創(chuàng)建軟件(梯形邏輯、功能圖等)的工程師提供指導(dǎo)方針,以幫助改善工業(yè)控制系統(tǒng)的安全態(tài)勢(shì)。這些實(shí)踐利用了PLC/DCS中的本地可用功能,實(shí)現(xiàn)這些實(shí)踐幾乎不需要額外的軟件工具或硬件。它們都能適應(yīng)正常的PLC編程和操作流程。實(shí)現(xiàn)這些實(shí)踐需要的不僅僅是安全專(zhuān)業(yè)知識(shí),還需要對(duì)要保護(hù)的PLC、它們的邏輯和底層流程有良好的了解。
2、這個(gè)列表的范圍/你如何定義PLC編碼?
為了符合TOP20安全PLC編碼實(shí)踐列范圍,實(shí)踐需要直接對(duì)PLC進(jìn)行更改。讀者在本文檔中看到的是大量潛在安全PLC編碼實(shí)踐的TOP20選擇。還有一些與總體架構(gòu)、人機(jī)界面或文檔相關(guān)的其他草案實(shí)踐。這些不適合安全PLC編碼范圍,但可以出現(xiàn)在未來(lái)的安全PLC環(huán)境清單上。
3、應(yīng)用安全PLC編碼實(shí)踐的收益
使用這些實(shí)踐顯然具有安全優(yōu)勢(shì)——主要是減少攻擊面,或者在發(fā)生安全事件時(shí)更快地進(jìn)行故障排除。然而,許多實(shí)踐除了安全性之外還有其他好處。一些還令PLC代碼變得更可靠,更容易調(diào)試和維護(hù),更容易溝通,可能也更精簡(jiǎn)。此外,安全的PLC編碼實(shí)踐可保證用戶(hù)即使在發(fā)生惡意攻擊的情況下,也能使PLC代碼更健壯,能夠承受意外錯(cuò)誤配置或人為錯(cuò)誤。
四 小結(jié)
PLC編程實(shí)踐TOP20在一群熱心的網(wǎng)絡(luò)安全專(zhuān)家和自動(dòng)化專(zhuān)家努力下出籠了,這一初步的成果與過(guò)程和I/O設(shè)計(jì)有關(guān),這可能是未來(lái)多方關(guān)注的主題。這些編程工具和技巧并不是能夠在大多數(shù)控制系統(tǒng)敘述文檔中所能找到。設(shè)計(jì)過(guò)程的人關(guān)注的是如何讓過(guò)程工作,以及如何處理一些非?;镜墓收夏J健K麄儧](méi)有詳細(xì)討論P(yáng)LC應(yīng)該做什么,他們甚至不知道如何處理需要斷開(kāi)網(wǎng)絡(luò)連接以處理安全問(wèn)題的情況。雖然這些技巧不能保護(hù)OT系統(tǒng)免遭真正的惡意利用,但至少它們不會(huì)給用戶(hù)留下細(xì)微的不可思議的漏洞。以2021年2月入侵佛羅里達(dá)州奧茲瑪市(Oldsmar)供水系統(tǒng)SCADA系統(tǒng)為例,將氫氧化鈉的劑量設(shè)置到11100 ppm的高得離譜的值本來(lái)是不可能的。PLC本應(yīng)該拒絕這個(gè)數(shù)值,但它沒(méi)有。為什么PLC不直接忽略它從人機(jī)界面收到的信息?因?yàn)樗鼪](méi)有配置或編程這樣做,但PLC編程語(yǔ)言中的功能可以做到這一點(diǎn)。然而,集成商或工程師可能沒(méi)有想到有人會(huì)故意這樣設(shè)置??此坪?jiǎn)單,卻沒(méi)有做到。PLC編程實(shí)踐TOP20將在實(shí)踐中發(fā)展完善,助力OT系統(tǒng)本質(zhì)安全能力和價(jià)值的實(shí)現(xiàn)。