CN102201948A - 用于网络入侵检测***的快速匹配方法 - Google Patents
用于网络入侵检测***的快速匹配方法 Download PDFInfo
- Publication number
- CN102201948A CN102201948A CN2011101395461A CN201110139546A CN102201948A CN 102201948 A CN102201948 A CN 102201948A CN 2011101395461 A CN2011101395461 A CN 2011101395461A CN 201110139546 A CN201110139546 A CN 201110139546A CN 102201948 A CN102201948 A CN 102201948A
- Authority
- CN
- China
- Prior art keywords
- cnt
- bit
- result
- piece
- key
- 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.)
- Granted
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本文提出一个创新的、不同的模式匹配方法:我们把数据包的有效载荷划分成多个固定长度的块,逐个地对每一块执行模式匹配。对于每一个块仅需要较少数量的比较,这是基于这样一个事实:网络入侵检测***中正常的数据流几乎不与任何病毒签名相匹配,而且我们需要比较的大部分密钥都很短。对多个密钥的并行检查加快了处理速度,减少指令间数据相关性。对于非固定长度的正则表达式密钥,我们的算法被用作一个哈希表来尽可能避免对大部分数据包的进一步检查。我们的算法只需要少量的内存来存储经常使用的数据,这些数据存储在高速缓存(Cache)中,因此CPU绝大部分时间并不需要访问主内存。内存访问延迟的时间通常是数百倍于CPU时钟周期,由于需要很少的内存访问,我们的算法加快了模式匹配的速度。
Description
联合研究
本申请由北方工业大学与北京交通大学信息所联合研究,并得到以下基金资助:北京市属高等学校人才强教深化计划项目(PHR201008187);国家自然科学基金(No.60903066,No.60972085);北京市自然科学基金(No.4102049),***新教师基金(No.20090009120006)。
技术领域
本发明涉及一种网络入侵检测***,更具体而言,涉及一种用于网络入侵检测***的快速匹配算法。
背景技术
在1998年,Martin Roesch先生用C语言开发了开放源代码的入侵检测***Snort(“SNORT Network Intrusion Detection System”,http://www.snort.org)。直至今天,Snort已发展成为一个多平台、实时流量分析、网络IP数据包记录等特性的强大的网络入侵检测/防御***(NetworkIntrusion Detection/Prevention System),即NIDS/NIPS。Snort符合通用公共许可(GPL-GUN General Pubic License),在网上可以通过免费下载获得Snort,并且只需要几分钟就可以安装并开始使用它.snort基于libpcap。
网络入侵检测***(NIDS)对于网络管理员保护网络而言是一种重要的安全性工具,它通过检查监测实时数据包和检测诸如未经授权的访问、端口扫描和拒绝服务(DoS)攻击拒绝之类的恶意攻击,能让网络管理员监控好网络。NIDS使用规则(或签名)数据库对数据包进行分类,以确定数据包是否是恶意的。一种有效地搜索匹配规则的常见方法是,即为给定的规则集建立诸如规则树或有限自动机之类的图表,并使用数据包作为输入字符串来对其进行遍历。由于流量和网络威胁的日益增长,入侵检测变得更加耗费资源,再加以现今的高速网络和大型规则集,一个网络入侵检测***会占用CPU大量时间和内存。因此,高吞吐量的模式匹配引擎以及对内存访问频率的降低是整体入侵检测性能的关键。
除数据包头预处理外,在当前的网络的许多重要的服务都是基于有效载荷检查的。NIDS、流量监控和第7层过滤要求对数据包内容的精确分析,以与包含应用程序,病毒,协议定义等具体的一个预定义的数据包匹配。传统上,这些数据集由一系列数字签名构成,这些数字签名可以通过字符串匹配进行查找,安全签名已被指定为基于字符串的精确匹配,但确切的字符串匹配不足以发现恶意模式,所以现在更有表现力的正则表达式(regulation expressoin)被用来形容各种有效载荷的数字签名。
例如,在Linux应用协议分类器中,所有的协议标识符都被表示为正则表达式。相似地,开放源码的网络入侵检测***Snort(“SNORT NetworkIntrusion Detection System”,http://www.snort.org)已经从2003年4月没有正则表达式规则集的状态,发展到2010年11月8786种规则中的5549种含有至少有一个Perl兼容正则表达式(PCRE)。另一个开源入侵检测***Bro也将正则表达用为其模式语言。这些都被不同的厂商应用于防火墙和设备中,例如思科公司。
数据包内容扫描对于网络安全和网络监控是至关重要的。现代网络设备需要高速地执行深度数据包检测以实现安全性和特殊用途的服务。Boyer-Moore串查找算法——这是一种特别有效的字符串搜索算法,并已用于实际的字符串搜索文献的基准——被广泛使用于深度的数据包检测,但它存在两个重要的不足:第一,由于需要对每一个目标字符串(密钥)进行预处理并且不能同时搜索多个密钥,它的速度实在不够快;第二,它仅执行精确的字符串匹配。近来,有限自动机(FA)是最流行的用于实现正则表达式匹配的方法,但它们需要复杂的预处理来构成FA,并且需要大量的内存。
非确定性有限自动机(NFA)对于每个字符需要更多的状态转换,因此查找的时间复杂度为O(m),其中m表示NFA中的状态数量。另一方面,NFA也是空间方面极其有效的结构。然而,确定性有限自动机(DFA)对每个字符只需要一个状态遍历,但是对于目前的正则表达式集合它们需要一个极大的内存量。当检查一个特定数据包的有效载荷时,仅需要考虑规则集合的一个很小的子集,因此DFA会浪费绝大部分的内存。基于以上原因,这些解决方法对于实际的深度包检测中并不适用,因为它们在线处理数据包时要求很高的速度。
为了加快模式匹配的速度,提出了一些硬件解决方案已经被提出(例如,C.H.Lin,C.T.Huang,C.P.Jiang和S.C.Chang,“Optimization of PatternMatching Circuits for Regular Expression on FPGA”,IEEE Transactions onVery Large Scale Integration Systems,Vol.15,Iss.12,pp.1303-1310,2007年10月;W.Zhang,Y.Xue,D.S.Wang,T.Song,“ A multiple simple regularexpression matching architecture and coprocessor for deep packet inspectio
因此,当前始终存在对于能够通过减少CPU时钟周期占用时间和内容访问次数来提高入侵检测速度的网络入侵检测***的需求。
发明内容
根据现在的知识水平而言,本文提出一个创新的、不同的模式匹配方法:我们把数据包的有效载荷划分成多个固定长度的块,逐个地对每一块执行模式匹配。对于每一个块仅需要较少数量的比较,这是基于这样一个事实:网络入侵检测***中正常的数据流几乎不与任何病毒签名相匹配,而且我们需要比较的大部分密钥都很短。对多个密钥的并行检查加快了处理速度,减少指令间数据相关性。对于非固定长度的正则表达式密钥,我们的算法被用作一个哈希表来尽可能避免对大部分数据包的进一步检查。我们的算法只需要少量的内存来存储经常使用的数据,这些数据存储在高速缓存(Cache)中,因此CPU绝大部分时间并不需要访问主内存。内存访问延迟的时间通常是数百倍于CPU时钟周期,由于需要很少的内存访问,我们的算法加快了模式匹配的速度。
根据一个实施例,一种基于Snort入侵检测***的快速字符串匹配方法,其中,把数据包的有效负荷划分成多个相同大小的块,每一块的长度是L字节,而且需要3个长度为L-比特的窗来记录暂时的结果。用来记录正在被检查的块的结果的窗被称为CW,用来记录前一个块所产生的结果的窗称为PW,用来记录由当前块产生并用于下一个块匹配的结果的窗被称作NW,该方法包括以下步骤:(1)对于第一个块,将这三个窗中的比特全部设定成0,并且将一个计数器“CNT”初始化为L;(2)如果CNT是L,将当前块与密钥的第一个字符的L个副本进行NXOR(异或非)运算,并将该L-比特的结果存储至CW中;如果不是,将当前块与密钥的下一个字符的L个副本进行NXOR运算,随后与CW进行AND运算,并将结果存储至CW;(3)如果这是密钥中的最后一个字符,且新的CW不是0,则就找到了匹配;如果不是,则进入第四步;(4)如果PW和CW都是0,则将{CW,NW}向右移CNT个比特,然后将NW复制至PW,设置CNT为L并移动至下一个块并进行至步骤2以进行进一步的检查;(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,则将{CW,NW}向右移CNT个比特,然后将NW复制至PW,将CNT设置成L并移动至下一个块并进行至步骤2以进行进一步的检查;(6)如果PW不是0,或者CW不是0或1,则将{PW,CW,NW}向右移1个比特,并将CNT数减1;(7)回到步骤2。
附图说明
图1是在Snort中使用的一种简单的树结构;
图2是根据本发明的实施例的快速字符串匹配的结构;以及
图3是根据本发明的实施例的快速字符串匹配方法的实例的示意图。
具体实施方式
NIDS和Snort
Snort(“SNORT Network Intrusion Detection System”,http://www.snort.org)使用一种简单的语言来定义规则,用以描述网络行为。每种规则由五个必要字段和大量的可选字段构成。必要字段包括协议类型(例如TCP,UDP)、源/目的IP地址和端口号,所有这些都是一个数据包报头的一部分。Snort把括号中的关键字解释为“可选字段”。常用可选字段是:“content”(搜索数据包的有效载荷以查找指定模式),“msg”(设置当数据包产生一个事件时要发送的消息),等等。用来检查一个数据包是否与任一规则相匹配的一种直接的方法是以蛮力方式查找规则库:针对该数据包逐个地测试每一个规则。这种方法很容易操作,但是比较耗费时间。为了减少要检查的规则数量,Snort建立了一个名为“规则树”的树结构来储存并组织所有的规则,见图1。对于每一个规则,必要字段存储在规则树节点(RTN),可选字段存储在可选树节点(OTN)。OTN与相应的RTN相关联。如果多个规则具有相同的必要字段,则仅创建单个RTN,多个OTN会共享该单个RTN。Snort的检测引擎构建了用于源端口字段和目的端口字段的索引,以便快速访问TCP和UDP的规则。然后使用每个输入数据包的源端口号和目标端口号来搜索其索引,以便识别匹配规则。如果在索引结构中找到了匹配规则,则Snort在所匹配的规则与输入数据包的有效负荷之间执行字符串模式匹配。如果字符串模式匹配成功,则检查在规则树中存储的所有剩余的必要字段(协议类型,例如TCP,UDP,源/目的IP地址)和可选条件。然而,针对有效载荷的字符串模式匹配会花费更多的时间和资源。
因此,为了减少针对有效载荷的字符串模式匹配的数量,本发明将检查所有协议字段,而不仅仅是端口号,这样的话Snort就可以拒绝更多的数据包不进入字符串模式匹配阶段。由于当前索引是基于对数据包报头中所有必要字段进行检查的,检测引擎仅对全部数据包中很少数据的数据包执行字符串模式匹配,这对于以线性速度来检测数据包的NIDS而言是至关重要的。
正则表达式匹配的相关工作
本发明的快速正则表达式匹配算法,专注于对数据包的有效负荷执行模式匹配。当一种规则与数据包报头中的全部必要字段皆匹配时,本发明的模式匹配引擎针对有效负荷执行字符串模式匹配,并将密钥存储在相应的OTN集合中。
传统的基于NIDS的DFA有三个主要的限制:首先,有一个事实他们没有充分利用,那就是正常的数据流几乎与任何病毒签名皆不匹配;第二,DFA对于很多部分匹配签名而言是极其不充分的;第三,当规则集更新时,DFA需要长时间去重建。本发明提出的机制能够解决这些弊端,可以更有效率地执行NIDS。
当需要对有效负荷的字符串模式匹配时,仅需要检查少量的密码。最典型的是在微处理器上,通过以下来执行密码匹配:首先要把给定的密钥转换成相应的NFA或者DFA,NFA或DFA然后会被用来搜索输入文本字符。当一个DFA可以在一个恒定时间内对每一个字符进行处理时(即,其需要的时间为O(1)),对于一个n字符密钥来说,DFA状态的数量可以达到O(2n),这在某些情况下会显著地降低计算机的性能。一些新方法用所有的密钥来建构大的DFA,以便并行地检查全部密钥;这些新方法能够每次检查一个字符,但却几乎每次都需要访问内容,这将会增加搜索的等待时间。不幸的是,绝大多数数据包几乎不与任何密钥匹配,因此我们希望能够尽快地排除那些不匹配的数据包,并且能够并行地检查一个数据包的有效负荷,而不是每次检查一个字符。
快速正则表达式匹配方法
以下参考图2-3给出根据本发明的实施例的快速正则表达式匹配方法。
首先,考虑精确的字符串匹配。我们把数据包的有效负荷划分成相同大小的块,假定每一块的长度是L字节,而且需要3个长度为L-比特的窗来记录暂时的结果。用来记录正在被检查的块的结果的窗被称为CW(Current windows),用来记录前一个块所产生的结果的窗被称为PW(Previous windows),用来记录由当前块产生并用于下一个块匹配的结果的窗被称作NW(Next windows)。在图2中示出了根据本发明的一个实施例的字符串匹配引擎的结构。
根据一个实施例,图2所示的引擎通过逐步地执行以下步骤来对各个块进行检查:
(1)对于第一个块,将这三个窗中的比特全部设定成0,并且将一个计数器“CNT”初始化为L。
(2)如果CNT是L,将当前块与密钥的第一个字符的L个副本进行NXOR(异或非)运算,并将该L-比特的结果存储至CW中;如果不是,将当前块与密钥的下一个字符的L个副本进行NXOR运算,随后与CW进行AND运算,并将结果存储至CW。
(3)如果这是密钥中的最后一个字符,且新的CW不是0,则就找到了匹配;如果不是,则进入第四步。
(4)如果PW和CW都是0,则将组合{CW,NW}向右移CNT个比特,然后将NW复制至PW,设置CNT为L并移动至下一个块并进行至步骤2以进行进一步的检查。
(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,则将组合{CW,NW}向右移CNT个比特,然后将NW复制至PW,将CNT设置成L并移动至下一个块并进行至步骤2以进行进一步的检查。
(6)如果PW不是0,或者CW不是0或1,则将组合{PW,CW,NW}向右移1个比特,并将CNT数减1。
(7)回到步骤2。
在图3中给出了使用以上各个步骤的一个具体实例。在实例中,L=8,密钥=“key”,块1和块2包含字符串“Tmnorrkeyinokruk”。从(b)至(c),移动至一个新的块,并且{CW、NW}向右移7个比特(CNT=7)。在图3中省略了一些窗。如果窗的内容是“00000000”,则在(e)中找到了匹配。
上述各步骤仅是本发明的方法一个子集,因为我们不考虑正则表达式中的通配符,而且我们假定密钥的长度小于或等于块的长度。这两个问题将会在以下内容中得到进一步论述。从理论和实践的基础上,我们可以得出下列结论:
a.如果一个块不包含密钥的第一个字符,则对于这个块仅需要执行一次检查,并且实验结果表明,当L=8的时候,大约83%的块只需要执行1到3次检查。
b.块的长度越长,就会得到越好的性能,因为一个块的比较次数只取决于在这个块和前一个块中的最长的匹配。因此,在一个较大的组合块中的比较次数大致等同于在那些较小块的最长次数中的比较次数。
c.该方法不需要预处理,并且由于不需要保存或恢复太多的数据而很少访问内存。
d.我们可以同时检查多个密钥。逐个地用密钥匹配一个块,并且只需要保存每个密钥的临时结果,这些临时结果可以存储在寄存器或高速缓存中以避免耗时的内存访问。这也可以减少在单个密钥的指令执行过程中的数据相关性。
我们需要考虑最坏的情况,尽管它看起来不可能发生。在最坏的情况下,每一块都需要和一个密钥进行L次比较,但是只有一个特定的密钥能和这种最坏的情况相匹配。即使是需要更多次比较,本发明的方法仍然可以达到很高的数据包吞吐量,因为与内存访问相比(其往往需要几十个CPU时钟周期),这些简单的指令有着更短的等待时间(最多十几个CPU时钟周期)。我们在之后将对这种最坏的情况进行探讨。
特殊情况
以上方法是基于一定的假设的,但是在实践中需要考虑到所有情况,因此我们来讨论这些特殊情况。
1.长密钥问题
如果一个密钥的长度大于块的长度,则可以使用双窗(或多窗),用类似的方法进行处理和运算。对于本领域技术人员而言,很容易将上述单个CW的实施例扩展至双窗或多窗的设计。实际上,我们将一长密钥分割成长度为L字节的几段,并分别将它们和一个块进行比较,然后将所得到的多个结果传递至下一个块的比较。
2.不精确字符
在近来的规则集中,一些字符是不“精确”的,但是这些字符的长度是精确的,例如“!a”和“a|b”,其分别表示“不是字符a”和“字符a或者字符b”。对于这些字符,我们仅需要修改在比较中使用的运算。例如,我们可以使用XOR(异或)运算代替NXOR运算来表示“!a”,使用(NXORa)|(NXOR b)来表示“a |b”。
3.变长密钥
一些正则表达式中具有可变的长度,例如克林星(Kleene Star)(*),其是一个通配符,常常用来表示匹配正则表达式中的零或更多次出现。因此,当密钥中有随机数量的字符时,我们有两种方法来处理。
第一种方法,我们可以寻找密钥的固定长度的前缀作为一个哈希值,用这个哈希值作为一个新的密钥,一些数据包就会被排除。这是因为如果一个数据包的有效负荷与密钥的一部分不匹配,则一定与整个密钥不匹配。并且我们也可以证明在任何正则表达式中都可以找到至少一个字符长度的准确前缀,因为在每个正则表达式的第一个字符一定不能以克林星来标记。例如,正则表达式“a*bc+d”等价于“bc+d”,因为“a*”是无意义的,而且我们只需检查“bc”(其是最大的准确前缀)作为哈希值,来执行对数据包的有效负荷的字符串匹配。当找到第一个匹配后,就需要进行更近一步的匹配检查。不过,我们不需要检查全部的正则表达式,只需检查其剩余部分,这样就减少了DFA的状态。因此我们为正则表达式中的剩余部分构造简单的DFA,并使用由该哈希值产生的结果进行进一步的检查。仅需进一步检查在所匹配的哈希值之后的字符串,并在DFA中的状态为有效时完成该可能的匹配检查。因此当数据包的有效负荷需要进一步检查时,只有其一小部分进入DFA。
我们可以不建立几个小的DFA,而是可以选择建立一个较大的DFA引擎来合并所有这些变长密钥。但实验结果表明,这种方法不如前者,这是因为:(1)建立几个小的DFA比建立一个大的组合DFA更快;(2)在检查了前缀之后,仅需要进一步检查数据包有效负荷的一小部分,并且仅有数据包有效负荷的一小部分进入DFA;(3)一些小的DFA可以被其他数据包重复使用,也易于被存入缓存中。
第二种方法,使用计数器而不是DFA。这种方法避免了使用DFA但是需要对正则表达式进行预处理。预处理器将正则表达式分割成几个部分,用来区分长度确定的部分和长度可变的部分。例如,“abc+d”可以被分成三个部分:“abc”,“c*”和“d”。在检查“abc”和“d”时使用的方法与之前讨论的相同,唯一的区别是如何检查“c*”。在检查了字符串“abc”后,我们的匹配引擎检查“c*”的匹配,不同之处是NXOR操作的结果被存储在一个临时窗(TW)中,而不是更新当前窗(CW),且三个窗(PW,CW和NW)在本次匹配过程中保持不变。随后,匹配引擎使用NXOR运算来比较字符“d”,其结果记为T。CW中的第i个字节可利用下列等式更新:
CW(i)=T(i)&(CW(i)|(TW(i+1)&CW(i+1))|(TW(i+2)&TW(i+1)&CW(i+2))|...|(TW(L-1)&...&TW(i+1)&CW(L-1)))(1)
如果正则表达式对字符“c”的长度有要求,则我们需要使用计数器来记录在“abc”和“d”之间的“c”的长度。例如对字符“c”匹配N次或更多次匹配。
与Boyer-Moore字符串搜索法的比较
Boyer-Moore字符串查找法是一种特别有效的字符串搜索算法,它是针对实际字符串搜索方法的一个标准基准。通常,Snort使用Boyer-Moore字符串搜索法来完成模式匹配,但是这种算法需要对每一个密钥进行预处理并且每次仅检查一个字符,即使可以跳过有效负荷中的一些字符。此外,此算法随着所搜索的密钥的长度的变长而变得更快,但是在Snort的规则中,大部分的密钥都很短。
与Boyer-Moore串查找法相比,我们的算法有以下优势:
1.该算法不需要对每一个密钥预处理。
2.数据包有效负荷移动的长度是固定的(一个块),但是在Boyer-Moore算法中,数据包有效负荷移动的长度取决于之前的检查结果。.
3.以上两个“静态”特性使本发明的方法更容易应用于硬件开发,例如FPGA。
4.数据包移动长度固定而非取决于之前检验结果的特点,使得本发明的方法更容易并行地检查多个密钥。
5.该算法使用并行方式检查多个字符,而不是逐个检验。
6.该算法更易于扩展。
对于Boyer-Moore算法来说,寻找有效负荷中所有匹配的最坏情况需要大约3*N次比较,其中N为有效负荷中字符的数量。在本发明的方法中,最坏的情况需要大约N次比较。在最坏情况下,密钥的长度与块的长度相等。
尽管前述公开文件论述了示例性方案和/或实施例,但应注意,在不背离由权利要求书定义的描述的方案和/或实施例的范围的情况下,可以在此做出许多变化和修改。而且,尽管以单数形式描述或要求的所述方案和/或实施例的要素,但也可以设想复数的情况,除非明确表示了限于单数。另外,任意方案和/或实施例的全部或部分都可以与任意其它方案和/或实施例的全部或部分结合使用,除非表明了有所不同。
Claims (6)
1.一种基于Snort网络入侵检测***的快速字符串匹配方法,其中,把数据包的有效负荷划分成多个相同大小的块,每一块的长度是L字节,而且需要3个长度为L-比特的窗来记录暂时的结果。用来记录正在被检查的块的结果的窗被称为CW,用来记录前一个块所产生的结果的窗称为PW,用来记录由当前块产生并用于下一个块匹配的结果的窗被称作NW,该方法包括以下步骤:
(1)对于第一个块,将这三个窗中的比特全部设定成0,并且将一个计数器“CNT”初始化为L;
(2)如果CNT是L,将当前块与密钥的第一个字符的L个副本进行NXOR(异或非)运算,并将该L-比特的结果存储至CW中;如果不是,将当前块与密钥的下一个字符的L个副本进行NXOR运算,随后与CW进行AND运算,并将结果存储至CW;
(3)如果这是密钥中的最后一个字符,且新的CW不是0,则就找到了匹配;如果不是,则进入第四步;
(4)如果PW和CW都是0,则将{CW,NW}向右移CNT个比特,然后将NW复制至PW,设置CNT为L并移动至下一个块并进行至步骤2以进行进一步的检查;
(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,则将{CW,NW}向右移CNT个比特,然后将NW复制至PW,将CNT设置成L并移动至下一个块并进行至步骤2以进行进一步的检查;
(6)如果PW不是0,或者CW不是0或1,则将{PW,CW,NW}向右移1个比特,并将CNT数减1;
(7)回到步骤2。
2.如权利要求1所述的方法,其中,使用双窗(或多窗)来替代所述的CW、PW和NW。
3.如权利要求1所述的方法,其中,对于包含不精确字符的密钥,可以使用XOR(异或)运算代替NXOR运算。
4.如权利要求1所述的方法,其中,对于变长密钥,寻找密钥的固定长度的前缀作为一个哈希值,用这个哈希值作为一个新的密钥,对该密钥的剩余部分进行进一步检查。
5.一种现场可编程门阵列,其包含用于实现基于Snort入侵检测***的快速字符串匹配的逻辑,其中,把数据包的有效负荷划分成多个相同大小的块,每一块的长度是L字节,而且需要3个长度为L-比特的窗来记录暂时的结果。用来记录正在被检查的块的结果的窗被称为CW,用来记录前一个块所产生的结果的窗称为PW,用来记录由当前块产生并用于下一个块匹配的结果的窗被称作NW,所述逻辑用以实现以下步骤:
(1)对于第一个块,将这三个窗中的比特全部设定成0,并且将一个计数器“CNT”初始化为L;
(2)如果CNT是L,将当前块与密钥的第一个字符的L个副本进行NXOR(异或非)运算,并将该L-比特的结果存储至CW中;如果不是,将当前块与密钥的下一个字符的L个副本进行NXOR运算,随后与CW进行AND运算,并将结果存储至CW;
(3)如果这是密钥中的最后一个字符,且新的CW不是0,则就找到了匹配;如果不是,则进入第四步;
(4)如果PW和CW都是0,则将{CW,NW}向右移CNT个比特,然后将NW复制至PW,设置CNT为L并移动至下一个块并进行至步骤2以进行进一步的检查;
(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,则将{CW,NW}向右移CNT个比特,然后将NW复制至PW,将CNT设置成L并移动至下一个块并进行至步骤2以进行进一步的检查;
(6)如果PW不是0,或者CW不是0或1,则将{PW,CW,NW}向右移1个比特,并将CNT数减1;
(7)回到步骤2。
6.一种网络入侵检测***,其使用了一种快速字符串匹配方法,其中,把数据包的有效负荷划分成多个相同大小的块,每一块的长度是L字节,而且需要3个长度为L-比特的窗来记录暂时的结果。用来记录正在被检查的块的结果的窗被称为CW,用来记录前一个块所产生的结果的窗称为PW,用来记录由当前块产生并用于下一个块匹配的结果的窗被称作NW,该方法包括以下步骤:
(1)对于第一个块,将这三个窗中的比特全部设定成0,并且将一个计数器“CNT”初始化为L;
(2)如果CNT是L,将当前块与密钥的第一个字符的L个副本进行NXOR(异或非)运算,并将该L-比特的结果存储至CW中;如果不是,将当前块与密钥的下一个字符的L个副本进行NXOR运算,随后与CW进行AND运算,并将结果存储至CW;
(3)如果这是密钥中的最后一个字符,且新的CW不是0,则就找到了匹配;如果不是,则进入第四步;
(4)如果PW和CW都是0,则将{CW,NW}向右移CNT个比特,然后将NW复制至PW,设置CNT为L并移动至下一个块并进行至步骤2以进行进一步的检查;
(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,则将{CW,NW}向右移CNT个比特,然后将NW复制至PW,将CNT设置成L并移动至下一个块并进行至步骤2以进行进一步的检查;
(6)如果PW不是0,或者CW不是0或1,则将{PW,CW,NW}向右移1个比特,并将CNT数减1;
(7)回到步骤2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110139546 CN102201948B (zh) | 2011-05-27 | 2011-05-27 | 用于网络入侵检测***的快速匹配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110139546 CN102201948B (zh) | 2011-05-27 | 2011-05-27 | 用于网络入侵检测***的快速匹配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102201948A true CN102201948A (zh) | 2011-09-28 |
CN102201948B CN102201948B (zh) | 2013-09-18 |
Family
ID=44662353
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110139546 Expired - Fee Related CN102201948B (zh) | 2011-05-27 | 2011-05-27 | 用于网络入侵检测***的快速匹配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102201948B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102457525A (zh) * | 2011-12-19 | 2012-05-16 | 河海大学 | 一种基于负荷的异常入侵检测方法及*** |
CN103607313A (zh) * | 2013-12-09 | 2014-02-26 | 深圳市双赢伟业科技股份有限公司 | 基于正则表达式的tcp报文匹配方法 |
CN103957131A (zh) * | 2014-04-11 | 2014-07-30 | 烽火通信科技股份有限公司 | 一种基于有限自动机的深度报文检测方法 |
CN109150871A (zh) * | 2018-08-14 | 2019-01-04 | 阿里巴巴集团控股有限公司 | 安全检测方法、装置、电子设备及计算机可读存储介质 |
CN110086801A (zh) * | 2019-04-24 | 2019-08-02 | 重庆第二师范学院 | 基于分数阶微积分数算法的网络入侵安全数据处理方法 |
CN111031073A (zh) * | 2020-01-03 | 2020-04-17 | 广东电网有限责任公司电力科学研究院 | 一种网络入侵检测***及方法 |
CN115225327A (zh) * | 2022-06-17 | 2022-10-21 | 北京启明星辰信息安全技术有限公司 | 一种基于fpga网卡的具有预匹配规则的入侵检测方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101453454A (zh) * | 2007-12-06 | 2009-06-10 | 英业达股份有限公司 | 网络攻击检测内部追踪方法 |
CN102045247A (zh) * | 2009-10-12 | 2011-05-04 | 曙光信息产业(北京)有限公司 | 基于Snort规则集的报文处理方法和装置 |
-
2011
- 2011-05-27 CN CN 201110139546 patent/CN102201948B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101453454A (zh) * | 2007-12-06 | 2009-06-10 | 英业达股份有限公司 | 网络攻击检测内部追踪方法 |
CN102045247A (zh) * | 2009-10-12 | 2011-05-04 | 曙光信息产业(北京)有限公司 | 基于Snort规则集的报文处理方法和装置 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102457525A (zh) * | 2011-12-19 | 2012-05-16 | 河海大学 | 一种基于负荷的异常入侵检测方法及*** |
CN103607313A (zh) * | 2013-12-09 | 2014-02-26 | 深圳市双赢伟业科技股份有限公司 | 基于正则表达式的tcp报文匹配方法 |
CN103607313B (zh) * | 2013-12-09 | 2017-04-19 | 深圳市双赢伟业科技股份有限公司 | 基于正则表达式的tcp报文匹配方法 |
CN103957131A (zh) * | 2014-04-11 | 2014-07-30 | 烽火通信科技股份有限公司 | 一种基于有限自动机的深度报文检测方法 |
CN103957131B (zh) * | 2014-04-11 | 2017-04-12 | 烽火通信科技股份有限公司 | 一种基于有限自动机的深度报文检测方法 |
CN109150871A (zh) * | 2018-08-14 | 2019-01-04 | 阿里巴巴集团控股有限公司 | 安全检测方法、装置、电子设备及计算机可读存储介质 |
CN109150871B (zh) * | 2018-08-14 | 2021-02-19 | 创新先进技术有限公司 | 安全检测方法、装置、电子设备及计算机可读存储介质 |
CN110086801A (zh) * | 2019-04-24 | 2019-08-02 | 重庆第二师范学院 | 基于分数阶微积分数算法的网络入侵安全数据处理方法 |
CN111031073A (zh) * | 2020-01-03 | 2020-04-17 | 广东电网有限责任公司电力科学研究院 | 一种网络入侵检测***及方法 |
CN115225327A (zh) * | 2022-06-17 | 2022-10-21 | 北京启明星辰信息安全技术有限公司 | 一种基于fpga网卡的具有预匹配规则的入侵检测方法 |
CN115225327B (zh) * | 2022-06-17 | 2023-10-27 | 北京启明星辰信息安全技术有限公司 | 一种基于fpga网卡的具有预匹配规则的入侵检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102201948B (zh) | 2013-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102201948B (zh) | 用于网络入侵检测***的快速匹配方法 | |
Wang et al. | Hyperscan: A fast multi-pattern regex matcher for modern {CPUs} | |
US9305116B2 (en) | Dual DFA decomposition for large scale regular expression matching | |
KR101615915B1 (ko) | 어드밴스드 피처를 갖는 정규 표현식 패턴에 대한 비결정성 유한 오토마톤 (nfa) 생성 | |
Dharmapurikar et al. | Fast and scalable pattern matching for content filtering | |
US9203805B2 (en) | Reverse NFA generation and processing | |
US7949683B2 (en) | Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph | |
US8180803B2 (en) | Deterministic finite automata (DFA) graph compression | |
Tong et al. | Sketch acceleration on FPGA and its applications in network anomaly detection | |
US9015102B2 (en) | Match engine for detection of multi-pattern rules | |
Le et al. | A memory-efficient and modular approach for large-scale string pattern matching | |
Dharmapurikar et al. | Design and implementation of a string matching system for network intrusion detection using FPGA-based bloom filters | |
Najam et al. | Speculative parallel pattern matching using stride-k DFA for deep packet inspection | |
Rasool et al. | A novel JSON based regular expression language for pattern matching in the internet of things | |
Liu et al. | An overlay automata approach to regular expression matching | |
Ho et al. | PERG: A scalable FPGA-based pattern-matching engine with consolidated bloomier filters | |
Hnaif et al. | Multiprocessing scalable string matching algorithm for network intrusion detection system | |
Erbacher et al. | Extending case-based reasoning to network alert reporting | |
Tseng et al. | A fast scalable automaton-matching accelerator for embedded content processors | |
Lin et al. | A platform-based SoC design and implementation of scalable automaton matching for deep packet inspection | |
Soewito et al. | Hybrid pattern matching for trusted intrusion detection | |
Wang et al. | Hardware accelerator to detect multi-segment virus patterns | |
Xu et al. | Exploring efficient nfa data structures to accelerate dfa generation | |
Kumar et al. | Efficient regular expression pattern matching for network intrusion detection systems using modified word-based automata | |
CN117708878B (zh) | 基于oram带隐私保护功能的版权信息可信检索方法 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130918 Termination date: 20140527 |