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