李騰飛,黃 相,萬振華,宋荊漢
(1.武漢科技大學計算機科學與技術學院,武漢 430065;2.深圳開源互聯網安全技術有限公司,深圳 518131)
復雜的ICS帶來了獨特的安全、安保和可靠性工程挑戰。冶金行業是我國國民經濟的支柱性產業,是關系國計民生的基礎性行業。冶金ICS生產包括球團、燒結、焦化、煉鐵、煉鋼、連鑄、軋制等多個復雜環節,受環境(輻射、高溫)等條件的限制,有些工序和環節必須應用自動化系統來輔助進行。自動化和信息化的高度融合已成為冶金行業的發展趨勢,以以太網為主的控制網絡系統得到普遍應用。
“德國工業4.0”“工業互聯網”“中國制造2025”等一系列概念的提出,進一步促進了ICS的變革。然而,僅有極少數ICS能在變革期中完成強大的安全防護,這是由于傳統的ICS幾乎不與互聯網發生交互行為,形成了絕對安全的“物理防護”,這使得大多數ICS在轉型過程中忽略巨大的信息安全隱患。如今,ICS發展迅速,數據采集與監控系統(SCADA)作為ICS的核心設備,除了保證系統提供的服務和數據外,最有可能成為網絡犯罪分子和黑客網絡攻擊的目標。表1列舉了近年來工業信息安全的事故案例。由于工業現場控制系統關乎國計民生,收到網絡攻擊后可直接造成人員傷亡、經濟損失、環境污染等嚴重后果,因此保護工業現場控制系統的信息安全具有極其重要的經濟價值和社會意義。

表1 ICS信息安全事故案例
冶金工藝過程管理的復雜性是由設備數量大、工藝過程連續性差、工藝參數不穩定等原因造成的,有關目標管理的決策可能會受到嚴重阻礙,其有效性可能會降低,所以需要比較先進的ICS。
冶金ICS系統結構如圖1所示,結合冶金行業特點,通過多層次的隔離防護措施、全面的監控手段、立體的防御技術來實現對ICS的整體安全防護,從而保障整個ICS安全穩定運行。在管理層與數采監控層之間,主要進行身份鑒別、訪問控制、入侵檢測、行為審計、病毒過濾等安全防護;在數采監控層和PLC系統層之間,主要基于工業控制通信協議進行訪問控制。

圖1 冶金ICS系統結構
隨著黑客攻擊手段和技術的日趨復雜和精密,針對ICS的攻擊源源不斷。作為復雜的混合流程工業,冶金行業的安全形勢比較嚴峻,主要表現在以下幾個方面:
冶金企業是典型的混合流程型企業,冶金企業具有工業領域生產流程的典型特點,自動化程度比較高,涉及到的自動化設備、子系統眾多,促使控制系統網絡拓撲比較龐大,復雜程度高,安全風險比較大。
冶金企業工藝流程涉及到大型設備,如高爐、轉爐、軋機機組等,受到攻擊時造成的損失也是無法估量的,因此冶金企業控制網絡安全形勢比較嚴峻。
由于冶金行業的控制網絡龐大且流程穩健,所以安全邊界難以界定;由于與物理世界的緊密聯系,網絡對實時性、可用性和業務連續性有很高的要求;由于目前移動存儲介質是ICS病毒傳播的主要途徑,所以安全規定要有很高的要求,這些要求也增加了系統信息安全管理的復雜性。
冶金ICS由于要兼顧成本和便利性,采用的都是通用的集成系統,如Windows7、WindowsXP和Linux。由于冶金過程停止運行成本過高,所以系統并未定期維護,導致人們所熟知的系統漏洞隱患一直存留。同時考慮到更換設備所造成的成本增加,所以冶金設備大部分控制站均為兼容機結構,這些專用設備可能并未考慮過安全問題,甚至一些控制器并沒有通信數據檢查功能。
由于冶金ICS對可靠性要求高,導致一些防御攻擊軟件需要經過繁瑣嚴格的審查流程后才能被允許安裝到ICS中。
上述因素導致冶金ICS面臨較高的安全隱患。
如圖1所示,PLC處于ICS架構的底層,直接控制冶金現場設備,同時兼顧通信功能。由于PLC是網絡和現實之間的交互點,因此它們一直是網絡攻擊的主要目標。最著名的針對PLC的攻擊“Stuxnet”對目標ICS造成了物理損壞。自“Stuxnet”以來,這些系統缺乏安全性的問題已受到越來越多的關注。
工業系統對PLC工業控制層次的威脅攻擊可分為3類:①網絡攻擊,即來自信息空間的網絡攻擊,如截取數據包并篡改數據分組,破壞其完整性;②系統攻擊,注入非法命令或組態進行攻擊,破壞PLC的控制邏輯,使得PLC的邏輯執行跳轉到攻擊者指定的功能塊上,從而達到精準實施攻擊的目標;③惡意代碼攻擊,篡改PLC正常運行邏輯,從而使得PLC異常運行。
目前很多PLC通信協議缺乏安全機制,一些不法分子抓住這些漏洞進行攻擊。
Lim等記錄了2017年對施耐德Tricon PLC的調查,使用逆向工程技術,確定了Tricon通信協議的結構,從而對PLC進行攻擊。Martín-Liras等在2017年對PLC使用的三種專有協議(S7Comm、UMAS、OptoComm)進行了比較分析,對有關協議漏洞的現有信息進行了研究。Ghaleb等在2018年的新出版物中記錄了對S7協議漏洞的調查分析,從而進行攻擊。
由于冶金工業生產過程中需要多個PLC程序協同工作,因此可以利用這些相連的PLC,將其中的一個PLC作為網關從而滲透整個ICS。Newman通過在線瀏覽網頁對監獄中的值班監控進行攻擊,雖然這兩者并未直接連接,但這確實是一個很容易攻擊的脆弱點。Klick在2015 USABlackHat上指出PLC最脆弱的攻擊點就是那些面向互聯網的PLC,然后將這些PLC作為網關來攻擊那些難以直接攻擊的PLC,從而致使整個ICS癱瘓。
PLC采用的大多是老舊的操作系統,這些系統在互聯網高速發展的時代早已因千瘡百孔而被淘汰。攻擊者通過這些操作系統的漏洞就可以輕而易舉地入侵到ICS中,從而攻擊PLC。常見的PLC使用的操作系統如表2所示。

表2 常用PLC的操作系統
Beresford在Black Hat2011上指出,直接攻擊Linux系統就可以連接到Simatic PLC設備,一旦這些以root權限運行的PLC程序受到攻擊,整體ICS就會產生巨大的損失。
PLC的惡意代碼同樣也是ICS安全的核心問題之一。周奇榮使用改進的KNN算法對PLC代碼進行檢測,通過實驗驗證了該方法的有效性。常天佑提出了一種基于狀態驗證的PLC惡意代碼檢測方法,解決了PLC代碼安全嚴重依賴工程師對代碼錯誤檢測,缺乏行為檢測的問題。陳志文等利用以太網數據監控和網絡數據現場管理技術,檢測PLC輸入輸出業務信息的一致性,實現PLC惡意代碼檢測。孟奐等通過調查PLC病毒攻擊機制,引入基于數據流分析的惡意PLC代碼檢測技術。
通過對工控系統行業漏洞庫平臺網站(http://ivd.winicssec.com)、CNVD工控漏洞子庫網站(https://ics.cnvd.org.cn)、國家信息安全漏洞共享平臺網站(https://www.cnvd.org.cn)和國家信息安全漏洞庫網站(http://www.cnnvd.org.cn)中PLC漏洞的收集總結,將PLC漏洞分為以下十種類型:緩沖器錯誤漏洞、安全漏洞、信息泄露漏洞、拒絕服務漏洞、授權問題漏洞、輸入驗證錯誤漏洞、跨站腳本漏洞、密碼漏洞的明文存儲、資源管理錯誤漏洞及其它漏洞。
這十種PLC漏洞占比如圖2所示,由圖2可知,安全漏洞最常見,占全部漏洞近40%;其次是緩沖器錯誤漏洞、拒絕服務漏洞和授權問題漏洞,這四種漏洞占據了總漏洞的約80%。

圖2 PLC漏洞類型占比圖
Fuzzing是目前檢測PLC協議漏洞最實用的方法之一,但是傳統的fuzzing方法存在無法自動獲取協議、耗時長、命中率低、異常定位困難等問題。為此,大量學者做了研究,如黃影等總結了目前傳統Fuzzing測試技術的問題,結合隱馬爾可夫模型、統計學、動態抽樣、關聯模糊策略、心跳檢測的存活檢測方案、Simhash的一致性檢測方案等方法,提出了改進的Fuzzing測試,以檢測PLC協議的漏洞。劉坤通過研究工控協議中各個字段之間的隱藏關系,設計了一種針對數據內容、消息、結構等多字段的改進Fuzzing技術,用以檢測PLC協議的漏洞。朱振乾等在分析工業管理系統現狀的基礎上,結合Wireshark和Nmap軟件對工業管理系統進行漏洞挖掘及分析,以檢測PLC協議的漏洞。
PLC語言由梯形圖、功能塊圖、順序功能流程圖、指令表、結構化文本組成,具體如圖3~圖7所示。

圖3 梯形圖

圖4 功能塊圖

圖5 順序功能流程圖

圖6 指令表

圖7 結構化文本
PLC直接控制著各類物理設備,PLC因語法錯誤導致ICS被攻擊將會嚴重威脅設備甚至人身安全。因此,PLC的安全性保證具有嚴格的要求,與此同時,PLC語法分析方法成為了學者們研究的熱門話題。PLC語法分析方法目前常用的有:模型檢測、靜態分析、定理證明、符號執行等。
模型檢測是一種廣泛使用的用于驗證程序有窮狀態是否滿足預定義命題性質的方法,Darvas等結合NuSMV和nuXmv模型檢測方法開發了一款新型模型檢測工具PLCverif。
靜態分析方法主要包括:抽象語法樹分析法、控制流分析法、數據流分析法、指針分析法等。李學良等建立基于Backus-Naur范式(BNF)的指令表語法模型構造抽象語法樹,該算法檢測僅有線性復雜度。張曄等使用控制流分析方法對PLC程序語法進行檢測,該方法首先用flex和bison構造抽象語法樹,然后抽象語法樹生成中間表示SSIR,最后基于SSIR構建程序控制流程圖對PLC程序進行檢測。黃海軍等通過分析程序點的關聯輸入狀態和關聯輸出狀態變化來檢測PLC程序中的問題。指針分析法通過指針代碼對內存操作行為進行分析,從而檢測代碼的正確性。由于PLC梯形圖難以轉化為結構化文本,王煒新等提出一種基于AOV(activity on vertex)圖和廣義表的轉換算法,將PLC梯形圖轉化為類匯編語言,解決了PLC梯形圖難以進行分析的難題。由于單一的靜態分析方法對PLC的檢測并不全面,常天佑等針對PLC程序在進行NuSMV模型檢測時無法對程序進行自動化建模的問題,提出一種PLC程序模型自動化構建方法,該方法首先將結構化文本語言解析為抽象語法樹;其次,基于抽象語法樹進行控制流分析,從而生成控制流圖;然后,通過數據流分析生成程序依賴圖;最后,根據程序依賴圖自動生成NuSMV輸入模型。實驗結果表明,所提方法與傳統手工模型構建方法相比,提高了模型生成的效率和準確率。
Biha等采用定理證明的方法將PLC程序轉化為數學公式,并用定理證明器進行分析與驗證。Mclaughlin等利用符號執行的方法分析程序的路徑約束,通過約束求解計算滿足目標約束的具體值,消除了不可達路徑的訪問,有效解決了PLC程序模型檢測中狀態爆炸的問題。
本文以冶金工業為背景,針對ICS安全進行了研究分析,首先對工業控制系統進行了簡述,從而對工業控制系統安全隱患進行研究分析。通過整理文獻,對ICS軟件的網絡、系統和惡意代碼威脅建模進行分析總結,同時對PLC常見漏洞進行了整理分析。最后對ICS軟件的PLC語法分析的研究現狀進行了分析。