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