CN103166802B - 一种确定有限自动机的构建方法及装置 - Google Patents
一种确定有限自动机的构建方法及装置 Download PDFInfo
- Publication number
- CN103166802B CN103166802B CN201110412829.9A CN201110412829A CN103166802B CN 103166802 B CN103166802 B CN 103166802B CN 201110412829 A CN201110412829 A CN 201110412829A CN 103166802 B CN103166802 B CN 103166802B
- Authority
- CN
- China
- Prior art keywords
- length limitation
- state
- regular expression
- dfa
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种确定有限自动机的构建方法及装置,用以解决针对包含长度限制的正则表达式构建DFA时可能存在的DFA状态爆炸问题,同时实现DFA的存储空间压缩及匹配加速。确定有限自动机的构建方法,包括:针对特征规则集中包含长度限制的正则表达式,按照长度限制的出现位置进行分割与合并处理,将所述正则表达式的头尾部和长度限制部分相分离;构建所述正则表达式的确定有限自动机,其中,所述正则表达式的确定有限自动机对所述长度限制部分使用跳跃策略调整匹配顺序,头尾部匹配完成之后使用计数策略对所述长度限制部分进行验证。
Description
技术领域
本发明涉及互联网领域,尤其涉及一种确定有限自动机的构建方法及装置。
背景技术
深度数据包检测是NIDS(Network Intrusion Detection System,网络入侵检测系统)和NIPS(Network Intrusion Protection System,网络入侵防护系统)的核心,不仅检测数据包头部信息,而且检测数据包有效载荷(即数据包内容)。深度数据包检测主要采用特征匹配算法,即将数据包内容与一组预定义的特征规则(即特征规则集)进行匹配,通过扫描数据包,识别出与特征规则集相匹配的数据包。
随着网络攻击越来越复杂,例如躲避攻击、变型攻击的出现,单纯的字符串难以精确描述复杂的网络攻击行为特征。由于正则表达式具有灵活、高效等特点,目前许多安全产品采用正则表达式代替字符串表示攻击数据包的特征规则。正则表达式匹配算法主要基于NFA(Nondeterministic Finite Automaton,非确定有限自动机)和DFA(DeterministicFinite Automaton,确定有限自动机)实现,基于DFA的正则表达式匹配算法,从初始状态开始,对数据包的字符流进行匹配,匹配完成之后,如果产生了接受状态的匹配结果,则匹配成功,否则匹配失败。
现有技术中,利用嵌入式存储器技术,例如ASIC(专用集成电路)技术、FPGA(现场可编程门阵列)技术、NP(网络处理器)技术、TCAM(三重内容寻址存储器)技术等,提供了面向硬件实现的正则表达式匹配算法以提高吞吐量。例如,在FPGA上实现NFA以进行正则表达式的匹配,提高深度数据包检测的吞吐量;在FPGA上实现DFA,与在FPGA上实现NFA相比,在吞吐量方面有很大的提高;在TCAM上实现DFA以进行简单正则表达式的匹配等。
DFA的存储空间是由DFA状态个数和每个DFA状态的迁移边条数决定的。目前的DFA压缩算法主要分为两种类型:状态压缩算法和迁移边压缩算法。迁移边压缩算法是研究如何通过减少冗余迁移边以压缩DFA的存储空间开销,例如基于D2FA和基于CD2FA的正则表达式匹配算法,通过引入默认迁移边的概念,将两个DFA状态中,经过相同字符到达同一DFA状态后的边去除一条从而减少迁移边的条数。状态压缩算法是研究如何通过减少冗余DFA状态以压缩DFA的存储空间开销,例如基于状态融合的DFA正则表达式匹配算法,通过添加标签将不等价DFA状态合并为一个DFA状态从而减少DFA状态的个数。对于正则表达式的匹配速度方面,主要是采用并行的正则表达式匹配算法。并行的正则表达式匹配算法用来加快匹配速度,利用猜想的思想,通过并行和验证从而加快正则表达式的匹配速度。
由于NIDS和NIPS的特征规则集中存在着大量的星项“*”、长度限制“{}”、点项“.”等,使得正则表达式的DFA状态个数呈二次项甚至指数增长,从而导致正则表达式在转换成为DFA的过程中可能产生数以万计的DFA状态,进一步阻碍DFA的实现。造成DFA的存储空间较大的主要原因在于:
1、在DFA状态方面,由于正则表达式中使用了许多语义丰富的符号,例如“*”、“{}”、“.”等,DFA需要大量的DFA状态记录部分匹配结果,导致DFA状态爆炸;
2、在迁移边方面,对于ASCII字母表,每个DFA状态需要256条迁移边,导致DFA状态的迁移边表很大。而正则表达式的长度限制部分会使得DFA状态呈指数增长,消耗大量的存储空间,进而阻碍DFA的构建,影响NIDS和NIPS的性能,甚至导致NIDS和NIPS无法提供服务。
针对DFA无法构建的问题,可以采用重写规则、分割正则表达式、计数器和迁移边历史记录等方法解决。所述的重写规则,例如将P1“^A+[A-Z]{j}”重写为P2“^A[A-Z]{j}”;将P1“.*AB[A-Z]{j}”重写为P2“([^A]|A[^B]|AB[A-Z]{j-1}[^(A-Z)])*AB[AZ]{j}”。通过该方法,可以减少转化后的DFA的存储空间消耗。
现有技术中,一般将DFA状态爆炸问题分为三类:
Insonia(不眠症),正常数据包只访问前几个DFA状态,大部分DFA状态不访问;
Amnesia(健忘症),由于星项的存在,使得DFA状态呈二次项增长;
Acalculia(计算力缺失症),由于长度限制的存在,使得DFA状态呈指数增长。
通过构建prefix-surfix DFA可以将正则表达式分割成前后两部分,来分别构建DFA,并保持前部DFA处于活跃状态,后部DFA在需要时被激活,从而减少存储空间并加快匹配速度。H-FA(History-Finite Automaton,历史有限自动机)记录匹配过程中出现的星项,通过一个历史记录减少DFA状态。H-cFA(History-counting Finite Automaton,历史计数有限自动机)对出现的长度限制进行计数以解决DFA状态爆炸问题。Hybrid-FA为了防止NFA到DFA转化时DFA状态的指数增长,同样将正则表达式分割为两段,并分别构建Head-FA和Tail-FA,分界的标识为当遇到包含星项或者长度限制的正则表达式时,将该正则表达式分为两部分,在需要时激活Tail-FA,这样减少了存储空间也可以进行并行匹配。La-FA(Lookahead FA)将正则表达式按照复杂程度进行分割,并调整分段次序,然后重新构造DFA。通过分析DFA状态爆炸原因,XFA(eXtend Finite Automaton,扩展有限自动机)在DFA中加入某些辅助变量包括比特位和计数器,使用变量记录中间的匹配结果,从而减少很多额外的DFA状态。Counting-FA通过引进计数器减少因为长度限制导致的正则表达式的DFA状态爆炸问题。
现有技术中,通过在FPGA上实现NFA能够进行正则表达式的匹配,提高深度数据包检测的吞吐量,但是无法达到目前高速网络的处理要求。通过在FPGA上实现DFA,与在FPGA上实现NFA相比,在吞吐量方面有很大的提高,但是特征规则数受到了限制。虽然采用TCAM实现了简单正则表达式的DFA,但由于TCAM具有价格昂贵,集成度低等缺点,难以对大规模特征规则集采用。由此本发明人在发明过程中发现,基于传统的NFA和DFA的正则表达式匹配算法都无法满足高性能需求。而且随着特征规则集的快速增长,基于传统的NFA和DFA的正则表达式匹配算法缺乏可伸缩性,无法适应高速网络。因此,高性能深度数据包检测的关键是设计一种快速且存储高效的正则表达式匹配算法。又因为NFA的匹配速度无法满足高速网络性能要求,所以目前研究如何改变这一状况的重点主要围绕DFA而展开。
状态压缩算法和迁移边压缩算法最主要的特点是针对一个假设前提:如果正则表达式能被正确的转换为DFA。但实际上,由于现在的NIDS和NIPS的特征规则集中包含大量的长度限制,使得正则表达式的DFA状态呈指数增长,从而阻碍了DFA的构建。
基于DFA可以被构建的前提下的正则表达式匹配算法,对于包含复杂项的正则表达式导致DFA无法被构建时无法运用。在正则表达式匹配时,XFA在进行状态迁移的同时,需要执行迁移边或者DFA状态上的指令使变量记录匹配结果,因此需要付出一些指令执行开销。Hybrid-FA、Counting-FA虽然在一定程度上减少了存储空间,但是在Hybrid-FA中,由于单纯的分离出长度限制和星点项,虽然在一定程度上减少了存储空间,但是存储空间的开销依然很大。在Counting-FA中,由于引入了计数器,从而进一步的减少了存储空间开销,但是由于引入多个实例,对于多个实例的维护以及由此产生的DFA状态及算法的复杂度增大,并且由于实例维护问题导致需要一定的时间开销,影响了匹配速度。总之,现有的针对DFA无法构建问题的算法虽然在一定程度上减少了存储空间,但是存储空间上的开销还是非常巨大的;同时,算法也带来了一定的负面影响,如算法复杂度大,额外存储开销增多;最后,算法在匹配速度上也并未专门做改进。
发明内容
本发明提供一种确定有限自动机的构建方法及装置,用以解决针对包含长度限制的正则表达式构建DFA时可能存在的DFA状态爆炸问题,同时实现DFA的存储空间压缩及匹配加速。
本发明实施例提供的确定有限自动机的构建方法,包括:
针对特征规则集中包含长度限制的正则表达式,按照长度限制的出现位置进行分割与合并处理,将所述正则表达式的头尾部和长度限制部分相分离;
构建所述正则表达式的确定有限自动机,其中,所述正则表达式的确定有限自动机对所述长度限制部分使用跳跃策略调整匹配顺序,头尾部匹配完成之后使用计数策略对所述长度限制部分进行验证。
本发明实施例提供的确定有限自动机的构建装置,包括:
处理单元,用于针对特征规则集中包含长度限制的正则表达式,按照长度限制的出现位置进行分割与合并处理,将所述正则表达式的头尾部和长度限制部分相分离;
构建单元,用于构建所述正则表达式的确定有限自动机,其中,所述正则表达式的确定有限自动机对所述长度限制部分使用跳跃策略调整匹配顺序,头尾部匹配完成之后使用计数策略对所述长度限制部分进行验证。
本发明实施例提供的确定有限自动机的构建方法及装置,采用对包含长度限制的正则表达式进行分割与合并处理的方式将长度限制部分从正则表达式中分离出来,然后通过对长度限制部分使用跳跃策略调整正则表达式的匹配顺序,从而减少DFA的存储空间并加快匹配速度,头尾部匹配完成之后使用计数策略验证长度限制部分,通过分离避免了多实例维护问题的出现,在任何时候只有一个计数实例,进一步减少了DFA的存储空间并加快匹配速度,从而提高深度数据包检测的健壮性。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例提供的确定有限自动机的构建方法流程图;
图2为本发明实施例提供的一种较佳的基于Jump-CFA算法构建DFA的流程图;
图3为本发明实施例提供的对正则表达式进行分割与合并处理的示意图;
图4为本发明实施例提供的在正则表达式“.*a.{n}bc”上的跳跃策略示意图;
图5为本发明实施例提供的使用计数策略验证长度限制部分的示意图;
图6为本发明实施例提供的正则表达式“.*a.{n}bc”的Jump-CFA算法示意图;
图7为本发明实施例提供的优化后的正则表达式“.*a.{n}bc”的Jump-CFA算法示意图;
图8为本发明实施例提供的通过子集构建的方式进行DFA的构建示意图;
图9为本发明实施例提供的构建的DFA在网络设备中使用的网络架构示意图;
图10为本发明实施例提供的确定有限自动机的构建装置结构框图。
具体实施方式
本发明实施例针对采用正则表达式代替字符串表示攻击数据包的特征规则的应用场景,提供一种针对包含长度限制的正则表达式构建DFA(确定有限自动机)的方法及装置,解决DFA状态爆炸问题,实现DFA的存储空间压缩及匹配加速;进一步,基于构建的DFA进行正则表达式的匹配,能够实现深度数据包检测的健壮性和高性能需求,从而保障企业信息系统领域的安全。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
为了实现上述目的,本发明实施例首先提供了一种基于跳跃策略和计数策略的正则表达式匹配算法,首先,按照长度限制的出现位置对包含长度限制的正则表达式进行分割与合并处理;然后,对长度限制部分使用跳跃策略和计数策略构建DFA;最后,基于构建的DFA对数据包进行匹配,根据匹配结果确定该数据包是否为攻击数据包。
为了说明算法的实现原理,首先对“小概率事件”进行解释说明。
对于任意一个DFA状态S,S0为初始状态,定义Depth(S)为从S0到S的最小距离。本发明人在发明过程中发现,正常数据包很少能够匹配任何模式的尾部。基于此,大部分的DFA状态将不会被访问,也就是说,存在一个正整数m,使得Depth(S’)>m的DFA状态S’将很少被访问,将此称之为小概率事件。也就是说,如果一个数据包匹配了模式的头部和尾部,那么在很大程度上该数据包将是一个攻击数据包;相反,如果一个数据包是正常数据包,在匹配了头部之后同时匹配尾部的概率将会非常小。
通过统计发现,大部分的网络流量都是正常数据包,攻击数据包的特征规则集中大概42%的包含长度限制的正则表达式都是“.{n}”形式的。在正则表达式中,“b”比其他字符更具有针对性,能够过滤掉更多的正常数据包。因此,可以改变正则表达式的匹配顺序以提高正则表达式的匹配性能。
本发明实施例中提供了一种基于跳跃策略和计数策略的DFA算法,本发明实施例中将该基于跳跃策略和计数策略的DFA算法称为Jump-CFA(Jump-Counting FiniteAutomata,跳跃和计数有限自动机)算法,即采用对正则表达式进行分割和合并处理来重组正则表达式,然后通过对长度限制部分使用跳跃策略调整正则表达式的匹配顺序,从而减少DFA的存储空间并加快匹配速度,头尾部匹配完成之后使用计数策略验证长度限制部分,由于在任何时候只有一个计数实例,从而进一步减少了DFA的存储空间并加快匹配速度。
下面,将详细介绍Jump-CFA算法的DFA构建方法,如图1所示,包括如下步骤:
S101、针对特征规则集中包含长度限制的正则表达式,按照长度限制的出现位置进行分割与合并处理,将包含长度限制的正则表达式的头尾部和长度限制部分相分离;
S102、构建包含长度限制的正则表达式的DFA,其中,包含长度限制的正则表达式的DFA对长度限制部分使用跳跃策略调整匹配顺序,头尾部匹配完成之后使用计数策略对长度限制部分进行验证。
特征规则集中一般包括多个正则表达式,则所述构建方法还可以包括如下步骤:
S103、对特征规则集中各正则表达式的DFA进行合并处理,得到特征规则集的DFA。
下面详细说明一种较佳的基于Jump-CFA算法构建DFA的过程,如图2所示,包括如下步骤:
S201、从特征规则集中选择一个未处理的正则表达式;
选择出未处理的正则表达式之后,可以将该正则表达式从特征规则集中删除,或者将该正则表达式标记为已处理状态。
S202、对当前的正则表达式按照长度限制的出现位置进行分割与合并处理,将该正则表达式的头尾部和长度限制部分相分离,使得导致DFA状态个数指数增长的长度限制部分从该正则表达式中分离出来。
S203、构建当前的正则表达式的DFA,该正则表达式的DFA对长度限制部分使用跳跃策略和计数策略;
具体的,对长度限制部分使用跳跃策略调整该正则表达式的匹配顺序,头尾部匹配完成之后使用计数策略对长度限制部分进行验证。
S204、将当前的正则表达式的DFA与在先的正则表达式的DFA进行合并处理。
S205、判断特征规则集中是否还有未处理的正则表达式,如果是,则返回执行S201,如果否,流程结束,得到特征规则集的DFA。
正则表达式的分割与合并处理,具体介绍如下。
在实际的NIDS和NIPS中,特征规则集的正则表达式中一般包含复杂的部分,例如星点项和长度限制,从而导致DFA不可行。虽然一般NIDS和NIPS的特征规则集中只有9.3%的正则表达式包含长度限制,但是一旦长度限制出现,将会极大的影响NIDS和NIPS的性能,甚至导致NIDS和NIPS无法提供服务。由于DFA状态爆炸问题,包含长度限制的正则表达式将会消耗大量的存储空间进而阻碍DFA的构建。因此,本发明实施例中将正则表达式的长度限制部分与其他部分相分离从而阻止DFA状态爆炸。一旦在正则表达式中包含长度限制,则将该正则表达式分割为三部分:头部、长度限制部分和尾部;然后将头部和尾部进行合并,从而分离出长度限制部分。例如正则表达式“.*a.{5}bc”包含长度限制“.{5}”,其中长度限制的重复字符为“.”,表示任意字符,长度限制的重复基数为“{5}”,表示重复5次。如果长度限制的重复基数为“{*}”,则表示重复任意次数。将该正则表达式按照长度限制的出现位置分为“.*a”、“.{5}”和“bc”,分别作为该正则表达式的头部、长度限制部分和尾部;然后将头部和尾部进行合并,从而将该正则表达式的头尾部“.*abc”和长度限制部分“.{5}”相分离;最后使用不同的检测器可以分别检测头尾部“.*abc”和长度限制部分“.{5}”。对正则表达式进行分割与合并处理的示意图请参见图3,例如正则表达式集R中包括三个正则表达式,分别为r1“.*a.{5}bc”、r2“.*a bc[^d]{5}”和r3“.{5}abc”,对各正则表达式进行分割与合并处理之后得到:r1的头尾部“.*abc”和长度限制部分“.{5}”,r2的头尾部“.*abc”和长度限制部分“[^d]{5}”,r3的头尾部“abc”和长度限制部分“.{5}”。
长度限制部分的跳跃策略,具体介绍如下。
请参见图4,给出了在正则表达式“.*a.{n}bc”上的跳跃策略。
如图4所示,状态1是JUMP状态,用来指示长度限制部分的开始。一旦到达了JUMP状态,一个变量i将会产生并用来记录输入的数据包的当前位置。然后在数据包的剩余字符流中跳过随后的n个字符,n为重复基数,并使用w(i+n)判断输入的数据包的字符流中第(i+n)个字符是否为b,如果是,则进入下一状态2;否则返回初始状态0并且从位置i重新开始验证。在状态2中,如果随后的字符是c,则进入下一状态3。状态3是TRIGGER状态,是一个触发器用来验证长度限部分。
使用跳跃策略减少存储空间需求,更重要的是加快正则表达式的匹配速度。一旦(i+n)大于数据包长度,可知为正常数据包然后停止检测剩余字符,平均需要检测的数据包深度会减少,从而加快匹配速度。
长度限制部分的计数策略,具体介绍如下。
在头尾部匹配完成之后,下一步就是验证长度限制部分。如图5所示,给出了如何使用计数策略验证长度限制部分。
使用一个计数实例cnt记录已经匹配的字符个数。一旦验证操作被激发,一个计数实例cnt被初始化为0。W(i+cnt)=*|cnt=n-1表示如果cnt的计数值为n-1且第(i+cnt)个字符是任意字符,从状态0进入状态1。使用w(i)到w(i+n-1)判断是否匹配长度限制部分。在任何时候将只会产生一个计数实例来验证长度限制部分,并且一个字符只验证一次,因此验证的复杂度是O(n),通过将长度限制部分与正则表达式相分离,简化了多实例维护问题,从而简化了算法的复杂度。
Jump-CFA算法具体介绍如下。
根据上面的分析,图6给出了正则表达式“.*a.{n}bc”的Jump-CFA算法。长度限制部分“.{n}”要求任意n个字符。在这种情况下,一旦到达了状态3即TRIGGER状态,并不需要再去验证分离出的长度限制部分,优化后的正则表达式“.*a.{n}bc”的Jump-CFA算法如图7所示。
Jump-CFA算法将DFA状态分为四种类型:NORMAL(正常)状态、JUMP(跳跃)状态、TRIGGER(触发)状态和ACCEPT(接受)状态,其中:
NORMAL状态是除了ACCEPT状态之外的下一状态可以根据迁移边表确定并且不会激发任何策略的状态;
JUMP状态和TRIGGER状态是可以分别激发对长度限制部分使用跳跃策略和验证策略的状态;
ACCEPT状态指示在特征规则集中存在一个匹配的正则表达式。
需要说明的是,在正则表达式的匹配过程中,状态行为随着状态类型而改变。
由于NFA巨大的带宽消耗,Jump-CFA算法可以由图7通过子集构建的方式进行DFA的构建,具体请参见图8。可以看出,DFA状态个数与长度限制部分中n的取值无关并且在该实例中DFA状态个数等于NFA状态个数。使得Jump-CFA算法在n取值很大时非常具有吸引力,尤其当DFA无法构建时是个很好的解决方案。子集构建过程如下:如果一个DFA状态S是一个JUMP状态(在图6中为状态1),那么所有的子集构建过程中包含状态S的DFA状态都被会被赋予一个跳跃行为;如果一个DFA状态S是一个TRIGGER状态(图6中为状态3),那么所有的子集构建过程中包含状态S的DFA状态都会被赋予一个验证行为;迁移边可以随着cnt的计数值来进行条件判断。
构建的基于跳跃和计数策略的DFA可以在网关、路由器等网络设备中使用,具体网络架构如图9所示,网络设备根据构建的DFA对数据包进行匹配,根据匹配结果得出是否为攻击数据包的结论。构建的DFA维护一个状态表,状态表描述了若干DFA状态,以及在每一个DFA状态下,针对输入的字符跳转到的下一DFA状态,最终得到是否为接受状态的匹配结果。根据数据包的字符流,构建的DFA通过维护的状态表可以进行匹配,最终得到是否为接受状态的匹配结果,如果匹配结果为接受状态,表示该数据包为攻击数据包,针对攻击数据包,网络设备直接丢弃,否则,表示该数据包不是攻击数据包,网络设备发送到用户的PC(Personal Computer,个人电脑)或笔记本上。
基于同一技术构思,本发明实施例还提供了一种确定有限自动机的构建装置,由于该构建装置解决问题的原理与确定有限自动机的构建方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
本发明实施例提供的确定有限自动机的构建装置的结构,如图10所示,包括:
处理单元1001,用于针对特征规则集中包含长度限制的正则表达式,按照长度限制的出现位置进行分割与合并处理,将包含长度限制的正则表达式的头尾部和长度限制部分相分离;
构建单元1002,用于构建包含长度限制的正则表达式的确定有限自动机,其中,包含长度限制的正则表达式的确定有限自动机对长度限制部分使用跳跃策略调整匹配顺序,头尾部匹配完成之后使用计数策略对长度限制部分进行验证。
具体实施中,该构建装置还可以包括:
提取单元1003,用于从特征规则集中提取未处理的正则表达式发送给处理单元1001;
合并单元1004,用于对特征规则集中各正则表达式的确定有限自动机进行合并处理,得到特征规则集的确定有限自动机。
较佳的,该构建装置还可以包括:
数据包检测单元1005,用于根据特征规则集的确定有限自动机对数据包进行匹配,如果得到接受状态的匹配结果,确定数据包为攻击数据包,否则,确定数据包为正常数据包。
本发明实施例提供的确定有限自动机的构建方法及装置,采用对包含长度限制的正则表达式进行分割与合并处理的方式将长度限制部分从正则表达式中分离出来,然后通过对长度限制部分使用跳跃策略调整正则表达式的匹配顺序,从而减少DFA的存储空间并加快匹配速度,头尾部匹配完成之后使用计数策略验证长度限制部分,通过分离避免了多实例维护问题的出现,在任何时候只有一个计数实例,进一步减少了DFA的存储空间并加快匹配速度,从而提高深度数据包检测的健壮性。
对分离出来的长度限制部分使用计数策略,极大程度的验证长度限制部分,并且降低了算法的复杂度,验证长度限制部分的复杂度为O(n)。跳跃策略减少了数据包检测的深度,具有更大的概率发现一个不接受状态,并且需要更少的操作,因此加快了正则表达式的匹配速度;忽略任意字符的长度限制的验证使得进一步压缩了DFA的存储空间,并且进一步优化了正则表达式匹配算法。
本发明实施例提供的确定有限自动机的构建方法及装置,经过实验验证了其可行性,能够较好地满足NIDS和NIPS的需要,效果理想。
采用C++设计和实现了Jump-CFA算法的DFA,实验运行在CPU为Intel Core 2 Duo2.4 GHZ、内存为2GB的计算机上。实验所需的特征规则集来源于2011年5月的Snort(snortrules-snapshot-2905.tar.gz)特征规则集,从中提取了部分正则表达式作为实验对象,如表1所示。并且实验所需的数据包使用林肯实验室的MIT DARPA入侵检测数据集(2000DARPA入侵检测评估)。
表1
特征规则集 | 正则表达式个数 | 长度限制个数 | 长度限制平均长度 | 长度限制比例 |
Snort1 | 30 | 3 | 8 | 10% |
Snort2 | 35 | 7 | 8 | 20% |
Snort3 | 60 | 18 | 12 | 30% |
Snort4 | 45 | 18 | 10 | 40% |
Snort5 | 40 | 24 | 20 | 60% |
Snort6 | 76 | 76 | 117 | 100% |
首先研究在不同的特征规则集下,Hybrid-FA算法、Counting-FA算法、传统DFA算法和Jump-CFA算法的DFA状态个数,即查看在不同的特征规则集条件下,存储空间的缩小比例,查看各个算法的性能。然后按照实验采用的数据包将Counting-FA和Jump-CFA两种算法进行匹配速度的比较,查看各个算法的匹配性能。
采用存储空间需求和匹配速度两个方面评估Jump-CFA算法、Counting-FA算法、Hybrid-FA算法和传统DFA算法的性能。在存储空间方面,根据DFA的实现计算各算法产生的DFA状态个数,并进行对比。同时实现Counting-FA算法和Jump-CFA算法,通过两个算法对数据包进行匹配的速度判断匹配算法性能。具体结果如表2所示。
表2
随着包含长度限制的比例和平均大小的增长,传统DFA算法和Hybrid-FA算法的DFA状态个数急剧增长。从特征规则集Snort4到Snort6,传统DFA算法已经无法工作,甚至Hybrid-FA算法也无法工作。在特征规则集Snort6中,甚至NFA算法也失效。由此得出结论:正则表达式中包含的长度限制使得DFA状态呈指数增长,并且甚至会使得传统NFA算法,传统DFA算法和Hybrid-FA算法无法实现。
相反,Counting-FA算法和Jump-CFA算法的DFA能很好的工作。Jump-CFA算法与传统DFA算法比较,DFA状态个数可以减少73%~96%;特别地是在特征规则集Snort4中,Jump-CFA算法的DFA状态个数大小甚至比传统NFA算法的状态个数还小;更重要的是,在特征规则集Snort6中,Jump-CFA算法的DFA还能很好工作。由于使用跳跃策略和计数策略通过某种方式忽略了长度限制,Jump-CFA算法能在包含长度限制的正则表达式使得传统NFA算法和传统DFA算法失效的情况下提高深度数据包检测的健壮性。
在表2的第7列中,由于把长度限制从正则表达式中分离出来而减少了DFA构建过程中的多实例维护问题,进一步减少了DFA状态个数。可以看到Jump-CFA算法的DFA状态个数比Counting-FA算法的DFA状态个数减少了5%~18%,Jump-CFA算法能够比Counting-DFA算法提供更好地系统性能。
Jump-CFA算法能够比Counting-FA算法的正则表达式匹配过程提高2~10倍的匹配速度。跳跃策略使得Jump-CFA算法在评估复杂的正则表达式时更早的发现错误匹配因而需要更少的操作,同时也使得平均包检测深度减少,所以Jump-CFA算法相比Counting-FA算法可以加速匹配速度。同时由于Jump-CFA算法与Counting-FA算法相比减少了多实例维护问题,因而进一步加速了Jump-CFA算法的匹配过程。
实验结果显示Jump-CFA算法能够有效减少存储空间,对于传统的DFA算法大概减少76%~96%的存储空间;相对于Counting-FA算法,大概减少5%~18%的存储空间。Jump-CFA算法的存储空间大小与长度限制的重复基数无关,而且在某些情况下,DFA状态个数甚至小于NFA状态个数。
当传统NFA,传统DFA、Hybrid-FA等算法不能很好工作的时候,Jump-CFA算法仍然能够提供很好的性能,算法健壮性好。相比于Counting-FA算法,当正则表达式包含长度限制时,Jump-CFA算法能够加速2~10倍正则表达式匹配过程。
本领域的技术人员应该明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例、以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (7)
1.一种确定有限自动机的构建方法,其特征在于,包括:
针对特征规则集中包含长度限制的正则表达式,按照长度限制的出现位置进行分割与合并处理,将所述正则表达式的头尾部和长度限制部分相分离;
构建所述正则表达式的确定有限自动机,其中,所述正则表达式的确定有限自动机对所述长度限制部分使用跳跃策略调整匹配顺序,以减少存储空间需求,加快所述正则表达式的匹配速度,头尾部匹配完成之后使用计数策略对所述长度限制部分进行验证,所述计数策略产生一个计数实例来验证长度限制部分;
对所述特征规则集中各正则表达式的确定有限自动机进行合并处理,得到所述特征规则集的确定有限自动机;
所述特征规则集的确定有限自动机维护的状态表中,状态类型包括正常状态、跳跃状态、触发状态和接受状态,其中:
在正常状态下,根据该状态的迁移边表确定下一状态;
所述跳跃状态用于激发对长度限制部分使用跳跃策略;
所述触发状态用于激发对长度限制部分使用计数策略;
所述接受状态指示在特征规则集中存在一个匹配的正则表达式。
2.如权利要求1所述的方法,其特征在于,还包括:
根据所述特征规则集的确定有限自动机对数据包进行匹配,如果产生了接受状态的匹配结果,确定所述数据包为攻击数据包,否则,确定所述数据包为正常数据包。
3.如权利要求2所述的方法,其特征在于,
根据所述特征规则集的确定有限自动机对数据包进行匹配过程中,到达一个跳跃状态时,记录所述数据包的当前位置,在数据包的剩余字符流中以当前位置为起点跳过对应的长度限制的重复基数所指示数量的字符;并
判断跳跃后的到达位置上的字符是否与对应的长度限制的下一字符相一致,如果是,进入下一状态,否则,返回上一状态。
4.如权利要求2所述的方法,其特征在于,
根据所述特征规则集的确定有限自动机对数据包进行匹配过程中,到达一个触发状态时,使用一个用于记录已经匹配的字符个数的计数实例验证长度限制部分,如果计数实例的计数值达到对应的长度限制的重复基数、且当前需要验证的字符与对应的长度限制的重复字符相一致,进入下一状态。
5.如权利要求4所述的方法,其特征在于,
根据所述特征规则集的确定有限自动机对数据包进行匹配过程中,到达一个触发状态时,如果对应的长度限制的重复字符为任意字符,不验证长度限制部分。
6.一种确定有限自动机的构建装置,其特征在于,包括:
处理单元,用于针对特征规则集中包含长度限制的正则表达式,按照长度限制的出现位置进行分割与合并处理,将所述正则表达式的头尾部和长度限制部分相分离;
构建单元,用于构建所述正则表达式的确定有限自动机,其中,所述正则表达式的确定有限自动机对所述长度限制部分使用跳跃策略调整匹配顺序,以减少存储空间需求,加快所述正则表达式的匹配速度,头尾部匹配完成之后使用计数策略对所述长度限制部分进行验证,所述计数策略产生一个计数实例来验证长度限制部分;
提取单元,用于从所述特征规则集中提取未处理的正则表达式发送给所述处理单元;
合并单元,用于对所述特征规则集中各正则表达式的确定有限自动机进行合并处理,得到所述特征规则集的确定有限自动机;
所述特征规则集的确定有限自动机维护的状态表中,状态类型包括正常状态、跳跃状态、触发状态和接受状态,其中:
在正常状态下,根据该状态的迁移边表确定下一状态;
所述跳跃状态用于激发对长度限制部分使用跳跃策略;
所述触发状态用于激发对长度限制部分使用计数策略;
所述接受状态指示在特征规则集中存在一个匹配的正则表达式。
7.如权利要求6所述的装置,其特征在于,还包括:
数据包检测单元,用于根据所述特征规则集的确定有限自动机对数据包进行匹配,如果得到接受状态的匹配结果,确定所述数据包为攻击数据包,否则,确定所述数据包为正常数据包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110412829.9A CN103166802B (zh) | 2011-12-12 | 2011-12-12 | 一种确定有限自动机的构建方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110412829.9A CN103166802B (zh) | 2011-12-12 | 2011-12-12 | 一种确定有限自动机的构建方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103166802A CN103166802A (zh) | 2013-06-19 |
CN103166802B true CN103166802B (zh) | 2016-12-07 |
Family
ID=48589554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110412829.9A Active CN103166802B (zh) | 2011-12-12 | 2011-12-12 | 一种确定有限自动机的构建方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103166802B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9507563B2 (en) * | 2013-08-30 | 2016-11-29 | Cavium, Inc. | System and method to traverse a non-deterministic finite automata (NFA) graph generated for regular expression patterns with advanced features |
US9904630B2 (en) | 2014-01-31 | 2018-02-27 | Cavium, Inc. | Finite automata processing based on a top of stack (TOS) memory |
US10110558B2 (en) | 2014-04-14 | 2018-10-23 | Cavium, Inc. | Processing of finite automata based on memory hierarchy |
US10002326B2 (en) | 2014-04-14 | 2018-06-19 | Cavium, Inc. | Compilation of finite automata based on memory hierarchy |
US10042654B2 (en) | 2014-06-10 | 2018-08-07 | International Business Machines Corporation | Computer-based distribution of large sets of regular expressions to a fixed number of state machine engines for products and services |
CN104333487A (zh) * | 2014-10-31 | 2015-02-04 | 广东工业大学 | 一种面向实时网络数据流的高效事件匹配方法 |
CN105357177A (zh) * | 2015-09-29 | 2016-02-24 | 西安电子科技大学 | 一种数据包过滤规则集处理方法及数据包匹配方法 |
CN110110809B (zh) * | 2019-05-16 | 2021-03-16 | 郑州轻工业学院 | 基于机器故障诊断的模糊自动机的构建方法 |
CN111262589B (zh) * | 2020-01-13 | 2024-04-12 | 奇安信科技集团股份有限公司 | 一种dfa空间压缩方法及装置 |
CN111222022B (zh) * | 2020-01-15 | 2023-05-12 | 奇安信科技集团股份有限公司 | 一种基于正则表达式的匹配方法及装置 |
CN115801020B (zh) * | 2023-02-13 | 2023-04-11 | 鹏城实验室 | 确定有限状态自动机压缩方法、匹配方法、设备及介质 |
CN117349409B (zh) * | 2023-12-05 | 2024-04-05 | 天津光电聚能通信股份有限公司 | 一种基于fpga的快速正则表达式匹配实现系统及方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645069A (zh) * | 2008-08-04 | 2010-02-10 | 中国科学院计算机网络信息中心 | 一种多模式匹配中正则表达式存储压缩方法 |
CN101707513A (zh) * | 2009-11-30 | 2010-05-12 | 曙光信息产业(北京)有限公司 | 基于正则表达式的深度包检测方法及设备 |
-
2011
- 2011-12-12 CN CN201110412829.9A patent/CN103166802B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645069A (zh) * | 2008-08-04 | 2010-02-10 | 中国科学院计算机网络信息中心 | 一种多模式匹配中正则表达式存储压缩方法 |
CN101707513A (zh) * | 2009-11-30 | 2010-05-12 | 曙光信息产业(北京)有限公司 | 基于正则表达式的深度包检测方法及设备 |
Non-Patent Citations (2)
Title |
---|
一种面向深度数据包检测的紧凑型正则表达式;黄昆等;《中国科学:信息科学》;20100228;第40卷(第2期);356-370 * |
王焕云.面向深度数据包检测的正则表达式匹配算法研究.《中国优秀硕士论文全文数据库》.2013,35-47,第四章. * |
Also Published As
Publication number | Publication date |
---|---|
CN103166802A (zh) | 2013-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103166802B (zh) | 一种确定有限自动机的构建方法及装置 | |
CN106709345B (zh) | 基于深度学习方法推断恶意代码规则的方法、系统及设备 | |
CN110572362B (zh) | 针对多类不均衡异常流量的网络攻击检测方法及装置 | |
Zhang et al. | Robust network traffic classification | |
Panda et al. | Discriminative multinomial naive bayes for network intrusion detection | |
CN109117634B (zh) | 基于网络流量多视图融合的恶意软件检测方法及系统 | |
CN102420723A (zh) | 一种面向多类入侵的异常检测方法 | |
CN101442540B (zh) | 基于现场可编程门阵列的高速模式匹配算法 | |
CN106992965A (zh) | 一种基于网络行为的木马检测方法 | |
CN103685222A (zh) | 基于确定性有穷状态自动机的数据匹配检测方法 | |
CN110362995A (zh) | 一种基于逆向与机器学习的恶意软件检测及分析系统 | |
CN113821793A (zh) | 一种基于图卷积神经网络的多阶段攻击场景构建方法及系统 | |
CN112016317A (zh) | 基于人工智能的敏感词识别方法、装置及计算机设备 | |
CN106650449B (zh) | 一种基于变量名混淆程度的脚本启发式检测方法及系统 | |
Al-Fawa'reh et al. | Detecting stealth-based attacks in large campus networks | |
Weng et al. | Deep packet pre-filtering and finite state encoding for adaptive intrusion detection system | |
CN105429817A (zh) | 基于dpi和dfi的非法业务识别装置与方法 | |
CN109284465A (zh) | 一种基于url的网页分类器构建方法及其分类方法 | |
Chen et al. | Ac-suffix-tree: Buffer free string matching on out-of-sequence packets | |
Todorov et al. | FPGA implementation of computer network security protection with machine learning | |
CN107992501A (zh) | 社交网络信息识别方法、处理方法及装置 | |
Chadha et al. | Probabilistic Büchi automata with non-extremal acceptance thresholds | |
CN116170227A (zh) | 一种流量异常的检测方法、装置、电子设备及存储介质 | |
CN103617156A (zh) | 多协议网络文件内容检查方法 | |
CN103198065A (zh) | 一种正则表达式匹配电路的优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |