《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 面向網(wǎng)絡(luò)流的正則表達式匹配改進算法
面向網(wǎng)絡(luò)流的正則表達式匹配改進算法
來源:電子技術(shù)應(yīng)用2013年第8期
吳君欽, 王 凱
江西理工大學(xué) 信息工程學(xué)院,江西 贛州 341000
摘要: 提出了基于猜測-分組-檢驗的面向網(wǎng)絡(luò)流正則表達式匹配算法。首先對出現(xiàn)概率高的部分特征子塊進行搜索并把特征子塊進行分組后DFA轉(zhuǎn)換,然后對輸出進行猜測匹配。若匹配成功,則使用NFA進行完整驗證。實驗表明,該方法能夠在減少內(nèi)存使用和資源占用率的同時,具有極高的匹配效率。
中圖分類號: TP393
文獻標識碼: A
文章編號: 0258-7998(2013)08-0127-03
Improved algorithm of regular expression matching for network flow
Wu Junqin, Wang Kai
School of Information Engineering, Jiangxi University of Science and Technology, Ganzhou 341000, China
Abstract: On the basis of analyzing the classic regular expression algorithm, this paper proposes a novel network-oriented regular expression matching algorithm based on guess-grouping-inspection. Firstly, the algorithm searches the characteristic sub-blocks with high probability of occurrence, divides these characteristic sub-blocks into groups, and carries out DFA conversion. Then, it performs the guess match algorithm to the output. If the match is successful, it will use NFA to carry out complete verification. The experiment results show that this method could not only reduce the memory consumption and resource consumption rate, but also have high matching efficiency.
Key words : deep packet inspection; regular expression; matching algorithm; guess-grouping-inspection

    在網(wǎng)絡(luò)安全監(jiān)控中,深度報文檢測技術(shù)是一種主要的手段,它通過字符串匹配算法把網(wǎng)絡(luò)中捕獲到的數(shù)據(jù)流與特定的字符串進行匹配。這里所說的特定字符串是指在分析數(shù)據(jù)報文協(xié)議的基礎(chǔ)上提取的特征字符,通過這種方式可以識別并阻斷某些數(shù)據(jù)流,實現(xiàn)有效的網(wǎng)絡(luò)安全防范。

    在深度報文檢測技術(shù)上,經(jīng)典的字符串匹配算法有單模式匹配的KMP和BM算法,改進的多模式匹配的AC算法、CM算法、WANG方法和Wu-Manber算法,然而這些算法都采用字符串匹配為基礎(chǔ)。隨著網(wǎng)絡(luò)的不斷發(fā)展,應(yīng)用軟件特征字符識別的復(fù)雜度越來越大,采用字符串匹配已難以匹配識別,因此這些算法的局限性也凸顯出來?;?a class="innerlink" href="http://theprogrammingfactory.com/tags/正則表達式" title="正則表達式" target="_blank">正則表達式的多模式匹配具備了優(yōu)越的表達匹配能力和靈活性,相比傳統(tǒng)的字符串匹配更加精確高效。
    基于正則表達式的多模式匹配是把正則表達式轉(zhuǎn)變?yōu)樽詣訖C,自動機分為兩種:非確定有限自動機(NFA)和確定有限自動機(DFA)。NFA的優(yōu)點是占用內(nèi)存和系統(tǒng)資源少,但是需要對每個字符進行遍歷,處理狀態(tài)集里的所有狀態(tài),很耗費時間。如good(day|night|evening):若要搜goodday,NFA需要把goodday、goodnight、goodevening全部遍歷一次才能完成搜索。相比之下,DFA搜索一個字符只需要訪問一個狀態(tài),但是若把所有的正則表達式都轉(zhuǎn)變?yōu)镈FA將會占用非常大的系統(tǒng)內(nèi)存資源,目前的硬件條件還無法滿足這一點。
       結(jié)合NFA和DFA各自的優(yōu)缺點,本文提出了一種猜測-分組-檢驗的匹配算法。使用DFA在猜測的基礎(chǔ)上添加分組,能夠更有效減少系統(tǒng)內(nèi)存占用率;然后再結(jié)合NFA檢測確保算法具備高匹配度。
1 正則表達式相關(guān)算法
       深度報文包檢測技術(shù)是基于系統(tǒng)規(guī)則庫對在網(wǎng)絡(luò)中捕獲的數(shù)據(jù)包中的每一個字節(jié)進行掃描和識別,標準的字符串匹配算法有:Aho-Corasiek[1]、 ComentZ-Walter[2]和Wu-Manber[3]算法。如今隨著網(wǎng)絡(luò)協(xié)議復(fù)雜度日益增加,傳統(tǒng)的字符串匹配算法難以精確地識別出復(fù)雜多變的協(xié)議類型[4]。
       SOMMER R和PAXSON V[5]認為,用正則表達式描述網(wǎng)絡(luò)中數(shù)據(jù)協(xié)議行為比用字符串表達更為高效、靈活。KUMAR S[6]等通過將DFA的某些狀態(tài)用單條缺省邊來代替,提出一種稱為延遲輸入DFA,實驗結(jié)果表明,相比于傳統(tǒng)的DFA存儲空間可減少95%以上。但是引入缺省邊導(dǎo)致處理一個字符需要多次訪問內(nèi)存,參考文獻[7]對參考文獻[6]進行改進,提出一種目錄尋址的D2FA-CD2FA,用包含部分狀態(tài)信息的目錄標簽來代替狀態(tài)的ID,而這些信息一般是保存在狀態(tài)表的條目中,使得一次轉(zhuǎn)移只消耗一個字符。
      YU F等人提出了將正則表達式進行分組的思想[8]。其方法是:計算正則表達式兩兩之間是否引起狀態(tài)增長,在進行分組時,選擇一條與其他表達式具有最小相關(guān)度的正則表達式開始,然后按照相同的原則向這個組里不斷添加,直到這個組形成的DFA內(nèi)存超過預(yù)先設(shè)定的閾值,再開始創(chuàng)建另一個新組。重復(fù)這個過程,直到所有的表達式都被分配出去為止。
      參考文獻[9]提出了一種混合自動機的方法,其基本思想是:將整個規(guī)則集編譯成一個NFA 結(jié)構(gòu)之后,并不對它進行完全的確定化,而是在確定化之前判斷狀態(tài)之間跳轉(zhuǎn)的原因。進行部分確定化的結(jié)果就是形成了一個混合的自動機結(jié)構(gòu),它的前面一部分是DFA的狀態(tài),而在每個邊界狀態(tài)之后都帶有一個NFA,這個NFA以邊界狀態(tài)作為初始狀態(tài)。
       張樹壯等人提出了一種基于猜測-驗證的匹配方法[10]:首先使用DFA對正則表達式中的部分子特征進行搜索,完成特征存在性的猜測。當猜測到有可能匹配某個特征后,再使用NFA進行驗證。這種方法既充分利用了DFA的高效性,減少了對相對較慢的驗證過程,又借助NFA避免了內(nèi)存消耗過于巨大。
       本文在深入研究和分析以上算法的基礎(chǔ)上,針對DPI規(guī)則庫這樣十分龐大的規(guī)則系統(tǒng),借鑒一些經(jīng)典正則表達式匹配算法,提出一種猜測-分組-檢驗算法。該算法把分組作為核心步驟,利用正則表達式之間的相關(guān)性組合后進行分組,能夠十分有效地降低系統(tǒng)內(nèi)存資源的使用率。結(jié)合NFA驗證,該算法能夠?qū)斎脒M行有效的匹配和識別。
2 算法描述
    正則表達式匹配算法分為三個步驟:猜測、分組和檢驗??傮w來說,在安全監(jiān)控中所使用的規(guī)則一般都可以分為若干個特征子塊Sub-feature,如圖1所示,每個子特征之間通過正則表達式運算符連接在一起。獲取到這些特征子塊之后,可以簡單地把它們合并轉(zhuǎn)換為一個DFA。然而這樣一個DPI的規(guī)則庫,將會占用十分龐大的系統(tǒng)內(nèi)存資源。所以在獲得特征子塊后,需要采用相似性度分析對這些子塊進行分組,把相似程度高的子塊聚合在一起,并通過子集構(gòu)造法轉(zhuǎn)換為一個DFA,再通過正則運算符把各個組的DFA連接在一起。分組后的DFA占用系統(tǒng)內(nèi)存資源小,可以有效減少空間使用率,進而提高資源的有效利用率。若某個輸入與猜測選擇出的特征子塊匹配,則把輸入進行NFA驗證,驗證方法是基于DPI庫中的每條規(guī)則轉(zhuǎn)變?yōu)镹FA得到的。

    其中S1和S2分別為代表兩個需做比較的正則表達式, ED(S1,S2)是指S1和S2之間編輯距離,max(|S1|,|S2|)是選擇兩個正則表達式中字符多的一個。若兩個正則表達式完全一樣,則計算結(jié)果為1;若兩個正則表達式完全不同,則計算結(jié)果為0。式(1)的字符串相似度算法復(fù)雜度小、精確度大,采用其進行相似度計算能夠有效減少內(nèi)存消耗并且確保極高的匹配率。
    采用上述的相似性計算法將每個Sub-feature進行相似度分析并分組。首先,在所有未分組的Sub-feature中選取一個與其他Sub-feature具有相似性的Sub-feature加入一個新組并記為group0;其次,在所有未處理的Sub-feature中,選取一個與group0中所有Sub-feature具有相似性的Sub-feature加入group0中;然后,重復(fù)以上步驟,把相似度低的或者未處理的正則表達式另行分組為group1、group2、group3等。
     Sub-feature分組后,對每個組group0、group1、group2及group3等分別進行DFA轉(zhuǎn)換,分組轉(zhuǎn)換后的DFA要比沒有分組直接轉(zhuǎn)換DFA所需要的狀態(tài)數(shù)少,有效地降低了系統(tǒng)資源使用率。
2.3 檢驗
       經(jīng)過上述的猜測和分組過程可以將大部分不滿足條件的輸入過濾掉,只剩少數(shù)數(shù)據(jù)可以與某條規(guī)則中的網(wǎng)絡(luò)數(shù)據(jù)流所有特征子塊相匹配從而需要進行完整驗證過程。因此可以使用速度相對較慢、但內(nèi)存需求較低的NFA來完成。NFA是通過從特征子塊中提取的各條完整規(guī)則,經(jīng)過Thompson構(gòu)造法轉(zhuǎn)換得到的。該檢驗方法通過占用系統(tǒng)內(nèi)存資源不大的NFA來實現(xiàn),保證了匹配結(jié)果的精確性。
    為方便描述現(xiàn)定義:S表示規(guī)則中所有的正則表達式集合,r為集合中的正則表達式,rk為Sub-feature,Gd表示基于相似度算法分組數(shù):
For(rk∈S)
    {
  For (d=0;d<diff;d++)
            For(k=0;k<max;k++)
            {
                If(ES(rd,rk)>=0.7)
                Gd=group(rk,k);
          }
    }
DFA=make_DFA(Gd);
NFA=make_NFA(S);
If(Wait(P)==1)
{
For(i=0;i<sizeoff(P);i++)
A=dfa_match(DFA,pi);
If(A&isin;DFA.OK)
nfa_match(NFA,P)
}
    該算法首先從正則表達式中搜索出Sub-feature作為猜測條件,根據(jù)相似性算法函數(shù)ES計算所有Sub-feature的相似度,并選出相似度大于70%的Sub-feature,儲存在分組函數(shù)groupi(i=0,1,2,&hellip;,d-1)中,共有d個分組。在輸入前,通過函數(shù)make_DFA、make_NFA生成預(yù)處理的DFA和NFA。當有輸入時,算法進行匹配,若輸入能夠滿足猜測并與DFA匹配成功,則對輸入的完整規(guī)則進行NFA匹配。
3 實驗結(jié)果與分析
     正則表達式匹配算法性能是否優(yōu)越的一個評價標準是系統(tǒng)內(nèi)存占用率。本實驗將猜測-檢驗算法進行對比和分析。實驗采用的正則表達式來自Linux Lay er-7 filter(L7)以及snort規(guī)則集中常用的Web-misc規(guī)則類;并用編譯工具在VC上生成NFA和DFA。
     實驗配置:主機CPU頻率2.69 GHz;1.99 GB內(nèi)存;Window XP操作系統(tǒng),網(wǎng)絡(luò)配置器是Realtek RTL8169/8110 Family Gigabit Ethernet NIC。
   實驗步驟: (1)在L7和snort規(guī)則集中提取出Sub-feature;(2)采用式(1)中字符串相似性算法把相似性大于70%的Sub-feature分為一組,實驗中對L7和Web-misc類的Sub-feature進行分組; (3)將每組中的正則表達式分別通過編譯工具生成DFA,并最終合并為一個DFA;(4)對比猜測-檢驗算法。
     實驗結(jié)果與分析:表1、表2分別給出了L7和snort中的Web-misc規(guī)則采用本文算法與猜測-檢驗算法所占內(nèi)存需求對比。由實驗結(jié)果可以看出,基于L7規(guī)則庫,猜測-分組-檢驗算法所占用的內(nèi)存比猜測-驗證算法減少了35%;而基于snort中Web-misc規(guī)則庫,猜測-分組-檢驗算法所占用的內(nèi)存比猜測-驗證算法減少了5%,且猜測-分組-檢驗算法的DFA狀態(tài)數(shù)大幅度小于猜測-驗證算法。由此可知,本文所提正則表達式算法能更有效地減少系統(tǒng)內(nèi)存資源的使用。

    本文在深入學(xué)習(xí)、研究正則表達式和探討了優(yōu)化NFA與DFA的基礎(chǔ)上,借鑒一些經(jīng)典的正則表達式匹配算法提出了一種新的面向網(wǎng)絡(luò)數(shù)據(jù)流正則表達式匹配算法:猜測-分組-檢驗算法。這種算法首先使用分組算法對正則表達式中的Sub-feature進行相似性分組,然后完成對輸出的特征子塊猜測,最后將通過猜測的輸出進行完整的NFA檢驗。算法通過對比猜測-驗證算法進行實驗分析,驗證了該算法具備系統(tǒng)內(nèi)存資源占用率低和匹配能力強的優(yōu)點。
參考文獻
[1] AHO A V, CORASIEK M J. Effieient string matehing: an  aid to bibliographic searerch[J]. Communications of the ACM, 1975,18(6):333-340.
[2] WALTER B C. A string matching algorithm fast on the  average[J].Processing of ICALP,1979,71(7):118-132.
[3] WU S, MANBER U. A fast algorithm for multi-pattern  searching[C]. Department of Computer Science,1994.
[4] Qi Deyu, Qian Zhengping, Zheng Weipin. Fast dynamic pattern matching for deep packet inspection[C]. Proceedings of 2008 IEEE International Conference on Networking,Sensing and Contriol,ICNSC, 2008.
[5] SOMMER R, PAXSON V. Elthaneing byte-level network   intrusion deteetion signatures with context[C]. ACM conf,    on Computer and Communication Security, 2003.
[6] KUMAR S, DHARMAPURIKAR S, YU F. Algorithms to   accel-erate multiple regular expressions matching for deep  packet inspection[J]. Computer Communication Review,  2006,36(4):339-350.
[7] KUMAR S, TUMER J, WILLIAMS J. Advanced algorithmsfor fast and scalable deep packet inspection[C].ACM,2006.
[8] YU F, CHEN Z F, DIAO Y L,et al. Fast and memoryefficient regular expression matching for deep packet inspection[C]. In: Proc. of the IEEE/ACM Symp. on Architectures for Networking and Communications Systems.San Jose, 2006.
[9] BECCHI M, CROWLEY P. A hybrid finite automaton for practical deep packet inspection[C]. In: Processing of the ACM CoNEXT 2007, 2007.
[10] 張樹壯,羅浩,方濱興,等.一種面向網(wǎng)絡(luò)安全檢測的高性能正則表達式匹配算法[J].計算機學(xué)報,2010,33(10):1976-1986.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。