基于正则表达式的深度包检测方法及设备
技术领域
本发明涉及计算机领域,具体地,涉及基于正则表达式的深度包检测方法及设备。
背景技术
随着专门针对应用层攻击现象的增多,传统的状态检测防火墙有效性越来越低。防火墙的功能重心从网络层发展到了应用层,因而诞生了深度包检测技术。深度包检测技术不仅检测网络层和传输层数据包头部,而且深入到应用层数据包的有效载荷所封装的内容中,搜寻合法或非法的内容以决定是否允许数据包通过。随着深度包检测技术的发展,传统上用于过滤数据包内容的模式集合(包含模式的匹配串)逐渐被正则表达式集合所代替。例如Linux的应用协议分类器L7-filter(Linux Application Protocol Classifier),通过基于正则表达式的模式集合识别应用层的数据包;Snort、Bro等入侵检测系统也已将正则表达式应用于它的规则集当中。此外,在当今网络中,传统的采用端口进行协议识别已越来越无法满足需求,从而采用了正则表达式进行协议识别。
然而,虽然正则表达式在模式匹配时比字符串表现得更优异,但在现有的网络应用中,一个典型的模式集合往往由上百个正则表达式和数以万计的状态数组成,将模式集合构造成一个有限自动机,所需的内存可达几百兆,甚至几G,从而导致基于正则表达式的深度包检测的响应时间过长,极大地影响了检测效率。
实现正则表达式匹配主要采用各种状态机,但确定有限状态自动机(deterministic finite automaton,简称为DFA)存在空间爆炸的问题,难以支持较多正则表达式。目前,采用DFA的正则表达式匹配方案主要有以下几种:一种是适当改写正则表达式,以提高存储效率,但这种方案并不是能够改写任何形式的正则表达式,而是只能对特定形式的正则表达式进行改写;第二种挖掘状态转移的特点,例如大多数状态的下一状态只有几个不同的值,所以可以采用延迟转移等方法节省存储空间,但其存在匹配速度慢的缺点。
因此,需要一种能够大大减少存储DFA状态所需存储空间的解决方案,能够解决上述相关技术中的问题。
发明内容
根据本发明的一个方面,提供了一种基于正则表达式的深度包检测方法,通过硬件来执行该方法包括的以下步骤:步骤S102,对于每个状态,根据压缩该状态所对应行所采用的数据格式,得到预先存储的压缩状态表;以及步骤S104,根据当前所处状态、所得到的压缩状态表和新输入的字符,得到下一状态并跳转到该状态。
其中,硬件包括专用硬件逻辑。
具体地,专用硬件逻辑包括现场可编程门阵列、复杂可程式逻辑器件和专用集成电路中的一种。
此外,在步骤S102之前,针对有限状态机的状态转移表的每一行,预先选择预定的多种数据格式中的一种对该行进行压缩以获得该行的压缩状态表并存储压缩状态表.
优选地,多种数据格式包括以下三种数据格式:第一数据格式,将一行中数量最多的一个状态设为默认状态,并列出其他状态和对应的输入字符;第二数据格式,列出一行中连续出现的状态以及其所对应字符区间的开始字符和结束字符,并将剩下的状态作为默认状态;以及原始数据格式,直接为状态转移表中的一行的下一状态。
此外,优先采用第一数据格式,并且如果不能使用第一数据格式和第二数据格式,则采用原始数据格式。
根据本发明的另一方面,提供了一种基于正则表达式的深度包检测设备,以硬件方式实现所述设备的以下装置:压缩状态表获取装置,用于对于每个状态,根据压缩该状态所对应行所采用的数据格式,得到预先存储的压缩状态表;以及跳转装置,用于根据当前所处状态、所得到的压缩状态表和新输入的字符,得到下一状态并跳转到该状态。
其中,硬件包括专用硬件逻辑。
具体地,专用硬件逻辑包括现场可编程门阵列、复杂可程式逻辑器件和专用集成电路中的一种。
此外,该设备还包括:压缩状态表存储装置,用于针对有限状态机的状态转移表的每一行,预先选择预定的多种数据格式中的一种对该行进行压缩来获得该行的压缩状态表并存储压缩状态表,以将存储的压缩状态表提供给压缩状态表获取装置。
优选地,多种数据格式包括以下三种数据格式:第一数据格式,将一行中数量最多的一个状态设为默认状态,并列出其他状态和对应的输入字符;第二数据格式,列出一行中连续出现的状态以及其所对应字符区间的开始字符和结束字符,并将剩下的状态作为默认状态;以及原始数据格式,直接为状态转移表中的一行的下一状态。
此外,优先采用第一数据格式,并且如果不能使用第一数据格式和第二数据格式,则采用原始数据格式。
通过本发明的技术方案,大大减少了存储DFA状态所需要的存储空间,即,在有限的空间内可以存储较多的正则表达式。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是示出根据本发明的基于正则表达式的深度包检测方法的流程图;
图2是示出根据本发明的基于正则表达式的深度包检测设备的框图;
图3A和图3B是示出正则表达式的状态转移图和状态转移表的示意图;以及
图4和图5是示出根据本发明实施例的两种数据格式的示图。
具体实施方式
下面将结合附图来详细说明本发明的实施例。
图1是示出根据本发明的基于正则表达式的深度包检测方法的流程图。
如图1所示,根据本发明的基于正则表达式的深度包检测方法包括通过硬件执行的以下步骤:S102,对于每个状态,根据压缩该状态所对应行所采用的数据格式,得到预先存储的压缩状态表;以及S104,根据当前所处状态、所得到的压缩状态表和新输入的字符,得到下一状态并跳转到该状态。
图2是示出根据本发明的基于正则表达式的深度包检测设备的框图。
参照图2,根据本发明实施例的设备20包括以硬件方式实现的以下装置:压缩状态表获取装置202,用于对于每个状态,根据压缩该状态所对应行所采用的数据格式,得到预先存储的压缩状态表;以及跳转装置204,用于根据当前所处状态、所得到的压缩状态表和新输入的字符,得到下一状态并跳转到该状态。
下面,具体参照图3和图4描述本发明的实施例。
图3A和图3B示出了一般正则表达式的状态转移图和状态转移表。
假设正则表达式为:\$[0-9]+(\.[0-9]{2}){0,1}。该表达式的作用是识别美元数目(以$开头,后接多个)。图3A是状态转移图,图3B是状态转移表。该转移表共有256列,分别对应一个字节的256个值,图3B中最后一列的“~...”表示除0~9、.、$之外的所有字符。例如,在状态D下,如果输入“.”,将进入状态C,而如果输入0~9之间的数值,则均保持在D状态。
为了允许硬件快速定位到下一个状态,压缩以每个状态(图3B中的一行代表一个状态)为单位,也就是将图3B中的每一行分别压缩到预定比特之内,诸如128bit、144bit、256bit。行与行之间没有关系。通常,同一行中的256个下一状态大多数相同,如图3B中的第一行只有2个状态。
图4和图5图是压缩所采用的数据格式,图中的“Fmt_Flag”用于标识采用哪种数据格式,“Char1”、“Char2”分别用于表示输入的字符,“next”表示下一状态,“Else”表示默认状态,“Low1”、“High1”、“Low2”、“High2”等用于表示连续区间的开始字符和结束字符,“Match”是表示是否命中等的属性。图4表示某些单个字符的下一状态特殊,因此分别指定,最后用一个“Else”表示默认状态。图5则表示某些范围内字符的下一状态相同,如图3B中的C状态在输入0至9时,都跳转到E状态,则该状态的“Low”和“High”分别为0和9,“next”则为E。
此外,对于少数不能用这两种格式表示的状态,则直接在存储器的专门区域存储原始格式,即256个下一状态,这时可以通过偏移快速检索到下一状态。
如上所述,针对每一行,通过软件选择这三种数据格式中的一种来对该行进行压缩,然后将压缩得到的压缩状态表存储。因此,每次进行状态跳转时,只需要得到预先存储的压缩状态表就可以根据压缩状态表和新输入的字符快速地跳转到下一状态。
由于DFA的绝大多数状态只有几个不同的值,因此在本发明中,针对少数几个特定值进行判断,并根据判断结果进行状态跳转。具体来说,如果新输入的字符在这几个特定值所对应的输入字符中,则进行正常跳转,即,跳转到所输入字符对应的下一状态,而如果新输入的字符不在这几个特定值所对应的输入字符中,则跳转到默认状态,从而大大减少了存储DFA状态所需要的存储空间。
此外,通过查看状态转移表可以看出,某个状态出现的次数会很多,即,在多数情况下都会跳转到该状态,因此,在本发明中,预先将状态转移表中出现次数最多的状态设定为默认状态.如果新输入的字符不在特定值的范围内,就会直接跳转到该默认状态.
注意,在本发明中,必需采用硬件才能获得有效的性能。具体地,可以使用现场可编程门阵列(filed programmable gate array,简称为FPGA)。由于FPGA具有天然的并行性,可以一次并行完成判断。但应该明白,硬件并不限于FPGA。
一般来讲,专用硬件逻辑都可以按照本设计提供的方法实现该功能,例如复杂可程式逻辑器件(complex programmable logic device,简称为CPLD)和专用集成电路(application-specific integrated circuit,简称为ASIC)等。但是CPLD一般用于控制比较简单的场合,而ASIC则不够灵活,且研发周期非常长、研发费用比较高。它们可以按照FPGA类似的方式实现本设计的方案。
如上所述,根据本发明的实施例,大大减少了存储DFA所需要的存储空间,也就是说,在有限的空间内能够存储更多的正则表达式。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。