一种数据包过滤规则集处理方法及数据包匹配方法

文档序号:9600821阅读:1706来源:国知局
一种数据包过滤规则集处理方法及数据包匹配方法
【技术领域】
[0001]本发明涉及网络安全技术领域,具体涉及一种数据包过滤规则集处理方法及数据包匹配方法。
【背景技术】
[0002]随着针对应用层的网络攻击日益增多,传统网络防火墙已不能满足需求。因此产生了入侵检测系统(Intrus1n Detect1n System,简称IDS),该系统由一个专用硬件平台和在其上运行的软件构成。IDS可以监控网络或系统活动,检测是否存在恶意活动或违法规则的行为,如果检出则会向管理单元提交报告。
[0003]基于网络的IDS (Network-based IDS,简称NIDS)—般被部署在一个监控结点上,网络上不同设备产生的输入和输出流量都会经过此监控结点。NIDS通常将经过它的流量与已知攻击库进行匹配,以实现对整个子网产生的流量进行监控。一旦鉴别出攻击或异常行为,相应的警报就会被发送给管理员。
[0004]深度包检测(Depth Packet Inspect1n,简称DPI)是NIDS的核心技术。DPI技术可以对OSI模型中2-7层的数据包进行检测,尤其是对数据包中所包含的数据体的检测。在传统DPI系统中,已知攻击库通常被称为过滤规则集(以下简称规则集),它由许多条过滤规则(以下简称规则)构成。一条规则描述了一类恶意数据包的特征。任何经过NIDS的数据包都被视为一个字符串,并与规则集中的每一条规则进行匹配,若匹配成功则认为该数据包有害。
[0005]在传统DPI技术中,过滤规则都是纯文本形式的。一条文本形式的过滤规则为一个字符串,表示一类有害数据包所转换成的字符串中一定会包含的子串。然而,由于有害数据包种类的急剧增加以及大量变种的产生,这种纯文本形式的过滤规则已经不能适应新的网络环境。
[0006]在这种形式下,出现了正则表达式(Regular Express1n,简称RegExp)形式的过滤规则,即一条规则就是一个正则表达式。大多数新型NIDS的DPI技术均支持这类规则。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。若规则的正则表达式与数据包匹配成功,则意味着该规则有害。该由于正则表达式的灵活性、兼容性和通用性,正在逐渐成为主流的匹配规则形式。
[0007]为了便于在NIDS硬件平台上实现高速正则表达式匹配算法,通常的做法是将正则表达式编译为确定性有限自动机(Definite Finite Automaton,简称DFA)。一条正则表达式编译得到的DFA若接受一个数据包字符串,就代表该正则表达式与数据包匹配成功。尽管利用DFA技术可以在极短时间内完成数据包与正则表达式的匹配,但随着规则集规模的不断增长,对全部DFA逐一进行匹配的方式仍然严重地降低了 NIDS的性能。
[0008]为了解决DFA数量过多的问题,可以利用DFA本身的特性将多个DFA合并为一个DFA。合并后的DFA能够接受合并前所有DFA能接受的字符串,并可以通过匹配的终态确定是合并前的哪一个DFA与字符串匹配。
[0009]由于DFA合并技术的原理,当具有一些特定的结构的两个或多个DFA进行合并时会发生“状态爆炸”现象,即合并后的DFA状态数呈几何级数增长,占用大量的存储空间。因此在存储空间有限的约束下,无法将一个规则集编译得到的所有DFA合并为一个DFA,因此产生了基于分组DFA的数据包过滤技术。基于分组DFA的数据包过滤技术是先对众多DFA分组,再将每个分组内的DFA合并为一个DFA。
[0010]基于分组DFA的数据包过滤技术含有两个阶段,第一阶段称数据包过滤规则集处理阶段,第二阶段称为数据包匹配阶段。
[0011 ] 第一阶段分为三个步骤:I)将规则集中的每一条规则都编译为一个DFA,形成DFA列表,并从每个DFA中提取出一个或多个指纹。指纹是一个长度为m的字符串,m为预先设定的正整数。从一个DFA中提取出的指纹表示能够与该DFA匹配上的所有数据包中都一定会含有的子串;2)对DFA列表中的DFA进行分组,并将分为一组的DFA合并为一个“分组DFA”。分为一组的DFA都含有的一个多或个指纹构成分组DFA的指纹列表;3)从每个分组DFA的指纹列表中选出一个指纹作为该分组DFA的代表指纹,并以代表指纹为索引将所有分组DFA存入哈希表。这个哈希表称为指纹哈希表。
传统的基于分组DFA的数据包过滤规则集处理方法包括如下步骤:
步骤1:将给定规则集中的每一条规则分别编译为一个DFA。具体采用通用的正则表达式编译算法进行编译。
[0012]步骤2:将DFA转换为控制流图,然后通过状态节点之间的支配关系在每一个DFA中查找必经路径,并从其必经路径中提取出所有指定长度的指纹,作为该DFA的指纹集合。
[0013]步骤3:将满足:1)具有共同指纹,2)合并后的DFA状态个数不超过设定阈值的DFA分为一组。每个分组内的所有DFA的指纹集合的交集作为该分组的指纹集合。
[0014]步骤4:对各DFA分组进行合并。具体是指:采用通用的DFA合并算法将每个DAF分组内所有DFA合并为一个DFA,并在合并后的DFA的终态上进行标记,以标明该终态是来自于哪个或哪几个合并前的DFA。合并后的DFA的指纹集合即为合并前的DAF分组的指纹
口 O
[0015]步骤5:设定哈希函数,并建立哈希表。具体是指:从每个合并后的DFA的指纹集合中任意挑选出一个指纹作为该合并后的DFA的代表指纹。通过哈希函数将该代表指纹映射为一个整数,该整数即为代表指纹将要存入的哈希表中哈希槽的编号。
[0016]第二阶段分为三个步骤:1)从收到的数据包中抽取出所有长度为m的字符串;2)在指纹哈希表中查询该数据包中抽取出的每一个字符串,找到的每一个指纹所对应的所有DFA都作为候选DFA ;3)将该数据包与所有候选DFA进行精确匹配。
[0017]传统的基于分组DFA的数据包匹配方法包括以下步骤:
步骤1:NIDS收到一个网络数据包;
步骤2:从数据包的第一个字符开始向后截取一个子串,截取长度等于系统预设的指纹长度;
步骤3:将该子串视为一个指纹,并用哈希函数将此指纹映射为一个整数,该整数为待查找的哈希槽的编号;
步骤4:在步骤3确定的哈希槽内查找是否存在所述指纹,是则执行步骤7 ;否则执行步骤5 ; 步骤5:如果当前截取出的子串已经是数据包最后的一个子串,则认为该数据包无害,否则执行步骤6 ;
步骤6:从当前截取位置的下一个字符开始向后截出同样长度的子串,返回步骤3 ; 步骤7:将数据包与查找到的指纹所对应的DFA进行匹配;
步骤8:若匹配成功,认为有害;否则执行步骤5 ;
步骤9:上报该数据包以及匹配上的规则。
[0018]上述传统的数据包过滤规则集处理方法及数据包匹配方法存在如下问题:(I)在DFA的合并中考虑DFA共同指纹的问题使合并后的DFA数量大幅增加,一个数据包可能会根据指纹命中两个或以上的DFA,因此导致匹配性能降低。(2) DFA数量的增加也会占用更多的存储空间。

【发明内容】

[0019]为了解决现有技术中存在的问题,本发明提供一种数据包过滤规则集处理方法及数据包匹配方法。本发明对于给定的过滤规则集,在DFA最大状态数的限制下生成尽可能少的DFA分组,以加快数据包的匹配速度,并减少存储空间。同时,本发明还解决在保证DFA得到压缩的同时,不影响匹配性能的问题。
[0020]为了实现上述目的,本发明采用如下技术方案予以解决:
一种数据包过滤规则集处理方法,包括如下步骤:
步骤101,将规则集中的每一条规则分别编译为一个确定性有限自动机DFA,形成DFA列表;在DFA列表中的每一个DFA中提取出所有指定长度的指纹,作为该DFA的指纹集合;步骤102,对DFA列表中所有的DFA进行公共指纹数量优先分组及合并;得到多个分组、每个分组合并后的DFA以及合并后的DFA的指纹集合;
步骤103,构造一级指纹哈希表;具体是指:从每个步骤102得到的合并后的DFA的指纹集合中,任意挑选出一个指纹作为该合并后的DFA的代表指纹;将该代表指纹映射为一个整数,该整数即为代表指纹将要存入的一级指纹哈希表中哈希槽的编号;
步骤104,对于步骤102得到的每个分组,分别找出构成该分组的DFA所拥有的一个或多个指纹,作为该分组的二级指纹存入二级指纹哈希表。
[0021]进一步的,所述步骤101中的将规则集中的每一条规则分别编译为一个DFA是采用正则表达式编译算法进行的编译。
[0022]进一步的,所述步骤102中的公共指纹数量优先分组及合并的流程包括如下步骤:
步骤301:构造一个DFA列表一,将未分组的所有DFA存入此列表中;
步骤302:判断DFA列表一中是否为空;是则执行步骤310 ;否则执行步骤303 ;
步骤303:构造一个分组,并在DFA列表一中取出一个拥有最多指纹的DFA放入该分组;若DFA列表I中这样的DFA有多个,则任意取一个放入该分组;该分组中DFA的指纹集合作为该分组的指纹集合;
步骤304:构造一个DFA列表二 ;具体是:对DFA列表一中每一个未取出的DFA,统计其指纹集合中与步骤303得到的分组的指纹集合中相同的指纹的数量,并按此数量以从多到少的顺序对这些DFA排序后复制到DFA列表二中;与步骤303得到的分组没有相同指纹的DFA不存入DFA列表二 ;
步骤305:判断DFA列表二是否为空,是则执行步骤306,否则执行步骤307 ;
步骤306,记录当前的分组,执行步骤302 ;
步骤307:取出DFA列表二的第一个D
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1