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