?

工控系統中PLC安全漏洞及控制流完整性研究

2021-01-08 02:25陳大偉徐茹枝
電子科技 2021年2期
關鍵詞:控制流固件實時性

陳大偉,徐茹枝

(華北電力大學 控制與計算機工程學院,北京 102206)

隨著網絡與信息技術在工業控制系統中的廣泛應用,針對工控系統的攻擊行為也與日俱增,例如2000年澳大利亞的MaroochyShire排水系統受到攻擊,導致800 000 L污水未經處理直接排放;2010年伊朗核電站遭受“震網”病毒攻擊;2015年烏克蘭電網遭受攻擊而導致部分地區停電。這些嚴重的安全事故反映了保障工控系統安全的迫切性。

PLC(Programmable Logic Controller)在工業控制系統中扮演著重要的角色,其幾乎可以控制工業過程中的所有關鍵要素,被認為是 “現代工業控制系統的大腦”。在工業環境下,未能及時且正確地執行一個或多個I/O操作可能導致工業過程的失敗,從而導致不可接受的后果,所以確保PLC安全可靠運行至關重要。因此,對工業控制系統中PLC的安全漏洞和利用控制流完整性對PLC進行保護的研究具有重要意義。

1 PLC存在的安全漏洞

根據PLC設備的特點以及程序的執行流程和控制邏輯,PLC存在的安全漏洞被分為3種類型:固件修改漏洞、配置操作漏洞和控制流劫持漏洞[1]。

1.1 PLC的固件修改漏洞

PLC擁有以太網模塊,且制造商也提供了升級或替換以太網卡的服務,但在大多數情況下,固件上傳到現場設備的以太網卡時沒有有效的安全保護機制,攻擊者利用PLC的以太網模塊上載惡意固件,實現對PLC的攻擊[2]。PLC的固件提供了系統輸入和物理輸出之間的軟件驅動接口,這使得攻擊者在用戶級就可以進行修改,利用PLC的固件更新執行惡意二進制代碼[3]。針對PLC的固件修改漏洞,固件完整性驗證方法[4-5]能有效地檢測或阻止固件修改漏洞的攻擊,并且這種驗證方法可以在PLC存儲新固件或運行時執行。

1.2 PLC的配置操作漏洞

攻擊者通過PLC的配置操作漏洞上傳惡意的控制邏輯來改變原有的物理控制過程,從而達到攻擊目的。配置操作漏洞產生的原因是工程人員編寫代碼時過于注重系統功能,忽視了代碼可能產生的漏洞和安全缺陷,例如旁路跳過、缺少某些線圈或輸出、指令復用、硬編碼使用、缺乏認證、缺少診斷和預警信息等。

1.3 PLC的控制流劫持漏洞

公開的PLC控制流劫持漏洞逐年增加,如表1所示。

表1 PLC的控制流劫持漏洞

由表1可以看出,PLC的控制流劫持攻擊主要通過PLC設備無法發現的漏洞來實現。

針對PLC的控制流劫持攻擊,現存的防御方法并不完善,所以本文研究的重點是PLC的控制流劫持防御,以此提出了針對PLC的控制流完整性機制,提高了工控系統中PLC的安全性。

二進制安全中,漏洞利用的主要目的為劫持目標設備的控制流,使目標設備按照攻擊者的意圖執行,或使攻擊者獲取目標系統的控制權,以此全面控制目標設備[7]??刂屏鹘俪止裟軌驅崿F的主要原因是PLC對數據和代碼沒有進行明確區分,PLC的存儲器結構,如圖1所示。

圖1 PLC的存儲器結構Figure 1.Structure of memory of PLC

隨著攻擊者的攻擊手段不斷進化,DEP(Data Execution Prevention)和ASLR(Address Space Layout Randomization)防御機制已經被證實無法有效抵御控制流劫持攻擊,例如可利用代碼重用攻擊繞過DEP保護。代碼重用攻擊利用程序中正常的代碼片段,拼接成惡意代碼實現控制流劫持攻擊,不需要注入代碼就可以遠程執行任意代碼。已知的代碼重用攻擊包括Ret2Libc、ROP、JOP、Ret2ZP等。

PLC、通用計算機和手機設備均可能遭受代碼重用攻擊,但PLC存在一定特殊性,例如ARM中的函數參數是通過寄存器傳遞而不是堆棧,故使用ARM體系結構的PLC不會直接受到Ret2Libc攻擊,但會受到Ret2ZP攻擊[8]。針對PLC的代碼重用攻擊是下一步研究的重點。

由以上分析可知,PLC存在安全漏洞的原因如下:(1)PLC與馮諾依曼體系結構相似,其可編程性為攻擊者編寫攻擊代碼提供了程序運行的環境;(2)PLC作為下位機,與上位機的通信協議存在缺陷,使得惡意程序容易獲得PLC的操作權限;(3)PLC的內存讀寫是弱保護,使得惡意程序容易獲得PLC的操作權限。

2 控制流完整性

控制流完整性已經被公認為是一種有效的針對控制流劫持的防御方法[9]。通過對控制流程圖的分析,獲取程序中控制轉移指令,的目標白名單,包括間接跳轉、間接調用和函數返回指令。在程序的執行過程中,核對控制轉移指令的目標是否在白名單中,以此有效地檢測出攻擊者對目標設備的劫持。

控制流完整性可以分為細粒度的控制流完整性和粗粒度的控制流完整性。細粒度的控制流完整性檢查程序中的每條控制轉移指令,確保每條指令都只能轉移到自身的目標集合中,因此帶來了很大的性能開銷,而較大的性能開銷則限制了這類安全機制的廣泛引入。粗粒度的控制流完整性通過放寬一定的檢查條件來降低性能開銷,例如CCFIR驗證目標比傳統的控制流完整性機制更快且更簡單[10],剝離二進制文件的技術同樣有效降低了控制流完整性機制的性能開銷[11]。但是,更加寬松的檢查條件使得粗粒度的控制流完整性有可能被攻擊者繞過[12],例如攻擊者可以針對粗粒度的控制流完整性構建圖靈完備的代碼重用攻擊[13]。因此,粗粒度的控制流完整性機制雖然有效降低了性能開銷,但安全性得不到充分保證。

確??刂屏魍暾詸C制的安全性以及解決控制流完整性機制的性能開銷是當前研究的熱點,例如通過改進上下文敏感和字段敏感指針構建內核級的細粒度控制流程圖[14]或強制為每個具體輸入計算控制流程圖[15],以此提高控制流完整性機制的安全性并降低性能開銷。

較大的性能開銷會影響設備運行效率并破壞PLC的實時性,但PLC是硬實時設備,在關鍵基礎設施中不能因控制流完整性而破壞PLC的實時性。

控制流完整性機制大多應用于通用計算機,但其對嵌入式設備同樣有效[16],例如針對ARM處理器驅動的設備[17]。大部分PLC使用ARM體系結構。針對PLC這種特殊嵌入式設備的制流完整性研究較少,因此設計針對PLC的更加安全且性能開銷較低的控制流完整性機制是本文研究的重點。

3 PLC控制流保護機制

3.1 PLC控制流完整性機制設計原則

設計PLC的控制流完整性機制,考慮以下因素,即PLC控制流完整性機制的設計原則:(1)運行現代操作系統。某些不具備操作系統的嵌入式設備稱為低功耗嵌入式設備。但大多數PLC擁有真正的操作系統,針對PLC的保護方案是具有現代操作系統的嵌入式設備。設計PLC的控制流完整性機制時考慮PLC運行實時操作系統;(2)不考慮硬件修改。性能開銷是限制控制流完整性機制發展的主要障礙,設計針對PLC的控制流完整性機制時應著重解決性能開銷問題,但不必考慮引入嵌入式設備的硬件,應通過改進控制流完整性機制解決性能開銷問題;(3)不依賴于虛擬化。大多數嵌入式設備的處理器不支持虛擬化。任何純粹基于虛擬化的設計方案都不適用;(4)安全性??刂屏魍暾詸C制應有足夠的安全性,不能被攻擊者繞過且不能增加系統風險;(5)性能開銷。性能開銷是控制流完整性機制的最大弊端,也是限制諸多PLC安全機制發展的最大屏障。設計針對PLC的控制流完整性機制時,解決性能開銷問題至關重要;(6)實時性。首先考慮PLC的實時性,嚴格的實時性作為第一要素,不能因安全性而破壞PLC的實時性和可用性,應衡量和取舍PLC的安全性及實時性。

3.2 針對PLC的控制流完整性機制方案設計

ARM體系結構是PLC最常用的體系結構,如Allen-Bradley、Schneider Electric、Honeywell、WAGO等供應商制造的PLC均使用ARM體系結構。本文主要針對使用了ARM體系結構的PLC進行研究。

PLC程序的一個掃描周期如圖2所示:讀取輸入、執行控制邏輯代碼、更新輸出。PLC運行時,首先掃描輸入值并將其存儲到變量表中,然后執行相應的控制邏輯,更新輸出值。其中變量表是一個虛表,包含了控制邏輯所需要的所有變量:計數器、定時器、輸入和輸出等。PLC控制邏輯的兩種主要類型為基于字節碼的邏輯和基于二進制的邏輯。經分析,控制流完整性對兩種邏輯均適用。

圖2 PLC程序掃描過程Figure 2. Scanning process of program of PLC

由圖2可以看出,PLC的程序掃描是一個不停循環的過程,在一個程序掃描周期中,任何I/O值的變化都會被忽略,直到下一個程序掃描周期中才會被更新。

根據PLC設備的特點、程序的執行流程和控制邏輯,基于插樁技術,設計針對PLC的控制流完整性機制??傮w設計思路如圖3所示。

圖3 總體設計思路Figure 3. General design idea

3.3 PLC控制流保護過程

基于ARM體系結構的應用程序在執行流程中有兩個位置可以被攻擊者利用:一是通過修改間接函數調用中的寄存器值來實現控制流劫持;二是在返回指令之前修改返回地址的值來實現控制流劫持。PLC的控制流完整性機制在實際的調用或返回之前檢查這兩個位置,如圖4所示。

圖4 控制流驗證示例Figure 4. Example of control-flow verification

控制流程圖由編譯器產生,覆蓋了PLC運行時控制邏輯的整個控制過程。每一個校驗指令中的ID都是唯一的,通過將ID添加到控制流程圖中,驗證機制使用ID來立即識別應用程序執行流在控制流程圖中的位置。

在ARM體系結構中,通過發現BLX指令來識別間接函數調用。同時,尋找ARM指令集中所有的返回指令,例如 BX LR、POP R11等。在這些轉移指令之前插入校驗指令,利用控制流程圖檢查轉移指令的目標地址是否合法,以此確保PLC控制流的完整性。

同時,PLC具有硬實時性的特點,以一種可預測的方式執行任務,以此滿足對實時性的要求。在一些關鍵基礎設施中,不能因控制流完整性的驗證而導致PLC的可用性和實時性被破壞,例如污水處理系統中所使用的PLC設備必須能夠對由于降雨引起的水位變化做出實時響應;發電廠中的PLC設備必須通過毫秒級的發電機斷路器對發電機做出實時反應等。

由于PLC運行時的實時性限制,每個PLC程序掃描周期中處理器消耗的周期數都必須受限制且應是可預測的。因此,本文重點考慮了PLC的可用性和實時性,借鑒循環緩沖區的方法[18],在控制流完整性機制的基礎上引入循環的影子堆棧,允許PLC根據實時性,限制控制流完整性機制的檢查時間。同時,將控制流完整性檢查機制的優先級設置的較低,以此確保PLC的可用性和實時性。影子堆棧的引入則避免了嵌入式系統中的優先級倒置問題。

PLC控制流完整性機制的總體架構及控制流保護過程如圖5所示。

圖5 PLC控制流保護過程Figure 5. Control-flow protection of PLC

由圖5可以看出,循環緩沖區確保PLC的實時操作系統可以隨時停止控制流完整性校驗,以此保證了PLC的I/O操作具有足夠的資源。

3.4 PLC控制流完整性機制的性能開銷

在OpenPLC[19]上執行控制流劫持實驗,以評估PLC控制流完整性機制的保護效果。使用ROPgadgets工具查看程序內部是否有可以利用的代碼片段,并通過seed48(·)函數間接實現參數傳遞。經過實驗驗證,控制流完整性機制能有效檢測出控制流違規并識別出轉移控制流的函數。經過簡單的控制邏輯測試,PLC控制流完整機制的性能開銷如表2所示。

表2 性能開銷

由表2可以看出,本文提出的防御機制在平均情況下性能開銷約為3.6%,最差情況下性能開銷約為5.2%,保證了PLC的實時性。

工業控制控系統是專業性較強的系統,PLC應用的領域也比較固定,使用控制流完整性機制可以有效阻止由PLC安全漏洞所帶來的惡意攻擊問題。設計針對PLC的高效控制流完整性機制可大幅提升PLC的安全性,從而顯著提高工業控制系統的安全性。對PLC控制流完整性機制的下一步研究思路如下:進一步解決控制流完整性機制帶來的性能開銷問題;保證PLC在復雜控制邏輯下的實時性;找到合適的部署方式。

4 結束語

PLC設備的特點和控制邏輯帶來了不同的安全漏洞,對工業控制系統的安全性產生了嚴重威脅。本文分析了控制流完整性機制并將其引入到PLC設備中,提出了針對PLC的控制流完整性機制,以便有效地應對PLC中存在的安全威脅,并以此提高工業控制系統的安全性。但是本研究仍具有一定的局限性,在今后的研究中需要對PLC的安全漏洞進一步挖掘,并對PLC的控制流完整性機制所帶來的性能開銷以及部署問題做進一步研究。

猜你喜歡
控制流固件實時性
抵御控制流分析的Python 程序混淆算法
抵御控制流分析的程序混淆算法
基于控制流的盒圖動態建模與測試
航空電子AFDX與AVB傳輸實時性抗干擾對比
計算機控制系統實時性的提高策略
基于固件的遠程身份認證
提取ROM固件中的APP
基于控制流隱藏的代碼迷惑
一種通過USB接口的可靠固件升級技術
一種車載Profibus總線系統的實時性分析
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合