摘要: 針對網絡信息安全中大規模URL關鍵字匹配過程中自動機內存占用過大問題,提出一種基于分類思想的多模匹配算法,將URL關鍵字按照模式長度和匹配要求進行分類,分別使用Wu-Mamber算法和自動機類多模匹配增效算法GFAM進行匹配。實驗結果表明,經過分類后,大規模配置(>10w)情況下,算法能夠將占用內存降低為只使用GFAM算法的內存的5%以內。
關鍵詞:
中圖分類號: TP301.6 文獻標識碼:A 文章編號:2095-2163(2011)01-0020-04
0引言
字符串匹配問題是計算機科學中的一個經典研究領域。信息安全領域中,URL關鍵字匹配是入侵檢測系統、防火墻系統、反釣魚防御系統等的最基礎也是最核心的部分。然而隨著URL域名數量的不斷增長,網絡安全威脅不斷升級,尤其是數據規模驚人增長的情況下,大規模URL關鍵字多模匹配算法的性能已經成為系統的瓶頸,同時針對URL關鍵字的匹配不再是簡單的精確匹配,還包含了如“與”表達式匹配、模糊匹配等多種匹配需求。傳統的字符串匹配算法已經不能適用于大規模URL關鍵字的匹配,可以說提高大規模URL關鍵字匹配的效率,降低URL關鍵字匹配部分的系統開銷,提高算法的適應性和健壯性將對消除系統瓶頸起到至關重要的作用。
1研究現狀
從多模匹配算法的特點來說,可以將多模匹配算法分為基于前綴搜索的匹配算法、基于后綴搜索的匹配算法、基于子串搜索的匹配算法、基于位并行的匹配算法以及基于硬件的匹配算法。目前在字符串匹配領域的研究工作主要集中在對經典算法的改進上,由于基于位并行的匹配算法和基于硬件的匹配算法不適用于大規模URL關鍵字匹配,以下主要介紹其他三類中最具代表性的算法。
(1)基于前綴搜索的AC[1]算法。AC算法是經典的多模匹配算法,至今大部分的多模匹配算法都是針對AC算法進行改進。AC算法對所有關鍵字建立有限自動機,利用該自動機對輸入文本進行掃描。自動機建立過程建立三個函數:狀態跳轉函數goto,輸出函數output,失效函數failure。
匹配過程是從零狀態出發,每次掃描文本中的一個字符,在當前狀態情況下,查看掃描到的字符,利用goto函數、failure函數跳轉到下一個狀態。如果跳轉到的狀態的output函數不為空,表示命中了某個關鍵字,輸出該關鍵字。
(2)基于后綴搜索的Wu-Mamber算法[2]。Wu-Mamber算法基于單模匹配中BM[3]算法的壞字符跳轉思想,維護一個固定長度的掃描窗口,能夠實現對文本的跳躍式掃描。算法初始化階段首先確定所有規則的最短長度m,并建立三個表,分別是跳轉表Shift、后綴哈希表Hash、前綴表Prefix。通過Shift表確定掃描窗口內后綴的跳轉距離;Hash表存儲的是指針,指針指向具有相同后綴哈希值的所有模式串組成的鏈表,同時指向具有相同后綴哈希值的模式串的前綴鏈表;Prefix表存儲了模式串的前綴哈希值,以提高匹配速度。
(3)基于子串搜索的SBOM算法[4]。SBOM算法采用一種稱為Factor Oracle[5]自動機的數據結構,可以識別模式串集合的超集,利用自動機,在長度為lmin的文本窗口內,從后向前逐個識別字符。
AC算法具有與關鍵字特征無關,匹配速度穩定的優勢,但內存消耗高,初始化時間長。SBOM算法的匹配速度快,但效率不夠穩定,并且對最短串長度敏感,內存和預處理時間與AC基本相同。Wu-Mamber算法的預處理時間短,內存消耗少,且模式串規模越大,預處理時間和內存優勢越明顯,但匹配速度不穩定,對最短串長度敏感。
AC算法以其匹配效率穩定,適應性強的優勢成為目前大多數信息安全系統的首選算法,如SNORT系統使用的基于AC的改進算法AC_BM。但隨著URL關鍵字規模的持續高速增長,AC算法內存消耗過高,自動機啟動時間過長的問題逐漸突顯,已經成為系統瓶頸,必須進行優化。
2基于分類思想的多模匹配算法PMUC
2.1大規模URL關鍵字的特征
針對目前一般的信息安全系統普遍使用的特征庫中URL配置(不少于10萬條)的統計,URL關鍵字長度分布在4~256之間,平均長度為40個字節左右。長度在4~10的關鍵字較少,而長度在11~50之間的關鍵字占到接近所有關鍵字的85%左右。另外由于URL配置由數據庫進行維護,數據庫對URL關鍵字長度有一定的限制,因此存在“與”表達式匹配的需求,即將較長的URL關鍵字分割成多個小關鍵字,對每個小關鍵字添加一個“&”屬性,借此表示該關鍵字具有“與”表達式匹配需求,而只有當所有“與”表達式關鍵字均命中,才能報告整體關鍵字的命中。從對配置文件的統計結果來看,“與”表達式最多被“&”分割成4段,具有“與”表達式匹配要求的關鍵字較少,只占到總規則條數的1.25%左右。
2.2PMUC算法的理論基礎
2.2.1Wu-Mamber算法的思想
假設模式串集合P中最短的模式長度為m,Wu-Mamber算法在后面僅考慮所有模式的前m個字符組成的模式串。預處理階段將建立三個表格:
(1)移動表(Shift表):該表用來決定掃描文本的過程中,可以跳過多少個字符。存在兩種情況。其中,x為URL關鍵字字符串,i為每B個字符映射成的哈希值。
① X和任何模式中的子串都不匹配,這種情況下,可以移動文本的m-B+1個字符。記錄移動表SHIFT[i]的值為m-B+1。
② X出現在一些模式中,找出X在所有模式中的最右出現。假設X在模式Pj的位置q處結束,并且X并不結束在任何其他模式中比q大的位置,記錄SHIFT[i]的值為m-q。
(2)哈希表(Hash表):指向后綴hash值相同的模式鏈表和前綴表。表項與shift表有相同的哈希值。
(3)前綴表(Prefix表):存放字符串的前綴哈希值,提高匹配效率。
例如,假設模式集合為?邀from, front, boomed?妖,最短串的長度是4,設字符塊大小B為2。為該模式集合建立的Shift表如表1所示。
Wu-Mamber算法的匹配過程:
(1)計算所有模式中最短串的長度;
(2)掃描模式集合,建立三個表;
(3)如果Shift表對應表項的值不為0,按照shift值向后移動窗口,繼續執行步驟(3),為零時轉步驟(4);
(4)查找Hash表,找出shift值為零的B個字符在模式集合中出現的位置以及每個位置上的模式,執行步驟(5);全部掃描結束,轉步驟(3)繼續掃描剩余文本;
(5)查找該模式的前綴表項,與當前窗口中的文本前綴值比較,相等則逐個比較,如果全部匹配,報告一個成功匹配,否則轉下一個位置,繼續執行步驟(5)。
2.2.2GFAM算法的思想
CFAM 算法[6]是對AC算法的改進,采用字頻映射技術分類壓縮列,采用位圖檢索技術[7]提高檢索效率。在匹配過程中,根據映射規則轉換輸入字符,高頻字符在保留列中查找跳轉狀態;低頻字符利用位圖信息獲得跳轉狀態。根據輸入字符c 計算轉移狀態的偽碼如下:
if F(c) == 0
return 0;
else if F(c) > 0
return the data in uncompressed array (F(c), c);
else
if CHECK_BIT(c, pbitmap) == 0
return 0;
else
return the data in compressed array with index computed by bitmap;
2.3PMUC算法
2.3.1基本思想
從對大規模(不低于10萬條配置)URL關鍵字的統計結果來看,長度較長的關鍵字占多數,較為適合Wu-Mamber算法,而通過長度過濾后,其余短關鍵字適合自動機類算法。算法專門針對大規模URL關鍵字匹配進行性能優化,命名為PMUC算法(Multi-pattern Matching Algorithm for URL based on Classification)。
PMUC算法利用Wu-Mamber算法來匹配長度較長的URL關鍵字,長度范圍在10以上的關鍵字占總關鍵字條數的90%以上,并且命中率較低,實際匹配過程中命中率在10%以下,這部分關鍵字非常適用于Wu-Mamber類算法,產生較大跳躍距離的同時,大大節省了內存空間。
PMUC算法同時采用了基于字頻特征和位圖壓縮GFAM,該算法對AC算法進行了改進。長度較短的關鍵字以及具有“與”表達式匹配需求的關鍵字使用GFAM算法進行匹配,經過Wu-Mamber算法對長關鍵字以及具有“與”表達式需求的關鍵字進行過濾后,利用GFAM算法進行匹配的關鍵字只占很小一部分,且相比于AC算法來說,GFAM算法能夠進一步壓縮自動機占用的內存。
PMUC算法結合這兩個改進算法,將URL關鍵字按照關鍵字特征進行分類匹配,在保證匹配效率的基礎上,達到了明顯的內存優化效果。實驗表明,PMUC算法占用的內存可壓縮為原只使用AC算法的5%以下,并且關鍵字規模越大,優化效果越明顯。同時初始化時間有了明顯降低,這對于經常進行配置更新的信息安全系統來說,將明顯提高系統的啟動速度。圖3所示的偽代碼表明了PMUC算法的初始化與匹配過程。其中S表示分類條件。
2.3.2算法匹配條件
目前,URL關鍵字匹配規模在10w條以上,且未來規模將越來越大。每條關鍵字的長度一般在4~1 024之間變化,其中長度大于10的關鍵字占總關鍵字比例的90%以上。另外在入侵檢測中,存在一種稱為“與”表達式匹配的匹配規則,只有當規則中的所有模式都匹配到的情況才宣告匹配成功。
根據以上URL關鍵字匹配特點,將關鍵字按照如下條件分類。其中,關鍵字的長度用L表示,臨界長度用m表示,為關鍵字添加屬性bds,關鍵字的bds=1時,說明該關鍵字是一條“與”表達式規則的關鍵字。
Wu-Mamber算法的匹配條件:
pattern.L>=m&&pattern.bds=0;
GFAM算法的匹配條件:
pattern.L<m||pattern.bds=1。
2.3.3參數對算法性能的影響
m:Wu-Mamber算法對所有模式的最短串長度敏感,因此使用Wu-Mamber算法進行匹配的模式的最短長度不能太短,m表示所有模式的最短串長度。文獻[2]給出了Wu-Mamber算法的時間復雜度為O(BN/m),在模式較為隨機的情況下,m越大,跳躍距離越大,匹配速度越快。但對于PMUC算法來說,m增大也就意味著模式中使用GFAM算法進行匹配的模式增多,因此將導致內存的增大。
D:GFAM算法在自動機的前D層仍然用二維數組來記錄跳轉狀態,且層數越低,出度越大,保證了高頻字符的查找速度。而層數大于D后,跳轉狀態使用鏈表來實現,由于此時D層后的字符出現頻率較低,出度較小,因此在盡可能保證查找速度的條件下,壓縮了內存空間。由于所有關鍵字中長度大于m的關鍵字已經使用Wu-Mamber進行匹配,因此,D的設置應當小于m。一般來說,D越小,越節省內存,但匹配速度有所下降。
3實驗結果與分析
3.1測試環境與數據
實驗的測試環境為8核CPU,主頻為2.6Hz,操作系統采用GreatTurbo EnterpriseServer10,內存總量為16GB。文本集采用離線網絡數據包,分別包含100萬條http包、200萬條、300萬條、400萬條。關鍵字采用真實URL中提取的部分連續字符串作為測試集合。
3.2實驗結果與分析
首先測試調整參與“與”匹配時間的關系,分別選取含有100w、200w、300w,400w包的cap包,使用GFAM算法和PMUC進行匹配,記錄精確到us的匹配時間。測試匹配時間時,選用14萬條的配置規模,實驗結果如圖4所示。
圖4中,橫坐標表示m和D的不同值組合。其中,m初始值設置為11,D設置為8,m初始測試值根據對規則長度的統計結果進行設置。可以看出,整體的匹配時間是呈現下降趨勢的,小范圍內有波動。最左側的時間也比較短, 而在 右側的曲線內,m=8,D=6的點以及m=7,D=4的點匹配時間較短。如果考慮內存因素,那么必然是選擇m=7,D=4比較好。
圖5說明了調整參數m和D對內存的影響。從內存占用情況來看,D值相同的情況下,m>=9時,m每減小1,內存減小1Mb左右;而當m<9時,m值的減小對內存占用基本沒有影響。但是在固定m的情況下,D每減小1,內存相應減小約10Mb,因此,在選定m的情況下,如果匹配時間沒有明顯的變短,那么D可以盡可能減小,以節省內存。
圖6給出了兩者內存對比情況,結果表明與GFAM相比,PMUC的內存占用明顯較低,此時選取的參數是D=4,m=7,則PMUC將獲得更好的內存性能。
圖7表明,模式規模越大,PMUC的內存優化的效果越明顯。
4結束語
本文針對信息安全領域中URL配置量不斷加大,內存消耗巨大,造成系統產生瓶頸的問題,提出使用分類思想的多模匹配算法PMUC,通過調整分類參數使得PMUC算法達到速度與內存的最佳結合點,從而在匹配速度可接受的情況下,大幅降低自動機匹配部分的消耗。實驗表明,PMUC算法占用的內存,可降低為原只使用GFAM算法時的5%以下,這為今后系統的高效穩定運行提供了有力的保證,并為未來應用于不斷增長的數據留下了更大的空間,使得系統的可擴展性提升。同時,針對特定匹配,選擇合適的算法進行分類匹配的思想,也為研究高效的串匹配算法提供了開闊思路。
參考文獻:
[1] AHO A V,CORASICK M J. Efficient string matching:an aidto biologigraphic search. Communications of the ACM,1975,18 (6):333-340.
[2] WU S,MANBER U. A fast algorithm for multi-pattern search- ing. Report TR-94-17,Department of Computer Science,Univ- ersity of Arizona,Tucson,AZ,1994.
[3] BOYER R S,MOORE J S. A Fast String Searching Algorithm [J]. Communications of the ACM,1977,10(10):762-772.
[4] CROCHEMORE C A M,RAFFINOT M. Factor Oracle: A New Structure for Pattern Matching[R]. Institute Gaspard-Monge, U- niversite de Marne-la-Vallee,1999.
[5] ALLAUZEN C,RAFFINOT M. Factor Oracle of a Set of Wor- ds[R]. Technical Report 99-11,Institute Gaspard-Monge,Univ- ersite de Marne-la-Vallee,1999.
[6] 李超,張宏莉,楚國鋒. 基于字頻特征的自動機多模匹配增效 算法[J]. 微計算機信息,2009,29(3):206-208.
[7] 張元競,張偉哲. 一種基于位圖的多模匹配算法[J]. 哈爾濱工 業大學學報,2008,36(6):110-114.