趙悅琪,閔曉霜
(中國電子信息產業集團有限公司第六研究所,北京 102209)
可編程邏輯控制器(PLC) 在工控領域的應用逐漸廣泛,它的核心控制地位也逐漸提升。盡管市場上許多國外的PLC設備已經可以實現安全穩定的通信,但國產化是獨立發展民族經濟的重要措施,對國家有特別重要的意義,因此將軟硬件純國產的PLC系統投入市場使用有著極為重要和特別的意義,那么基于國產 PLC 進行標準化通信協議的開發就顯得很有價值。OPC統一架構(OPC UA)體系是一個基于網絡服務的不依賴于平臺的新標準,借助這樣一個標準,各種各樣的系統和設備能在不同網絡中以“客戶端/服務器”模式進行通信,它通過確認客戶端與服務器的身份和自動抵御攻擊來支持安全可靠的通信,大大提高了數據采集和處理的安全性和效率[1]。OPC UA借助其優勢,在國產PLC系統中的應用十分廣泛,但是通信過程中的安全問題還處在比較薄弱的階段,因此提供安全可靠的通信方案顯得尤為重要。OPC UA基金會提供了一個基本的安全模型,為客戶端和服務器之間的信息交換提供了保障,但是面對復雜的網絡環境和惡意的外部攻擊時還會暴露出基本模型存在的不足[2]。其中身份認證是在任何一次通信對話過程中都不可避免的環節,如果身份認證機制不夠安全,將會遭受諸如中間人攻擊、消息欺騙、口令竊聽等攻擊,使信息泄露甚至影響系統整體運行。本文針對國產化PLC系統與OPC UA通信過程的身份認證機制進行優化,以提高通信系統的安全性。
身份認證技術是信息安全的核心技術之一,它的發展直接決定了信息技術產業的發展,它是一種證實被認證對象是否屬實或有效的過程和技術,其基本思想是通過驗證被認證對象的屬性來達到證實其是否真實有效的目的[3],對于保證信息只被合法授權用戶獲取和訪問起著重要作用。本文在已有的身份認證手段基礎之上,基于安全模型的不足提出了一種雙向身份認證機制,對安全模型進行優化,使之在身份認證環節的安全性大大提高。
OPC UA基金會給用戶提供了一個基本的安全模型,這是一個允許在不同的應用環境中實現功能的通用的安全模型。OPC UA安全模型被構建在傳輸層之上的應用層和通信層中,定義描述了一個分層的方法,每一層都有對于安全問題的具體職責。文獻 [4]描述了基本安全模型的工作機制,其結構如圖1所示。

圖1 OPC UA 安全模型
OPC UA的身份認證和授權包含幾個不同的層面,分別是應用程序認證和授權、產品認證和授權、用戶認證和授權。其中,應用程序認證和授權使服務器可以驗證一個應用實例證書屬于某個OPC UA 客戶端,可否允許客戶端建立安全通道;用戶認證和授權是指OPC UA服務器可以驗證準備從服務器獲取數據的用戶確實是其所聲稱的用戶;產品認證和授權以及用戶認證和授權過程均是在會話建立期間進行的。
由于認證級別不同、傳輸憑據的類型不同,服務器將執行不同任務以驗證用戶身份。以應用程序認證和授權為例,圖2顯示了應用程序的認證過程。
具體地,客戶端用簽名的“打開安全通道請求”來證明其對證書關聯的私鑰的所有權,經過服務器用客戶端證書的公鑰來驗證客戶端身份,驗證后服務器端用私鑰對“打開安全通道請求”進行帶有自己的簽名的回應,客戶端也可以驗證從服務器接收的證書是服務器的證書以驗證其身份,最終達到建立安全通道的目的[4]。

圖2 應用程序認證過程
傳統的安全模型雖然一定程度上可以滿足安全需求,但是在國產化PLC 系統的應用當中卻面臨著種種問題。首先,無法防止冒充,一旦對話被黑客攻擊竊取到過程信息,就可以進行身份冒充,欺騙客戶端給出錯誤的數據或者欺騙服務器非法讀取數據;其次,無法防止重放攻擊,同一用戶或者服務器在進行認證時都提供相同的簽名和數字證書,極易被中間人攔截進行重放攻擊,從而獲取私密工業數據;此外,整個認證授權過程對于雙方的身份確認和隱私保護過程較為簡單,安全防護等級較低,無法應對工業控制領域中復雜的環境和來自外部的刻意攻擊,面臨著諸如消息欺騙、竊聽、會話劫持、用戶憑證泄密等威脅[5]。鑒于這些風險,提供一個雙向的、安全的身份認證模型對于安全通信十分重要。
基于上文提出的問題,本文設計了一種增強的雙向身份認證機制以提高安全性能,為了實現雙向的身份認證,本文使用審計系統作為權威第三方,以公鑰基礎設施(Public Key Infrastructure, PKI)技術作為認證過程中的基礎技術,通過證書和公私密鑰對來驗證用戶身份的合法性。增加了USBKey防護,USBKey是一種芯片級操作系統,所有讀寫和加密運算都在芯片內部完成,它自身所具備的存儲器可以用來存儲一些個人信息或證書,用來標識用戶身份,具有很高的安全性[6]。
優化后的系統主要包括如下幾部分。
(1)OPC UA客戶端和USBKey:OPC UA 客戶端主要實現系統和客戶的管理,為終端用戶提供一個簡潔、可操作的交互界面;系統對客戶端的每一個用戶都分發一個USBKey,當中存有用戶證書、用戶密碼口令和服務器公鑰。在USBKey與服務器連接成功后,OPC UA 的服務器可以從這里調用用戶的證書信息并進行加解密工作。
(2)控制代理器:它是客戶端和服務器進行信息交流的中介,主要用于接收用戶從客戶端發出的訪問請求和提交的認證信息,并將這些信息轉發給服務器端。在用戶認證成功后,它成為用戶訪問資源數據庫的代理服務器。
(3)OPC UA服務器端和用戶信息數據庫:OPC UA服務器主要是接收由控制代理轉發來的用戶信息,接收后與用戶信息數據庫中的信息進行對照,完成對客戶端的認證工作。
(4)審計系統:包括審計服務器和審計數據庫,其中數據庫用于存儲用戶名和OPC UA服務器生成的隨機序列碼,審計服務器負責對數據庫中的內容進行數字簽名。
設計的身份認證系統邏輯結構如圖3所示。

圖3 雙向身份認證系統
上述系統的具體認證過程步驟如圖4所示。

圖4 雙向身份認證流程
(1)客戶端的用戶將自己的USBKey插入PC的USB接口,輸入用戶名和口令,如果口令正確,控制代理器與USBKey建立連接,否則失敗。
(2)連接成功后,控制代理器會從USBKey中調用用戶證書,并轉發給OPC UA服務器端。
(3)服務器收到證書后會提取其中的用戶名、用戶公鑰和證書序列號S,并根據用戶名在用戶信息數據庫中查找,如果存在,認證過程繼續,否則認證失敗。
(4)如果在數據庫中找到了用戶信息,服務器會根據該信息在輕量目錄訪問協議服務器(Lightweight Directory Access Protocol,LDAP)中找到用戶證書序列號S,并與上一步驟中獲取的證書序列號S比對,如果相等則驗證成功,否則失敗,OPC UA服務器會將驗證結果進行簽名后存到審計數據庫中;
(5)在步驟(3)中,OPC UA服務器提取了證書的用戶名信息,此時會產生一個隨機的序列碼M,M和用戶名綁定形成UserM,服務器調用自己的私鑰KS和用戶的公鑰KU分別對這組信息加密,得到KS(UserM)和KU(UserM),KS(UserM)通過控制代理器存入USBKey中,KU(UserM)通過審計服務器存入到設計數據庫中。
(6)OPC UA客戶端收到KS(UserM)后,利用OPC UA 服務器的公鑰PS進行解密PS(KS(UserM)),得到UserM,再利用用戶的公鑰KU進行加密得到KU(UserM),結果發送到審計服務器。
(7)審計服務器把步驟(6)得到的KU(UserM)和步驟(5)得到KU(UserM)的進行比對,如果結果一致則認證成功,否則失敗。
(8)只有在步驟(4)和步驟(7)中的認證都成功時,控制代理器才會將OPC UA客戶端和服務器接通,用戶可以訪問服務器中的過程數據,否則連接失敗。
這樣的認證過程就實現了安全的雙向身份認證,步驟(1)~(4) 是OPC UA服務器對用戶身份的驗證,步驟(5)~(8)則實現了用戶對服務器身份的認證,當雙向認證成功后即可以建立資源訪問。認證的結果同時被詳細地記錄在審計數據庫中,已備日后在發生糾紛時作為第三方對通信雙方進行仲裁[7]。
本文是基于國產自主可控 PLC系統與 OPC UA 通信過程的優化設計,整個過程要通過建立起帶有 OPC UA 客戶端和服務器的PC與PLC之間的連接,進行 OPC UA 數據交互,實現控制 PLC 運行、讀取現場工業數據、讀取PLC 控制器數據等功能,OPC UA 的應用環境十分復雜,可能發生在控制網絡層、操作網絡層、企業網絡層甚至連接到互聯網,具體使用環境如圖5所示。

圖5 國產PLC系統中的OPC UA
由圖5可知OPC UA 客戶端和服務器的交互既可能發生在公司內部網絡的各個層面,也可能發生在互聯網層面之中,安全問題會隨著網絡層級的提升而愈發復雜,在身份認證的環節更是有可能遭受到各種攻擊。而優化后的安全模型利用PKI技術,既保障了服務器不被非法訪問,也可以防止黑客干擾客戶端的信息訪問,在面對復雜的網絡環境的情況下顯現出了以下幾個方面的優勢。
(1)用戶信息保密:安全套接層(Secure Sockets Layer,SSL)是為網絡通信提供安全及數據完整性的一種安全協議,在傳輸層對網絡連接進行加密,本文方案用戶信息選擇通過SSL協議進行傳輸,可以防止網絡監聽。
(2)防止重放攻擊:每次認證時服務器會向客戶端發送一個隨機序列碼,因此即使信息被黑客截獲也無法重放。
(3)防止冒充:只有用戶同時拿到USBKey并知道密碼口令才能進行認證,而服務器也具有自己的私鑰防止了中間人偽裝。
(4)提供詳細的審計記錄:每次認證都會把雙方的認證結果記錄到審計數據庫中,以備日后需要時查看。
在完整的PLC通信系統中并不是每個身份認證的環節都需要用到復雜的認證方式,因為算法和方式的復雜會增加系統消耗的時間,在PLC底層數據采集的過程中建立簡單的安全模型即可,當更上一級的客戶端(如HMI系統、SCADA系統中的客戶端)訪問數據時,尤其是在互聯網的環境下,面臨的風險也增加,所以此處選擇更為完善的身份認證機制更為可靠,也為后續的數據交互提供保障[8]。
本文結合國產化PLC系統的安全需求,從OPC UA 的安全模型出發,以身份認證技術為切入點,分析傳統安全模型安全性能的不足之處,對身份認證環節進行了雙向驗證的優化設計,完善了安全模型的功能。同時,在應用環境中對其安全性進行分析,在實現雙向認證功能的基礎上能達到用戶信息保密、防止重放攻擊、防止冒充等安全目標,同時還可以提供詳細的審計記錄以備使用。
在國產PLC系統的不同網絡層級可以采取不同的安全策略,以在保證整個系統安全的基礎之上提高運行效率,體現出OPC UA系統的靈活性。但除了身份認證環節外,OPC UA客戶端和服務器的交互過程中還有很多要解決的問題,安全模型還應該從不同角度進行優化,使其更加適用于國產化PLC系統的使用環境。這也是接下來要研究的重點內容。