CN103259793B - 基于后缀自动机正则引擎构造的深度包检测方法 - Google Patents
基于后缀自动机正则引擎构造的深度包检测方法 Download PDFInfo
- Publication number
- CN103259793B CN103259793B CN201310159057.1A CN201310159057A CN103259793B CN 103259793 B CN103259793 B CN 103259793B CN 201310159057 A CN201310159057 A CN 201310159057A CN 103259793 B CN103259793 B CN 103259793B
- Authority
- CN
- China
- Prior art keywords
- suffix
- node
- state
- canonical
- nfa
- 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.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于后缀自动机正则引擎构造的深度包检测方法,包括以下步骤:S1,入侵检测系统抽取攻击特征构建正则表达式;S2,构造后缀NFA引擎并利用其进行多模式匹配;S3,从Web服务器获取应用层协议数据包和Web服务器日志文件;S4,对上述协议数据包和日志文件进行深度包检测并将检测结果发送给防火墙。本发明用NFA方式实现了DFA的用单一自动机完成对多条正则表达式的匹配,解决了NFA不能实现多正则表达式匹配和DFA在实现多正则表达式匹配时的空间爆炸问题;有效地缩减了NFA的空间规模,解决了传统的NFA引擎构造方法所存在的空间浪费以及在执行模式匹配过程中的无效遍历问题,有效地缩短了深度包检测的响应时间,提高了系统的整体性能和效率。
Description
技术领域
本发明涉及一种基于后缀自动机正则引擎构造的深度包检测方法,属于网络安全技术领域。
背景技术
近年来专门针对应用层的攻击技术和攻击工具正逐渐替代以往针对网络层和传输层的攻击。其中在应用层实施拒绝服务攻击,如基于XML的拒绝服务攻击(eXtensible MarkupLanguage-based Denial of Service:X-DoS)和基于HTTP的拒绝服务攻击(HypertextTransfer Protocol-based Denial of Service:H-DoS)已经成为Web技术和云计算所面临的最严重安全威胁。一方面是因为这类攻击实现起来非常简单,另一方面则是因为这些攻击数据包是以正常的协议数据包在网络上传递的,看起来与正常的访问完全一样,使得常用的包过滤防火墙以及基于协议包头分析的IDS/IPS等技术无法对其进行检测和防御。要想准确有效地实现对这类在应用层实现的拒绝服务攻击的检测,只有通过检测和分析应用业务数据流的内容来实现,因而诞生了深度包检测技术。
深度包检测技术不仅检测协议数据包头部,而且深入到应用层业务数据包的有效载荷的内容中,分析和检测攻击行为的存在。以往的检测系统采用基于字符串的多模式匹配算法,典型的如Aho-Corasick(简称AC)算法及其改进算法;随着深度包检测技术的发展及被检测内容的日益复杂,基于表达能力强大灵活的正则表达式的多模式匹配技术逐渐取代了传统的基于字符串的精确模式匹配技术。Snort(一个开源的入侵检测系统)、Bro(一个轻量级的入侵检测系统)等入侵检测系统都将正则表达式应用到其规则集中;在协议分析领域中,传统的采用端口进行协议识别的方式也因其灵活性不够而被基于正则表达式的协议识别所代替,L7-filter(Linux Application Protocol Classifier,Linux平台上的流量类型分类系统)、3Com公司的Tippingpoint X505等系统也使用了基于正则表达式的多模式匹配算法来实现对应用层数据包的识别和安全检测。
正则表达式在多模式时比精确字符串表现得更优异,在入侵检测协议分析、深度包检测等领域得到了广泛的应用。在基于正则表达式的深度包检测系统中,采用正则表达式实现的模式匹配主要是用有限自动机(通常称为正则引擎)来实现的。正则引擎是深度包检测系统中的模式匹配执行部件,也是其核心部件。根据所采用的自动机的不同,正则引擎分为NFA(Non-deterministic Finite Automata,非确定型有限自动机)引擎、DFA(Deterministic Finite Automata,确定型有限自动机)引擎和NFA/DFA混合引擎。目前使用DFA引擎的程序主要有:awk,egrep,flex,lex,MySQL,Procmail等;使用传统型NFA引擎的程序主要有:GNU Emacs,Java,ergp,less,more,.NET语言,PCRElibrary,Perl,PHP,Python,Ruby,sed,vi;使用POSIX NFA引擎的程序主要有:mawk,Mortice Kern Systems’utilities,GNU Emacs(使用时可以明确指定);也有使用DFA/NFA混合的引擎,如GNU awk,GNU grep/egrep,Tcl。
模式匹配的效率很大程度上取决于正则引擎的效率,包括正则引擎本身的规模(size)和其运行效率。这里的size是指正则引擎所占用的存储空间的大小,由两个因素共同决定:一是自动机的状态数目,另一个是状态与状态之间的弧转移的数目。正则引擎(即自动机)可以用硬件方式实现的,也可以用软件方式实现的。典型的硬件方式实现的正则引擎(如申请号为200910238673.X、名称为基于正则表达式的深度包检测方法及设备的专利申请)是采用现场可编程门整列(Field-Programmable Gate Array,简称FPGA)来实现的。硬件NFA利用硬件的高速处理来加速多模式匹配的效率,弥补NFA计算复杂度高的缺陷。然而在实际应用中规则模式集合往往十分庞大并且在不断增加,类似基于FPGA的正则引擎的主频会随着字符组宽度的增大而迅速下降,并且由于其存储空间受限,只能存储少量的正则表达式,随着模式规则集中正则表达式的增多,必须相应地增加大量的硬件逻辑结构,再加上一个典型的模式集合往往由上百个正则表达式组成,因此硬件NFA引擎的扩展能力及其应用场合相当有限。
在规则集是由大量的正则表达式组成的系统中,如Snort规则集中的正则表达式已经超过了3000条,通常都是采用软件方式来实现的。在NFA正则引擎中,NFA的size虽然与正则表达式的长度呈线性关系,但一个NFA只能对应一条正则表达式。因此,要实现多条正则表达式的同时匹配就需要由多个NFA并行执行来完成,而多个NFA的并行执行会导致匹配时所占用的内存达到几百兆甚至是几G且系统性能呈指数级急剧下降,严重地影响了检测效率。DFA正则引擎可以为多条正则表达式构造一个单一的DFA从而实现一个DFA对多条正则表达式的同时匹配,匹配效率很高,DFA引擎每完成一个字符的匹配只需要维护一个确定的状态转移,匹配算法的时间复杂度与模式串长度成正比,空间复杂度是长了。但是,构造多条正则表达式的单一DFA却存在空间爆炸问题,随着整合的正则表达式的数量增多,DFA的状态空间呈指数级急剧增长,导致存储代价巨大。在Cisco的安全产品中已达到GB级。可见,DFA引擎难以支持较多正则表达式。目前解决DFA空间爆炸问题的方案主要有以下几种:一种是对系统中的正则表达式进行分组,尽可能地避免构造多条正则表达式的DFA引起的空间爆炸,但这种分组方案非常有限并且扩展性极差;第二种是适当改写正则表达式以提高存储效率,但这种方案只能对特定形式的正则表达式进行改写,并不能改写任何形式的正则表达式,其适用范围非常有限;第三种通过挖掘状态转移的特点,采用延迟转移等方法来节省存储空间,但这种方案的匹配速度非常慢,严重地影响了系统的响应时间。
最后,目前能够用于自动机构造的方法有四种:最早由Thompson提出的Thompsonautomata构造方法、由Glushkov提出的基于位置自动机(position automata)的Glushkov方法、由Antimirov提出的部分派生自动机(partial derivatives automata)和由Ilie和YU提出的后跟自动机(follow automata)。当前实际应用系统中常用的构造NFA的方法是Thompson方法和Glushkov方法两种。Thompson方法首先为每一条单独的正则表达式创建一个自动机,然后利用ε变换(空弧转换)将多个小自动机(称为自动机片段)合并到一起,包括连接、重复和或操作,最终拼接成一个完整的NFA。Glushkov构造方法的状态数是固定的,为m+1(其中m为正则表达式中输入符号的数目)。Glushkov方法首先将每个字符在表达式中的位置标记出来,标记了位置的正则表达式记为R’,每个字符的位置表示经过该字符后到达的状态号,然后基于这种位置标记来构造自动机,最后消除所有的位置索引,最终抽取出Glushkov自动机。Glushkov自动机是基于位置自动机(position automata)理论的。通常,实际系统中的DFA的构造是建立在NFA的基础上的,也就是首先构造Thompson NFA或Gloshkov NFA,然后再转换为DFA。Thompson方法本身简单且易于理解和实现,但是该方法在构造过程中引入了大量的空弧(ε-transition),导致了大量的无效的空状态和空弧转换。Position automata理论能够得到不含空弧转换的NFA,然而其构造方法存在两个方面的不足,一是其所获得的不带空弧转换的NFA的规模是非线性的,确切地说是在O(n)和O(n2)之间;另一是其本身的实现繁杂,其实现过程需要经过多个处理过程,难于理解和实现。Partial derivatives automata构造算法能够获得较Thompson和Glushkov的规模更小的自动机,但是其构造实现过程本身非常复杂,其时间复杂度为O(n5),其所获得的正则引擎本身的时间复杂度为O(n log 2(n)),同样,这个方法也是建立在大量的集合计算的基础之上的,难于理解和编码实现。基于Follow automata理论所构造得到的NFA的size比上述4种都要小,然而该方法是基于两个算法来实现的,其实现过程本身很繁杂,不易理解和实现,并且所获得的NFA的size依然没有达到最优,且其Follow集的计算繁琐且不易实现。
由上文可知,现有的基于正则表达式的深度包检测技术主要存在以下缺点:
首先,采用硬正则引擎的深度包检测由于硬件本身的资源有限,无法满足大量正则表达式的应用需要,且引擎的主频会随着字符组宽度的增大而迅速下降;
再者,采用软正则引擎的深度包检测系统的两种实现方式中,NFA引擎存在一个NFA只能对应一条正则表达式,多个NFA的并行执行会导致匹配时所占用的内存达到几百兆甚至是几G且系统性能呈指数级急剧下降的问题;DFA引擎则存在空间爆炸问题,随着整合的正则表达式的数量增多,DFA的状态空间呈指数级急剧增长,检测效率因此急剧降低;
最后,目前所有现有的方法构造所得到的正则NFA引擎的规模都不是最优(size不是最小)的,而且除了Thompson方法之外,其它三种方法均需要完成大量抽象的包括计算follow集合在内的数学计算,在实际应用系统中难以编码实现。
因此,需要一种有效的解决方案,能够在有效地解决NFA不能实现多条正则表达式匹配和DFA状态空间膨胀问题的同时,以更高的效率和更小的开销来实现基于正则表达式的深度包检测中的多模式匹配。
发明内容
本发明的目的在于,提供一种基于后缀自动机正则引擎构造的深度包检测方法,它可以有效解决现有技术中存在的问题,尤其是基于正则表达式的多模式匹配技术中NFA引擎并行执行时性能急剧下降以及DFA引擎的空间爆炸的问题。
为解决上述技术问题,本发明采用如下的技术方案:一种基于后缀自动机正则引擎构造的深度包检测方法,包括以下步骤:
S1,入侵检测系统抽取攻击特征构建正则表达式;
S2,入侵检测系统构造后缀NFA引擎并利用其进行多模式匹配;
S3,入侵检测系统从Web服务器获取应用层协议数据包和Web服务器日志文件;
S4,入侵检测系统对上述协议数据包和日志文件进行深度包检测并将检测结果发送给防火墙。
上述的后缀自动机是指采用本发明后,基于正则表达式的后缀式的解析树所构造的只有一个开始状态和一个终止状态的不确定性有限自动机。
步骤S2中所述的构造后缀NFA引擎的具体方法包括:
a.对正则表达式进行分组;
b.将每一组中的多条正则表达式利用或运算整合成一条正则表达式;
c.将整合后的正则表达式改写成逆波兰形式,得后缀正则式;
d.构造后缀正则式的二叉解析树;
e.基于后序遍历操作对二叉解析树进行节点编号,确定自动机的状态空间;
f.基于编号的二叉解析树设置自动机的终止状态标识,得后缀正则树;
g.基于后缀正则树的中序遍历操作得后缀NFA引擎。
上述步骤c中所述的将整合后的正则表达式改写成逆波兰形式,得后缀正则式的具体方法包括:
A.正则表达式中按照原有顺序依次出现的输入符号作为后缀正则式从左至右输入的符号;
B.运算符号按其实际计算顺序紧跟在其运算对象后面出现;
C.将正则表达式中的小括号删除。
上述步骤d中所述的构造后缀正则式的二叉解析树的方法是:
1)后缀正则式中的所有输入符号作为二叉解析树的叶子节点,从左至右依次排列;
2)根据后缀正则式中运算符的逻辑顺序依次由叶子节点到根节点自底向上建立整棵二叉解析树,其中,或运算和连接运算为双目运算,其运算对象:输入符号所对应的叶子节点或某个运算的运算结果所对应的子树的根节点分别为其左右孩子;闭包运算为单目运算,其运算对象为其左孩子,右孩子空缺。
前述步骤e所述的基于后序遍历操作对二叉解析树进行节点编号的具体方法包括:
i.初始化编号n:=1;
ii.若当前的节点是连接运算符节点,且该节点的前两个节点分别为闭包运算和连接运算,则,置该节点的整数标识为n,否则,按照步骤iii中情况执行;
iii.若当前的节点为连接运算符节点,并且不满足步骤ii中的情况,则n:=n+1,置当前节点的整数标识为n。
步骤f中所述的基于编号的二叉解析树设置自动机的终止状态标识的方法包括:
(1)若根节点为连接运算符节点,则将该节点的整数标识设置为终止状态标识;
(2)若二叉解析树的根节点是或运算节点,则置离根节点最近的左子树上的整数标识节点为终止状态节点;
(3)若二叉解析树的根节点是闭包运算节点,则不对任何一个整数标识置终止状态标识。
称完成步骤e和f后得到的指标正则解析树为后缀正则树。
步骤g所述的基于后缀正则树的中序遍历操作得后缀NFA引擎的方法包括:
1)假设后缀正则树中编号的最大整数为n,则创建n+1个状态,状态名分别为0、1、2、......、n,并将状态0设置为开始状态;
2)若后缀正则树中存在一个整数i被标识为终止状态,则将该整数i所对应的状态i设置为终止状态;若不存在,则将开始状态0同时设置为终止状态;
3)中序遍历后缀正则树,按照遍历顺序建立状态转移,最终获得只有一个开始状态和一个终止状态的并且size达到最优的NFA。
称由上述操作过程获得的NFA引擎为后缀自动机。
本发明所述的方法还包括:
S5.进行IP溯源,追踪到攻击源后,将攻击源的IP地址发送到防火墙进行包过滤,即实现了快速、高效的入侵检测。
与现有技术相比,本发明解决了如下几个技术难题:1、用NFA方式实现了DFA的用单一自动机完成对多条正则表达式的匹配,解决了NFA不能实现多正则表达式匹配和DFA在实现多正则表达式匹配时的空间爆炸问题;2、有效地缩减了NFA的空间规模,解决了传统的NFA引擎构造方法所存在的空间浪费以及在执行模式匹配过程中的无效遍历问题,有效地缩短了了深度包检测的响应时间,提高了系统的整体性能和效率。以下进行详细分析:
(1)本发明的构造方法中,通过利用或运算将多条正则表达式合并成一条正则表达式,然后在避免DFA引擎的状态爆炸问题的情况下,基于后缀自动机构造出多条正则表达式的单一NFA正则引擎,从而有效地解决了采用NFA正则引擎的深度包检测系统中,一个自动机只能实现一条正则表达式的匹配,多条正则表达式的并行匹配引起的性能指数级下降的问题。
(2)使用本发明的构造方法能够获得空间规模达到最优的正则引擎,所获得的NFA不但具有size比现有的四种理论或方法都要小的NFA,而且所获得的NFA只有一个开始状态和一个终止状态,从而有效地减少了NFA正则引擎的规模,同时降低了深度包检测过程中正则表达式的模式匹配复杂度,使得正则引擎本身的空间效率得以大大的提高,进而显著地提升了入侵检测系统的模式匹配效率;
(3)本发明的构造方法中引入了基于逆波兰式的正则表达式的解析树的构造方法,该方法通过构造正则表达式的运算逻辑的后缀解析树。(注:这里的后缀解析树是基于正则表达式的运算序列的二叉解析树,而不是通常意义上的基于字符串的后缀子串的后缀树(suffix trie))在后缀解析树的基础上,根据正则语言集上各种同态运算的封闭性和正则性原理,采用了一种前所未有的有限状态空间中最少状态的识别和标识方法,基于该方法,能够简单地通过对后缀解析树的特殊节点进行编码而获得NFA的所有状态以及状态时间所有的状态转移关系。在完成对后缀解析树的编码和标识的基础上,进一步地利用二叉树遍历操作即可简单地构造出比现有的四种方法所获得的size都要小的已经达到最优状态的只有一个开始状态和一个结束终止状态的NFA。从而简化了正则引擎的构造过程,使得入侵检测系统本身的设计和实现更加简单、高效。
本发明的难度在于:
1)基于形式语言学和自动机理论中正则集上的同态运算的封闭性和正则性原理发现并证明了直接基于正则表达式的逆波兰式的解析二叉树获得NFA引擎所对应的最小状态空间的方法和原理;
2)形式语言学和自动机理论中正则集上的同态运算的封闭性和正则性原理直接基于正则后缀树获得状态空间中唯一一个终止状态的标识及其正确性保证;
3)基于单一简单的二叉树遍历操作即可实现状态以及状态转移的构造,并保证所构造的NFA与原正则表达式的等价性。
附图说明
图1是本发明的一种实施例的工作流程图;
图2为采用Thompson automata方法构造NFA引擎的示意图;
图3为采用Position automata方法构造NFA引擎的示意图;
图4采用Follow automata方法构造NFA引擎的示意图;
图5为采用Partial automata方法构造NFA引擎的示意图;
图6为本发明采用后缀自动机方法构造NFA引擎的示意图;
图7为构造后缀正则式的二叉解析树的第一步示意图;
图8为构造后缀正则式的二叉解析树的第二步示意图;
图9为构造后缀正则式的二叉解析树的第三步示意图;
图10为构造后缀正则式的二叉解析树的第四步示意图;
图11为构造后缀正则式的二叉解析树的第五步示意图;
图12为构造后缀正则式的二叉解析树的第六步示意图;
图13为构造后缀正则树的第一步示意图;
图14为构造后缀正则树的第二步示意图;
图15为构造后缀正则树的第三步示意图;
图16为构造后缀正则树的第四步示意图;
图17为构造后缀正则树的第五步示意图;
图18为构造后缀正则树的第六步示意图;
图19为根据后缀正则树构造后缀NFA引擎的第一步示意图;
图20为根据后缀正则树构造后缀NFA引擎的第二步示意图;
图21为根据后缀正则树构造后缀NFA引擎的第三步示意图;
图22为根据后缀正则树构造后缀NFA引擎的第四步示意图;
图23为根据后缀正则树构造后缀NFA引擎的第五步示意图;
图24为根据后缀正则树构造后缀NFA引擎的第六步示意图。
下面结合附图和具体实施方式对本发明作进一步的说明。
具体实施方式
实施例1:一种基于后缀自动机正则引擎构造的深度包检测方法,如图1所示,包括以下步骤:
S1,入侵检测系统抽取攻击特征构建正则表达式;
S2,构造后缀NFA引擎并利用其进行多模式匹配;
S3,从Web服务器获取应用层协议数据包和Web服务器日志文件;
S4,对上述协议数据包和日志文件进行深度包检测并将检测结果发送给防火墙;
S5.进行IP溯源,追踪到攻击源后,将攻击源的IP地址发送到防火墙进行包过滤。
步骤S2中所述的构造后缀NFA引擎的具体方法包括:
a.对正则表达式进行分组;
b.将每一组中的多条正则表达式利用或运算整合成一条正则表达式;
c.将整合后的正则表达式改写成逆波兰形式,得后缀正则式;
d.构造后缀正则式的二叉解析树;
e.基于后序遍历操作对二叉解析树进行节点编号,确定自动机的状态空间;
f.基于编号的二叉解析树设置自动机的终止状态标识,得后缀正则树;
g.基于后缀正则树的中序遍历操作得后缀NFA引擎。
步骤c中所述的将整合后的正则表达式改写成逆波兰形式,得后缀正则式的具体方法包括:
D.正则表达式中按照原有顺序依次出现的输入符号作为后缀正则式从左至右输入的符号;
E.运算符号按其实际计算顺序紧跟在其运算对象后面出现;
F.将正则表达式中的小括号删除。
步骤d中所述的构造后缀正则式的二叉解析树的方法是:
1)后缀正则式中的所有输入符号作为二叉解析树的叶子节点,从左至右依次排列;
2)根据后缀正则式中运算符的逻辑顺序依次由叶子节点到根节点自底向上建立整棵二叉解析树,其中,或运算和连接运算为双目运算,其运算对象:输入符号所对应的叶子节点或某个运算的运算结果所对应的子树的根节点分别为其左右孩子;闭包运算为单目运算,其运算对象为其左孩子,右孩子空缺。
步骤e所述的基于后序遍历操作对二叉解析树进行节点编号的具体方法包括:
i.初始化编号n:=1;
ii.若当前的节点是连接运算符节点,且该节点的前两个节点分别为闭包运算和连接运算,则,置该节点的整数标识为n,否则,按照步骤iii中情况执行;
iii.若当前的节点为连接运算符节点,并且不满足步骤ii中的情况,则n:=n+1,置当前节点的整数标识为n。
步骤f中所述的基于编号的二叉解析树设置自动机的终止状态标识的方法包括:
(1)若根节点为连接运算符节点,则将该节点的整数标识设置为终止状态标识(如在图中用双圆圈表示);
(2)若二叉解析树的根节点是或运算节点,则置离根节点最近的左子树上的整数标识节点为终止状态节点;
(3)若二叉解析树的根节点是闭包运算节点,则不对任何一个整数标识置终止状态标识。
步骤g所述的基于后缀正则树的中序遍历操作得后缀NFA引擎的方法包括:
1)假设后缀正则树中编号的最大整数为n,则创建n+1个状态,状态名分别为0、1、2、......、n,并将状态0设置为开始状态;
2)若后缀正则树中存在一个整数i被标识为终止状态,则将该整数i所对应的状态i设置为终止状态;若不存在,则将开始状态0同时设置为终止状态;
3)中序遍历后缀正则树,按照遍历顺序建立状态转移,最终获得只有一个开始状态和一个终止状态的并且size达到最优的NFA。
实施例2:一种基于后缀自动机正则引擎构造的深度包检测方法,包括以下步骤:
S1,入侵检测系统抽取攻击特征构建正则表达式;
S2,构造后缀NFA引擎并利用其进行多模式匹配;
S3,从Web服务器获取应用层协议数据包和Web服务器日志文件;
S4,对上述协议数据包和日志文件进行深度包检测并将检测结果发送给防火墙。
步骤S2中所述的构造后缀NFA引擎的具体方法包括:
a.对正则表达式进行分组;
b.将每一组中的多条正则表达式利用或运算整合成一条正则表达式;
c.将整合后的正则表达式改写成逆波兰形式,得后缀正则式;
d.构造后缀正则式的二叉解析树;
e.基于后序遍历操作对二叉解析树进行节点编号,确定自动机的状态空间;
f.基于编号的二叉解析树设置自动机的终止状态标识,得后缀正则树;
g.基于后缀正则树的中序遍历操作得后缀NFA引擎。
步骤c中所述的将整合后的正则表达式改写成逆波兰形式,得后缀正则式的具体方法包括:
G.正则表达式中按照原有顺序依次出现的输入符号作为后缀正则式从左至右输入的符号;
H.运算符号按其实际计算顺序紧跟在其运算对象后面出现;
I.将正则表达式中的小括号删除。
步骤d中所述的构造后缀正则式的二叉解析树的方法是:
1)后缀正则式中的所有输入符号作为二叉解析树的叶子节点,从左至右依次排列;
2)根据后缀正则式中运算符的逻辑顺序依次由叶子节点到根节点自底向上建立整棵二叉解析树,其中,或运算和连接运算为双目运算,其运算对象:输入符号所对应的叶子节点或某个运算的运算结果所对应的子树的根节点分别为其左右孩子;闭包运算为单目运算,其运算对象为其左孩子,右孩子空缺。
步骤e所述的基于后序遍历操作对二叉解析树进行节点编号的具体方法包括:
i.初始化编号n:=1;
ii.若当前的节点是连接运算符节点,且该节点的前两个节点分别为闭包运算和连接运算,则,置该节点的整数标识为n,否则,按照步骤iii中情况执行;
iii.若当前的节点为连接运算符节点,并且不满足步骤ii中的情况,则n:=n+1,置当前节点的整数标识为n。
步骤f中所述的基于编号的二叉解析树设置自动机的终止状态标识的方法包括:
(1)若根节点为连接运算符节点,则将该节点的整数标识设置为终止状态标识;
(2)若二叉解析树的根节点是或运算节点,则置离根节点最近的左子树上的整数标识节点为终止状态节点;
(3)若二叉解析树的根节点是闭包运算节点,则不对任何一个整数标识置终止状态标识。
步骤g所述的基于后缀正则树的中序遍历操作得后缀NFA引擎的方法包括:
1)假设后缀正则树中编号的最大整数为n,则创建n+1个状态,状态名分别为0、1、2、......、n,并将状态0设置为开始状态;
2)若后缀正则树中存在一个整数i被标识为终止状态,则将该整数i所对应的状态i设置为终止状态;若不存在,则将开始状态0同时设置为终止状态;
3)中序遍历后缀正则树,按照遍历顺序建立状态转移,最终获得只有一个开始状态和一个终止状态的并且size达到最优的NFA。
实验例:
硬件正则引擎支持的正则表达式数量极其有限,不适合当前网络信息系统,特别是云计算系统的深度包检测应用。当前Snort等软引擎系统,单一DFA匹配多正则表达式存在空间爆炸问题,传统NFA引擎存在并行匹配性能急剧下降问题。并且,当前已有的构造正则引擎的理论或方法只有四种,且实际系统基本都是基于Thompson自动机来实现的。现有的自动机构造理论所获得的NFA引擎都不是最小的,现用一个经典的实例对比说明如下:
采用本发明以及现有的各种构造NFA的方法实现同一正则表达式r的NFA构造,其中,
r=(a+b)(a*+ab*+b*)*
在本实验例中,Thompson自动机(如图2所示)的size=8+14=22;位置自动机(Position automata)(如图3所示)的size=7+22=29;后跟自动机(Follow automata)(如图4所示)的size=4+8=12;部分派生自动机(Partial automata)(如图5所示)的size=4+11=15;而本发明,后缀自动机(Postfix automata)(如图6所示)的size=3+7=10。因此,在所有的正则NFA引擎的构造方法中,本发明的方法的size最小,达到了最优,其能够解决其他方法所不能解决的为正则表达式组构造单一NFA引擎的问题。
此外,本发明根据形式语言学和自动机理论中正则集上的同态运算的封闭性和正则性原理进行了理论证明,证明了方法的正确性,然后采用C语言,在Linux操作系统上进行了编码实现,并用大量的实例,将其与开源系统Snort中的正则引擎进行了模拟对比分析,其每次得到的NFA的size都与理论证明相符,达到了最小(最优)。
实例说明:
为了说明本发明的技术方案,现用6个实例来说明其整个技术方案,这6个实例包含了正则表达式中的三个基本运算的所有可能的逻辑组合情况,如下:
(1)构造分组整合后的正则表达式的逆波兰式,如下所示,每个实例的第一行为正则表达式,第二行为其所对应的逆波兰式:
(2)构造二叉解析树,如图7~图12所示;
(3)执行方案中的步骤e和f,得到后缀正则树,如图13~图18所示;
对正则解析树(二叉解析树)进行编码得到后缀正则树的方法为:后序遍历正则解析树,按照遍历顺序对连接运算的节点按照如下情况进行编码和置终止状态标志。首先按照如下方法对正则解析树的连接运算符所对应的节点进行编号:
1)初始化编号n:=1;
2)若当前的节点是连接运算符节点,且该节点的前两个节点分别为闭包运算和连接运算,则,置该节点的整数标识为n,否则,按照第3)中情况执行;
3)若当前结点为连接运算符结点,并且不满足第2)种情况,则n:=n+1,再置当前结点的整数标识为n。
接下来按照如下方法设置终止状态标识:
1)若根节点为连接运算符节点,则将该节点的整数标识设置为终止状态标识(在图中用双圆圈表示);
2)若正则解析树的根节点是或运算结点,则置离根节点最近的左子树上的整数标识结点为终止状态节点;
3)若正则解析树的根节点是闭包运算结点,则不对任何一个整数标识置终止状态标识。
(4)根据后缀正则树获得后缀NFA引擎,如图19~图24所示。
Claims (7)
1. 一种基于后缀自动机正则引擎构造的深度包检测方法,其特征在于,包括以下步骤:
S1,入侵检测系统抽取攻击特征构建正则表达式;
S2,构造后缀NFA引擎并利用其进行多模式匹配;
S3,从Web服务器获取应用层协议数据包和Web服务器日志文件;
S4, 对上述协议数据包和日志文件进行深度包检测并将检测结果发送给防火墙;
S5,进行IP溯源,追踪到攻击源后,将攻击源的IP地址发送到防火墙进行包过滤。
2.根据权利要求1所述的基于后缀自动机正则引擎构造的深度包检测方法,其特征在于,步骤S2中所述的构造后缀NFA引擎的具体方法包括:
a. 对正则表达式进行分组;
b. 将每一组中的多条正则表达式利用或运算整合成一条正则表达式;
c. 将整合后的正则表达式改写成逆波兰形式,得后缀正则式;
d. 构造后缀正则式的二叉解析树;
e. 基于后序遍历操作对二叉解析树进行节点编号,确定自动机的状态空间;
f. 基于编号的二叉解析树设置自动机的终止状态标识,得后缀正则树;
g. 基于后缀正则树的中序遍历操作得后缀NFA引擎。
3.根据权利要求2所述的基于后缀自动机正则引擎构造的深度包检测方法,其特征在于,步骤c中所述的将整合后的正则表达式改写成逆波兰形式,得后缀正则式的具体方法包括:
正则表达式中按照原有顺序依次出现的输入符号作为后缀正则式从左至右输入的符号;
运算符号按其实际计算顺序紧跟在其运算对象后面出现;
将正则表达式中的小括号删除。
4.根据权利要求2所述的基于后缀自动机正则引擎构造的深度包检测方法,其特征在于,步骤d中所述的构造后缀正则式的二叉解析树的方法是:
1)后缀正则式中的所有输入符号作为二叉解析树的叶子节点,从左至右依次排列;
2)根据后缀正则式中运算符的逻辑顺序依次由叶子节点到根节点自底向上建立整棵二叉解析树,其中,或运算和连接运算为双目运算,其运算对象:输入符号所对应的叶子节点或某个运算的运算结果所对应的子树的根节点分别为其左右孩子;闭包运算为单目运算,其运算对象为其左孩子,右孩子空缺。
5. 根据权利要求2所述的基于后缀自动机正则引擎构造的深度包检测方法,其特征在于,步骤e所述的基于后序遍历操作对二叉解析树进行节点编号的具体方法包括:
i. 初始化编号n:=1;
ii.若当前的节点是连接运算符节点,且该节点的前两个节点分别为闭包运算和连接运算,则,置该节点的整数标识为n,否则,按照步骤iii中情况执行;
iii.若当前的节点为连接运算符节点,并且不满足步骤ii中的情况,则n:=n+1,置当前节点的整数标识为n。
6.根据权利要求2所述的基于后缀自动机正则引擎构造的深度包检测方法,其特征在于,步骤f中所述的基于编号的二叉解析树设置自动机的终止状态标识的方法包括:
(1)若根节点为连接运算符节点,则将该节点的整数标识设置为终止状态标识;
(2)若二叉解析树的根节点是或运算节点,则置离根节点最近的左子树上的整数标识节点为终止状态节点;
(3)若二叉解析树的根节点是闭包运算节点,则不对任何一个整数标识置终止状态标识。
7. 根据权利要求2所述的基于后缀自动机正则引擎构造的深度包检测方法,其特征在于,步骤g所述的基于后缀正则树的中序遍历操作得后缀NFA引擎的方法包括:
1)假设后缀正则树中编号的最大整数为n,则创建n+1个状态,状态名分别为0、1、2、……、n,并将状态0设置为开始状态;
2)若后缀正则树中存在一个整数i被标识为终止状态,则将该整数i所对应的状态i设置为终止状态;若不存在,则将开始状态0同时设置为终止状态;
3)中序遍历后缀正则树,按照遍历顺序建立状态转移,最终获得只有一个开始状态和一个终止状态的并且size达到最优的NFA。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310159057.1A CN103259793B (zh) | 2013-05-02 | 2013-05-02 | 基于后缀自动机正则引擎构造的深度包检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310159057.1A CN103259793B (zh) | 2013-05-02 | 2013-05-02 | 基于后缀自动机正则引擎构造的深度包检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103259793A CN103259793A (zh) | 2013-08-21 |
CN103259793B true CN103259793B (zh) | 2015-10-21 |
Family
ID=48963490
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310159057.1A Expired - Fee Related CN103259793B (zh) | 2013-05-02 | 2013-05-02 | 基于后缀自动机正则引擎构造的深度包检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103259793B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103440331B (zh) * | 2013-09-05 | 2017-02-08 | 五八同城信息技术有限公司 | 基于逆波兰和多叉树的搜索引擎查询语句解析方法 |
CN105100015B (zh) * | 2014-05-16 | 2018-07-03 | 林琳 | 一种采集互联网访问数据的方法及装置 |
CN104537128A (zh) * | 2015-01-30 | 2015-04-22 | 广联达软件股份有限公司 | 一种网页信息提取方法及装置 |
CN110489965B (zh) * | 2018-07-14 | 2022-01-28 | 北京数安鑫云信息技术有限公司 | 一种深度威胁识别实时引擎的实现方法及系统 |
CN109800337B (zh) * | 2018-12-06 | 2023-07-11 | 成都网安科技发展有限公司 | 一种适用于大字母表的多模式正则匹配算法 |
CN109474644B (zh) * | 2019-01-11 | 2021-04-23 | 深圳前海微众银行股份有限公司 | 安全防护方法、装置、设备、waf及可读存储介质 |
CN111259122B (zh) * | 2020-01-13 | 2023-07-25 | 奇安信科技集团股份有限公司 | 网络包检测方法及装置 |
CN111753144B (zh) * | 2020-05-15 | 2023-10-17 | 中国科学院信息工程研究所 | 一种基于Warshall方法加速epsilon闭包计算的方法及系统 |
CN112769813B (zh) * | 2020-12-31 | 2022-10-21 | 深圳市东晟数据有限公司 | 一种多前缀掩码五元组的匹配方法 |
CN113627164B (zh) * | 2021-07-12 | 2024-03-01 | 中国科学院信息工程研究所 | 一种状态爆炸型正则表达式的识别方法及系统 |
CN114492399A (zh) * | 2021-12-29 | 2022-05-13 | 国网天津市电力公司 | 一种基于正则表达式的合同信息提取系统及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101645069A (zh) * | 2008-08-04 | 2010-02-10 | 中国科学院计算机网络信息中心 | 一种多模式匹配中正则表达式存储压缩方法 |
US7689530B1 (en) * | 2003-01-10 | 2010-03-30 | Cisco Technology, Inc. | DFA sequential matching of regular expression with divergent states |
CN101707513A (zh) * | 2009-11-30 | 2010-05-12 | 曙光信息产业(北京)有限公司 | 基于正则表达式的深度包检测方法及设备 |
CN102523219A (zh) * | 2011-12-16 | 2012-06-27 | 清华大学 | 正则表达式匹配系统及匹配方法 |
-
2013
- 2013-05-02 CN CN201310159057.1A patent/CN103259793B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7689530B1 (en) * | 2003-01-10 | 2010-03-30 | Cisco Technology, Inc. | DFA sequential matching of regular expression with divergent states |
CN101645069A (zh) * | 2008-08-04 | 2010-02-10 | 中国科学院计算机网络信息中心 | 一种多模式匹配中正则表达式存储压缩方法 |
CN101707513A (zh) * | 2009-11-30 | 2010-05-12 | 曙光信息产业(北京)有限公司 | 基于正则表达式的深度包检测方法及设备 |
CN102523219A (zh) * | 2011-12-16 | 2012-06-27 | 清华大学 | 正则表达式匹配系统及匹配方法 |
Non-Patent Citations (2)
Title |
---|
A regular expression matching circuit: Decomposed non-deterministic realization with prefix sharing and multi-character transition;Hiroki Nakahara等;《Microprocessors and Microsystems》;20121130;第36卷(第8期);全文 * |
基于正则表达式的多模式匹配算法研究;殷珍珍;《中国优秀硕士学位论文全文数据库 信息科技辑》;20120915;正文第9页、第18页及图3.1 * |
Also Published As
Publication number | Publication date |
---|---|
CN103259793A (zh) | 2013-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103259793B (zh) | 基于后缀自动机正则引擎构造的深度包检测方法 | |
Schweller et al. | Reversible sketches: enabling monitoring and analysis over high-speed data streams | |
Alicherry et al. | High speed pattern matching for network IDS/IPS | |
US9275224B2 (en) | Apparatus and method for improving detection performance of intrusion detection system | |
US8990259B2 (en) | Anchored patterns | |
CN105431828A (zh) | 用于检测受损计算系统的系统与方法 | |
Yin et al. | Improved deep packet inspection in data stream detection | |
CA2936605C (en) | Method and apparatus for generating a plurality of indexed data fields | |
US11831671B2 (en) | Method for automatic derivation of attack paths in a network | |
Shalaginov et al. | Malware beaconing detection by mining large-scale dns logs for targeted attack identification | |
Aldwairi et al. | n‐Grams exclusion and inclusion filter for intrusion detection in Internet of Energy big data systems | |
Yang et al. | Fast submatch extraction using OBDDs | |
CN102576392A (zh) | 恶意代码检测 | |
Cronin et al. | Hardware acceleration of regular expression repetitions in deep packet inspection | |
Petingi | Diameter-related properties of graphs and applications to network reliability theory | |
Chen et al. | Propagation modeling of active P2P worms based on ternary matrix | |
BabuKaruppiah et al. | Deterministic finite automata for pattern matching in fpga for intrusion detection | |
CN105184157A (zh) | 一种基于分类计数器的确定有限状态机构造方法 | |
Au et al. | Graph Database Technology and k-Means Clustering for Digital Forensics | |
Kecskeméti et al. | In-Network Security Applications with P4RROT | |
Smutz | Signature Matching for Incident Response. | |
Piyasinghe et al. | Community detection in dynamic networks with spark | |
Huan et al. | A botnet-oriented collaborative defense scheme description language | |
Pandey et al. | Efficient Design and Implementation of DFA Based Pattern Matching on Hardware | |
Rong-cai et al. | A high effective papilionaceous automata to match multiple counting constraint pattern |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151021 |