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