最近有朋友發(fā)給我一個中國信通院專家支撐起草的國家標準文件《GB 40050-2021網(wǎng)絡(luò)關(guān)鍵設(shè)備安全通用要求》,其中指出:“為了落實《網(wǎng)絡(luò)安全法》第二十三條網(wǎng)絡(luò)關(guān)鍵設(shè)備和網(wǎng)絡(luò)安全專用產(chǎn)品應(yīng)當(dāng)按照相關(guān)國家標準的強制性要求,由具備資格的機構(gòu)安全認證合格或者安全檢測符合要求后,方可銷售或者提供”。該標準于2021年2月20日正式發(fā)布,并于2021年8月1日起實施。標準適用于網(wǎng)絡(luò)關(guān)鍵設(shè)備,為網(wǎng)絡(luò)運營者采購網(wǎng)絡(luò)關(guān)鍵設(shè)備時提供依據(jù),還適用于指導(dǎo)網(wǎng)絡(luò)關(guān)鍵設(shè)備的研發(fā)、測試、服務(wù)等。
目前,根據(jù)四部門聯(lián)合發(fā)布的公告《網(wǎng)絡(luò)關(guān)鍵設(shè)備和網(wǎng)絡(luò)安全專用產(chǎn)品目錄(第一批)》,第一批網(wǎng)絡(luò)關(guān)鍵設(shè)備包括了性能較高的路由器、交換機、服務(wù)器和PLC設(shè)備,具體設(shè)備類型及范圍如下表:
我看了文件以后,產(chǎn)生一個疑問,是不是要求接入網(wǎng)絡(luò)的關(guān)鍵設(shè)備PLC其指令執(zhí)行時間必須小于等于0.08微秒?那么這個指令執(zhí)行時間是指最快指令執(zhí)行時間還是平均指令執(zhí)行時間?如果是指平均指令執(zhí)行時間,那么平均執(zhí)行時間又如何定義?依據(jù)又是什么?難道指令執(zhí)行時間大于0.08微秒的PLC就沒有接入網(wǎng)絡(luò)的需求?目前幾十萬臺在役運行的老型號PLC就沒有接入工業(yè)互聯(lián)網(wǎng)的資格,如果接入就難以保證網(wǎng)絡(luò)安全嗎?
有鑒于此,引發(fā)出本文想討論的主題,即PLC接入網(wǎng)絡(luò)后要保證具有足夠的安全性,即使在黑客攻擊之下仍能安全運行,關(guān)鍵是什么呢?
PLC信息安全的架構(gòu)概述
按照ISA 95基于普渡模型的定義,從結(jié)構(gòu)化的架構(gòu)的視角看工業(yè)自動化控制系統(tǒng)(IACS),可以分成四個區(qū)域(圖1):安全區(qū)、單元/區(qū)段(生產(chǎn)線車間)、制造運營與控制區(qū),以及企業(yè)區(qū)?,F(xiàn)場的實際情況可能與普渡模型有一些差異,但將安全系統(tǒng)與控制自動化系統(tǒng)分割,是大多數(shù)工業(yè)行業(yè)遵循的原則,特別是那些有防爆嚴格要求的行業(yè),如石化、化工等。
圖1 基于普渡模型的企業(yè)信息架構(gòu)
以往PLC與企業(yè)網(wǎng)絡(luò)和互聯(lián)網(wǎng)之間往往采用多層結(jié)構(gòu)、便于實施網(wǎng)絡(luò)安全的隔離方法。但是,由于實時數(shù)據(jù)遠程存取的需求不斷增長,許多連接進入了控制自動化系統(tǒng)。這種增長還有一個原因在于:通常要求分散分布的傳感器、過程和控制數(shù)據(jù),以實時或近實時的方式接入互聯(lián)網(wǎng),這導(dǎo)致工業(yè)物聯(lián)網(wǎng)的導(dǎo)入以及其部件進入控制自動化系統(tǒng)(即圖1所示的Level 0和Level 1)。在實現(xiàn)這些設(shè)備的互聯(lián)網(wǎng)接入時,分層的方法不得不讓步于在企業(yè)區(qū)和制造運營區(qū)進行連接,甚至還有從控制層直接接入公有云或私有云進行數(shù)據(jù)存取。這就使得原來圍繞單元或區(qū)段建立的防衛(wèi)被旁路了,因此需要在這些設(shè)備中內(nèi)置網(wǎng)絡(luò)安全的功能(cyber-resilience capabilities)。還存在一種趨勢就是由于預(yù)測性維護的需要,一些關(guān)鍵的傳感器或儀表測量裝置可能跨越分層架構(gòu)直接與云端連接。
控制系統(tǒng)網(wǎng)絡(luò)安全承受的挑戰(zhàn)
除了上述因PLC跨越分層架構(gòu)連接網(wǎng)絡(luò)可能招致的攻擊而外,另外一個網(wǎng)絡(luò)安全的挑戰(zhàn)來自內(nèi)部。往往通過受到病毒感染的臺式計算機的途徑或明或暗地引入了網(wǎng)絡(luò)安全問題,如在向PLC下載軟件或打補丁時;或者通過USB、智能手機或類似的輕型設(shè)備或私人設(shè)備(如iPad)導(dǎo)入了惡意軟件。事實上絕大部分指向PLC的網(wǎng)絡(luò)攻擊都是通過內(nèi)部直接或間接引入。
與其他類型的計算機系統(tǒng)一樣,對PLC的網(wǎng)絡(luò)攻擊可能以破壞可信性、完整性、可用性或這些的任何組合為目標。攻擊的實施往往針對PLC本身的細節(jié)(硬件、邏輯和固件)以及準備后續(xù)進行攻擊PLC的惡意程序。例如,某種間諜軟件可以遠程安裝在工程工作站、編程設(shè)備或人機界面上,也可以通過USB或本地PLC上的軟件更新引入。新一代網(wǎng)絡(luò)攻擊,也被稱為高級持續(xù)威脅(advanced persistent threats,APTs),通常首先使用間諜軟件下載額外的惡意軟件,然后使用它建立從PLC或工程站到I/O的連接。例如在震網(wǎng)病毒Stuxnet攻擊中就是這樣做的,這是隱形APT的一個重要組成部分。
當(dāng)前受到工業(yè)界關(guān)注的PLC攻擊病毒主要有下列4種類型:
1、接入互聯(lián)網(wǎng)的遠程存取攻擊;
2、經(jīng)典的震網(wǎng)病毒Stuxnet,又稱PLC蠕蟲;
3、破壞有效載荷攻擊;
4、難以檢測的直接攻擊PLC I/O的根程序病毒包rootkit,又稱PLC鬼魂。
接入互聯(lián)網(wǎng)的遠程存取攻擊
Shodan是一種在線工具,與谷歌、百度等搜索引擎以爬取網(wǎng)頁信息為目標不同,它爬取的是互聯(lián)網(wǎng)上所有設(shè)備的IP地址及其端口號,用于查找在線存在的特定設(shè)備和設(shè)備類型。因此使用Shodan在線工具搜索面向互聯(lián)網(wǎng)的PLC,可以廣泛搜索并獲取訪問權(quán)限,從而通過互聯(lián)網(wǎng)訪問特定的PLC。這種直接訪問的方法盡管只是訪問PLC的Web服務(wù)器,但可以從互聯(lián)網(wǎng)上運用很多辦法進行遠程訪問攻擊,包括拒絕服務(wù)(denial-of-service ,DoS)攻擊和完整性攻擊,諸如下載和覆蓋PLC程序來破壞原有的PLC程序,損害其完整性。
經(jīng)典的震網(wǎng)病毒Stuxnet
Stuxnet是一種獨立的計算機蠕蟲病毒,僅針對西門子的監(jiān)控和數(shù)據(jù)采集(SCADA)系統(tǒng)。該蠕蟲被設(shè)計用來攻擊特定的西門子PLC,并利用了四個零日漏洞。2010年6月,卡巴斯基實驗室在白俄羅斯首次發(fā)現(xiàn)了Stuxnet的最終版本。實際上早在2009年,Stuxnet病毒的早期版本就已被發(fā)現(xiàn)。然而,蠕蟲的發(fā)展要早得多,甚至可能早在2005年。Stuxnet主要是為了破壞位于伊朗納坦茲的一座核電站。不幸的是,Stuxnet病毒蔓延到超過115個國家,這說明,即使是有針對性的攻擊,也可能擴散并造成核心目的以外的破壞。
破壞有效載荷的攻擊
通過破壞有效載荷對PLC進行攻擊(payload sabotage attacks),就是采用惡意軟件工具(例如SOBOT)遠程或就地修改或覆蓋PLC上原有的控制程序,從而達到通過PLC的固件來篡改輸入/輸出映射表的狀態(tài)或數(shù)據(jù),直接破壞對物理過程的正常控制的目的。我們從PLC的硬件和軟件架構(gòu)圖(見圖2)可以清晰了解其機理關(guān)系。
圖2 PLC的硬件和軟件架構(gòu)
圖3進一步闡述了PLC的有效荷載程序執(zhí)行的流程,即輸入掃描讀取刷新輸入數(shù)據(jù)、程序掃描按指令逐條執(zhí)行運算、輸出掃描將程序運算結(jié)果輸出到輸出映射表、然后進入內(nèi)部處理階段,接著又按上述順序執(zhí)行。由此可見一旦外部攻擊破壞了PLC的有效荷載程序,導(dǎo)致輸出映射表產(chǎn)生異常輸出,結(jié)果必然是破壞了PLC所控制的物理過程的正常運轉(zhuǎn),其后果難以預(yù)料。還以針對伊朗核電站的震網(wǎng)Stuxnet攻擊為例,Stuxnet有一個病毒的功能是能通過首先感染工程工作站,然后下載惡意代碼塊對PLC發(fā)動有效荷載攻擊,致使鈾離心機的轉(zhuǎn)速越轉(zhuǎn)越快直至失速并發(fā)生故障。
圖3 PLC有效荷載程序執(zhí)行模型
直接攻擊 PLC I/O的rootkit根程序病毒包
2016年11月在倫敦舉行的黑帽歐洲大會(Black Hat Europe)上,荷蘭University of Twente的Ali Abbasi和Majid Hashemi介紹了他們開發(fā)的一種不可檢測的PLC rootkit。這種病毒可能比Stuxnet更危險,因為它是隱形的,直接影響PLC的I/O。PLC rootkit不像其他類似的攻擊那樣以PLC邏輯代碼為目標,而是選擇干擾PLC運行時邏輯運算的結(jié)果,具體表現(xiàn)為對I/O動態(tài)存儲空間的破壞,因此難以被檢測到。由于它位于系統(tǒng)的較低層次,又是一個跨平臺的PLC威脅,因此它能夠感染幾乎任何供應(yīng)商生產(chǎn)的PLC。而且這種對PLC內(nèi)核之外實施攻擊的開銷低于1%,即使監(jiān)控PLC的電源功耗的變化也無濟于事。惡意軟件駐留在PLC的動態(tài)內(nèi)存中,操縱I/O和PLC控制的過程。一般PLC的SoC上缺乏硬件中斷,并且無法進行硬件級輸出端配置檢測,致使這種攻擊是可行的。
這類攻擊主要按以下三個步驟進行:
第一步:進入。
有三種可能方式,其一是將惡意固件安裝到PLC中;其二是針對PLC的runtime程序進行控制流的攻擊;其三是攻擊者通過猜測默認密碼對PLC進行存取。其結(jié)果是攻擊者獲得PLC的底層操控權(quán)。
第二步:映射。
通過映射輸入和輸出模塊及其在內(nèi)存中的空間,目的是覆蓋輸入和輸出參數(shù)?;蛘邔/O映射至調(diào)試寄存器(debug registers),目標是攔截I/O的讀寫。
第三步:操縱。
通過改變I/O的初始化順序,其結(jié)果是攻擊者可以操縱PLC的運行。
圖4 直接攻擊PLC I/O的根程序病毒的操作順序
震網(wǎng)病毒Stuxnet詳解
Stuxnet被稱為世界上第一個數(shù)字武器,它摧毀了伊朗納坦茲電廠內(nèi)大約1000個離心機。網(wǎng)絡(luò)攻擊造成的物理破壞徹底改變了網(wǎng)絡(luò)安全專家進行威脅分析的方式,以及PLC制造商設(shè)計PLC的方式。
Stuxnet攻擊之所以成為可能,是因為一個在Windows環(huán)境下運行的人機界面和四個此前未知的零日漏洞。由于這些漏洞還沒有被發(fā)現(xiàn),因此沒有針對這些漏洞的補丁。這種蠕蟲病毒目的性明確,專門用來改變納坦茲核電站內(nèi)離心機的轉(zhuǎn)速。在實施病毒攻擊引發(fā)PLC運行異常的同時,人機界面卻因受到病毒的欺詐沒有反映異常情況,致使操作人員誤以為運行正常,于是乎機械設(shè)備出現(xiàn)故障并最終損壞。
Stuxnet的巧妙之處在于,它是一種經(jīng)過精心設(shè)計、目標明確的蠕蟲,只有在滿足某些預(yù)設(shè)條件的情況下才會造成傷害,這意味著大多數(shù)受感染的工廠和裝置不會受到傷害。事實上,只有當(dāng)工業(yè)控制系統(tǒng)的結(jié)構(gòu)與納坦茲核電站相匹配時,Stuxnet才會提高離心機的轉(zhuǎn)速。由于其設(shè)計的復(fù)雜性,Stuxnet被定義為高級持久威脅(APT)的病毒。APT可在長時間隱匿而不被檢測到的情況下連續(xù)收集數(shù)據(jù)和執(zhí)行命令,由此也被稱為“低速”攻擊。Stuxnet使用的零日漏洞中有一個針對的是Windows操作系統(tǒng)。正如美國國家漏洞數(shù)據(jù)庫漏洞報告CVE-2008-4250所記錄的那樣,它是通過服務(wù)器-消息-塊(server-message-block,SMB)文件共享協(xié)議傳播的。該漏洞允許遠程執(zhí)行代碼,并在本地網(wǎng)絡(luò)上進行攻擊型的傳播。該蠕蟲還有其他幾個特性,比如自我復(fù)制、使用命令和控制中心自行更新、包含一個隱藏的二進制文件的Windows rootkit,并試圖繞過信息安全的軟件產(chǎn)品。
據(jù)悉Stuxnet蠕蟲是通過一個U盤進入納坦茲工廠的,使其能夠從內(nèi)部攻擊系統(tǒng)。這是攻擊的先決條件,因為沒有遠程連接,納坦茲設(shè)施無法直接從互聯(lián)網(wǎng)訪問。一旦納坦茲設(shè)施被感染,蠕蟲首先在受感染的主機上本地執(zhí)行,盡管它實際上并沒有對受感染的主機做任何事情。在執(zhí)行后,蠕蟲傳播到整個控制網(wǎng)絡(luò),直到它找到一個運行STEP 7的Windows操作系統(tǒng)。STEP 7是西門子PLC的編程軟件。運行STEP 7的計算機是該控制系統(tǒng)的工程工作站,直接與PLC交互并向PLC發(fā)出修改控制程序的命令。一旦成功到達STEP 7工程工作站,Stuxnet就會操縱它發(fā)送代碼塊,使PLC執(zhí)行危險的命令,即讓離心機以高于最初編程的轉(zhuǎn)速旋轉(zhuǎn)。對PLC的攻擊大約每27天執(zhí)行一次,這使得攻擊更加隱秘和難以察覺。Stuxnet還接管了工程工作站,并在STEP 7軟件上顯示與實際輸出不一致的數(shù)值。這個攻擊步驟是攻擊的核心部分,被稱為欺騙。在這種真相被掩蓋的情況下,鈾濃縮工廠的運行工程師沒有發(fā)現(xiàn)任何錯誤的跡象,還認為離心機轉(zhuǎn)速正常。如果在STEP 7上顯示出轉(zhuǎn)速錯誤的數(shù)值,工程師就會認為故障是由人為錯誤造成的,而不是源于惡意軟件,然后采取相應(yīng)的行動。Stuxnet病毒感染后還將代碼直接隱藏在PLC上,因此也被定義為PLC 根程序病毒包(rootkit)。
Stuxnet的部分病毒通過PLC rootkit和操縱控制計算機和PLC之間的通信,利用目標PLC作為黑客工具。通過同時瞄準控制計算機和PLC, Stuxnet成功地實現(xiàn)了它的目標,同時欺騙了操作人員,為摧毀離心機贏得了足夠的時間。Stuxnet作為APT是一種復(fù)雜的攻擊,需要大量的情報收集(intelligence-gathering)和資源來執(zhí)行。為制作PLC rootkit它也有必要深入了解使用的專有通信協(xié)議和深入了解目標PLC的體系結(jié)構(gòu)。
值得注意的是Stuxnet的代碼現(xiàn)在是可以公開提供的,方便懷有不良動機的黑客實施攻擊。Stuxnet還激勵了可用于PLC和工業(yè)控制系統(tǒng)的黑客課程的數(shù)量顯著增加。除了如何使用公開可用的黑客工具(如Metasploit框架)之外,還可以通過參加課程學(xué)習(xí)如何攻擊PLC和工業(yè)控制系統(tǒng)。
以往工業(yè)控制系統(tǒng)和PLC使用多種通信協(xié)議,最常用的協(xié)議有Profinet、Profibus和Modbus。大多數(shù)為工業(yè)控制設(shè)計的協(xié)議都沒有內(nèi)置任何安全措施,由于缺乏身份驗證和加密,可能允許遠程代碼執(zhí)行、數(shù)據(jù)包偵聽和重放攻擊。
結(jié)束語:保護PLC系統(tǒng)不受攻擊任重道遠
在Stuxnet震網(wǎng)病毒發(fā)起攻擊成功之后,許多PLC開發(fā)制造企業(yè)開始重視PLC的信息安全,新設(shè)計制造的PLC內(nèi)置了一些安全保護,特別是授權(quán)和訪問控制。有些現(xiàn)代PLC還支持通信的完整性檢查和加密。在固件和內(nèi)存塊都執(zhí)行完整性檢查的情況下,提供了防止操縱固件或內(nèi)存塊的基本保護。但是,這并不能防范通過Web服務(wù)器控制PLC從而使PLC的正常運行難以為繼,乃至發(fā)生生產(chǎn)故障的情況。譬如說可以用改進型蠻力搜索攻擊(modified brute-force dictionary attacks)對登錄表單進行搜索,用以獲取管理員用戶名和密碼達到攻擊PLC Web服務(wù)器的目的。
保護PLC免受網(wǎng)絡(luò)攻擊需要一個多層次的方法。早期的隔離假設(shè)和IACS被隔離的概念不再是網(wǎng)絡(luò)攻擊保護或網(wǎng)絡(luò)彈性的基礎(chǔ)。有必要將網(wǎng)絡(luò)彈性(network resilience)構(gòu)建到PLC本身以及周圍的設(shè)備,包括編程設(shè)備和HMI。盡管新一代PLC為身份驗證、授權(quán)、完整性控制和加密提供了解決方案,但必須記住,這些機制只是確??沙掷m(xù)網(wǎng)絡(luò)彈性所需安全機制的一個子集。僅僅以符合ISA/IEC 62443為目標是不夠的,因為該標準仍在開發(fā)中,何況對PLC的網(wǎng)絡(luò)攻擊是黑客社區(qū)的一個新場所。我們需要的不僅僅是網(wǎng)絡(luò)安全,我們還需要在網(wǎng)絡(luò)遭到災(zāi)難性的事件時快速回復(fù)和繼續(xù)運行的能力,也就是網(wǎng)絡(luò)彈性。
這里特別要指出,過往把信息安全的防護重點集中在Level 2以上的設(shè)備和網(wǎng)絡(luò),而沒有考慮在Level 0和Level 1上的設(shè)備和網(wǎng)絡(luò),這暴露了嚴重的網(wǎng)絡(luò)安全問題。似乎有一種假設(shè),這些在操作運行中的設(shè)備它們本質(zhì)上要么是受保護的,要么是不會受到影響的,因此幾乎所有用戶和供應(yīng)商都沒有意識到level 0和Level 1設(shè)備缺乏網(wǎng)絡(luò)安全和身份驗證。對于那些認為不可能侵入過程傳感器的想法,可以考慮簡單地使用手持HART/FF現(xiàn)場通信手操器來更改過程傳感器的識別號ID。這可能來自惡意的網(wǎng)絡(luò)攻擊,也可能是無意的操作錯誤,通常很難區(qū)分。但是無論原因為何,隨著ID的改變,傳感器將無法與PLC或DCS通信。這時可能會有報警,但要防止災(zāi)難性故障可能為時已晚。這不僅造成過程參數(shù)可視性的喪失,還可能會造成控制的喪失,甚至造成安全的喪失。到目前為止,已經(jīng)發(fā)生了許多與傳感器相關(guān)的網(wǎng)絡(luò)安全災(zāi)難性故障。但由于目前還沒有這一級別的網(wǎng)絡(luò)取證,通常不可能確定流程異常是傳感器或執(zhí)行器的機械/電氣問題,還是網(wǎng)絡(luò)攻擊的問題。
Level 0和Level 1設(shè)備的信息安全沒有在任何標準和規(guī)范中得到重點考慮,這使得ISA 99(工業(yè)自動化和控制系統(tǒng)安全委員會)建立了一個任務(wù)小組,首先來核實Level 0和Level 1設(shè)備的信息安全問題是否在現(xiàn)有的IEC 62443系列標準中得到充分解決,特別是IEC 62443-4-2(IACS組件技術(shù)安全要求)。在審查了文檔后發(fā)現(xiàn)了明顯的漏洞,即現(xiàn)有的IEC 62443標準,以及IEEE(電氣和電子工程師協(xié)會)電力行業(yè)標準都沒有解決這一類與Level 0和Level 1級設(shè)備相關(guān)的獨特問題。
根據(jù)上述的情勢,我們應(yīng)該建立如下的清醒認識:為了保護PLC系統(tǒng)抵御網(wǎng)絡(luò)攻擊,有必要了解PLC網(wǎng)絡(luò)安全的最新知識并采用最新的防黑客攻擊方法,而不是采用一種一成不變的防護手段。這是一個主要的挑戰(zhàn),因為工業(yè)控制系統(tǒng)要求全年沒有停頓的運行,也就是24/7/365的運行模式。
作者:彭瑜(教授級高工,上海工業(yè)自動化儀表研究院技術(shù)顧問,PLCopen中國組織名譽主席)
相關(guān)閱讀
質(zhì)疑工業(yè)通信協(xié)議有幾千種的說法
破解工業(yè)通訊協(xié)議的條件及實戰(zhàn)過程
自動化IT系統(tǒng)缺陷導(dǎo)致的安全事故同樣觸目驚心
工控人如何抵御針對PLC、上位機和交換機的網(wǎng)絡(luò)攻擊