背景技术
随着网络技术的迅速发展,在网络带宽迅速增长的同时网络流量在内容和形式上也变得更加复杂。网络流量的多样化,进一步导致针对应用层的攻击的多样化。现代网络应用(如入侵检测系统、防火墙、应用层流量分析系统等)越来越多地使用报文检测(Deep Packet Inspection,DPI)技术来提供安全服务。在DPI系统中,模式可分为字符串和正则表达式两种。现代的DPI大多使用正则表达式来表示各种攻击模式。相比于字符串模式,正则表达式的表达能力更强,更灵活。
正则表达式匹配一般是利用有限自动机(Finite State Machine,FSM)理论,先将正则表达式转化成等价的非确定型有限自动机(NondeterministicFinite Automaton,NFA),直接基于NFA进行匹配或将NFA转化为等价的确定型有限自动机(Deterministic Finite Automaton,DFA),然后基于DFA进行匹配。基于NFA的匹配中,由于状态转移的不确定性,算法效率低;基于DFA的匹配中,一次处理一个字节,匹配速度快,但存在状态爆炸问题,导致系统内存耗光,因此,在实际的应用中,应首先解决DFA状态爆炸问题。
由于网络带宽的迅速增长,传统的正则表达式匹配方法已经不能满足应用的速度需求。为了获得更高的性能,近年来,图形处理器(GraphicsProcessing Unit,GPU)已经发展成为具有巨大计算能力的高并行度、多线程、高通信带宽的多核处理器。基于GPU实现正则表达式匹配引擎与基于特定硬件系统架构实现相比,具有可扩展性好以及代价小等特点,同时如何有效提高GPU利用率,已经成为近年来研究的热点。GPU体系结构特点为:由多个流多处理器(Stream Multiprocessor,SM)组成,同时一个SM由一个取址、译码单元和多个流处理器(Stream Processor,SP)组成,SP是执行单元。
现有技术采用基于GPU的高速报文检测,即将所有正则表达式合并成一个NFA,由NFA确定法算法生成对应的DFA,并放入模式匹配引擎。同时,报文缓冲线程收集网络数据包并写入报文缓冲区(内存);GPU控制线程将内存报文缓冲区中的报文拷贝至显存报文缓冲区,并进行模式匹配,最后将匹配结果从显存拷贝至内存中结果缓冲区;最后应用根据匹配结果进行后处理。这种方法的缺点为:由于SM的处理时间,由其包含的各个流处理器的最长处理时间决定,因此如果同一个SM下,不同线程执行时间相差很大时,GPU利用率低下;另外,由NFA生成DFA时,可能引起DFA状态爆炸,如果出现状态爆炸,此方案将失效。
发明内容
本发明实施例提供了一种报文检测方法及装置,以在利用GPU的进行报文检测时,提高GPU的利用率。
在第一方面,本发明实施例提供一种报文检测方法,包括:
将多个正则表达式分别转化为对应的确定型有限自动机DFA;
计算第一DFA和第二DFA的相似度,所述第一DFA为任意所述DFA,所述第二DFA为不同于所述第一DFA的任意所述DFA;
如果所述第一DFA与所述第二DFA的相似度大于相似度阈值,则将所述第一DFA与所述第二DFA分为同一组,并且将同一组中的DFA存放到图形处理单元GPU中同一个流处理器SM中;
利用所述GPU中的每个SM中的DFA分别对报文进行模式匹配检测。
结合第一方面,在第一种可能的实现方式下,所述计算第一DFA和第二DFA的相似度,具体包括:分别计算任意两个DFA的有限字符集的相似度、开始字符集的相似度、终止字符集的相似度和有限状态集的相似度,并且根据所述任意两个DFA的所述有限字符集的相似度、所述开始字符集的相似度、所述终止字符集的相似度和所述有限状态集的相似度计算所述任意两个DFA的相似度。
结合第一种可能的实现方式下,在第二种可能的实现方式下,所述方法还包括:如果所述第一DFA与所述第二DFA的相似度不大于所述相似度阈值,并且所述第一DFA和所述第二DFA的状态数之和小于将所述第一DFA和第二DFA合并后对应的DFA的状态数之和时,则将所述第一DFA对应的正则表达式和所述第二DFA对应的正则表达式合并成一个新的正则表达式,并将所述新的正则表达式生转化为DFA。
结合第一方面,在第三种可能的实现方式下,所述将每个正则表达式转化为对应的确定型有限自动机DFA之前还包括:将会引起状态爆炸的正则表达式放入中央处理器CPU中对报文进行模式匹配检测。
在第二方面,本发明实施例提供一种报文检测装置,包括:
转化单元,用于将多个正则表达式分别转化为对应的DFA;
计算单元,用于计算第一DFA和第二DFA的相似度,所述第一DFA为任意所述DFA,所述第二DFA为不同于所述第一DFA的任意所述DFA;
分组单元,用于如果所述第一DFA与所述第二DFA的相似度大于相似度阈值,则将所述第一DFA与所述第二DFA分为同一组,并且将同一组中的DFA存放到图形处理单元GPU中同一个流处理器SM中;
第一检测单元,用于利用所述GPU中的每个SM中的DFA分别对报文进行模式匹配检测。
结合第二方面,在第一种可能的实现方式下,所述计算单元具体用于,分别计算任意两个DFA的有限字符集的相似度、开始字符集的相似度、终止字符集的相似度和有限状态集的相似度,并且根据所述任意两个DFA的所述有限字符集的相似度、所述开始字符集的相似度、所述终止字符集的相似度和所述有限状态集的相似度计算所述任意两个DFA的相似度。
结合第一种可能的实现方式下,在第二种可能的实现方式下,所述计算单元还用于,如果所述第一DFA与所述第二DFA的相似度不大于所述相似度阈值,并且所述第一DFA和所述第二DFA的状态数之和小于将所述第一DFA和第二DFA合并后对应的DFA的状态数之和时,则将所述第一DFA对应的正则表达式和所述第二DFA对应的正则表达式合并成一个新的正则表达式,并将所述新的正则表达式生转化为DFA。
结合第二方面,在第三种可能的实现方式下,所述装置还包括第二检测单元,用于将会引起状态爆炸的正则表达式放入CPU中对报文进行模式匹配检测。
本发明实施例中,通过将多个正则表达式分别转化为对应的DFA;计算第一DFA和第二DFA的相似度,所述第一DFA为任意所述DFA,所述第二DFA为不同于所述第一DFA的任意所述DFA;如果所述第一DFA与所述第二DFA的相似度大于相似度阈值,则将所述第一DFA与所述第二DFA分为同一组,并且将同一组中的DFA存放到图形处理单元GPU中同一个流处理器SM中;利用所述GPU中的每个SM中的DFA分别对报文进行模式匹配检测。由于将相似的DFA放到同一个SM中,使得同一个SM中的各个SP上的线程执行时间相近,从而提高GPU利用率。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明具体实施例作进一步的详细描述。
为保证提供的网络服务的安全性,正则表达式被用于模式检测,由于网络带宽的迅速增长,传统的正则表达式匹配方法已经不能满足应用的速度需求。为了获得更高的性能,近年来,GPU已经发展成为具有巨大计算能力的高并行度、多线程、高通信带宽的多核处理器。本发明实施例的技术方案,可以应用于GPU中,以基于GPU的实现高速报文检测,其中GPU由多个流多处理器(Stream Multiprocessor,SM)组成,同时一个SM由一个取址、译码单元和多个流处理器(Stream Processor,SP)组成,SP是执行单元,用于执行线程。报文缓冲线程收集网络数据包并写入报文缓冲区(内存),GPU控制线程将多个正则表达式分别转化为对应的确定型有限自动机(Deterministic Finite Automaton,DFA),同时,计算各个DFA彼此之间的相似度,将相似度大于设定阈值的DFA划分为同一组,并且将同一组中的DFA存放到图形处理单元GPU中同一个流处理器SM中的模式匹配引擎,然后GPU控制线程将内存报文缓冲区中的报文拷贝至显存报文缓冲区,并在各个SM中对显存报文缓冲区中的报文进行模式匹配,最后将匹配结果从显存拷贝至内存中结果缓冲区;最后应用根据匹配结果进行后处理。
下面以DFA算法为例对本发明实施例提供的报文检测方法及装置进行阐述,但本发明实施例提供的报文检测方法及装置也适用于与DFA相关的扩展算法,比如NFA、XFA和D2FA算法等。
下述实施例描述的一种报文检测方法。图1为本发明实施例一提供的报文检测方法流程图。如图1所示,本发明实施例提供的方法包括以下步骤:
S101,将多个正则表达式分别转化为对应的确定型有限自动机DFA。
S102,计算第一DFA和第二DFA的相似度,所述第一DFA为任意所述DFA,所述第二DFA为不同于所述第一DFA的任意所述DFA。
具体地,DFA是由五元组表示的,因此可以根据五元组计算第一DFA和第二DFA的有限字符集的相似度a1、开始字符集的相似度a2、终止字符集的相似度a3和有限状态集的相似度a4,并且根据计算出的所述有限字符集的相似度、所述开始字符集的相似度、所述终止字符集的相似度和所述有限状态集的相似度计算这两个DFA的相似度Sim,可以通过以下经验公式计算Sim:Sim=(k1a1+k2a2+k3a3)*a4,该公式为经验公式,k1、k2和k3为经验值。本领域技术人员也可以根据实际经验选择其它公式计算第一DFA和第二DFA的相似度,所述第一DFA为任意所述DFA,所述第二DFA为不同于所述第一DFA的任意所述DFA,并不限于上述公式。
其中,计算有限字符集相似度可以转化为计算两个DFA对应的正则表达式字符串的相似度,图2为本发明实施例一提供的有限字符集相似度计算方法示意图。如图2所示,首先计算出当将两个字符串中的一个变为另一个时需要的操作数n,以及两个字符串中最长字符串的长度L,然后将这两个量代入有限字符集相似度a1计算公式中:a1=1–n/L。
开始字符集和终止字符集相似度的计算均可采用以下方法计算。图3为本发明实施例一提供的开始字符集/终止字符集相似度计算方法示意图。如图3所示,可以先计算出两个字符集的交集长度Linter和两个字符集中最常字符集的长度Lmax,然后根据下述公式计算开始/终止字符集相似度a2/a3:a2(a3)=Linter/Lmax。
有限状态集的相似度可以转化为计算两个有向图的相似度。图4为本发明实施例一提供的有限状态及相似度计算方法示意图。如图4所示,可以根据任意两个DFA的有限状态集画出其对应的有向状态图A和B,然后由图中节点的连接关系(出度和入度),计算出图A和图B的各个节点之间的相似度矩阵C,两个有向图间的相似度矩阵的计算方法属于成熟的现有技术,在此不再赘述。
由矩阵C中,第一列第一个数据0.2636表示有向图A中节点1和有向图B中节点1的相似度;第一列第二个数据0.1286表示有向图A中节点1和有向图B中节点2的相似度;第二列第一个数据0.2786表示有向图A中节点2和有向图B中节点1的相似度;第二列第二个数据0.1286表示有向图A中节点2和有向图B中节点2的相似度;其它数据的意义以此类推。因此可知:有向图A中节点4与有向图B中节点4、节点5的相似度为0。这是因为图A中节点4只有出度,没有入度,而图B中节点4与节点5只有入度,没有出度,所以相似度为0。假设设定相似度阈值为0.3,表示如果两个节点间的相似度值超过相似度阈值则认为两个节点相似性较大,那么从矩阵C可知:第一列只有一个数据(0.3038)超过相似度阈值(0.3),那么有向图A中节点1和有向图B中的某个节点相似的概率为:有向图A中节点1对应的列中数据超过相似度阈值的个数/每列数据的个数(有向图B中的节点个数),这里为1/6,同理可得有向图A中其它节点(2、3和4)与有向图B中节点相似的概率分别为:2/6,0,0,则有限状态集的相似度(即有向图A和有向图B的相似度)a4为有向图A中每个节点与有向图B中节点的相似度概率之和,这里具体为a4=1/6+2/6+0+0,需要说明的是,图4中的相似度矩阵C的行数为6,列数为4如果相似度,计算有向图A中每个节点与有向图B中节点的相似度概率时采用的公式为:有向图A中某个节点对应的列中数据超过相似度阈值的个数/每列数据的个数(有向图B中的节点个数),如果相似度矩阵C的行数小于列数,则需要将上述公式中的“列”替换为“行”,即公式中处于分母位置的数据总是取矩阵中行数和列数中两者中较大的一个,以此保证根据各个相似度矩阵计算出的相似度具有可比性。
需要说明的是,上述计算过程中涉及到的各种阈值可以根据实际情况设定。
S103,如果所述第一DFA与所述第二DFA的相似度大于相似度阈值,则将所述第一DFA与所述第二DFA分为同一组,并且将同一组中的DFA存放到图形处理单元GPU中同一个流处理器SM中。
具体地,如果两个DFA的相似度Sim大于相似度阈值,则将这两个DFA分到一个组中,如果两个DFA的相似度小于相似度阈值,则将它们分到不同的组中,其中,相似度阈值可以根据实际情况进行设定,该值可以是静态值,也可以是动态值。除采用相似度阈值的方法对DFA进行分组外,在另一个实施例中,还可以预先设定分组个数,然后对计算出的相似度按从小到大进行排序,并按照每组个数将DFA分到对应的组中。图5为本发明实施例一提供的DFA分组方法示意图。如图5所示,如果有4个DFA:A、B、C和D,并且将根据4个DFA计算出的相似度排序后如图中所示,并且要求第一组有3个DFA,第二组有1个DFA,则可以将(A、B、C)分到第一组,将(D)分到第二组。
由于SP中的线程处理相似的DFA所需要的处理时间相近,因此,将相似的DFA放到同一个SM(一个SM包括多个SP)中,使得同一个SM中的各个SP上的线程执行时间相近,从而提高GPU利用率。
优选地,在一个实施例中,为避免状态爆炸的出现,可以在对DFA分组之前将DFA进行合并。具体为:如果所述第一DFA与所述第二DFA的相似度不大于所述相似度阈值,并且所述第一DFA和所述第二DFA的状态数之和小于将所述第一DFA和第二DFA合并后对应的DFA的状态数之和时,则将所述第一DFA对应的正则表达式和所述第二DFA对应的正则表达式合并成一个新的正则表达式,并将所述新的正则表达式生转化为DFA。
S104,利用所述GPU中的每个SM中的DFA分别对报文进行模式匹配检测。
由于每个SM中的DFA都是相似的,因此,同一个SM中的各个SP上的线程执行时间相近,从而提高GPU利用率。
上述方法中,由于NFA转化到DFA时容易出现状态爆炸,因此,优选地,在步S101之前还包括:将会引起状态爆炸的正则表达式放入中央处理器CPU中对报文进行模式匹配检测。即首先对正则表达式进行分组,将容易引起状态爆炸的正则表达式放到CPU中,直接基于正则表达式对报文进行模式匹配检测,将其他正则表达式放入到GPU中,然后执行步骤S101-S104,由此,可以尽可能避免状态爆炸的出现。
当GPU和CPU对报文都处理完成后,再对二者的处理结果进行相应的后处理,这部分属于现有技术在此不再赘述。上述实施例描述的为:通过将多个正则表达式分别转化为对应的DFA;计算第一DFA和第二DFA的相似度,所述第一DFA为任意所述DFA,所述第二DFA为不同于所述第一DFA的任意所述DFA;如果所述第一DFA与所述第二DFA的相似度大于相似度阈值,则将所述第一DFA与所述第二DFA分为同一组,并且将同一组中的DFA存放到图形处理单元GPU中同一个流处理器SM中;利用所述GPU中的每个SM中的DFA分别对报文进行模式匹配检测。由于将相似的DFA放到同一个SM中,使同一个SM中的各个SP上的线程执行时间相近,从而提高GPU利用率。
相应地,本发明实施例提供了与上述实施例一提供的报文检测方法对应的报文检测装置,图6为本发明实施例二提供的报文检测装置示意图。如图6所示,本发明实施例提供的报文检测装置包括:转化单元601、计算单元602、分组单元603和第一检测单元604。
转化单元601,用于将多个正则表达式分别转化为对应的DFA。
计算单元602,用于计算第一DFA和第二DFA的相似度,所述第一DFA为任意所述DFA,所述第二DFA为不同于所述第一DFA的任意所述DFA。
分组单元603,用于如果所述第一DFA与所述第二DFA的相似度大于相似度阈值,则将所述第一DFA与所述第二DFA分为同一组,并且将同一组中的DFA存放到图形处理单元GPU中同一个流处理器SM中。
第一检测单元604,用于利用所述GPU中的每个SM中的DFA分别对报文进行模式匹配检测。
其中,所述计算单元603具体用于,分别计算任意两个DFA的有限字符集的相似度、开始字符集的相似度、终止字符集的相似度和有限状态集的相似度,并且根据所述任意两个DFA的所述有限字符集的相似度、所述开始字符集的相似度、所述终止字符集的相似度和所述有限状态集的相似度计算所述任意两个DFA的相似度。
所述计算单元603还用于,如果所述第一DFA与所述第二DFA的相似度不大于所述相似度阈值,并且所述第一DFA和所述第二DFA的状态数之和小于将所述第一DFA和第二DFA合并后对应的DFA的状态数之和时,则将所述第一DFA对应的正则表达式和所述第二DFA对应的正则表达式合并成一个新的正则表达式,并将所述新的正则表达式生转化为DFA。
优选地,所述装置还包括第二检测单元,用于将会引起状态爆炸的正则表达式放入CPU中对报文进行模式匹配检测。
上述实施例描述的为:通过将多个正则表达式分别转化为对应的DFA;计算第一DFA和第二DFA的相似度,所述第一DFA为任意所述DFA,所述第二DFA为不同于所述第一DFA的任意所述DFA;如果所述第一DFA与所述第二DFA的相似度大于相似度阈值,则将所述第一DFA与所述第二DFA分为同一组,并且将同一组中的DFA存放到图形处理单元GPU中同一个流处理器SM中;利用所述GPU中的每个SM中的DFA分别对报文进行模式匹配检测。由于将相似的DFA放到同一个SM中,使同一个SM中的各个SP上的线程执行时间相近,从而提高GPU利用率。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。