張文建,宋克,譚力波,魏帥,董春雷
(1.信息工程大學,河南 鄭州 450002;2.天津市濱海新區(qū)信息技術(shù)創(chuàng)新中心,天津 300450)
隨著網(wǎng)絡安全技術(shù)的發(fā)展,擬態(tài)防御技術(shù)[1]逐漸成熟,成為一種新型網(wǎng)絡安全防御手段。擬態(tài)防御要求系統(tǒng)具備動態(tài)異構(gòu)冗余特性,即動態(tài)地調(diào)度異構(gòu)執(zhí)行體,通過擬態(tài)判決異構(gòu)執(zhí)行的輸出來判斷系統(tǒng)的安全狀態(tài)[2]。面對表達相同語義的協(xié)議數(shù)據(jù),擬態(tài)判決需要解析協(xié)議數(shù)據(jù)的語義信息。如圖 1 所示,協(xié)議分組由分組頭和負載組成,其中分組頭包含多層協(xié)議,考慮到協(xié)議的實用性,協(xié)議制定者總會在分組的特定部位定義自定義字段、保留字段及可選字段,圖中,TLV 表示Tag(type)-length-value。此外,不同的協(xié)議棧也極有可能將基本的元數(shù)據(jù)根據(jù)自身算法亂序放置。當前,很多應用于網(wǎng)絡安全領域的擬態(tài)防御技術(shù)[3-4]都采用了異構(gòu)協(xié)議棧、異構(gòu)操作系統(tǒng)、異構(gòu)處理器等網(wǎng)絡組件來構(gòu)造擬態(tài)系統(tǒng),并引入擬態(tài)判決來裁決[5]異構(gòu)執(zhí)行體的輸出數(shù)據(jù)。針對由協(xié)議棧、操作系統(tǒng)及處理器的異構(gòu)化而引起的協(xié)議分組信息多態(tài)化冗余化等特點,擬態(tài)判決存在著誤判風險。在面向該領域的研究中,部分文獻[6]從理論方法上闡述擬態(tài)判決的方法,但缺少去除多態(tài)化冗余信息的方案。
圖1 協(xié)議分組架構(gòu)
目前,面向擬態(tài)判決的協(xié)議解析實現(xiàn)方式主要分為以下幾種。1)軟件實現(xiàn),即通過處理器進行解析,靈活度高,但這種方式需要通過處理器進行計算解析,效率較低。2)硬件邏輯實現(xiàn),大多數(shù)擬態(tài)判決的協(xié)議解析通過硬件邏輯實現(xiàn)[7],但是硬件邏輯實現(xiàn)的專用包解析的靈活性不高,無法支持擴展協(xié)議。3)利用可編程的方案實現(xiàn)擬態(tài)判決的協(xié)議解析,目前,研究中尚未出現(xiàn)面向擬態(tài)判決的協(xié)議解析方案,但交換機數(shù)據(jù)轉(zhuǎn)發(fā)平面的研究為面向擬態(tài)判決的協(xié)議解析提供了解決思路。
隨著網(wǎng)絡體系結(jié)構(gòu)的不斷發(fā)展,網(wǎng)絡設備更加追求可擴展性、可編程性及轉(zhuǎn)發(fā)性能。SDN(software defined networking)[8]實現(xiàn)了網(wǎng)絡設備控制管理平面和數(shù)據(jù)轉(zhuǎn)發(fā)平面的分離,從而為網(wǎng)絡的可擴展、可編程提供了很好的思路。為了支持更多新生協(xié)議的需求,當前可編程協(xié)議解析的研究進行得如火如荼。文獻[9]在可編程架構(gòu)中引入TCAM(ternary corrent addressable memory),并使用RAM(random access memory)緩存匹配域的偏移數(shù)據(jù)。華為提出了POF(protocol-oblivious forwarding)模型[10],通過比擬PC 機結(jié)構(gòu)和SDN 架構(gòu),定義了通用的動作集,將動作執(zhí)行可編程化,實現(xiàn)了可定制的解析動作。文獻[11]實現(xiàn)了比特級粒度的解析,并設計了基于元操作的查找操作,使硬件可以處理任意的協(xié)議分組數(shù)據(jù)。文獻[12]創(chuàng)新性地提出了解析和動作執(zhí)行聯(lián)動的硬件結(jié)構(gòu),減少了架構(gòu)的復雜度以及執(zhí)行時延,并提高了硬件資源利用率。Wang等[13]在NetFPGA 上實現(xiàn)了P4 的可編程包解析。
綜上所述,面向數(shù)據(jù)轉(zhuǎn)發(fā)的可編程設計方案是針對轉(zhuǎn)發(fā)設計的,更注重數(shù)據(jù)轉(zhuǎn)發(fā)行為及轉(zhuǎn)發(fā)策略的可配置化,解析的粒度更加細致。因此,從擬態(tài)判決分組解析的實際需求出發(fā),借助可編程協(xié)議解析思想,本文擬解決擬態(tài)判決領域多態(tài)化冗余化的協(xié)議信息提取,將解決語義相同、語法不同的協(xié)議數(shù)據(jù)提取問題,即解決協(xié)議語義的順序混亂、掩碼不一致字段及截斷冗余的可選字段等問題?;谝陨戏治?,本文提出了面向擬態(tài)判決的可編程語義解析方法,基于NetFPGA[14]平臺完成了所提方法的仿真和驗證。結(jié)果表明,本文所提結(jié)構(gòu)和方法滿足面向擬態(tài)判決的可編程語義解析的需求。
在進行擬態(tài)判決時,參與擬態(tài)判決的協(xié)議分組保持語義的嚴格一致性,否則,將影響擬態(tài)防御效果。但受制于協(xié)議的靈活性及各個協(xié)議棧封裝協(xié)議數(shù)據(jù)的算法不同,來自不同協(xié)議棧相同功能模塊的協(xié)議數(shù)據(jù)可能存在數(shù)據(jù)不一致的情況,具體分為以下幾種情況。
1)協(xié)議數(shù)據(jù)亂序。受制于協(xié)議棧及處理器的不同,協(xié)議棧下發(fā)相同語義的協(xié)議數(shù)據(jù)時可能存在同一數(shù)據(jù)幀中數(shù)據(jù)的亂序。比如下發(fā)路由表信息時,在不同協(xié)議棧的路由分發(fā)算法中,承載路由信息的OSPF(open shortest path first)協(xié)議的LSU(link status update)消息的路由條目數(shù)據(jù)順序可能存在不一致的情況。如此一來,在進行擬態(tài)判決時,必須先解析協(xié)議數(shù)據(jù),調(diào)整路由條目數(shù)據(jù)后再進行判決。
2)保留字段或自定義字段。為實現(xiàn)協(xié)議的可擴展性,大多數(shù)協(xié)議都規(guī)定了保留字段或者自定義字段,不同的協(xié)議棧在使用保留字段或者自定義字段時,如果使用方式不同,或者部分不使用,則在對此類協(xié)議數(shù)據(jù)進行擬態(tài)判決時,必須將這些字段進行掩碼處理,才能進行判決。
3)可選字段。出于對協(xié)議可擴展性方面的考慮,部分協(xié)議分組頭中存在可選字段,當不同的協(xié)議對可選字段的使用方式不同時,此類協(xié)議數(shù)據(jù)必須剔除可選字段才能進行判決。
針對以上情況,本文的設計目標是根據(jù)擬態(tài)判決的需求,通過解決順序混亂問題,將冗余信息刪除,并將不一致字段進行歸一化處理,即對協(xié)議數(shù)據(jù)進行分組切片、掩碼以及截斷操作,來提取協(xié)議數(shù)據(jù)的語義。分組切片操作對協(xié)議數(shù)據(jù)分組進行分解,得到元數(shù)據(jù);掩碼是對保留字段或者自定義字段的操作,消除不一致性;截斷操作是去除可選字段、刪除冗余信息。本文從協(xié)議解析高靈活性、高處理性能和低資源使用率的角度出發(fā),設計了一種可實現(xiàn)精確提取協(xié)議數(shù)據(jù)語義信息的面向擬態(tài)判決的可編程語義解析(MAPSP,programmable semantic parsing for mimic arbitration)硬件結(jié)構(gòu)及相關(guān)算法。
基于設計目標,本文提出了如圖2 所示的MAPSP 硬件結(jié)構(gòu),該結(jié)構(gòu)主要包括解析器和語義提取器。當存在多級解析時,解析器按照級數(shù)增加,其主要目標是通過提取分組的協(xié)議數(shù)據(jù)、保留字段或自定義字段、可選字段的位域,進行分組切片、掩碼和截斷操作,從而達到提取協(xié)議數(shù)據(jù)的語義目的。
圖2 MAPSP 硬件結(jié)構(gòu)
在MAPSP 結(jié)構(gòu)中,解析器根據(jù)上一級匹配操作后產(chǎn)生的信息提取分組類型及匹配信息等數(shù)據(jù),完成解析樹的配置,通過邏輯運算生成匹配鍵值,以及匹配可配置的TCAM 及RAM 獲取與語義相關(guān)的數(shù)據(jù)信息,實現(xiàn)多協(xié)議分組的彈性解析。解析器的硬件結(jié)構(gòu)如圖3 所示。
在分組解析的開始階段,分組類型提取模塊首先進行分組的預解析,提取分組首段偏移及協(xié)議類型信息并將相應的信息存儲到中間信息寄存器中。若非分組解析的開始階段,則中間信息寄存器的數(shù)據(jù)由上一級解析器通過解析得到的分組相關(guān)信息組成。具體的數(shù)據(jù)信息包括當前解析節(jié)點類型偏移指針、分組類型長度偏移指針、比較指示信號、夾層指示信號、樹葉節(jié)點指示信號等。其中,解析節(jié)點類型偏移指針和分組類型長度偏移指針決定了匹配域從分組提取的類型信息;比較指示信號以及夾層指示信號表示是否需要進行鍵值預處理;樹葉節(jié)點指示信號用于指示該層解析為樹葉節(jié)點,是最后一層解析。
圖3 解析器的硬件結(jié)構(gòu)
匹配域提取模塊提取中間信息寄存器數(shù)據(jù)用于鍵值預處理和整合。鍵值預處理主要包括比較操作及夾層處理操作,其中比較操作是針對VLAN(virtual local area network)分組等需要時操作才能決定協(xié)議類型的分組。夾層處理則是指針對MPLS(multiprotocol label switching)等多層標簽協(xié)議的處理,即如果存在多層標簽,直接在夾層處理模塊進行分組頭偏移的累加操作,并將相應信息反饋給最終信息寄存器。鍵值整合模塊是指將協(xié)議類型、比較結(jié)果信息、夾層處理信息等進行鍵值映射,從而達到準確匹配的目的。TCAM 和RAM 模塊是可編程的核心模塊,即用戶可以通過配置TCAM 和RAM 模塊達到提取用戶定制的協(xié)議數(shù)據(jù)的目的。TCAM 存儲協(xié)議類型以及比較結(jié)果新詞和夾層處理信息用以匹配當前協(xié)議樹的數(shù)據(jù)。RAM 分為2種:一種為非樹葉節(jié)點協(xié)議數(shù)據(jù)RAM,即包含下一級解析信息的數(shù)據(jù),該數(shù)據(jù)將更新到中間信息寄存器中;另一種為樹葉節(jié)點協(xié)議數(shù)據(jù)RAM,即包含最終分組負載的分組切片指針,該數(shù)據(jù)將更新到最終信息寄存器中,以備語義提取器提取語義信息使用。
在該結(jié)構(gòu)中,語義提取器的主要功能是根據(jù)解析器解析的信息對整個分組進行語義提取,即根據(jù)語義進行分組切片、掩碼及截斷操作來進行特征提取,其硬件結(jié)構(gòu)如圖4 所示。
圖4 語義提取器硬件結(jié)構(gòu)
最終信息寄存器的信息是根據(jù)各級查表操作的結(jié)果生成的,包括原始分組分組頭偏移指針、掩碼信息、截斷信息、負載分組頭長度信息等。其中原始分組分組頭偏移指針是由各級協(xié)議解析累加而成,目的是提取整個分組的分組頭。當負載數(shù)據(jù)為典型TLV 數(shù)據(jù)時,負載分組頭長度信息包含分組頭長度偏移指針、分組頭長度、分組長度域指針等,當負載數(shù)據(jù)無亂序數(shù)據(jù)時,該部分保留,分組切片處理模塊根據(jù)提供的分組切片處理信息進行分組切片處理,將分離的數(shù)據(jù)與分組頭進行組合生成子分組,從而拆解順序混亂的協(xié)議數(shù)據(jù)。掩碼信息指分組中需要做掩碼處理的指針偏移及掩碼長度信息。掩碼處理根據(jù)掩碼信息進行掩碼操作,將協(xié)議規(guī)定的保留或者自定義字段進行掩碼操作,從而保證了語義一致性。截斷信息指分組中需要做截斷處理的指針和截斷長度信息。截斷處理根據(jù)截斷信息進行截斷處理,將協(xié)議規(guī)定的可選字段進行截斷操作,從而實現(xiàn)分組長度的一致性。分組經(jīng)過分組切片處理、掩碼處理、截斷處理等操作后,已經(jīng)形成了語義獨立的子分組。特征處理模塊的功能是對處理后的語義獨立的子分組進行特征碼以及特征地址提取,并將提取的特征緩存在RAM 中,用于擬態(tài)判決。其中特征碼的作用是指示當前數(shù)據(jù)分組的特征,即當前子分組的語義信息,通過CRC64 實現(xiàn);特征地址的作用是通過CRC8 實現(xiàn)數(shù)據(jù)分組的序號;RAM 用來緩存特征。緩存在RAM 中的數(shù)據(jù)經(jīng)過MAPSP 的處理,已經(jīng)完全提取出了原始分組的語義信息,剔除了亂序、保留字段或自定義字段、可選字段等與協(xié)議無關(guān)的信息,為擬態(tài)判決提供了精確的語義。
MAPSP 解析器的協(xié)議可編程語義解析需將用戶的協(xié)議配置信息根據(jù)特定方式借助南向接口存儲在協(xié)議解析器中。其映射過程主要是將用戶對所使用協(xié)議的類型信息和匹配域信息以一定的格式存儲在緩存(TCAM/RAM)中。根據(jù)MAPSP 的硬件結(jié)構(gòu),本文提出協(xié)議解析算法和語義提取算法,表1 給出了算法所使用的符號及其含義。
中間寄存器mid_reg 存儲首段字段形成的信息或者是經(jīng)過匹配RAM1后得出,其數(shù)據(jù)格式與RAM1一致,包括 sh_len、t_cmp、t_inlaye、inlayer_offset 等元素,最終信息寄存器包括h_offset、slen_offset、cut_offset、cut_len、mask_offset、mask_len、TLV_flag 等信息。大部分數(shù)據(jù)和RAM2數(shù)據(jù)一致,不同之處在于fin_reg 的h_offset 由原始值加上當前解析的協(xié)議層分組頭長度。其中,協(xié)議解析算法主要對應解析器的處理,該算法運行的前提是將解析器所支持的協(xié)議類型按照約定的方式將對應的鍵值和數(shù)據(jù)配置到解析器中。算法偽代碼如算法1 所示。
表1 算法符號及其含義
算法1協(xié)議解析算法
算法1 中,首先提取首字段的關(guān)鍵信息,并將關(guān)鍵信息賦值給中間信息寄存器mid_reg;當解析非首字段信息時,直接使用mid_reg的數(shù)據(jù)(如2)~8)所示)。其次根據(jù)mid_reg 提供的信息從分組中提取當前層分組類型等信息后,判斷是否存在夾層協(xié)議,比如,MPLS 標簽等,如果存在夾層協(xié)議則直接進行標簽剝離,從而減少了匹配操作,直至標簽剝離到最后一級(如9)所示)。再次根據(jù)中間信息寄存器中的t_cmp 指示信息判斷該層協(xié)議是否存在需要進行比較大小的操作,如果是VLAN 數(shù)據(jù),則直接剝離進入下一層解析,如果非VLAN 數(shù)據(jù)則正常解析(如11)~13)所示)。最后根據(jù)前期提取的協(xié)議類型、比較操作、夾層處理等消息生成鍵值(如14)所示)。根據(jù)鍵值進行TCAM 匹配操作得到index,并索引RAM1和RAM2得到下一層協(xié)議的中間信息和最終信息(如15)~23)所示)。如果是最后一層解析,則直接進入語義提取階段,否則繼續(xù)進行下一層協(xié)議的解析(如24)所示)。
語義提取算法與語義提取器對應,即根據(jù)解析器解析得到的最終結(jié)果信息,對協(xié)議數(shù)據(jù)進行分組切片、掩碼、截斷等處理,并通過循環(huán)冗余校驗運算,最終達到語義提取的目的。算法偽代碼如算法2 所示。
算法2語義提取算法
算法2 中,首先根據(jù)fin_reg 提供的分組頭信息進行分組頭提取,并針對分組頭中存在的自定義、保留及選項字段進行截斷或者掩碼處理(如3)~5)所示)。然后,對分組負載進行分組切片,判斷負載數(shù)據(jù)是否為TLV 結(jié)構(gòu)的數(shù)據(jù),如果是TLV 結(jié)構(gòu)的數(shù)據(jù)則按照TLV 進行分組切片,否則按照固定長度進行分組切片直至整個數(shù)據(jù)分組被完全處理,從而形成包括分組頭、負載元數(shù)據(jù)等子分組,并根據(jù)掩碼參數(shù)、截斷參數(shù)進行掩碼和截斷操作(如10)~13)、17)~20)所示)。最后對這些子分組進行CRC 運算。CRC 運算分為2 個部分,其中CRC8為數(shù)據(jù)子分組的標簽,標識數(shù)據(jù)的序號,CRC64 為數(shù)據(jù)子分組的特征值(如14)~15)、21)~22)所示)。如果所處理子分組為最后的子分組則跳出循環(huán),否則繼續(xù)語義提取過程(如24)~28)所示)。
MAPSP 算法通過掩碼和截斷操作去除了影響語義的冗余和模糊信息,通過分組切片提取了數(shù)據(jù)分組的基本語義,利用CRC 運算解決了基本語義紊亂問題,并簡化了子分組基于語義的重排序設計復雜度,從而保證了整體語義的精確表述。
從理論上對解析算法和語義提取算法的存儲使用情況進行分析,在Net-FPGA 平臺上部署了MAPSP 的硬件架構(gòu),并對實現(xiàn)的架構(gòu)進行資源分析,最后針對其處理性能進行了驗證和分析。
1)算法存儲分析及硬件資源評估
本文算法是針對擬態(tài)判決的語義解析模型,其使用的存儲分配情況與面向轉(zhuǎn)發(fā)協(xié)議解析模型有所不同。該設計的主要存儲包括3 個部分:存儲類型的TCAM、存儲中間信息的RAM1和存儲最終信息的RAM2。
根據(jù)算法的特點,每一層協(xié)議可完成一次TCAM查找,并進行匹配。當存在夾層協(xié)議或者需要對類型進行比較時,則直接在TCAM 匹配之前進行下一夾層或下一層協(xié)議數(shù)據(jù)進行類型提取,因此,TCAM 的寬度可按照進行設計,其中max(t_len)i為第i層協(xié)議類型長度的最大值,M為需解析分組的最大層數(shù)。TCAM 的條目數(shù)與協(xié)議節(jié)點數(shù)相等,假設協(xié)議節(jié)點數(shù)為N(T),則TCAM 的條目數(shù)為N(T),TCAM 的最大存儲為。
假設協(xié)議樹中的非葉子節(jié)點和葉子節(jié)點的數(shù)目分別為K(T)和l(T),則N(T)=K(T)+l(T)。RAM1的條目數(shù)為K(T),RAM2的條目數(shù)為l(T)。設RAM1和RAM2的單個條目寬度分別為W1和W2,則存儲的最大空間為K(T)W1+L(T)W2。
本文以以太網(wǎng)、MPLS、802.1Q、IPv4、IPv6、TCP(transmission control protocol)、UDP(user datagram protocol)、OSPF 等協(xié)議為例,對TCAM和RAM 資源進行分析。由于面向擬態(tài)判決的語義解析需要將數(shù)據(jù)分組進行深度解析,因此針對OSPF 的解析需要解析到消息層。OSPF 共5 類消息,因此總的節(jié)點數(shù)為13 個,其中葉子節(jié)點6 個,非葉子節(jié)點7 個。按照上述協(xié)議類型分屬不同層級,按照上述對TCAM 和RAM 的計算式,可得出硬件資源需求:TCAM 需求為12 條目,且單個條目長度為10 B;RAM 資源需求為2 648 bit。
本文算法可以根據(jù)需求進行流水線級數(shù)設定,流水線級數(shù)與slice 和BRAM 資源的關(guān)系如圖5 所示。
圖5 資源開銷情況
圖5 表明,隨著流水線級數(shù)的增加,slice 隨之增加,但相對于其他資源每一級流水資源占用較少,所以流水線級數(shù)增加造成的slice 的增加非常有限;另一方面,隨著流水線級數(shù)的增加,BRAM 的增加幅度變大,這是因為除了隨著流水級線性增加之外,還出現(xiàn)了BRAM 額外占用的情況。
2)處理性能分析
吞吐量和時延是評價語義解析結(jié)構(gòu)處理性能的重要指標。雖然可以通過擴展總線寬度來增強數(shù)據(jù)處理能力,但是受限于后續(xù)語義提取模塊的工作模式。當總線寬度過寬時,后續(xù)特征處理速度會受到影響,因此選定總線寬度為64 bit。在相應的FPGA 開發(fā)平臺上進行實驗,實現(xiàn)結(jié)果最大時鐘頻率可達到201.5 MHz,因此,可以實現(xiàn)在吞吐量為12.896 GB 情況下協(xié)議數(shù)據(jù)的無阻塞處理。時延方面,每一級解析器需要約3 個時鐘周期,語義提取模塊可在一個時鐘周期內(nèi)完成。實驗中本文采用4 次匹配查找的MAPSP 架構(gòu),圖6 為MAPSP 算法的時延仿真結(jié)果,其中協(xié)議數(shù)據(jù)從進入解析器開始到完成子分組切分后的時延大概為13 個時鐘周期。
3)誤判率分析
語義提取算法中所提到的使用CRC8和CRC32進行特征提取的方法必然會引起沖突。當算法存在沖突時,不同語義的數(shù)據(jù)極有可能映射到相同的特征中去,導致不同的協(xié)議數(shù)據(jù)解析成相同的語義,從而形成判決逃逸。在實驗室環(huán)境下,通過不同的方式進行數(shù)據(jù)構(gòu)造,來驗證語義提取算法的判決逃逸率。一方面,利用CRC8(md5(i++))和CRC32(md5(i++))構(gòu)造隨機輸入數(shù)據(jù)作為協(xié)議負載數(shù)據(jù),并在協(xié)議分組頭中進行部分隨機化構(gòu)造,即與語義相關(guān)的協(xié)議數(shù)據(jù)使用特定值,無關(guān)部分使用隨機值進行構(gòu)造數(shù)據(jù)集;另一方面,通過注入?yún)f(xié)議數(shù)據(jù)測試判決逃逸次數(shù)。
圖6 MAPSP 算法的時延仿真結(jié)果
在實驗過程中,按照12 GB 的速率進行數(shù)據(jù)分組解析,發(fā)送分組時間為24 h,實驗結(jié)果如圖7 所示。其中,當子分組長度為8 B 和16 B 時,出現(xiàn)了少量的判決逃逸。與總的發(fā)送分組量相比,逃逸概率達到10-10,這種量級的逃逸概率滿足擬態(tài)判決的要求。當子分組長度為4 B/ 32 B/ 64 B/ 128 B 時,24 h 的發(fā)送分組數(shù)據(jù)未能觸發(fā)判決逃逸現(xiàn)象。考慮到實際網(wǎng)絡中數(shù)據(jù)分組頭部和數(shù)據(jù)負載的常用長度,子分組長度越小,切分的次數(shù)越多,越能影響系統(tǒng)的性能;子分組長度越大,占用的系統(tǒng)資源越多。因此,結(jié)合實驗中得出的逃逸次數(shù),子分組長度選取的最優(yōu)值為64 B。
圖7 子分組長度與逃逸次數(shù)關(guān)系
針對目前擬態(tài)判決面臨的傳輸協(xié)議數(shù)據(jù)的多態(tài)化冗余化問題,本文借鑒可編程思想和協(xié)議數(shù)據(jù)轉(zhuǎn)發(fā)技術(shù),提出了面向擬態(tài)判決的可編程語義解析方法,并針對所提解析方法搭建了硬件結(jié)構(gòu),設計了解析算法及語義提取算法。最后基于Net-FPGA平臺對所提架構(gòu)的硬件資源開銷和處理性能進行了驗證。本文所提方法對擬態(tài)判決領域的協(xié)議數(shù)據(jù)可編程化語義解析的發(fā)展具有重要意義。