有別於傳統的DFA(Deterministic Finite Automaton)和NFA(Non-Deterministic Finite Automaton)演算法,華三通訊的DPI軟體引擎具有記憶體可伸縮特性。DIM使用者態可動態感知需要載入軟體引擎的單板或者子裝置的(核心態)是否有充裕的記憶體,根據記憶體剩餘情況和使用者的配置選擇最優的引擎儲存方式,然後啟動編譯執行緒完成編譯下發工作。海量特徵的編譯下發是一個CPU密集型過程,考慮到可能遇到的配置頻繁變更或者特徵庫升級排程,DIM的編譯執行緒設定了可中斷可重入機制,不需要使用者等待。DPI核心態的檢測引擎可能出現在入介面業務點、域間策略業務點或者出介面業務點,任何涉及DPI業務的配置啟用都會開啟轉發流程中的DPI業務點,如果使用者有多種相關配置,DPI會在報文轉發流程中最早的業務點生效,其餘點則不生效。在DPI的入介面處理時,資料轉發層面的處理流程如協議解析、演算法引擎和檢測結果處理是其工作重點(如圖2所示)。在具體的DPI檢測引擎設計時,其在核心態的位置(如圖3所示)。可以看出,DPI檢測引擎包含了多種檢測演算法,典型的如Aho-Crassick,Boyer,Moore演算法以及PCRE演算法等等,透過這些演算法的配合可以有效實現關鍵特徵的快速查詢匹配,提升了查詢效率。
圖3 DPI檢測引擎在核心態的部件示意圖
圖4 HTTP請求報文的協議域切分示意圖
DPI檢測引擎的協議解析器設計模型
檢測引擎自身包括三個部件:協議解析器、演算法引擎和檢測結果處理,下面主要對其關鍵部分的協議解析器進行說明。
現階段額度協議解析器的職責主要有:
協議確認
進入HTTP、HTTPS等協議解析器的條件都是固定埠對映。但越來越多的網際網路應用正試圖透過80、443等傳統埠來逃逸傳統網路裝置的檢測和控制。因此必要的協議確認是防止這種逃逸的前提。
協議切分
協議切分是在流(會話)的基礎上進一步細分出“檢測流”或者叫“事物”的概念。例如:TTP的一次transaction、FTP的一次使用者登入行為、SMTP/POP3的一次郵件傳送/接收等,都抽象成一條“檢測流”。有時一條流可以傳輸多次檢測流,甚至同時有併發的檢測流出現。協議切分對於關心檢測流的業務模組有著重要意義,例如內容過濾和應用審計。
協議域切分
協議域切分是在最小的粒度上細分報文。將檢測流分成Header和Body部分,Header還要細分成各個Field,包含FieldValue和Field Data部分。協議域切分有助於判別該頭域是否需要檢測,判定該頭域命中的特徵與之定義是否吻合,以及識別提取審計日誌資訊的關鍵位置。
解碼
HTTP的URI部分和郵件協議的Subject部分等進行了編碼,需要協議解析器進行解碼,大多數情況下需要我們將解碼後的欄位送入演算法引擎。有些情況又有個別特徵基於編碼前定義,需要我們將原始欄位送入演算法引擎,但同時發生會對效能產生一定損耗。
解壓縮
HTTP可以用gzip、x-gzip、deflate等方式傳送壓縮後的資料內容,在使用者的配置要求下解析器會將內容解壓縮後送入演算法引擎,以幫助我們發現壓縮資料中的需要被檢測出的特徵。
SSL解除安裝
在使用者的配置要求下,可以透過SSL解除安裝技術儘可能還原HTTPS中的原始流量,進行更加全面的檢測和控制。
協商協議識別
FTP、SIP以及很多加密方式的P2P協議都採用協商甚至多次協商的方式來進行資料傳輸。對應的協議解析器需要能夠透過控制通道報文的解析識別出協商協議的資料通道的五元組特徵,透過協商關聯表的匹配來識別其資料通道。
當然,基於這些協議分析完成之後,透過演算法引擎可以匹配查詢可以發現相關的檢測結果,同時送到後續的動作設計模組進行處理。在核心態,DPI支援大量的動作以及它們的組合,各個DPI的業務模組都可以基於規則或者規則分類來配置報文的動作。這些動作包括ermit/deny、Drop丟掉後續報文、Redirect或者傳送雙向TCP Reset斷開連線、生成攻擊日誌告警等。
DPI技術的應用和發展是一個動態不斷完善的過程:一方面攻擊型別在不斷地發展變化,由此導致的攻擊特徵漏洞的提取也要與時俱進不斷更新,另一方面隨著攻擊型別的增加,除了攻擊特徵漏洞匹配和應用層協議解析之外,未知的不能識別的攻擊型別報文也會逐漸增加,目前已經出現的雲端未知攻擊檢測識別技術可以為裝置側的DPI檢測提供很好的補充,基於大資料的雲端安全分析平臺也會逐漸成為安全的核心競爭力,配合安全裝置終端形成完整的DPI防護解決方案。