一種基于Modbus/TCP深度解析的協(xié)議隔離方法
【專利摘要】本發(fā)明涉及一種基于Modbus/TCP深度解析的協(xié)議隔離方法,本方法采用的技術方案主要基于虛擬化技術在高安全級別網(wǎng)絡對外邊界和內(nèi)部不同安全級別網(wǎng)絡邊界部署安全策略。整體結構分為流量牽引、協(xié)議清洗和數(shù)據(jù)擺渡。流量牽引模塊負責將物理數(shù)據(jù)包導入到指定的虛擬機中,協(xié)議清洗模塊負責將導入的數(shù)據(jù)包進行協(xié)議識別、數(shù)據(jù)內(nèi)容安全檢測和私有協(xié)議封裝與解析等工作,數(shù)據(jù)擺渡則是利用虛擬機共享內(nèi)存對私有協(xié)議數(shù)據(jù)進行數(shù)據(jù)擺渡。針對不同的應用層協(xié)議進行正確且安全的流量過濾,本方案能夠安全地擺渡協(xié)議數(shù)據(jù),攻擊者在正常狀態(tài)下無法獲取交互數(shù)據(jù),本方案基于虛擬化技術的共享內(nèi)存機制模擬物理網(wǎng)閘中的專用介質,進行數(shù)據(jù)擺渡提高處理性能,滿足實時性需求。
【專利說明】
一種基于Modbus/TCP深度解析的協(xié)議隔離方法
技術領域
[0001] 本發(fā)明屬于工業(yè)控制領域和信息技術領域,涉及一種工控系統(tǒng)中常用的通用協(xié)議 Modbus/TCP深度解析的協(xié)議隔離方法,尤其涉及一種基于Modbus/TCP深度解析的協(xié)議隔離 方法。
【背景技術】
[0002] 工業(yè)控制系統(tǒng)廣泛應用于電力、化工、油氣開采、交通運輸?shù)葒谊P鍵基礎設施領 域,因而工業(yè)控制系統(tǒng)的安全關系到國家安全。近年來,隨著工業(yè)以太網(wǎng)技術的快速發(fā)展, TCP/IP等互聯(lián)網(wǎng)技術被引入到工業(yè)控制系統(tǒng)中。在將TCP/IP技術的安全威脅引入到工業(yè)控 制系統(tǒng)中的同時,亦破壞了工業(yè)控制系統(tǒng)的封閉性。將工業(yè)控制系統(tǒng)中廣泛使用的私有協(xié) 議的設計和實現(xiàn)中的漏洞暴露給攻擊者,給工業(yè)控制系統(tǒng)帶來了巨大的威脅。
[0003] 工業(yè)控制網(wǎng)絡與傳統(tǒng)IT網(wǎng)絡存在著巨大差異。工業(yè)控制系統(tǒng)一般情況下?lián)碛泄潭?數(shù)量的設備,可預測的通信流及私有通信協(xié)議,最重要的是高可用性需求。由于工業(yè)控制系 統(tǒng)網(wǎng)絡的特殊性,傳統(tǒng)的IT安全保護機制是無效的。廣泛部署的工業(yè)控制系統(tǒng)私有協(xié)議如: DNP3、Modbus、Modbus/TCP中沒有提供安全控制,給攻擊者提供了較多可以利用的漏洞。工 控網(wǎng)絡對于安全性的要求越來越高,不論是傳統(tǒng)網(wǎng)閘類產(chǎn)品還是入侵檢測類產(chǎn)品都有各自 明顯的缺陷,而工控環(huán)境對于這些缺陷更加敏感,因而單純地依靠某種產(chǎn)品是不可行的。網(wǎng) 閘類安全產(chǎn)品運用應用協(xié)議剝離和轉換的方法實現(xiàn)了兩側的通信協(xié)議阻斷,有效降低了網(wǎng) 絡協(xié)議帶來的安全攻擊概率,通過對剝離數(shù)據(jù)的安全審查和控制更是大大提高了網(wǎng)絡安全 性。但網(wǎng)閘類產(chǎn)品適用范圍較窄,需要開發(fā)相應的交換模塊,而且物理網(wǎng)閘的交換速度已經(jīng) 接近該技術的理論極限,可以預見物理網(wǎng)閘會成為瓶頸。工控系統(tǒng)的安全威脅集中于工控 協(xié)議,而現(xiàn)有的解決方案是在傳統(tǒng)安全產(chǎn)品基礎上針對工控環(huán)境單一地增加安全功能,缺 乏通用性和可擴展性。與傳統(tǒng)的工控安全方案相比,本方法融合了物理網(wǎng)閘和防火墻各自 的優(yōu)點,企業(yè)可以根據(jù)不同的網(wǎng)絡環(huán)境定制虛擬機模板,能夠部署到工控網(wǎng)絡邊界上,有針 對性地對數(shù)據(jù)流量進行安全過濾與隔離,利用Xen虛擬技術提升隔離性能和可擴展性,滿足 企業(yè)的安全需求。
【發(fā)明內(nèi)容】
[0004] 為了解決上述問題,本方法采用的技術方案主要基于虛擬化技術在高安全級別網(wǎng) 絡對外邊界和內(nèi)部不同安全級別網(wǎng)絡邊界部署安全策略。整體結構分為流量牽引、協(xié)議清 洗和數(shù)據(jù)擺渡。流量牽引模塊負責將物理數(shù)據(jù)包導入到指定的虛擬機中,協(xié)議清洗模塊負 責將導入的數(shù)據(jù)包進行協(xié)議識別、數(shù)據(jù)內(nèi)容安全檢測和私有協(xié)議封裝與解析等工作,數(shù)據(jù) 擺渡則是利用虛擬機共享內(nèi)存對私有協(xié)議數(shù)據(jù)進行數(shù)據(jù)擺渡。
[0005] 為實現(xiàn)上述目的,本發(fā)明采用的技術方案為一種基于Modbus/TCP深度解析的協(xié)議 隔離方法,
[0006] 在Xen虛擬環(huán)境下的協(xié)議隔離,用兩臺Guest 0S分別模擬協(xié)議隔離的內(nèi)、外網(wǎng)處理 單元。Guest OS上部署協(xié)議清洗模塊,在協(xié)議清洗模塊首先對IP數(shù)據(jù)流量解析,剝離掉TCP/ IP的協(xié)議特征,阻斷基于TCP/IP協(xié)議特征的攻擊,得到應用層協(xié)議數(shù)據(jù),然后按照私有協(xié)議 定義的屬性和規(guī)則,將該數(shù)據(jù)包構造成私有協(xié)議數(shù)據(jù)包并用深度檢測方法進行安全檢測, 保證Modbus/TCP數(shù)據(jù)內(nèi)容的合法性。
[0007] 1)協(xié)議隔離思想
[0008] Modbus/TCP的通信解釋如下。
[0009] (1)在Xen環(huán)境下,搭建兩臺VM分別模擬協(xié)議隔離的內(nèi)網(wǎng)處理單元即VM1和外網(wǎng)處 理單元即VM2。
[0010] (2)客戶機發(fā)起的Modbus/TCP請求,首先發(fā)給VMUVM1對收到的Modbus/TCP請求進 行協(xié)議解析,剝離出頭部信息和原始數(shù)據(jù)。之后VM1將剝離出來的數(shù)據(jù)經(jīng)過協(xié)議清洗模塊的 安全檢測后,以共享內(nèi)存的方式擺渡給VM2JM2收到剝離出的數(shù)據(jù)后,根據(jù)數(shù)據(jù)中的頭部信 息,得到真正的服務器地址,同時將數(shù)據(jù)重新封裝為Modbus/TCP協(xié)議,發(fā)送給Modbus/TCP服 務器。
[0011] (3 )Modbus/TCP服務器收到Modbus/TCP客戶機請求后,做出響應,將響應報文發(fā)給 VM2JM2對收到的響應報文進行協(xié)議解析,剝離出頭部信息和原始數(shù)據(jù)。VM2將剝離出的數(shù) 據(jù)經(jīng)過協(xié)議清洗模塊的安全檢測之后,以共享內(nèi)存的方式擺渡給VMUVM1收到剝離出的數(shù) 據(jù)和頭部信息后,重新封裝成Modbus/TCP協(xié)議發(fā)送給客戶機。
[0012] (4)至此,完成一次Modbus/TCP客戶機和Modbus/TCP服務器之間的通信。
[0013] 2)協(xié)議隔離的整體架構
[0014] 圖1表示Xen虛擬化平臺的協(xié)議隔離架構,包括VMM上的流量牽引模塊、數(shù)據(jù)擺渡模 塊以及兩臺虛擬機,其中兩臺虛擬機上均部署有協(xié)議清洗模塊。兩臺虛擬機通過數(shù)據(jù)擺渡 的方式交換數(shù)據(jù),在數(shù)據(jù)擺渡的時候需要用到同步機制,數(shù)據(jù)擺渡功能封裝在數(shù)據(jù)擺渡模 塊。
[0015] 3)協(xié)議隔離的處理流程
[0016] 協(xié)議隔離處理流程如圖2所示,主要工作包括:
[0017] (1)虛擬化平臺收到來自設備A的連接請求后,交給流量牽引模塊處理。
[0018] (2)流量牽引模塊根據(jù)制定的流表將流量牽引至VM1進行處理。VM1收到數(shù)據(jù)包后, 交由協(xié)議清洗模塊進行解析和安全檢測,若檢測不通過,則丟棄數(shù)據(jù)包;若檢測通過,則將 數(shù)據(jù)包的應用層原始數(shù)據(jù)進行私有協(xié)議封裝,發(fā)送到數(shù)據(jù)擺渡模塊。
[0019] (3)數(shù)據(jù)擺渡模塊利用共享內(nèi)存將私有協(xié)議數(shù)據(jù)包擺渡至VM2。VM2收到VM1"擺渡" 過來的私有協(xié)議數(shù)據(jù)包后,VM2協(xié)議清洗模塊進行解析,按照相應的TCP/IP協(xié)議格式將數(shù)據(jù) 重新封裝為標準的TCP/IP協(xié)議數(shù)據(jù)包,之后轉發(fā)給流量牽引模塊。
[0020] (4)流量牽引模塊根據(jù)相應的流表規(guī)則將數(shù)據(jù)包發(fā)送給設備B。
[0021] 流量牽引模塊負責將數(shù)據(jù)流量導入指定的虛擬機中,是實現(xiàn)安全功能的基礎和前 提。流量牽引模塊是由OpenFlow和OpenvSwitch(OVS)組建而成,其功能是將指定網(wǎng)口的數(shù) 據(jù)包導入指定虛擬機中,并將指定虛擬機的數(shù)據(jù)包導出到指定物理網(wǎng)口。流量牽引模塊由 OpenFlow協(xié)議作為控制協(xié)議,OpenvSwitch作為虛擬交換機,向上由管理員通過OpenFlow協(xié) 議控制,其中的流表管理就是協(xié)議下發(fā)實現(xiàn)。流量牽引模塊的核心是流表,它是整個模型中 的流量開關,直接決定網(wǎng)絡的通斷和數(shù)據(jù)的流向。
[0022] 協(xié)議清洗模塊將牽引模塊牽引過來的IP數(shù)據(jù)流量解析,剝離出應用層協(xié)議數(shù)據(jù), 然后按照私有協(xié)議定義的屬性和規(guī)則,將該數(shù)據(jù)包構造成私有協(xié)議數(shù)據(jù)包并進行安全檢 測 。
[0023] 協(xié)議清洗模塊的主要工作包括如下:
[0024] (1 )VM1收到流量牽引模塊牽引過來的數(shù)據(jù)包后,首先對數(shù)據(jù)包進行剝離,得到應 用層數(shù)據(jù),依據(jù)規(guī)則構建私有協(xié)議數(shù)據(jù),同時對應用層數(shù)據(jù)進行安全性檢測。檢測不通過, 直接丟棄該數(shù)據(jù)包,中斷通信連接。檢測通過,則通過數(shù)據(jù)擺渡模塊將私有協(xié)議數(shù)據(jù)包擺渡 到 VM2。
[0025] (2)VM2收到數(shù)據(jù)擺渡模塊擺渡過來的私有協(xié)議數(shù)據(jù)包后,首先對私有協(xié)議數(shù)據(jù)包 進行完整性校驗,同時解析私有協(xié)議數(shù)據(jù)包得到原始的應用層數(shù)據(jù),按照標準的TCP/IP協(xié) 議將協(xié)議數(shù)據(jù)重新封裝成標準的TCP/IP協(xié)議數(shù)據(jù)包。最后VM2將重新封裝好的標準TCP/IP 協(xié)議數(shù)據(jù)包通過流量牽引模塊發(fā)到網(wǎng)絡。協(xié)議清洗模塊流程圖如圖5。
[0026]共享內(nèi)存的方式能夠加快數(shù)據(jù)交換,因而在數(shù)據(jù)擺渡模塊利用Xen的共享內(nèi)存方 式,完成數(shù)據(jù)交換。數(shù)據(jù)交換的過程中用Grant Table機制創(chuàng)建共享內(nèi)存,通過生產(chǎn)者/消費 者及XenStore機制進行數(shù)據(jù)同步。在數(shù)據(jù)擺渡的過程中傳輸?shù)氖撬接袇f(xié)議數(shù)據(jù),私有協(xié)議 數(shù)據(jù)剝離了 TCP/IP協(xié)議特征,能夠阻斷基于TCP/IP協(xié)議的攻擊行為,從而保證擺渡過程中 數(shù)據(jù)的安全性。
[0027] VM1和VM2之間的通信通過數(shù)據(jù)擺渡的方式實現(xiàn),VM1的協(xié)議清洗模塊完成私有協(xié) 議的構建后,VM1和VM2建立起兩個虛擬的內(nèi)存環(huán)形隊列,分別用于數(shù)據(jù)發(fā)送和數(shù)據(jù)接收。 [0028] (1 )VM1根據(jù)在特權虛擬機下維護的事件通道表,查詢VM2相關的地址信息。若匹配 到相應的VM2地址和端口的信息,則說明能夠建立通信連接,準備進行下一步操作。若匹配 不到,則終止本次通信。
[0029] (2)Xen利用Grant Table機制建立共享內(nèi)存即兩個實際內(nèi)存環(huán)形隊列,準備接收 和發(fā)送數(shù)據(jù),與此同時Xenstore同步更新虛擬機的狀態(tài)。XenStore是Xen下的不同虛擬機間 的共享存儲區(qū),以鍵/值的形式存儲VM相關的配置和狀態(tài)信息。在共享內(nèi)存建立之前,通過 XenStore傳遞同步控制信息,確保VM1和VM2對共享內(nèi)存讀寫的正確性。
[0030] (3)VM1將建好的共享內(nèi)存信息,通過事件通道機制通知VM2,VM1和VM2準備通過共 享內(nèi)存進行數(shù)據(jù)通信。
[0031] (4)VM1將協(xié)議清洗模塊構建好的私有協(xié)議數(shù)據(jù)寫入共享內(nèi)存,此時在同步互斥機 制的控制下,VM2不可以從該共享內(nèi)存讀取數(shù)據(jù)。
[0032] (5)VM1向共享內(nèi)存寫入數(shù)據(jù)后,通過事件通道通知VM2。隨后VM2從共享內(nèi)存讀取 數(shù)據(jù),讀取完畢后通知VM1,同時將數(shù)據(jù)交VM2的協(xié)議清洗模塊處理。VM1接收到VM1發(fā)送的讀 取完畢事件通知消息后,根據(jù)實際情況接著寫或者是直接退出。
[0033] 本發(fā)明與現(xiàn)有技術相比,有以下優(yōu)勢:
[0034] 針對不同的應用層協(xié)議進行正確且安全的流量過濾,本方案中基于虛擬化的數(shù)據(jù) 擺渡方法能夠安全地擺渡協(xié)議數(shù)據(jù),攻擊者在正常狀態(tài)下無法獲取交互數(shù)據(jù),本方案基于 虛擬化技術的共享內(nèi)存機制模擬物理網(wǎng)閘中的專用介質,進行數(shù)據(jù)擺渡,提高處理性能,滿 足實時性需求。
【附圖說明】
[0035]圖1:協(xié)議隔離架構圖。
[0036] 圖2:協(xié)議隔離處理流程。
[0037]圖3 :Proto_Handle 結構體。
[0038]圖4:流量牽引模塊架構圖。
[0039]圖5:協(xié)議清洗模塊流程。
[0040]圖6:數(shù)據(jù)擺渡模塊流程。
[0041]圖7:協(xié)議檢測流程。
【具體實施方式】
[0042] 首先對該部分幾個名詞進行解釋:
[0043] 可信功能碼包括組態(tài)軟件實現(xiàn)的少數(shù)功能碼以及用戶確認的自定義的功能碼;因 每個功能碼可定義多個子功能碼或無子功能碼;每個可信功能碼對應一個可信功能碼列 表、一個敏感子功能碼列表以及不可用的子功能碼。
[0044]可信功能碼列表僅包含可信功能碼。
[0045] 敏感子功能碼從屬于一個可信功能碼;指系統(tǒng)需要,但被非法利用將引起系統(tǒng)故 障的子功能碼。如功能碼08的子功能碼01。
[0046] 敏感子功能碼列表由敏感子功能碼組成的列表;其中每個敏感子功能碼與IP地址 對(源IP地址和目的IP地址)白名單關聯(lián);每個敏感子功能碼列表從屬于一個可信功能碼。
[0047] 可信子功能碼從屬于一個可信功能碼;指無威脅特征的子功能碼,系統(tǒng)中所有設 備均可執(zhí)行該子功能碼。
[0048] 可信子功能碼列表由可信子功能碼組成的列表,每個可信子功能碼列表從屬于一 個可信功能碼。
[0049] 讀寫功能碼列表是定義的8種常見讀寫功能碼的列表,是表1列出的功能碼。
[0050] 表1讀寫功能碼與數(shù)據(jù)域關系列表
[0051]
[0052] 備注:寫多個線圈中,N =輸出數(shù)量/8,若余數(shù)不為0,N = N+1,寫多個寄存器中N為 寄存器數(shù)量。
[0053] Modbus/TCP協(xié)議檢測算法如圖6所示:
[0054] 步驟l:M〇dbus/TCP應用報文在發(fā)送前,需建立相應的socket,本檢測方法讀取和 存儲源IP地址、目的IP地址和目的端口號。
[0055] 步驟2:本檢測方法對源IP地址和目的IP地址進行檢驗,判斷IP地址是否在可信任 的地址列表中。若源IP地址和目的IP地址均在可信任的地址列表中,則檢測通過;否則拒絕 該socket的連接請求。
[0056]步驟3:本檢測方法判斷目的端口號是否為502。檢測通過,執(zhí)行步驟4;否則拒絕該 報文。
[0057]步驟4:本檢測方法讀取事務標識符,檢測事務處理標識符是否合標準,如是否為2 個字節(jié)。檢測通過執(zhí)行步驟5,否則拒絕該報文。
[0058]步驟5:檢測方法校驗MBAP中的協(xié)議標識符字段是否為0。協(xié)議標識符字段是0,執(zhí) 行步驟6;否則拒絕該報文。
[0059]步驟6:檢測方法將長度字段的值與單元標識符和Modbus數(shù)據(jù)字段的總長度進行 比較。值相等,執(zhí)行步驟7;否則拒絕該報文。
[0060] 步驟7:檢測方法判斷單元標識符。若遠程設備直接連接在TCP/IP網(wǎng)絡中,則單元 標識符應為Oxff;若連接在串行鏈路網(wǎng)關上,則一個IP地址對應多個終端設備,依據(jù)單元標 識符來識別不同的終端設備,此時有效范圍為0-255。若單元標識符字段合法,則執(zhí)行步驟 8,否則拒絕該報文。
[0061] 步驟8:檢測方法判斷功能碼是否為定義的讀寫操作功能碼。若是定義的讀寫操作 功能碼,則執(zhí)行步驟9;否則執(zhí)行步驟10。
[0062] 步驟9:檢測方法讀取數(shù)據(jù)對象起始地址字段,判斷起始地址是否合法。若起始地 址合法,檢測方法進一步判斷該功能碼是讀操作還是寫操作。若該功能碼是讀操作,檢測方 法校驗數(shù)據(jù)字節(jié)數(shù)是否合法,若字節(jié)數(shù)合法,該報文通過檢測;若字節(jié)數(shù)不合法,拒絕該報 文。若是寫操作,檢測方法判斷寫入的字節(jié)個數(shù)和寫入數(shù)據(jù)是否合法,合法則該報文通過檢 測;不合法則拒絕該報文。若起始地址不合法,拒絕該報文。
[0063] 步驟10:檢測算法判斷功能碼是否在可信任列表中。若該功能碼在可信任列表中 執(zhí)行步驟11,否則拒絕該報文。
[0064] 步驟11:檢測算法判斷數(shù)據(jù)域第一個字節(jié)是否為子功能碼。若是子功能碼執(zhí)行步 驟12,否則執(zhí)行步驟13。
[0065] 步驟12:檢測方法讀取該功能碼的可信子功能碼列表,看該子功能碼是否在該列 表中。若在可信子功能碼列表中,該報文通過檢測。否則,檢測方法繼續(xù)查找敏感子功能碼 列表。如果該子功能碼在敏感子功能碼列表中,檢測方法繼續(xù)查找該敏感子功能碼的IP地 址對白名單,判斷本報文的IP地址對是否在該敏感子功能碼的IP地址對白名單中。若該IP 地址對在IP地址對白名單中,則該子功能碼通過檢測,否則拒絕該報文。如果該子功能碼也 不在敏感子功能碼列表中,拒絕該報文。
[0066] 步驟13:檢測方法讀取數(shù)據(jù)字段關鍵信息,判斷關鍵信息是否合法。若合法,則檢 測通過,否則拒絕該報文。例如根據(jù)長度規(guī)則判斷該功能碼對應的報文長度是否合法。 [0067] 協(xié)議隔離處理流程如圖2所示,主要工作包括:
[0068] (1)虛擬化平臺收到來自設備A的連接請求后,交給流量牽引模塊處理。
[0069] (2)流量牽引模塊根據(jù)制定的流表將流量牽引至VM1進行處理。VM1收到數(shù)據(jù)包后, 交由協(xié)議清洗模塊進行解析和安全檢測,若檢測不通過,則丟棄數(shù)據(jù)包;若檢測通過,則將 數(shù)據(jù)包的應用層原始數(shù)據(jù)進行私有協(xié)議封裝,發(fā)送到數(shù)據(jù)擺渡模塊。
[0070] (3)數(shù)據(jù)擺渡模塊利用共享內(nèi)存將私有協(xié)議數(shù)據(jù)包擺渡至VM2。VM2收到VM1"擺渡" 過來的私有協(xié)議數(shù)據(jù)包后,VM2協(xié)議清洗模塊進行解析,按照相應的TCP/IP協(xié)議格式將數(shù)據(jù) 重新封裝為標準的TCP/IP協(xié)議數(shù)據(jù)包,之后轉發(fā)給流量牽引模塊。
[0071 ] (4)流量牽引模塊根據(jù)相應的流表規(guī)則將數(shù)據(jù)包發(fā)送給設備B。
[0072] 1)流量牽引模塊負責將數(shù)據(jù)流量導入指定的虛擬機中,是實現(xiàn)安全功能的基礎和 前提。流量牽引模塊是由OpenFlow和OpenvSwitch(OVS)組建而成,其功能是將指定網(wǎng)口的 數(shù)據(jù)包導入指定虛擬機中,并將指定虛擬機的數(shù)據(jù)包導出到指定物理網(wǎng)口。流量牽引模塊 由OpenFlow協(xié)議作為控制協(xié)議,OpenvSwitch作為虛擬交換機,向上由管理員通過OpenFlow 協(xié)議控制,其中的流表管理就是協(xié)議下發(fā)實現(xiàn)。流量牽引模塊的核心是流表,它是整個模型 中的流量開關,直接決定網(wǎng)絡的通斷和數(shù)據(jù)的流向。
[0073] 圖4主要由數(shù)據(jù)包接收(發(fā)送)端,數(shù)據(jù)流表項以及執(zhí)行動作集構成。
[0074] (1)數(shù)據(jù)包接收(發(fā)送)端:提供數(shù)據(jù)包的入口和出口(類似于物理交換機的以太網(wǎng) 口)來交換數(shù)據(jù)包。流量迀移模塊可以虛擬出N個端口,并為每一個端口分配端口號。為了防 止與外網(wǎng)IP沖突,可以創(chuàng)建一個虛擬網(wǎng)絡空間(類似于NAT ),將端口放入其中。
[0075] (2)流表項集:流表項集,包含每一條管理員添加的流表,流表中的字段可以包含 端口號、VLAN號、源物理地址、目的物理地址、以太網(wǎng)類型、源IP地址及目的IP地址等。
[0076] (3)執(zhí)行動作集:執(zhí)行動作集對應于流表項,即每個流表項都會有一個動作集與之 對應。當數(shù)據(jù)包經(jīng)過流量牽引模塊進行流表匹配后,會在執(zhí)行動作集中查看已經(jīng)匹配的流 表所對應的動作并執(zhí)行。執(zhí)行動作集支持的操作包括輸出數(shù)據(jù)包到指定端口,修改數(shù)據(jù)包 源/目的MAC地址,修改數(shù)據(jù)包源/目的IP地址,修改流表的字段等。
[0077] (4)控制器:基于OpenFlow協(xié)議,遠程或者本地配置宿主機上的流量牽引模塊。主 要配置對象就是流表項,控制器還可以接收未匹配任何流表項的數(shù)據(jù)包,并作默認操作。
[0078] 流量牽引模塊位于宿主機上,物理網(wǎng)口和虛擬網(wǎng)口都映射在流量牽引模塊。數(shù)據(jù) 流向根據(jù)該模塊中的流表表項確定,數(shù)據(jù)包在流量牽引模塊與流表項執(zhí)行匹配操作。如果 該數(shù)據(jù)包匹配到流表項,執(zhí)行該流表項的動作集,否則被丟棄。流量牽引模塊的目的是正確 地導向和管理流量,保證通信數(shù)據(jù)被正確地解析、檢測和擺渡。
[0079] 2)協(xié)議清洗模塊將牽引模塊牽引過來的IP數(shù)據(jù)流量解析,剝離出應用層協(xié)議數(shù) 據(jù),然后按照私有協(xié)議定義的屬性和規(guī)則,將該數(shù)據(jù)包構造成私有協(xié)議數(shù)據(jù)包并進行安全 檢測。
[0080] 私有協(xié)議的構建,關系到數(shù)據(jù)交換的安全,因而重點介紹私有協(xié)議的關鍵數(shù)據(jù)結 構見圖3。
[0081 ] Proto_Handler結構體包括私有協(xié)議構造的基本信息:協(xié)議的身份標識、協(xié)議列 表、協(xié)議的安全檢測方法及實際應用數(shù)據(jù)。以Modbus/TCP協(xié)議為例,上述私有協(xié)議的結構體 中協(xié)議名稱字段是Modbus/TCP,協(xié)議列表字段如下ETH->IP->TCP->Modbus/TCP,其中包含 鏈路層到應用層的報頭基本信息,協(xié)議數(shù)量字段值為4,安全檢測方法為Check_ ModbusTCP_*(),該方法中應用Modbus/TCP深度檢測方法,pay load 是 Modbus/TCP FOU。 [0082]協(xié)議清洗模塊的主要工作包括:
[0083] (1 )VM1收到流量牽引模塊牽引過來的數(shù)據(jù)包后,首先對數(shù)據(jù)包進行剝離,得到應 用層數(shù)據(jù),依據(jù)規(guī)則構建私有協(xié)議數(shù)據(jù),同時對應用層數(shù)據(jù)進行安全性檢測。檢測不通過, 直接丟棄該數(shù)據(jù)包,中斷通信連接。檢測通過,則通過數(shù)據(jù)擺渡模塊將私有協(xié)議數(shù)據(jù)包擺渡 到 VM2。
[0084] (2)VM2收到數(shù)據(jù)擺渡模塊擺渡過來的私有協(xié)議數(shù)據(jù)包后,首先對私有協(xié)議數(shù)據(jù)包 進行完整性校驗,同時解析私有協(xié)議數(shù)據(jù)包得到原始的應用層數(shù)據(jù),按照標準的TCP/IP協(xié) 議將協(xié)議數(shù)據(jù)重新封裝成標準的TCP/IP協(xié)議數(shù)據(jù)包。最后VM2將重新封裝好的標準TCP/IP 協(xié)議數(shù)據(jù)包通過流量牽引模塊發(fā)到網(wǎng)絡。協(xié)議清洗模塊流程圖如圖5。
[0085] 3)VM1和VM2之間的通信通過數(shù)據(jù)擺渡的方式實現(xiàn),VM1的協(xié)議清洗模塊完成私有 協(xié)議的構建后,VM1和VM2建立起兩個虛擬的內(nèi)存環(huán)形隊列,分別用于數(shù)據(jù)發(fā)送和數(shù)據(jù)接收。 [0086] (1 )VM1根據(jù)在特權虛擬機下維護的事件通道表,查詢VM2相關的地址信息。若匹配 到相應的VM2地址和端口的信息,則說明可以建立通信連接,準備進行下一步操作。若匹配 不到,則終止本次通信。
[0087] (2)Xen利用Grant Table機制建立共享內(nèi)存(兩個實際內(nèi)存環(huán)形隊列),準備接收 和發(fā)送數(shù)據(jù),與此同時Xenstore同步更新虛擬機的狀態(tài)。XenStore是Xen下的不同虛擬機間 的共享存儲區(qū),以鍵/值的形式存儲VM相關的配置和狀態(tài)信息。在共享內(nèi)存建立之前,通過 XenStore傳遞同步控制信息,確保VM1和VM2對共享內(nèi)存讀寫的正確性。
[0088] (3)VM1將建好的共享內(nèi)存信息,通過事件通道機制通知VM2,VM1和VM2準備通過共 享內(nèi)存進行數(shù)據(jù)通信。
[0089] (4)VM1將協(xié)議清洗模塊構建好的私有協(xié)議數(shù)據(jù)寫入共享內(nèi)存,此時在同步互斥機 制的控制下,VM2不可以從該共享內(nèi)存讀取數(shù)據(jù)。
[0090] (5)VM1向共享內(nèi)存寫入數(shù)據(jù)后,通過事件通道通知VM2。隨后VM2從共享內(nèi)存讀取 數(shù)據(jù),讀取完畢后通知VM1,同時將數(shù)據(jù)交VM2的協(xié)議清洗模塊處理。VM1接收到VM1發(fā)送的讀 取完畢事件通知消息后,根據(jù)實際情況接著寫或者是直接退出。
【主權項】
1. 一種基于Modbus/TCP深度解析的協(xié)議隔離方法,其特征在于:在Xen虛擬環(huán)境下的協(xié) 議隔離,用兩臺Guest 0S分別模擬協(xié)議隔離的內(nèi)、外網(wǎng)處理單元;Guest 0S上部署協(xié)議清洗 模塊,在協(xié)議清洗模塊首先對IP數(shù)據(jù)流量解析,剝離掉TCP/IP的協(xié)議特征,阻斷基于TCP/IP 協(xié)議特征的攻擊,得到應用層協(xié)議數(shù)據(jù),然后按照私有協(xié)議定義的屬性和規(guī)則,將該數(shù)據(jù)包 構造成私有協(xié)議數(shù)據(jù)包并用深度檢測方法進行安全檢測,保證Modbus/TCP數(shù)據(jù)內(nèi)容的合法 性; 1) 協(xié)議隔離思想 Modbus/TCP的通信解釋如下; (1) 在Xen環(huán)境下,搭建兩臺VM分別模擬協(xié)議隔離的內(nèi)網(wǎng)處理單元即VM1和外網(wǎng)處理單 元即VM2; (2) 客戶機發(fā)起的Modbus/TCP請求,首先發(fā)給VM1;VM1對收到的Modbus/TCP請求進行協(xié) 議解析,剝離出頭部信息和原始數(shù)據(jù);之后VM1將剝離出來的數(shù)據(jù)經(jīng)過協(xié)議清洗模塊的安全 檢測后,以共享內(nèi)存的方式擺渡給VM2;VM2收到剝離出的數(shù)據(jù)后,根據(jù)數(shù)據(jù)中的頭部信息, 得到真正的服務器地址,同時將數(shù)據(jù)重新封裝為Modbus/TCP協(xié)議,發(fā)送給Modbus/TCP服務 器; (3 )Modbus/TCP服務器收到Modbus/TCP客戶機請求后,做出響應,將響應報文發(fā)給VM2; VM2對收到的響應報文進行協(xié)議解析,剝離出頭部信息和原始數(shù)據(jù);VM2將剝離出的數(shù)據(jù)經(jīng) 過協(xié)議清洗模塊的安全檢測之后,以共享內(nèi)存的方式擺渡給VM1; VM1收到剝離出的數(shù)據(jù)和 頭部信息后,重新封裝成Modbus/TCP協(xié)議發(fā)送給客戶機; (4)至此,完成一次Modbus/TCP客戶機和Modbus/TCP服務器之間的通信; 2) 協(xié)議隔離的整體架構 Xen虛擬化平臺的協(xié)議隔離架構包括VMM上的流量牽引模塊、數(shù)據(jù)擺渡模塊以及兩臺虛 擬機,其中兩臺虛擬機上均部署有協(xié)議清洗模塊;兩臺虛擬機通過數(shù)據(jù)擺渡的方式交換數(shù) 據(jù),在數(shù)據(jù)擺渡的時候需要用到同步機制,數(shù)據(jù)擺渡功能封裝在數(shù)據(jù)擺渡模塊; 3) 協(xié)議隔離的處理流程 協(xié)議隔離處理流程主要工作包括: (1) 虛擬化平臺收到來自設備A的連接請求后,交給流量牽引模塊處理; (2) 流量牽引模塊根據(jù)制定的流表將流量牽引至VM1進行處理;VM1收到數(shù)據(jù)包后,交由 協(xié)議清洗模塊進行解析和安全檢測,若檢測不通過,則丟棄數(shù)據(jù)包;若檢測通過,則將數(shù)據(jù) 包的應用層原始數(shù)據(jù)進行私有協(xié)議封裝,發(fā)送到數(shù)據(jù)擺渡模塊; (3) 數(shù)據(jù)擺渡模塊利用共享內(nèi)存將私有協(xié)議數(shù)據(jù)包擺渡至VM2; VM2收到νΜΓ'擺渡"過來 的私有協(xié)議數(shù)據(jù)包后,VM2協(xié)議清洗模塊進行解析,按照相應的TCP/IP協(xié)議格式將數(shù)據(jù)重新 封裝為標準的TCP/IP協(xié)議數(shù)據(jù)包,之后轉發(fā)給流量牽引模塊; (4) 流量牽引模塊根據(jù)相應的流表規(guī)則將數(shù)據(jù)包發(fā)送給設備Β; 流量牽引模塊負責將數(shù)據(jù)流量導入指定的虛擬機中,是實現(xiàn)安全功能的基礎和前提; 流量牽引模塊是由OpenFlow和OpenvSwitch組建而成,其功能是將指定網(wǎng)口的數(shù)據(jù)包導入 指定虛擬機中,并將指定虛擬機的數(shù)據(jù)包導出到指定物理網(wǎng)口;流量牽引模塊由OpenFlow 協(xié)議作為控制協(xié)議,OpenvSwitch作為虛擬交換機,向上由管理員通過OpenFlow協(xié)議控制, 其中的流表管理就是協(xié)議下發(fā)實現(xiàn);流量牽引模塊的核心是流表,它是整個模型中的流量 開關,直接決定網(wǎng)絡的通斷和數(shù)據(jù)的流向。2. 根據(jù)權利要求1所述的一種基于Modbus/TCP深度解析的協(xié)議隔離方法,其特征在于: 協(xié)議清洗模塊將牽引模塊牽引過來的IP數(shù)據(jù)流量解析,剝離出應用層協(xié)議數(shù)據(jù),然后按照 私有協(xié)議定義的屬性和規(guī)則,將該數(shù)據(jù)包構造成私有協(xié)議數(shù)據(jù)包并進行安全檢測; 協(xié)議清洗模塊的主要工作包括如下: (1 )VM1收到流量牽引模塊牽引過來的數(shù)據(jù)包后,首先對數(shù)據(jù)包進行剝離,得到應用層 數(shù)據(jù),依據(jù)規(guī)則構建私有協(xié)議數(shù)據(jù),同時對應用層數(shù)據(jù)進行安全性檢測;檢測不通過,直接 丟棄該數(shù)據(jù)包,中斷通信連接;檢測通過,則通過數(shù)據(jù)擺渡模塊將私有協(xié)議數(shù)據(jù)包擺渡到 VM2; (2)VM2收到數(shù)據(jù)擺渡模塊擺渡過來的私有協(xié)議數(shù)據(jù)包后,首先對私有協(xié)議數(shù)據(jù)包進行 完整性校驗,同時解析私有協(xié)議數(shù)據(jù)包得到原始的應用層數(shù)據(jù),按照標準的TCP/IP協(xié)議將 協(xié)議數(shù)據(jù)重新封裝成標準的TCP/IP協(xié)議數(shù)據(jù)包;最后VM2將重新封裝好的標準TCP/IP協(xié)議 數(shù)據(jù)包通過流量牽引模塊發(fā)到網(wǎng)絡; 共享內(nèi)存的方式能夠加快數(shù)據(jù)交換,因而在數(shù)據(jù)擺渡模塊利用Xen的共享內(nèi)存方式,完 成數(shù)據(jù)交換;數(shù)據(jù)交換的過程中用Grant Table機制創(chuàng)建共享內(nèi)存,通過生產(chǎn)者/消費者及 XenStore機制進行數(shù)據(jù)同步;在數(shù)據(jù)擺渡的過程中傳輸?shù)氖撬接袇f(xié)議數(shù)據(jù),私有協(xié)議數(shù)據(jù) 剝離了 TCP/IP協(xié)議特征,能夠阻斷基于TCP/IP協(xié)議的攻擊行為,從而保證擺渡過程中數(shù)據(jù) 的安全性。3. 根據(jù)權利要求1所述的一種基于Modbus/TCP深度解析的協(xié)議隔離方法,其特征在于: VM1和VM2之間的通信通過數(shù)據(jù)擺渡的方式實現(xiàn),VM1的協(xié)議清洗模塊完成私有協(xié)議的構建 后,VM1和VM2建立起兩個虛擬的內(nèi)存環(huán)形隊列,分別用于數(shù)據(jù)發(fā)送和數(shù)據(jù)接收; (1) VM1根據(jù)在特權虛擬機下維護的事件通道表,查詢VM2相關的地址信息;若匹配到相 應的VM2地址和端口的信息,則說明能夠建立通信連接,準備進行下一步操作;若匹配不到, 則終止本次通信; (2) Xen利用Grant Table機制建立共享內(nèi)存即兩個實際內(nèi)存環(huán)形隊列,準備接收和發(fā) 送數(shù)據(jù),與此同時Xenstore同步更新虛擬機的狀態(tài);XenStore是Xen下的不同虛擬機間的共 享存儲區(qū),以鍵/值的形式存儲VM相關的配置和狀態(tài)信息;在共享內(nèi)存建立之前,通過 XenStore傳遞同步控制信息,確保VM1和VM2對共享內(nèi)存讀寫的正確性; (3) VM1將建好的共享內(nèi)存信息,通過事件通道機制通知VM2,VM1和VM2準備通過共享內(nèi) 存進行數(shù)據(jù)通信; (4) VM1將協(xié)議清洗模塊構建好的私有協(xié)議數(shù)據(jù)寫入共享內(nèi)存,此時在同步互斥機制的 控制下,VM2不可以從該共享內(nèi)存讀取數(shù)據(jù); (5) VM1向共享內(nèi)存寫入數(shù)據(jù)后,通過事件通道通知VM2;隨后VM2從共享內(nèi)存讀取數(shù)據(jù), 讀取完畢后通知VM1,同時將數(shù)據(jù)交VM2的協(xié)議清洗模塊處理;VM1接收到VM1發(fā)送的讀取完 畢事件通知消息后,根據(jù)實際情況接著寫或者是直接退出。
【文檔編號】H04L29/06GK106027511SQ201610320345
【公開日】2016年10月12日
【申請日】2016年5月13日
【發(fā)明人】詹靜, 楊靜, 吳歡, 陶政
【申請人】北京工業(yè)大學