CN105357177A - 一种数据包过滤规则集处理方法及数据包匹配方法 - Google Patents
一种数据包过滤规则集处理方法及数据包匹配方法 Download PDFInfo
- Publication number
- CN105357177A CN105357177A CN201510630235.3A CN201510630235A CN105357177A CN 105357177 A CN105357177 A CN 105357177A CN 201510630235 A CN201510630235 A CN 201510630235A CN 105357177 A CN105357177 A CN 105357177A
- Authority
- CN
- China
- Prior art keywords
- dfa
- fingerprint
- list
- packet
- grouping
- 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.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
- H04L63/0263—Rule management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种数据包过滤规则集处理方法,步骤一,构造DFA列表及指纹集合;步骤二,进行公共指纹数量优先分组及合并;步骤三,构造一级指纹哈希表;步骤四,构造二级指纹哈希表;本发明还公开了一种数据包匹配方法,步骤一,初始化流程;步骤二,数据包匹配预处理;步骤三,抽取字符串;步骤四,第一分组编号列表;步骤五,第二分组编号列表;步骤六,对第一分组编号列表和第二分组编号列表求交集;步骤七,匹配。本发明对于给定的过滤规则集,在DFA最大状态数的限制下生成尽可能少的DFA分组,以加快数据包的匹配速度,并减少存储空间。同时,本发明还解决在保证DFA得到压缩的同时,不影响匹配性能的问题。
Description
技术领域
本发明涉及网络安全技术领域,具体涉及一种数据包过滤规则集处理方法及数据包匹配方法。
背景技术
随着针对应用层的网络攻击日益增多,传统网络防火墙已不能满足需求。因此产生了入侵检测系统(IntrusionDetectionSystem,简称IDS),该系统由一个专用硬件平台和在其上运行的软件构成。IDS可以监控网络或系统活动,检测是否存在恶意活动或违法规则的行为,如果检出则会向管理单元提交报告。
基于网络的IDS(Network-basedIDS,简称NIDS)一般被部署在一个监控结点上,网络上不同设备产生的输入和输出流量都会经过此监控结点。NIDS通常将经过它的流量与已知攻击库进行匹配,以实现对整个子网产生的流量进行监控。一旦鉴别出攻击或异常行为,相应的警报就会被发送给管理员。
深度包检测(DepthPacketInspection,简称DPI)是NIDS的核心技术。DPI技术可以对OSI模型中2-7层的数据包进行检测,尤其是对数据包中所包含的数据体的检测。在传统DPI系统中,已知攻击库通常被称为过滤规则集(以下简称规则集),它由许多条过滤规则(以下简称规则)构成。一条规则描述了一类恶意数据包的特征。任何经过NIDS的数据包都被视为一个字符串,并与规则集中的每一条规则进行匹配,若匹配成功则认为该数据包有害。
在传统DPI技术中,过滤规则都是纯文本形式的。一条文本形式的过滤规则为一个字符串,表示一类有害数据包所转换成的字符串中一定会包含的子串。然而,由于有害数据包种类的急剧增加以及大量变种的产生,这种纯文本形式的过滤规则已经不能适应新的网络环境。
在这种形式下,出现了正则表达式(RegularExpression,简称RegExp)形式的过滤规则,即一条规则就是一个正则表达式。大多数新型NIDS的DPI技术均支持这类规则。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。若规则的正则表达式与数据包匹配成功,则意味着该规则有害。该由于正则表达式的灵活性、兼容性和通用性,正在逐渐成为主流的匹配规则形式。
为了便于在NIDS硬件平台上实现高速正则表达式匹配算法,通常的做法是将正则表达式编译为确定性有限自动机(DefiniteFiniteAutomaton,简称DFA)。一条正则表达式编译得到的DFA若接受一个数据包字符串,就代表该正则表达式与数据包匹配成功。尽管利用DFA技术可以在极短时间内完成数据包与正则表达式的匹配,但随着规则集规模的不断增长,对全部DFA逐一进行匹配的方式仍然严重地降低了NIDS的性能。
为了解决DFA数量过多的问题,可以利用DFA本身的特性将多个DFA合并为一个DFA。合并后的DFA能够接受合并前所有DFA能接受的字符串,并可以通过匹配的终态确定是合并前的哪一个DFA与字符串匹配。
由于DFA合并技术的原理,当具有一些特定的结构的两个或多个DFA进行合并时会发生“状态爆炸”现象,即合并后的DFA状态数呈几何级数增长,占用大量的存储空间。因此在存储空间有限的约束下,无法将一个规则集编译得到的所有DFA合并为一个DFA,因此产生了基于分组DFA的数据包过滤技术。基于分组DFA的数据包过滤技术是先对众多DFA分组,再将每个分组内的DFA合并为一个DFA。
基于分组DFA的数据包过滤技术含有两个阶段,第一阶段称数据包过滤规则集处理阶段,第二阶段称为数据包匹配阶段。
第一阶段分为三个步骤:1)将规则集中的每一条规则都编译为一个DFA,形成DFA列表,并从每个DFA中提取出一个或多个指纹。指纹是一个长度为m的字符串,m为预先设定的正整数。从一个DFA中提取出的指纹表示能够与该DFA匹配上的所有数据包中都一定会含有的子串;2)对DFA列表中的DFA进行分组,并将分为一组的DFA合并为一个“分组DFA”。分为一组的DFA都含有的一个多或个指纹构成分组DFA的指纹列表;3)从每个分组DFA的指纹列表中选出一个指纹作为该分组DFA的代表指纹,并以代表指纹为索引将所有分组DFA存入哈希表。这个哈希表称为指纹哈希表。
传统的基于分组DFA的数据包过滤规则集处理方法包括如下步骤:
步骤1:将给定规则集中的每一条规则分别编译为一个DFA。具体采用通用的正则表达式编译算法进行编译。
步骤2:将DFA转换为控制流图,然后通过状态节点之间的支配关系在每一个DFA中查找必经路径,并从其必经路径中提取出所有指定长度的指纹,作为该DFA的指纹集合。
步骤3:将满足:1)具有共同指纹,2)合并后的DFA状态个数不超过设定阈值的DFA分为一组。每个分组内的所有DFA的指纹集合的交集作为该分组的指纹集合。
步骤4:对各DFA分组进行合并。具体是指:采用通用的DFA合并算法将每个DAF分组内所有DFA合并为一个DFA,并在合并后的DFA的终态上进行标记,以标明该终态是来自于哪个或哪几个合并前的DFA。合并后的DFA的指纹集合即为合并前的DAF分组的指纹集合。
步骤5:设定哈希函数,并建立哈希表。具体是指:从每个合并后的DFA的指纹集合中任意挑选出一个指纹作为该合并后的DFA的代表指纹。通过哈希函数将该代表指纹映射为一个整数,该整数即为代表指纹将要存入的哈希表中哈希槽的编号。
第二阶段分为三个步骤:1)从收到的数据包中抽取出所有长度为m的字符串;2)在指纹哈希表中查询该数据包中抽取出的每一个字符串,找到的每一个指纹所对应的所有DFA都作为候选DFA;3)将该数据包与所有候选DFA进行精确匹配。
传统的基于分组DFA的数据包匹配方法包括以下步骤:
步骤1:NIDS收到一个网络数据包;
步骤2:从数据包的第一个字符开始向后截取一个子串,截取长度等于系统预设的指纹长度;
步骤3:将该子串视为一个指纹,并用哈希函数将此指纹映射为一个整数,该整数为待查找的哈希槽的编号;
步骤4:在步骤3确定的哈希槽内查找是否存在所述指纹,是则执行步骤7;否则执行步骤5;
步骤5:如果当前截取出的子串已经是数据包最后的一个子串,则认为该数据包无害,否则执行步骤6;
步骤6:从当前截取位置的下一个字符开始向后截出同样长度的子串,返回步骤3;
步骤7:将数据包与查找到的指纹所对应的DFA进行匹配;
步骤8:若匹配成功,认为有害;否则执行步骤5;
步骤9:上报该数据包以及匹配上的规则。
上述传统的数据包过滤规则集处理方法及数据包匹配方法存在如下问题:(1)在DFA的合并中考虑DFA共同指纹的问题使合并后的DFA数量大幅增加,一个数据包可能会根据指纹命中两个或以上的DFA,因此导致匹配性能降低。(2)DFA数量的增加也会占用更多的存储空间。
发明内容
为了解决现有技术中存在的问题,本发明提供一种数据包过滤规则集处理方法及数据包匹配方法。本发明对于给定的过滤规则集,在DFA最大状态数的限制下生成尽可能少的DFA分组,以加快数据包的匹配速度,并减少存储空间。同时,本发明还解决在保证DFA得到压缩的同时,不影响匹配性能的问题。
为了实现上述目的,本发明采用如下技术方案予以解决:
一种数据包过滤规则集处理方法,包括如下步骤:
步骤101,将规则集中的每一条规则分别编译为一个确定性有限自动机DFA,形成DFA列表;在DFA列表中的每一个DFA中提取出所有指定长度的指纹,作为该DFA的指纹集合;
步骤102,对DFA列表中所有的DFA进行公共指纹数量优先分组及合并;得到多个分组、每个分组合并后的DFA以及合并后的DFA的指纹集合;
步骤103,构造一级指纹哈希表;具体是指:从每个步骤102得到的合并后的DFA的指纹集合中,任意挑选出一个指纹作为该合并后的DFA的代表指纹;将该代表指纹映射为一个整数,该整数即为代表指纹将要存入的一级指纹哈希表中哈希槽的编号;
步骤104,对于步骤102得到的每个分组,分别找出构成该分组的DFA所拥有的一个或多个指纹,作为该分组的二级指纹存入二级指纹哈希表。
进一步的,所述步骤101中的将规则集中的每一条规则分别编译为一个DFA是采用正则表达式编译算法进行的编译。
进一步的,所述步骤102中的公共指纹数量优先分组及合并的流程包括如下步骤:
步骤301:构造一个DFA列表一,将未分组的所有DFA存入此列表中;
步骤302:判断DFA列表一中是否为空;是则执行步骤310;否则执行步骤303;
步骤303:构造一个分组,并在DFA列表一中取出一个拥有最多指纹的DFA放入该分组;若DFA列表1中这样的DFA有多个,则任意取一个放入该分组;该分组中DFA的指纹集合作为该分组的指纹集合;
步骤304:构造一个DFA列表二;具体是:对DFA列表一中每一个未取出的DFA,统计其指纹集合中与步骤303得到的分组的指纹集合中相同的指纹的数量,并按此数量以从多到少的顺序对这些DFA排序后复制到DFA列表二中;与步骤303得到的分组没有相同指纹的DFA不存入DFA列表二;
步骤305:判断DFA列表二是否为空,是则执行步骤306,否则执行步骤307;
步骤306,记录当前的分组,执行步骤302;
步骤307:取出DFA列表二的第一个DFA,与步骤303得到的分组内所有的DFA合并得到合并后的DFA,同时,将该DFA的指纹集合与步骤303得到的分组的指纹集合求交集,得到合并后的DFA的指纹集合;
步骤308:判断是否同时满足以下两个条件:(1)步骤307得到的合并后的DFA的指纹数量大于设定阈值;(2)合并后的DFA的状态数小于设定阈值;同时满足则执行步骤309;否则,将步骤307取出的DFA从DFA列表二中删除,执行步骤305;
步骤309:将步骤307取出的DFA加入步骤303得到的分组中;同时,将该DFA的指纹集合与步骤303得到的分组的指纹集合求交集,得到该分组的指纹集合;执行步骤305;
步骤310:对于得到的每个分组,将该分组内所有DFA合并为一个DFA;同时,合并后的DFA的指纹集合即为该分组的指纹集合。
通过上述流程,得到多个分组。
进一步的,所述步骤310所得到的所有分组构造二级指纹哈希表流程,包括如下步骤:
步骤401:构造一个分组列表,将步骤310得到的多个分组全部存入分组列表;
步骤402:从分组列表中取出第一个分组,将该分组中的所有DFA存放入一个DFA列表;
步骤403:根据当前的DFA列表中的所有DFA及其指纹集合,查找共享数最多的指纹作为二级指纹,通过哈希函数将二级指纹映射为一个整数,该整数即为二级指纹将要存入的二级指纹哈希表中哈希槽的编号;
步骤404:将拥有所述二级指纹的DFA从DFA列表中删除;
步骤405:对DFA列表进行判断,如果DFA列表不为空,是则转到步骤403,否则转到步骤406;
步骤406:判断分组列表是否为空,是则结束;否则执行步骤402。
进一步的,所述步骤403中查找共享数最多的指纹的流程包括如下步骤:
步骤501:构造一个指纹列表,将DFA列表中每个DFA的指纹集合中的所有指纹都存入此指纹列表;
步骤502:统计所述指纹列表中每个指纹被DFA列表中多少个DFA所拥有,将统计得到的DFA个数作为对应指纹的共享数;
步骤503:选出共享数最多的指纹,如果有多个指纹的共享数相同,则任选一个。
除此以外,本发明还涉及一种数据包匹配方法,包括如下步骤:
步骤201:初始化流程;具体是:构造并初始化数据包计数器、指纹计数表、第一分组编号列表和第二分组编号列表;
步骤202,数据包匹配预处理;具体是:收到一个数据包后,根据当前数据包计数器的值,对数据包计数器的值以及指纹计数表进行更新;并清空第一分组编号列表和第二分组编号列表;
还包括数据包实际匹配流程,该数据包实际匹配流程具体包括如下步骤:
步骤203,从收到的数据包中抽取出所有长度等于指纹长度的字符串;
步骤204,在一级指纹哈希表中查询该数据包中抽取出的每个字符串,根据该字符串找到分组的编号;并将该分组编号存入第一分组编号列表;
步骤205,在二级指纹哈希表中查询该数据包中抽取出的每个字符串,根据该字符串找到分组的编号;并将该分组编号存入第二分组编号列表;
步骤206,对第一分组编号列表和第二分组编号列表求交集;
步骤207,将数据包与所述交集中所有确定性有限自动机DFA进行逐一匹配,如果匹配,认为有害;否则认为无害。
进一步的,所述步骤201的初始化流程包括如下步骤:构造数据包计数器、指纹计数表、第一分组编号列表和第二分组编号列表;指纹计数表的表项个数等于DFA列表中所有DFA的指纹集合的并集的指纹个数;将数据包计数器、指纹计数表均置0。
进一步的,所述步骤202的数据包匹配预处理流程包括如下步骤:
步骤601:收到一个数据包;
步骤602:判断数据包计数器的值是否等于255;是则执行步骤603;否则执行步骤604;
步骤603:将数据包计数器的值和指纹计数表全部置0;
步骤604:将数据包计数器的值加1;并将第一分组编号列表和第二分组编号列表清空。
进一步的,还包括数据包实际匹配流程,该数据包实际匹配流程具体包括如下步骤:
步骤701:从数据包的第一个字符开始向后截取出一个子串,截取长度等于指纹长度;
步骤702:将该子串视为一个指纹,并用哈希函数将此指纹映射为一个整数,在一级指纹哈希表中查找该整数;
步骤703:判断步骤702是否在一级指纹哈希表中指到所述整数,是则执行步骤704;否则执行步骤705;
步骤704:将该整数在一级指纹哈希表中所对应代表指纹的分组号存入第一分组编号列表;执行步骤708;
步骤705:在二级指纹哈希表中查找所述整数,获得一个或者未获得合并后的DFA;
步骤706:判断步骤705是否获得一个合并后的DFA,如果获得,执行步骤707;否则执行步骤708;
步骤707:将获得的合并后的DFA对应的分组号存入第二分组编号列表;
步骤708:如果当前截取出的子串已经是数据包最后的一个子串,则执行步骤710;否则执行步骤709;
步骤709:从当前截取位置的下一个字符开始向后截出同样长度的子串,返回步骤702;
步骤710:对第一分组编号列表和第二分组编号列表求交集;
步骤711:将数据包与所述交集中所有DFA进行逐一匹配,如果匹配,认为有害;否则认为无害。
进一步的,所述步骤705的在二级指纹哈希表中查找所述整数,获得一个或者未获得合并后的DFA的流程如下:
步骤7051:在二级指纹哈希表中查找所述整数;
步骤7052:判断步骤7051是否找到,是则执行步骤7053;否则认为未获得合并后的DFA,结束;
步骤7053:判断当前数据包计数器的值是否大于该整数在二级指纹哈希表中对应的二级指纹对应的指纹计数表中的值,是则执行步骤7054;否则认为未获得合并后的DFA,结束;
步骤7054:令该整数在二级指纹哈希表中对应的二级指纹对应的指纹计数表中的值等于当前数据包计数器的值,并认为获得合并后的DFA即为该整数在二级指纹哈希表中对应的二级指纹所对应的合并后的DFA,结束。
与现有技术相比,本发明的有益效果在于能够以更短的时间完成数据包的匹配。主要体现在以下几个方面:数据包过滤规则集处理方法的步骤四构造了一个二级指纹哈希表,使得一个分组可以由一个或多个二级指纹代表;数据包匹配方法的步骤五,会在二级指纹哈希表中查找数据包中提取出的字符串,并确定该数据包是否包含了某个合并后的DFA的二级指纹;数据包匹配方法的步骤六和步骤七使得只有那些不仅代表指纹出现在数据包中,并且有二级指纹出现在数据包中的合并后的DFA,才与数据包进行匹配,减少了与数据包匹配的DFA个数,从而提高了匹配效率。
附图说明
图1为本发明一种数据包过滤规则集处理方法流程图;
图2为本发明一种数据包匹配方法流程图;
图3为本发明一种数据包过滤规则集处理方法中公共指纹数量优先分组及合并流程图;
图4为本发明一种数据包过滤规则集处理方法中构造二级指纹列表流程图;
图5为本发明一种数据包过滤规则集处理方法中查找共享数最多的指纹流程图;
图6为本发明一种数据包匹配方法中数据包预处理流程图;
图7为本发明一种数据包匹配方法中数据包匹配流程图;
图8为本发明一种数据包匹配方法中二级指纹哈希查找流程图。
具体实施方式
本发明提供了一种数据包过滤规则集处理方法以及一种数据包匹配方法,这两种方法相互匹配,数据包过滤规则集处理方法用于对将要发送的数据包进行过滤规则集处理,数据包匹配方法用于对接收到数据包进行规则匹配,如果匹配成功,则意味着该数据包有害。
如图1所示,本发明的一种数据包过滤规则集处理方法包括:
步骤101,将规则集中的每一条规则分别编译为一个DFA,形成DFA列表;具体采用通用的正则表达式编译算法进行编译。在DFA列表中的每一个DFA中提取出所有指定长度(在一种具体实施方式中指定长度为4)的指纹,作为该DFA的指纹集合。
步骤102,对DFA列表中所有的DFA进行公共指纹数量优先分组及合并;得到多个分组、每个分组合并后的DFA以及合并后的DFA的指纹集合。具体的公共指纹数量优先分组及合并的流程见图3。
步骤103,构造一级指纹哈希表。具体是:设定哈希函数,并建立哈希表。具体是指:从每个步骤102得到的合并后的DFA的指纹集合中,任意挑选出一个指纹作为该合并后的DFA的代表指纹。通过哈希函数将该代表指纹映射为一个整数,该整数即为代表指纹将要存入的一级指纹哈希表中哈希槽的编号。
步骤104,对于步骤102得到的每个分组,分别找出构成该分组的DFA所拥有的一个或多个指纹,作为该分组的二级指纹存入二级指纹哈希表。
如图3所示,一种数据包过滤规则集处理方法中步骤102中的公共指纹数量优先分组及合并流程包括如下步骤:
步骤301:构造一个DFA列表1,将未分组的所有DFA存入此列表中;
步骤302:判断DFA列表1中是否为空;是则执行步骤310;否则执行步骤303;
步骤303:构造一个分组,并在DFA列表1中取出一个拥有最多指纹的DFA放入该分组;若DFA列表1中这样的DFA有多个,则任意取一个放入该分组;该分组中DFA的指纹集合作为该分组的指纹集合;
步骤304:构造一个DFA列表2;对DFA列表1中每一个未取出的DFA,统计其指纹集合中与步骤303得到的分组的指纹集合中相同的指纹的数量,并按此数量以从多到少的顺序对这些DFA排序后复制到DFA列表2中;与步骤303得到的分组没有相同指纹的DFA不存入DFA列表2;
步骤305:判断DFA列表2是否为空,是则执行步骤306,否则执行步骤307;
步骤306:记录当前的分组,执行302;
步骤307:取出DFA列表2的第一个DFA,与步骤303得到的分组内所有的DFA合并得到合并后的DFA,同时,将该DFA的指纹集合与步骤303得到的分组的指纹集合求交集,得到合并后的DFA的指纹集合;
步骤308:判断是否同时满足以下两个条件:(1)步骤307得到的合并后的DFA的指纹数量大于设定阈值;(2)合并后的DFA的状态数小于设定阈值;同时满足则执行步骤309;否则,将步骤307取出的DFA从DFA列表2中删除,执行步骤305;
步骤309:将步骤307取出的DFA加入步骤303得到的分组中;同时,将该DFA的指纹集合与步骤303得到的分组的指纹集合求交集,得到该分组的指纹集合。执行步骤305;
步骤310:对于得到的每个分组,将该分组内所有DFA合并为一个DFA;同时,合并后的DFA的指纹集合即为该分组的指纹集合。
通过上述流程,得到多个分组。
如图4所示,一种数据包过滤规则集处理方法中对步骤310所得到的所有分组构造二级指纹哈希表流程,包括如下步骤:
步骤401:构造一个分组列表,将步骤310得到的所有分组全部存入分组列表;
步骤402:从分组列表中取出第一个分组,将该分组中的所有DFA存放入一个DFA列表;
步骤403:根据当前的DFA列表中的所有DFA及其指纹集合,查找共享数最多的指纹作为二级指纹,通过哈希函数将二级指纹映射为一个整数,该整数即为二级指纹将要存入的二级指纹哈希表中哈希槽的编号。查找共享数最多的指纹的流程见图5;
步骤404:将拥有所述二级指纹的DFA从DFA列表中删除;
步骤405:对DFA列表进行判断,如果DFA列表不为空,是则转到步骤403,否则转到步骤406。
406:判断分组列表是否为空,是则结束;否则执行步骤402。
如图5所示,一种数据包过滤规则集处理方法中步骤403中查找共享数最多的指纹的流程包括如下步骤:
步骤501:构造一个指纹列表,将DFA列表中每个DFA的指纹集合中的所有指纹都存入此指纹列表;
步骤502:统计所述指纹列表中每个指纹被DFA列表中多少个DFA所拥有,将统计得到的DFA个数作为对应指纹的共享数;
步骤503:选出共享数最多的指纹,如果有多个指纹的共享数相同,则任选一个。
如图2所示,本发明的一种数据包匹配方法包括:
步骤201:初始化流程。具体是:构造并初始化数据包计数器、指纹计数表、第一分组编号列表和第二分组编号列表。指纹计数表的表项个数等于步骤101中DFA列表中所有DFA的指纹集合的并集的指纹个数;将数据包计数器、指纹计数表均置0;
步骤202,数据包匹配预处理。具体是:收到一个数据包后,根据当前数据包计数器的值,对数据包计数器的值以及指纹计数表进行更新;并清空第一分组编号列表和第二分组编号列表,更为具体的数据包匹配预处理流程见图6;
以上是初始化流程以及预处理流程,初始化流程在预处理流程之前进行;预处理流程在数据包实际匹配流程之前进行;以下是数据包实际匹配流程的描述:
步骤203,从收到的数据包中抽取出所有长度等于指纹长度的字符串;
步骤204,在一级指纹哈希表中查询该数据包中抽取出的每个字符串,根据该字符串找到分组的编号;并将该分组编号存入第一分组编号列表;
步骤205,在二级指纹哈希表中查询该数据包中抽取出的每个字符串,根据该字符串找到分组的编号;并将该分组编号存入第二分组编号列表;
步骤206,对第一分组编号列表和第二分组编号列表求交集;
步骤207,将数据包与所述交集中所有DFA进行逐一匹配,如果匹配,认为有害;否则认为无害。
如图6所示,一种数据包匹配方法中数据包匹配预处理流程包括如下步骤:
步骤601:收到一个数据包;
步骤602:判断数据包计数器的值是否等于255;是则执行步骤603;否则执行步骤604;
步骤603:将数据包计数器的值和指纹计数表全部置0;
步骤604:将数据包计数器的值加1,并将第一分组编号列表和第二分组编号列表清空。
如图7所示,更为具体的数据包实际匹配流程包括如下步骤:
步骤701:从数据包的第一个字符开始向后截取出一个子串(字符串),截取长度等于指纹长度;
步骤702:将该子串视为一个指纹,并用哈希函数将此指纹映射为一个整数,在一级指纹哈希表中查找该整数;
步骤703:判断步骤702是否在一级指纹哈希表中指到所述整数,是则执行步骤704;否则执行步骤705;
步骤704:将该整数在一级指纹哈希表中所对应代表指纹的分组号存入第一分组编号列表;执行步骤708;
步骤705:在二级指纹哈希表中查找所述整数,获得一个或者未获得合并后的DFA,具体流程见图8;
步骤706:判断步骤705是否获得一个合并后的DFA,如果获得,执行步骤707;否则执行步骤708;
步骤707:将获得的合并后的DFA对应的分组号存入第二分组编号列表;
步骤708:如果当前截取出的子串已经是数据包最后的一个子串,则执行步骤710;否则执行步骤709;
步骤709:从当前截取位置的下一个字符开始向后截出同样长度的子串,返回步骤702;
步骤710:对第一分组编号列表和第二分组编号列表求交集;
步骤711:将数据包与所述交集中所有DFA进行逐一匹配,如果匹配,认为有害;否则认为无害。
如图8所示,所述步骤705的“在二级指纹哈希表中查找所述整数,获得一个或者未获得合并后的DFA”的流程如下:
步骤7051:在二级指纹哈希表中查找所述整数;
步骤7052:判断步骤7051是否找到,是则执行步骤7053;否则认为未获得合并后的DFA,结束;
步骤7053:判断当前数据包计数器的值是否大于该整数在二级指纹哈希表中对应的二级指纹对应的指纹计数表中的值,是则执行步骤7054;否则认为未获得合并后的DFA,结束;
步骤7054:令该整数在二级指纹哈希表中对应的二级指纹对应的指纹计数表中的值等于当前数据包计数器的值,并认为获得合并后的DFA即为该整数在二级指纹哈希表中对应的二级指纹所对应的合并后的DFA,结束。
在一种具体实施方式中,应用场景与背景技术中的应用场景相同,即在使用DPI技术对网络数据包进行过滤时,对规则集编译得到的DFA进行分组。在较少的分组上应用指纹哈希技术,使得过滤性能进一步提高。
以通用的Snort2.8规则集为例。Snort2.8规则集中,本发明支持的规则为3808条。利用本发明提供的一种数据包过滤规则集处理方法的步骤101,采用PCRE程序库提供的正则表达式编译算法将规则集中的每一条规则分别编译为一个DFA,形成DFA列表,该列表包含3808个DFA;然后对于DFA列表中的每一个DFA中提取出所有4字节长度的指纹,作为该DFA的指纹集合。
利用本发明提供的一种数据包过滤规则集处理方法的步骤102,对DFA列表中所有的DFA进行公共指纹数量优先分组及合并,最后得到1649个合并后的DFA。
利用本发明提供的一种数据包过滤规则集处理方法的步骤103和步骤104,分别构造一级指纹哈希表和二级指纹哈希表。两个哈希表的槽数均设定为15016个,哈希函数为:指纹字符串的ASCII编码构成一个32位整数,该整数除以15016的余数即为哈希函数的反回值。
根据上面得到的多个合并后的DFA,以及一级指纹哈希表和二级指纹哈希表,利用本发明提供的一种数据包匹配方法对随机抓取的网络数据包进行过滤。
首先进行初始化操作,构造并初始化数据包计数器、指纹计数表、第一分组编号列表和第二分组编号列表,然后逐条处理截获的所有数据包。
利用本发明提供的一种数据包匹配方法的步骤202对数据包进行预处理,并利用步骤203提取出数据包的中所有等于指纹长度的字符串。
利用本发明提供的一种数据包匹配方法的步骤204,通过查找一级指纹哈希表,确定该数据包是否含有某个合并后的DFA的代表指纹。
利用本发明提供的一种数据包匹配方法的步骤205,通过查找二级指纹哈希表以及本发明提供的一系列操作,确定该数据包是否含有某个合并后的DFA的二级指纹。
利用本发明提供的一种数据包匹配方法的步骤206和步骤207,筛选出那些不仅代表指纹出现在数据包中,并且至少有一个二级指纹也都出现在数据包中的合并后的DFA。然后将数据包与这些DFA进行匹配,以确定是否有害。
对随机抓取的网络数据包,对过滤和匹配的结果进行统计,得到如下结果:包含一级哈希表中指纹的数据包占全部数据包总数的67.44%,即若以传统方法进行过滤,67.44%的数据包都需要与DFA进行匹配。包含二级哈希表中的指纹的数据包占全部数据包总数的59.82%,利用本发明提供的数据包匹配方法,最终与DFA匹配的数据包个数仅占全部数据包总数的15.17%,远低于传统方案的匹配个数。
以上例举仅仅是对本发明的举例说明,并不构成对本发明的保护范围的限制,凡是与本发明相同或相似的设计均属于本发明的保护范围之内。
Claims (10)
1.一种数据包过滤规则集处理方法,其特征在于,包括如下步骤:
步骤101,将规则集中的每一条规则分别编译为一个确定性有限自动机DFA,形成DFA列表;在DFA列表中的每一个DFA中提取出所有指定长度的指纹,作为该DFA的指纹集合;
步骤102,对DFA列表中所有的DFA进行公共指纹数量优先分组及合并;得到多个分组、每个分组合并后的DFA以及合并后的DFA的指纹集合;
步骤103,构造一级指纹哈希表;具体是指:从每个步骤102得到的合并后的DFA的指纹集合中,任意挑选出一个指纹作为该合并后的DFA的代表指纹;将该代表指纹映射为一个整数,该整数即为代表指纹将要存入的一级指纹哈希表中哈希槽的编号;
步骤104,对于步骤102得到的每个分组,分别找出构成该分组的DFA所拥有的一个或多个指纹,作为该分组的二级指纹存入二级指纹哈希表。
2.如权利要求1所述的一种数据包过滤规则集处理方法,其特征在于,所述步骤101中的将规则集中的每一条规则分别编译为一个DFA是采用正则表达式编译算法进行的编译。
3.如权利要求1所述的一种数据包过滤规则集处理方法,其特征在于,所述步骤102中的公共指纹数量优先分组及合并的流程包括如下步骤:
步骤301:构造一个DFA列表一,将未分组的所有DFA存入此列表中;
步骤302:判断DFA列表一中是否为空;是则执行步骤310;否则执行步骤303;
步骤303:构造一个分组,并在DFA列表一中取出一个拥有最多指纹的DFA放入该分组;若DFA列表1中这样的DFA有多个,则任意取一个放入该分组;该分组中DFA的指纹集合作为该分组的指纹集合;
步骤304:构造一个DFA列表二;具体是:对DFA列表一中每一个未取出的DFA,统计其指纹集合中与步骤303得到的分组的指纹集合中相同的指纹的数量,并按此数量以从多到少的顺序对这些DFA排序后复制到DFA列表二中;与步骤303得到的分组没有相同指纹的DFA不存入DFA列表二;
步骤305:判断DFA列表二是否为空,是则执行步骤306,否则执行步骤307;
步骤306,记录当前的分组,执行步骤302;
步骤307:取出DFA列表二的第一个DFA,与步骤303得到的分组内所有的DFA合并得到合并后的DFA,同时,将该DFA的指纹集合与步骤303得到的分组的指纹集合求交集,得到合并后的DFA的指纹集合;
步骤308:判断是否同时满足以下两个条件:(1)步骤307得到的合并后的DFA的指纹数量大于设定阈值;(2)合并后的DFA的状态数小于设定阈值;同时满足则执行步骤309;否则,将步骤307取出的DFA从DFA列表二中删除,执行步骤305;
步骤309:将步骤307取出的DFA加入步骤303得到的分组中;同时,将该DFA的指纹集合与步骤303得到的分组的指纹集合求交集,得到该分组的指纹集合;执行步骤305;
步骤310:对于得到的每个分组,将该分组内所有DFA合并为一个DFA;同时,合并后的DFA的指纹集合即为该分组的指纹集合。
4.如权利要求3所述的一种数据包过滤规则集处理方法,其特征在于,所述步骤310所得到的所有分组构造二级指纹哈希表流程,包括如下步骤:
步骤401:构造一个分组列表,将步骤310得到的多个分组全部存入分组列表;
步骤402:从分组列表中取出第一个分组,将该分组中的所有DFA存放入一个DFA列表;
步骤403:根据当前的DFA列表中的所有DFA及其指纹集合,查找共享数最多的指纹作为二级指纹,通过哈希函数将二级指纹映射为一个整数,该整数即为二级指纹将要存入的二级指纹哈希表中哈希槽的编号;
步骤404:将拥有所述二级指纹的DFA从DFA列表中删除;
步骤405:对DFA列表进行判断,如果DFA列表不为空,是则转到步骤403,否则转到步骤406;
步骤406:判断分组列表是否为空,是则结束;否则执行步骤402。
5.如权利要求4所述的一种数据包过滤规则集处理方法,其特征在于,所述步骤403中查找共享数最多的指纹的流程包括如下步骤:
步骤501:构造一个指纹列表,将DFA列表中每个DFA的指纹集合中的所有指纹都存入此指纹列表;
步骤502:统计所述指纹列表中每个指纹被DFA列表中多少个DFA所拥有,将统计得到的DFA个数作为对应指纹的共享数;
步骤503:选出共享数最多的指纹,如果有多个指纹的共享数相同,则任选一个。
6.一种数据包匹配方法,包括如下步骤:
步骤201:初始化流程;具体是:构造并初始化数据包计数器、指纹计数表、第一分组编号列表和第二分组编号列表;
步骤202,数据包匹配预处理;具体是:收到一个数据包后,根据当前数据包计数器的值,对数据包计数器的值以及指纹计数表进行更新;并清空第一分组编号列表和第二分组编号列表;
其特征在于,还包括数据包实际匹配流程,该数据包实际匹配流程具体包括如下步骤:
步骤203,从收到的数据包中抽取出所有长度等于指纹长度的字符串;
步骤204,在一级指纹哈希表中查询该数据包中抽取出的每个字符串,根据该字符串找到分组的编号;并将该分组编号存入第一分组编号列表;
步骤205,在二级指纹哈希表中查询该数据包中抽取出的每个字符串,根据该字符串找到分组的编号;并将该分组编号存入第二分组编号列表;
步骤206,对第一分组编号列表和第二分组编号列表求交集;
步骤207,将数据包与所述交集中所有确定性有限自动机DFA进行逐一匹配,如果匹配,认为有害;否则认为无害。
7.如权利要求6所述的一种数据包匹配流程,其特征在于,所述步骤201的初始化流程包括如下步骤:构造数据包计数器、指纹计数表、第一分组编号列表和第二分组编号列表;指纹计数表的表项个数等于DFA列表中所有DFA的指纹集合的并集的指纹个数;将数据包计数器、指纹计数表均置0。
8.如权利要求6所述的一种数据包匹配流程,其特征在于,所述步骤202的数据包匹配预处理流程包括如下步骤:
步骤601:收到一个数据包;
步骤602:判断数据包计数器的值是否等于255;是则执行步骤603;否则执行步骤604;
步骤603:将数据包计数器的值和指纹计数表全部置0;
步骤604:将数据包计数器的值加1;并将第一分组编号列表和第二分组编号列表清空。
9.如权利要求6所述的一种数据包匹配流程,其特征在于,所述数据包实际匹配流程具体包括如下步骤:
步骤701:从数据包的第一个字符开始向后截取出一个子串,截取长度等于指纹长度;
步骤702:将该子串视为一个指纹,并用哈希函数将此指纹映射为一个整数,在一级指纹哈希表中查找该整数;
步骤703:判断步骤702是否在一级指纹哈希表中指到所述整数,是则执行步骤704;否则执行步骤705;
步骤704:将该整数在一级指纹哈希表中所对应代表指纹的分组号存入第一分组编号列表;执行步骤708;
步骤705:在二级指纹哈希表中查找所述整数,获得一个或者未获得合并后的DFA;
步骤706:判断步骤705是否获得一个合并后的DFA,如果获得,执行步骤707;否则执行步骤708;
步骤707:将获得的合并后的DFA对应的分组号存入第二分组编号列表;
步骤708:如果当前截取出的子串已经是数据包最后的一个子串,则执行步骤710;否则执行步骤709;
步骤709:从当前截取位置的下一个字符开始向后截出同样长度的子串,返回步骤702;
步骤710:对第一分组编号列表和第二分组编号列表求交集;
步骤711:将数据包与所述交集中所有DFA进行逐一匹配,如果匹配,认为有害;否则认为无害。
10.如权利要求9所述的一种数据包匹配流程,其特征在于,所述步骤705的在二级指纹哈希表中查找所述整数,获得一个或者未获得合并后的DFA的流程如下:
步骤7051:在二级指纹哈希表中查找所述整数;
步骤7052:判断步骤7051是否找到,是则执行步骤7053;否则认为未获得合并后的DFA,结束;
步骤7053:判断当前数据包计数器的值是否大于该整数在二级指纹哈希表中对应的二级指纹对应的指纹计数表中的值,是则执行步骤7054;否则认为未获得合并后的DFA,结束;
步骤7054:令该整数在二级指纹哈希表中对应的二级指纹对应的指纹计数表中的值等于当前数据包计数器的值,并认为获得合并后的DFA即为该整数在二级指纹哈希表中对应的二级指纹所对应的合并后的DFA,结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510630235.3A CN105357177A (zh) | 2015-09-29 | 2015-09-29 | 一种数据包过滤规则集处理方法及数据包匹配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510630235.3A CN105357177A (zh) | 2015-09-29 | 2015-09-29 | 一种数据包过滤规则集处理方法及数据包匹配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105357177A true CN105357177A (zh) | 2016-02-24 |
Family
ID=55333041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510630235.3A Pending CN105357177A (zh) | 2015-09-29 | 2015-09-29 | 一种数据包过滤规则集处理方法及数据包匹配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105357177A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708956A (zh) * | 2016-11-29 | 2017-05-24 | 中国人民解放军国防科学技术大学 | 一种基于多url规则集的http数据匹配方法 |
CN110321463A (zh) * | 2019-05-31 | 2019-10-11 | 中国科学院计算技术研究所 | 一种字符串匹配方法、系统、存储介质及装置 |
CN111077878A (zh) * | 2019-12-12 | 2020-04-28 | 北京新能源汽车技术创新中心有限公司 | 汽车控制器的测试判定表的简化方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102111402A (zh) * | 2010-12-17 | 2011-06-29 | 曙光信息产业(北京)有限公司 | 一种对正则式dfa分组的方法 |
CN103166802A (zh) * | 2011-12-12 | 2013-06-19 | 中国移动通信集团湖南有限公司 | 一种确定有限自动机的构建方法及装置 |
US20140003406A1 (en) * | 2012-06-27 | 2014-01-02 | Qualcomm Incorporated | Method and apparatus for extending an awake state of a station |
CN103617226A (zh) * | 2013-11-25 | 2014-03-05 | 华为技术有限公司 | 一种正则表达式匹配方法及装置 |
-
2015
- 2015-09-29 CN CN201510630235.3A patent/CN105357177A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102111402A (zh) * | 2010-12-17 | 2011-06-29 | 曙光信息产业(北京)有限公司 | 一种对正则式dfa分组的方法 |
CN103166802A (zh) * | 2011-12-12 | 2013-06-19 | 中国移动通信集团湖南有限公司 | 一种确定有限自动机的构建方法及装置 |
US20140003406A1 (en) * | 2012-06-27 | 2014-01-02 | Qualcomm Incorporated | Method and apparatus for extending an awake state of a station |
CN103617226A (zh) * | 2013-11-25 | 2014-03-05 | 华为技术有限公司 | 一种正则表达式匹配方法及装置 |
Non-Patent Citations (3)
Title |
---|
KASTIL JAN: "High Speed Pattern Matching Algorithm Based on Deterministic Finite Automata with Faulty Transition Table", 《PROCEEDINGS OF THE 6TH ACM/IEEE SYMPOSIUM ON ARCHITECTURES FOR NETWORKING AND COMMUNICATIONS SYSTEMS》 * |
WANG YUMENG 等: "A New Packet Filter Schema Based onMulti-level Signature Hash and DFA Grouping", 《2014 TENTH INTERNATIONAL CONFERENCE ON COMPUTATIONAL INTELLIGENCE AND SECURITY》 * |
王焕云: "面向深度数据包检测的正则表达式匹配算法研究", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708956A (zh) * | 2016-11-29 | 2017-05-24 | 中国人民解放军国防科学技术大学 | 一种基于多url规则集的http数据匹配方法 |
CN106708956B (zh) * | 2016-11-29 | 2019-08-16 | 中国人民解放军国防科学技术大学 | 一种基于多url规则集的http数据匹配方法 |
CN110321463A (zh) * | 2019-05-31 | 2019-10-11 | 中国科学院计算技术研究所 | 一种字符串匹配方法、系统、存储介质及装置 |
CN110321463B (zh) * | 2019-05-31 | 2022-01-21 | 中国科学院计算技术研究所 | 一种字符串匹配方法、系统、存储介质及装置 |
CN111077878A (zh) * | 2019-12-12 | 2020-04-28 | 北京新能源汽车技术创新中心有限公司 | 汽车控制器的测试判定表的简化方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Goel et al. | Small subset queries and bloom filters using ternary associative memories, with applications | |
CN103580900B (zh) | 一种基于事件链的关联分析系统 | |
Jard et al. | Bounded-memory Algorithms for Verification On-the-fly | |
CN101876986B (zh) | 基于有限状态自动机的字符串匹配方法及内容过滤设备 | |
CN101442731B (zh) | 一种话单剔重方法和装置 | |
CN102546299B (zh) | 一种在大流量下进行深度包检测的方法 | |
KR100960117B1 (ko) | 시그니처 패턴 매칭방법과 그 시스템 및 시그니처 패턴이기록된 기록매체 | |
CN103491069A (zh) | 网络数据包的过滤方法 | |
CN102694801B (zh) | 病毒检测方法、装置以及防火墙设备 | |
CN111177491A (zh) | 正则表达式的匹配方法、装置、电子设备及存储介质 | |
CN103685222A (zh) | 基于确定性有穷状态自动机的数据匹配检测方法 | |
CN105357177A (zh) | 一种数据包过滤规则集处理方法及数据包匹配方法 | |
CN102521356B (zh) | 基于确定有限状态自动机的正则表达式匹配设备和方法 | |
CN105635170A (zh) | 基于规则对网络数据包进行识别的方法和装置 | |
CN114281676A (zh) | 针对工控私有协议的黑盒模糊测试方法及系统 | |
CN103685221A (zh) | 网络入侵检测方法 | |
CN103310350B (zh) | 一种基于谓词区分和关联的快速订阅与匹配方法 | |
CN106062740A (zh) | 生成多个索引数据字段的方法和装置 | |
CN105335245B (zh) | 故障存储方法和装置、故障查找方法和装置 | |
CN101719906B (zh) | 一种基于蠕虫传播行为的蠕虫检测方法 | |
Aldwairi et al. | n‐Grams exclusion and inclusion filter for intrusion detection in Internet of Energy big data systems | |
CN102685098B (zh) | 一种乱序数据包流免重组多模式匹配方法 | |
US8051060B1 (en) | Automatic detection of separators for compression | |
CN104778406A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160224 |
|
RJ01 | Rejection of invention patent application after publication |