《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 面向網(wǎng)絡(luò)流的正則表達(dá)式匹配改進(jìn)算法
面向網(wǎng)絡(luò)流的正則表達(dá)式匹配改進(jìn)算法
來(lái)源:電子技術(shù)應(yīng)用2013年第8期
吳君欽, 王 凱
江西理工大學(xué) 信息工程學(xué)院,江西 贛州 341000
摘要: 提出了基于猜測(cè)-分組-檢驗(yàn)的面向網(wǎng)絡(luò)流正則表達(dá)式匹配算法。首先對(duì)出現(xiàn)概率高的部分特征子塊進(jìn)行搜索并把特征子塊進(jìn)行分組后DFA轉(zhuǎn)換,然后對(duì)輸出進(jìn)行猜測(cè)匹配。若匹配成功,則使用NFA進(jìn)行完整驗(yàn)證。實(shí)驗(yàn)表明,該方法能夠在減少內(nèi)存使用和資源占用率的同時(shí),具有極高的匹配效率。
中圖分類號(hào): TP393
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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)控中,深度報(bào)文檢測(cè)技術(shù)是一種主要的手段,它通過(guò)字符串匹配算法把網(wǎng)絡(luò)中捕獲到的數(shù)據(jù)流與特定的字符串進(jìn)行匹配。這里所說(shuō)的特定字符串是指在分析數(shù)據(jù)報(bào)文協(xié)議的基礎(chǔ)上提取的特征字符,通過(guò)這種方式可以識(shí)別并阻斷某些數(shù)據(jù)流,實(shí)現(xiàn)有效的網(wǎng)絡(luò)安全防范。

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

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

    本文在深入學(xué)習(xí)、研究正則表達(dá)式和探討了優(yōu)化NFA與DFA的基礎(chǔ)上,借鑒一些經(jīng)典的正則表達(dá)式匹配算法提出了一種新的面向網(wǎng)絡(luò)數(shù)據(jù)流正則表達(dá)式匹配算法:猜測(cè)-分組-檢驗(yàn)算法。這種算法首先使用分組算法對(duì)正則表達(dá)式中的Sub-feature進(jìn)行相似性分組,然后完成對(duì)輸出的特征子塊猜測(cè),最后將通過(guò)猜測(cè)的輸出進(jìn)行完整的NFA檢驗(yàn)。算法通過(guò)對(duì)比猜測(cè)-驗(yàn)證算法進(jìn)行實(shí)驗(yàn)分析,驗(yàn)證了該算法具備系統(tǒng)內(nèi)存資源占用率低和匹配能力強(qiáng)的優(yōu)點(diǎn)。
參考文獻(xiàn)
[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] 張樹(shù)壯,羅浩,方濱興,等.一種面向網(wǎng)絡(luò)安全檢測(cè)的高性能正則表達(dá)式匹配算法[J].計(jì)算機(jī)學(xué)報(bào),2010,33(10):1976-1986.

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