快速高效的模式匹配算法的剖析与改进
来源:六九路网
计算机工程与设计computerEngineering踟d・信息安全技术・DesigTl2009,30(11)2649快速高效的模式匹配算法的剖析与改进王杰,刘亚宾,石成辉(郑州大学电气工程学院,河南郑州450001)摘要:考虑到处理性能和内存开销两大因素,模式匹配成为网络入侵检测系统(NIDs)中最为关键的一环,而现有内存消耗较少的算法性能一般较差。因此,提出一种专为入侵检测领域设计的Modified.Pi啪ha(MP)算法,它基于排斥思想,并采用位图法、优化高速缓存和状态重排思想对Pmha算法中的哈希表进行了改进,进一步减少了匹配步骤和内存访问次数,极大地提升了模式匹配的效率。实验结果表明,相对目前先进的模式匹配算法,MP算法能显著提升snort的性能,能减少lO.8%~36.7%的处理时间,节省5.6—络一38.9%的内存使用.关键词:MP算法;网络入侵检测系统;模式匹配;特征检测;住图中图法分类号:TP393.08文献标识码:A文章编号:1000.7024(2009)11.2649一03AnatomyandimproVementoffastandmemory-emcientpattemmatchingalgorithmWANG(SchoolJie,LrUYa-biIl,ZhengzhouSHICheng-huiZhengzhou45000l,t11eofElectricalEngineeriIlg,illtoUniVersi饥China)Abstract:T敬illgprocessing锄dm锄oryresourcesNIDses,buttheexistedpat锄-malchingalgorithmswhichconsumedIessmemo叫givespoorped.ormancegenemlly.M0dified-Pi鼬ap砒哪matchingtailoredacco嘣,patt锄matchingh勰becomemostcrnicalpartofsi印砷u陀.based(MP),粕improvedalgoritllmformerarestf研in仃usi∞de踟io玛patt锄willisdeveloped.Itisbasedontheobsenr“ontIlatifal-subs仃证gofapattemd∞snot印pe虬t11朗thewholedefinjtelynotmatch.Tobctt既tIleh弱htableofp眦hag嘶th鸭tl把武!thodm蛐gm即tal5.6%toofbinll印s锄dtllethouglltof0ptimizedcache彻dre盯mngingstatesisu∞d.Byllsingtlleproposedmethod,thest印柚dthememo叫accessa舱eVid舶tlymduced,锄dthepattemmatchingemci∞cyispromoted朗。咖。吣ly.Theexperi—MPalgorithmc锄enh锄cethercsultsindicatethat38.9%in咖sperfo姗柚ceofSnortbyl0.8%to36.7%intemsofprocessillgtime锄dbyofmemoryusagec伽1pa心dtoe)【istingstate—of_the-analgorithms.Keywords:modified_pirallllaalgori她;NIDS;panemmatching;si母lature-ba∞d出惦ction;binll印法)和基于排斥的E2)【Bo川算法与Pi删1h∥算法等。1.10引言E2xB算法由于模式匹配需要对数据包负荷进行完全检测…,简单的匹配也需检测数据包的包头信息,因此模式匹配对入侵检测系统的性能影响很大。研究表明㈨,花在模式匹配上的处理时间约占总处理时间的30%。在某些情况下,如在W曲应用密集的流量中,这一比例会高达80%。此外,随着规则集的增大,入侵检测系统对内存的需求会更高。同时,鉴于网速逐年递增,快速而高效的模式匹配算法亟待研究蜘。E2xB算法专为入侵检测特殊需求而设计,同下述Pi啪lla算法类似,它也是基于排斥思想:若欲检测输入字符串环包含字符串P的子串,则字符串丁必不包含字符串P。用集合论公式证明该命题的真理性:因p尸,尸印->聊,则r牛p,P印.>肼尸(其中,“>”为“集合包含”符号)。如果所有p均为7’的子串,则视为一次疑似匹配,之后调用标准模式匹配算法如B删判定P是否为r的子串。该算法借助触发位图(occur锄cem印)增强匹配效率,并可以使用任意位长的码元(elements),但码元大小的选取需要采取一个折衷方案:码元较长能减少误匹配率,但会相应地增加触发位图的长度,导致漏匹配率增加和性能降低。1模式匹配算法‘人侵检测系统中使用的典型匹配算法有Boy盯-Moore¨l,Modified、Ⅳu-M卸be一“(Snon2.0以后版本中默认的模式匹配算收稿日期:2008一06.12:修订日期:2009.02.16。基金项目:河南省杰出人才创新基金项目(074200510013);河南省教育厅自然科学基金项目(2007520048)。作者简介:王杰(1959一),男,河南周口人,博士,教授,博士生导师,研究方向为智能控制与智能计算、信息与计算机网络安全;(1983一),男,河南周口人.硕士研究生,研究方向为信息与计算机网络安全、模式匹配算法f刘亚宾石成辉(1982一)。男.河南信阳人,硕士研究生.研究方向为iI算机网络与信息安全、智能化入侵防御系统。E—mail:LHDAS2006@163.伽万方数据26502009,30(11)计算机工程与设计ComputerEngineeringandDesi印1.2Piranha算法Pinnha算法思想:若在数据包负荷内发现一个模式中最少使用的四字节子串,则认为模式匹配成功,即每一个模式都可以由它的代表性的四字节子串来代表。该算法本身只处理其长度大于或等于四字节的模式,而小于四字节的模式被单独处理。其具体实现分为预处理和搜索两个阶段。1.2.1预处理阶段Pi础将每一字节对齐的模式看作32位的子模式集合,以便使用整数值进行快速运算。如模式“/admin.exe”(R1)可看作“/adm”,“adnli”,“dmin”,“min.”,“i11.e”,“n.ex”和“.exeJ,的集合。模式匹配由AND运算符组成的公式表示,每一种模式表示一个门,而门由多个32位的子模式组成,每一个输入表示在数据包负荷中是否有32位的子模式出现。门初始输入值均置0,并随着子模式字符序列在数据包中的出现做出相应变化。当输出门置为l时,认为是一次疑似匹配。为了快速查找哪些输入被置为l,需要维护一张记录所有模式的4.byte子模式字符序列的索引表。假定索引表中只有两个模式,一个是“枷mill.exe”(R1),另一个是“/admin.sh”(R2),如图l所示。字符序列“棚m”,“admi”,“dmin”和“min.”在R1和R2中均出现,而“.exe”,“in.e”和“n.ex,,只属于Rl,“in.s”和“n.sh”只属于R2,当有一项出现在索引表中时,相应的输入就会做出相应切换。例如,当数据包的负荷为“min.既e”时,则首先读取索引表中的“min.”,它所对应Rl和I匕的输入将做出相应切换,之后依次读取“in.e”,“n.ex”和“.瓯e”,它们所对应Rl的输入也将做出相应切换。—偷+\√/adm—儡卜锄\√耐miH瓮卜讲‘俞\√dmin诉\√—i涮刷\-/In.C\—/n.eX—i沁一\—/,admU黜E.eXe叫俞一∑£一到睁’景1:_卜二兮In.SHn.cxPn.sh卜一nshP图l优化前后的模式索引表和门尽管使用门方法具有较低的疑似匹配率,但其性能依然很差,这是由于大部分开销都用于判定一个模式是否被匹配上。为了减少检查的步骤和内存的使用,对索引表进行优化:留R1的具有代表性的子模式字符“n.ex”和R2的具有代表性的子模式字符“n.sh”,优化后的索引表如图l右下角所示。这即如果一个字符序列在一个索引中出现,那么这就可能是一万方数据1.2.2搜索阶段对于每个数据包负荷中的4.bytc字符序列,在索引表中查找是否含有特定代表性序列的模式,然后系统对这些模式做进一步检测。仍如前例,如果数据包负荷为“/logill.sh”,则需检查“/Iog”,“logi,,,“ogin”,“gin.”,“in.s”和“n.sh”等字符序列。在优化后的索引表中,发现“n.sh”在模式R2中出现,于是假定IU被匹配。而其余的字符序列不属于任何一种模式,不必检查。为了减少疑似匹配率,在决定一个模式是否匹配后,用模式的最后两个字符与数据包负荷中相应的最后两则字符做比较,如果相同再触发进一步的检查。采取上述优化步骤后,可以减少50‰75%的触发次数。2Modi矗ed.Piranha算法2.1预处理阶段通常,一个模式长为8-byte的索引表会含有2”个入口,它所消耗的内存是巨大的。为保证内存占用量尽可能小,MP算法使用一个哈希表来实现索引表的功能。哈希表中表项的位置是由关键字经过哈希运算得到的索引值决定,如果不同表项算出的索引值相等就会发生冲突:小哈希表容易产生较多的冲突,同时,为了查询正确的索引项,需要遍历较长的链表;相反,大哈希表产牛的冲突较少,但是,由于高速缓存的限制,每一次的访问性能较差。此阶段采用位图法和优化高速缓存对P础算法中的哈希表进行改进。2.1.1位图法哈希表是根据关键码值(Key)而直接进行访问的数据结构。其中映射函数为散列函数,存放记录的数组为散列表,数组中的每个元素称为桶(Bucket),每个桶再用一个链表处理节点冲突9l,并可看作为一个二次链表,算法理想复杂度为o(1)。哈希表的性能主要取决于两个因素:哈希函数和冲突处理。因此,在建造哈希表时不仅要设定一个好的哈希函数,而且要设定一种处理冲突的方法。在MP中,哈希表选取适用于字符串的APH勰h函数和位运算哈希函数。通过设置大小合适的取余模数与移位数值,并运用除留余数法使各个元素更均匀地分布所确定的数据结构上,再经过位运算哈希函数二次哈希,将得到的相同的地址的关键字值链入对应的链表中。同时另设一个溢出表,不管得到的哈希地址如何,一旦发生冲突,都填入溢出表,单独处理(如与协议分析相结合,定位入侵特征)以解决碰撞冲突与查找性能之间的矛盾。就欲匹配的入侵特征集而言,查找的效率与比较次数密切相关。然而数据包中绝大部分为正常数据流,即在哈希表中查找失败,这意味着在桶链表E的遍历大都是无用的。可将入侵特征集中频繁匹配的特征信息保存在桶内,并根据相应设定的计数器进行更新排序,每次从计数值较大的桶结点链表开始查找。这样就能进一步减少无用的遍历,降低内存访问次数。本文采用位图在桶内记录入侵特征节点的一些信息(如图2所示)。位图是一个宽为W位的字w,满足:w的第i位置位,当且仅当存在入侵特征节点u使得位哈希函数H(u)%W=i。其中Cll,C12,Ckl等为位哈希匹配计数器。改进的位图哈希表查找算法如下:选择一个具有代表性的4.byte子模式字符序列来代表一个门,所有其它的输入从门中清除。如对于前例,在索引表中只保样每个门只有一个输入,且其输出等价于输入,同时减少了运行时间内的匹配冲突,因此我们就能够使用索引表进行搜索。次匹配。王杰,刘亚宾,石成辉:快速高效的模式匹配算法的剖析与改进2009。30(11)265l图2位图法优化的哈希表步骤1:Hi<-.APH髂h(x)%MOD;/,为使控制精确,添加求余运算,MOD=16384。步骤2.bit(..Bit、viseHash(x),如果发生冲突,填入溢出表;步骤3:node<~哈希表中第Hi个桶:/,定位第Hi个桶节点。步骤4:如粜node的位图中bit位为O,返回窄值,停止查找;步骤5:否则,在node指向的链表中查找和x相等的节点,若匹配成功,相应位哈希匹配计数器加l,并进行排序调整。该改进与基于排斥的Pmnha算法相结合,突破哈希表的链表平均长度小于位图宽度和在哈希表中查找成功的概率P近似为O的硬性限制,集中体现在步骤1~步骤5中。步骤l中,由Snon2.6中的默认规则集分析可知,入侵特征字符串长度在2~39个字节之间,平均长度为14个字节。再加上相应的TCP/IP头部长度,根据实验结果,选取求余运算模数MOD为16384左右,这样就极人地减少了冲突的发生,使得哈希表的链表平均长度始终处于较好的运行状态。但同时要确保算法中哈希函数中的P值为素数,否则可能会出现性能恶化的情况。步骤5中,由于网络运行环境相对稳定,在一段时间内,网络攻击行为相对集中,所匹配的入侵特征也会有一定的共性。这样每隔一段时间,将频繁匹配的入侵特征依据所设定的计数器和类别进行排序调整,使待检测的数据流尽早地与默认的入侵特征集匹配,减少匹配次数,并能够更准确伞面地描述网络的基本运行状态。这种方法也适合于密集攻击的行为,但相应地会增加一定的内存开销。优化高速缓存是提高数据结构速度的常见途径之~。该算法应用聚合(Clust嘶ng)思想‘”1对入侵特征哈希表优化高速缓存,同时借鉴Nishimu豫等人提出的状态重排法““,将访问频繁的及可能~起被访问的元素按类别放置在一个高速缓存块中,从而增强了高速缓存块的使用效率,提高了数据访问的本地性,同时还提供了隐含的预取性能。下面利用树结构来证明这一概念。树的一种有效聚合方式是将f树存储于一个高速缓存块中,对子树聚合的二叉树进行直觉判断:对一系列的任意树检存块中的子树具有七个结点,则期单的块访问次数为子树的高万方数据是假设在随机访问模式下进行的。对于特殊的访问模式,如深度优先查寻的访问模式,其他的聚合方式也许更好些。此外,对树的更改可能会破坏数据访问的本地性。实验表明,对于那些改变不频繁的树,子树聚合方式以及入侵特征重排将可能一起被访问的、频繁匹配的元素放置在~个高速缓存块中,并进行局部动态地调整,因此远比分配顺序的聚合方式有效。入侵特征哈希表中的哈希表由桶、入侵特征节点和优化后的入侵特征字符串组成,并以单向链表的形式联系在一起(如图2所示)。采用聚合以及入侵特征状态重排思想对哈希表的优化过程在预处理阶段进行:在内存中动态分配一定大小的空间,用以保存索引规则,多个同类入侵索引规则形成一条索引链。每成功匹配一次,则将该条索引规则移动到同类入侵规则链的前端,删除长时间不匹配的以及超出分配空间范围的索引规则,以节省内存开销。图3是哈希表优化后的高速缓存暂态示意图,其中的节点和字符串来自图2,并在之后的运行过程中加以调整。图3优化的哈希表存储暂态2.2搜索阶段在Piranha算法的搜索阶段,考虑单模匹配Boye卜M00心算法适用于中小规模规则集,而多模匹配、Ⅳu.M锄ber算法适用于大规模规则集,但在短规则情况下性能有所降低。因此我们对小模式匹配调用Boyer-M00re算法,对正常模式匹配调用ModifiedWu—M粕ber(MwM)算法进行模式匹配,用以代替Pi珊ha算法中效率较低的matchO函数。2.3MP算法实现MP算法流程如下:预处理阶段:步骤l:对每一个匹配模式,循环读入门列表:步骤2:循环构建并优化索引哈希表;步骤3:如果不再有新门出现,则循环添加索引规则链至规则列表中。搜索阶段:群ifdefSMALI,艄rrERNS//小匹配模式处理(匹配模式长度小于4)对于负载中的每一次偏移:步骤l:若小匹配模式长度为1,转步骤6;步骤2:若小匹配模式长度为2,且负载中大写转换前后的第2个字符与模式的第2个字符相等,转步骤6;步骤3:若小匹配模式长度为3,且负载中大写转换前后的第2、第3个字符与模式的第2、第3个字符均相等,转步骤6;托lse//正常匹配模式处理(匹配模式长度大于等于4)对于负载中的每一次偏移:拌印dif(下转第2655页)2.1.2优化高速缓存(Cache)索时.访问任一子结点的可能性为1/2。若聚合在一个高速缓度l092(斛1),且当七>3时,l092(H1)>2。而在深度优先的聚合方式下,高速缓存块中的k个结点形成一个惟一的父.子.孙…链,它所期望的块访问次数为逢树增2。当然,这种分析刘伟,胡平:windows文件系统过滤驱动在防病毒方面的应用2009,30(11)2655(上接第265l页)步骤4:若优化索引表的模式索引值与转换为大写后的负载索引值相等转5,否则,转步骤8;步骤5:若负载中相应的最后两则字符与模式的最后两个字符相同,转7,否则,转步骤8;步骤6:调用BM算法,若匹配成功,返回l,否则,转步骤8:步骤7:调用MwM算法,若匹配成功,返回l,否则,转步骤8;步骤8:返回O。3实验关闭snon2.6中所有预处理功能,通过与MwM、酽xB和Pi啪ha算法的比较,综合评估MP算法性能。主机配置:PDE2140proces∞r1.2GHz,lGBMelIlory;操作系统:RedhatL抽谜9.O,k嘲elversion2f4.20。数据源:(1)使用抓包工具Tcpd啪p获取的校园网千兆口镜像流量Zzu数据;(2)MITLillcolnlab实验室给出的入侵检测攻击场景数据集2000D川良PA;(3)2003年第ll届DefC∞CRF(Captu心theR00tFu!)的TSG(TheShm00Group)数据集。使用基于2784条规则的Snon2.6分别读取部分待测文件,并取测试平均值,结果如表l所示,表1中的内存使用是指加载所有规则时的内存开销)。表l不同模式匹配算法性能比较ZZUDARPATSG内存使用MWM“.88s∞14.698eclO-268∞47MBE2xB43.32s∞13.34s∞8.73Ⅻ50M田Pimnha42.9lsec13.27s∞8.74s∞38M【BMP37.75s∞11.32s∞7.509∞36MB表l中,ZZU列、DAI心A列和TSG列分别为10次读取120M的镜像流量数据,读取IDEVAL2和IDEvAL3,读取8个小组的攻击数据后的平均测试结果。从以上试验数据可以看出,MP算法相对于Modifiedwu.M柚ber算法减少了10.8%一36.7%匹配时间,节省30.6%的内存使用;相对于E姐算法减少了14.7‰17.8%匹配时间,节省38.9%的内存使用:相对于Pi删nha算法减少了约13.7%一17,2%的处理时间,节省5.6%的内存使用。4结束语在导致大量模式匹配的网络环境中,结合排斥思想,MP万方数据算法采用位图法和优化高速缓存对Praunlla算法中的哈希表改进后,进一步减少了匹配步骤和内存访问次数。从实验结果中可以看出,该算法明显地提升了网络入侵检测系统的性能。但是没有任何一种算法完全适用于不同的网络环境,因此需要依据流量特征、规则集和硬件环境建立一种门限(n睇shold)判决机制,用以调用各种最适匹配算法,这是我们下一步的研究工作。参考文献:【l】RubiIls,JIlaS,Mi¨erBP.Protomatchingnetworl【n_a伍cforhighthrou曲putne附orl‘int九lsiond曲ection【C】.Procoftllel3mACMConf.∞Computer锄dComm呻icati∞ssec面吼2006:47—58.【2】An咖atosS’A船印ostakisKG,Mad斌osE只烈a1.P酬鼢抛ance锄alysisof鲫他ntInj批hingiIltnlsi∞dctccti∞systcms[c】.ProcoftlleInt唧ationalSylllposiumonApplicati∞s锄dthe王n-钯meL2004.[3】张国平,徐汉东.字符串模式匹配算法的改进【J】.计算机工程与设计,2007,28(20):488I-4884.【4】巫喜红,凌捷.BM模式匹配算法剖析【J】.计算机工程与设计,2007,28(1):29.31.【5】唐谦,张大方.入侵检测中模式匹配算法的性能分析【J】.计算机工程与戍用,2005,41(17):136-138.【6】陈瑜,陈国龙.wu-M卸ber算法性能分析及其改进【J】.计算机科学,2006,33(6):203—209.【7】Anagnosta】【isKG,M盯katosE咖tonatosS,etaI.E2xB:Ado-minspccificScfifIgmatchingalgorithlIIforin衄Isiondetection【C】.Procoftllel8thIFIPlnn啪lationalInfo加ationsec州tyC∞e2003:217—228.【8】Ant0衄toss,Polychmnal【isM’AⅫtidisP’cta1.Pi删Ⅱlla:Fast加dm锄ory-e丘icientpattcmmatchingfor咖siondetection【C】.Chiba'Jap蛐:Procof山e20thIFIPIIltenl撕。叫lInfollnationse—c嘶tyCone2005:393.408.【9】郑卫斌,张德运.基于哈希表的高性能URL过滤器研究【J】.小型微型计算机系统,2005,26(2):178.180.【lO】ChilimbiTM,HillMD,LamsJI乙MaI【iIlgpoint盯-ba靶ddata蚋ctufesc孔heconscious【J】.C鲫№2000,33(12):67—74.nl】NishimuraT'Ful噎machiS,Shinoh帆T.Speed-upofAho-Com-sick群吡啪matching眦chinesbymamngingstates【C】.P陆c∞diI唱sofEighthIrItemationalSyrIlposiumonStringProce-s咖g锄dInf0咖ati∞RetrieVal,200l:175.185.