OPC(用于過程控制的OLE)被廣泛應用在控制系統中,用于提供不同供應商的設備和軟件之間的互操作性。
最新版本的OPC (OPC UA)在其設計中已經包括了安全性需求,但OPC“Classic”協議(OPC DA, OPC HAD和OPC A&E) 基于微軟的DCOM協議,DCOM協議是在網絡安全問題被廣泛認識之前設計的。因此,這些協議給那些希望能確??刂葡到y安全性和可靠性的工程師帶來了極大的挑戰。
本應用指南簡要介紹了與OPC相關的安全問題,并解釋了如何使用OPC enforcer保護OPC服務器和OPC客戶端。
OPC Classic的安全問題
大多數TPC和UDP通訊協議都使用單一的標準化端口號-例如,Modbus TCP通常使用502端口??蛻舳嗽O備建立對服務器設備502端口的連接,然后發送數據到服務器設備,或者接受來自服務器設備的數據。使用防火墻來保護這些客戶端和服務器設備相對而言比較簡單-只需設置防火墻,僅允許指定端口號的上的通訊,阻止其他所有的網絡通訊即可。
OPC Classic協議就不是如此簡單了。建立OPC連接需要以下兩步:
1、 客戶端通過135端口查詢服務器以獲取通訊所需的TCP端口號。
2、客戶端使用第一步獲取到的端口號連接到服務器,訪問目標數據。
步驟1中數據對象請求使用的端口號是標準化的,且是眾所周知的。然而,實際數據連接(步驟2)使用的端口號是由OPC服務器以一個虛擬隨機序列動態分配的,因此沒有辦法提前知道服務器返回給客戶端的端口號。另外,服務器可以分配的端口號范圍很廣-Windows Server 2008下超過16000個端口號,早期的端Windows版本則超過了48000個口號。
正因如此,傳統的防火墻在保護OPC服務器時,不得不允許OPC客戶端和OPC服務器之間如此大范圍內的任何端口號的TCP連接。在這種情況下,防火墻提供的安全保障被降至最低。因此,目前絕大多數的OPC服務器都在沒有任何防火墻保護的情況下運行,從而很容易受到惡意軟件和其他安全威脅的攻擊。
Tofino OPC Classic enforcer
Tofino OPC enforcer動態跟蹤OPC服務器分配的OPC數據連接的端口號。最低限度的打開通訊所需的防火墻的端口,允許數據連接通過,同時關閉所有未使用的端口。OPC enforcer也可以對OPC數據請求和響應信息執行“sanity check”,從而阻止任何不符合有關DCE/RPC標準的信息。
因此,OPC enforcer能夠對使用OPC Classic協議的系統提供有效的防火墻保護。OPC數據連接將暢通無阻地通過Tofino安全模塊(SA),而任何異常通訊和惡意通訊都將被阻擋,同時通過Firewall LSM產生報告。Tofino安全模塊提供的這些保護與Windows PC無關;不需要對OPC客戶端或服務器做任何更改。
使用范例
下面的內容介紹如何使用OPC enforcer來保護OPC客戶端和服務器設備之間的通信。在這個例子中,我們將用Matrikon OPC Explorer作為一個客戶端與Matrikon OPC仿真服務器進行通信。在OPC服務器和控制網絡的其余部分之間安裝Tofino安全模塊。組態管理平臺(CMP)用于配置和管理Tofino安全模塊。系統網絡結構圖如圖1所示。
CMP的配置
CMP使用戶可以通過拖放節點視圖圖標到網絡編輯器中(或者通過使用Tofino discovery 和 asset discovery功能),創建控制網絡模型。如果需要的話,可以模擬整個網絡,但是只有防火墻規則中涉及到的設備才是網絡模型中必須包含的。因此,案例中的OPC網絡的最終模型(圖2)是非常簡單的。
一旦模型創建完成后,必須激活Tofino安全模塊中的Firewall和OPC enforcer軟插件。這一工作在網絡編輯器中的Tofino圖標的“Modules”標簽頁中完成。
創建和配置防火墻規則
接下來,創建防火墻規則,允許客戶端和服務器之間的OPC通訊。參照以下步驟創建“talker”防火墻規則:
1、 雙擊OPC服務器的圖標顯示服務器的設置,然后單擊其中的firewall標簽頁。
2、在“network”視圖中(Tofino CMP的左上角)找到OPC客戶端圖標,然后將該圖標拖放到OPC服務器的firewall標簽頁中的“talker rules”一行。
3、 從“protocols”視圖(Tofino CMP的右下角)中將“OPC Classic TCP”協議拖放到服務器的firewall標簽頁中的OPC客戶端圖標上。
4、雙擊“OPC Classic-TCP”防火墻規則,將其權限改為“enforcer”,點擊“OK”。該權限設置使OPC enforcer能檢查計算機間的通訊,并且跟蹤被創建的OPC數據連接。
完成后的防火墻規則如圖3所示。點擊視圖底部的“OK”按鈕,新的規則即可保存到Tofino CMP中,同時也被下載到Tofino安全模塊中。
測試規則
獨特的“測試”模式允許所有的網絡通訊通過Tofino安全模塊,但對實際運行中會受阻的通訊產生報警信息。從而可以在不存在意外阻止正確工廠操作所需通訊的風險下,對防火墻和OPC enforcer規則進行測試。
使用“general/communication”標簽頁中底部的下拉控制,可以設置運行模式,在Tofino的工作模式改變后,必須停止并重啟OPC客戶端,這樣的話OPC enforcer就能發現數據連接請求,解析出所分配的端口號,并配置防火墻以便讓數據連接通過。
當OPC enforcer創建完防火墻規則,允許數據連接通過Tofino安全模塊后,將給CMP發送報警信息即“exception heartbeat”通知用戶。這些信息都顯示在屏幕底部的“event”視圖中。雙擊這些心跳信息中的某一條信息,將打開圖4所示詳細視圖。
通過監測異常事件,編輯防火墻和OPC enforcer的配置,用戶就能確保所有必需的系統通訊都能通過Toflno SA,同時也不會產生報警。測試完成后,可以將Tofino SA設置為運行模式,執行已配置好的規則。
OPC enforcer選項
有三個選項可用來控制OPC enforcer如何管理每個OPC連接。
“Sanity check”功能使OPC enforcer能檢查數據連接請求和響應是否符合DCE/RPC協議標準,并且阻止任何不標準的通訊。對于一些OPC客戶端和/或服務器,需要關閉該功能。
“Fragment check”功能使OPC enforcer能阻止不完整的DCE/RPC數據連接請求。和“Sanity check”相同,對于一些OPC客戶端,可能需要關閉該功能。
“connection T/O”定義了數據連接請求和實際數據連接開始之間的最長時間限制。如果由于某種原因,OPC客戶端不再創建數據連接,該設置將確保通過OPC enforcer在防火墻創建的“大門”及時關閉。默認的時間限制是5秒,但對于一些OPC客戶端,這個值可能需要增加。對Matrikon OPC Explorer的測試表明,10秒的超時設置對該客戶端是最佳的選擇,如圖5所示。
通過計算機名連接 VS 通過IP地址連接
如果OPC客戶端通過IP地址訪問OPC服務器,那么只需要OPC Classic-TCP防火墻規則。如果OPC客戶端被配置為不是通過OPC服務器的IP地址而是通過其計算機名訪問OPC服務器,那么在Tofino安全模塊中需要設置額外的防火墻規則,以便允許域名解析通訊通過防火墻。
在范例系統中,必須在OPC服務器的Firewall標簽頁中配置talker規則,允許OPC客戶端和OPC服務器之間的NetBIOS名字服務和NetBIOS數據報服務,如圖6所示。
在對等網絡配置中,為了相互定位,OPC客戶端和服務器還必須能發送和接受廣播NetBIOS通訊。在基于域的網絡中,這些機器必須能夠發送和接受往返于域控制器的NetBIOS通信。根據網絡的設計和使用的具體的通信協議,可能需要額外的broadband,talker和/或global規則。
對等網絡下的廣播規則設置如圖7所示。廣播規則在Firewall標簽頁中設置。
總結
Tofino OPC Classic enforcer為使用OPC Classic通信服務的OPC客戶端和服務器提供了有效的防火墻保護。OPC enforcer配置簡單,其特有的“測試”模式讓您在真正部署之前有機會對組態規則進行測試。