掌桥专利:专业的专利平台
掌桥专利
首页

一种海量流量下报文识别的方法和装置

文献发布时间:2023-06-19 10:24:22


一种海量流量下报文识别的方法和装置

【技术领域】

本发明涉及网络安全领域,特别是涉及一种海量流量下报文识别的方法和装置。

【背景技术】

随着互联网业务快速发展,互联网出入口带宽不断增加,网络流量快速增长,网络攻击行为数量不断增长、复杂性也不断提升。为了保证互联网系统能够给使用者创造一个安全、稳定的使用环境,必须严密关注网络系统服务平台的运行状态,识别海量流量的数据报文中的恶意报文,并对恶意报文进行相应阻断和上报等处理。

但是,在目前的网络环境中国际出入口流量与日俱增,系统无法实现全流量接入,多数省际出入口因运营商不断调整网络拓扑及扩容,接入线路非常少,部分接入线路流量占比很低,导致监测点及监测流量接入不足,无法实现有效监测。同时,近年网络攻击行为在数量上有了较大增长,攻击特征有了较大变化,其监测复杂性也不断提升,现有的恶意网络行为监测引擎需要升级以满足监测需求。为了对海量数据进行监测,数据面开发套件dpdk解决了大量数据的采集及转发瓶颈,但目前与之匹配的数据特征匹配算法对资源的耗费极大,如AC算法,AC自动机有一个很大的问题是消耗的内存特别大,当我们要做的中文字符串的查找时,如何选择最小的字符单位,会直接影响查询速度和占用内存。

鉴于此,如何克服该现有技术所存在的缺陷,解决现有监测方法无法全面高效的监测恶意报文的现象,是本技术领域待解决的问题。

【发明内容】

针对现有技术的以上缺陷或改进需求,本发明解决了目前网络监测系统中由于网络流量巨大但接入口和接入流量较少,但现有监测方式效率较低,导致的无法对恶意报文进行全面监测的问题。

本发明实施例采用如下技术方案:

第一方面,调用dpdk,分配CPU的常规业务处理核和特殊业务处理核;加载监控策略规则文件和业务特征文件,将监控策略规则文件和业务特征文件转换为Hyperscan模式的规则数据库和业务特征数据库;调用dpdk完成数据接入,根据Hyperscan的业务特征数据库和数据五元组hash值的key区分常规业务和特殊业务,将每个数据五元组放入相应CPU内核的数据队列;从每个CPU内核的数据队列中逐个取出数据五元组进行解码,生成每个数据五元组对应的数据报文;根据Hyperscan的规则数据库和业务数据库,使用相应的CPU内核分别对相应队列中的数据报文进行扫描匹配,获取恶意报文,并对恶意报文进行处理。

优选的,根据hash值的key将每个接入的数据五元组放入相应CPU内核的数据队列,具体包括根据业务特征数据库生成hash表,hash表的key为特殊业务对应的hash值的key;判断每个数据五元组hash值的key是否存在于hash表中;若存在于hash表中,将数据五元组放入hash表中相应的位置,并放入特殊业务处理核的数据队列;若不存在于hash表中,将数据五元组放入常规业务处理核的处理队列。

优选的,使用相应的CPU内核分别对相应队列中的数据报文进行扫描匹配,还包括:判断常规业务核上的每个业务报文的应用ID是否为特殊业务ID;若是特殊业务ID,将数据报文的五元组信息、应用ID和预设特殊业务标识符重新组包,将组包后的数据放入特殊业务处理核的数据队列,由特殊业务处理核进行扫描匹配;若不是特殊业务ID,由常规业务处理核进行扫描匹配。

优选的,使用相应的CPU内核分别对相应队列中的数据报文进行扫描匹配,还包括:若规则数据库或业务特征数据库的一条规则同时包含多个并列的五元组特征和字符串特征,对规则中的数据报文的五元组特征和字符串特征进行并行扫描,再对扫描结果进行整合;或,若规则数据库或业务特征数据库的规则包括多重限定,依次对数据报文的五元组特征和字符串特征进行串行扫描。

优选的,分配CPU的常规业务处理核和特殊业务处理核之后,还包括:配置报文的收包端口和发送端口,配置CPU的收包核、常规业务处理核、特殊业务处理核和数据转发核,配置内存通道的数量;为每个CPU内核申请用于接收报文数据包和将报文发送到业务处理核的ring,以及一个用于发送数据包的ring,并初始化各ring;建立内存池、ring和DMA之间的映射关系;启动配置后的各端口和ring。

优选的,从每个CPU内核的数据队列中逐个取出数据五元组进行解码,具体包括:根据数据五元组中的协议层级,按照先序遍历的方式构建树结构,其中,树的层级与协议层级一致,树的每一个节点为一个协议节点;构建树结构的同时,对树的每一个节点进行解码。

优选的,从每个CPU内核的数据队列中逐个取出数据五元组进行解码之后,还包括:判断数据五元组是否有对应的会话;若没有对应的会话,创建对应的会话,加入会话hash表中,并提交超时;若存在相应的会话,更新对应的会话hash节点,并判断会话是否结束。

优选的,使用相应的CPU内核分别对相应队列中的数据报文进行扫描匹配,还包括:若报文为UDP协议的单个报文扫描,使用block模式;若报文为TCP数据的整条流扫描,使用steam模式。

优选的,对恶意报文进行处理,具体包括:对恶意报文进行阻断或netflow日志上报。

另一方面,本发明提供了一种海量流量下报文识别的装置,具体为:包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接,存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成第一方面中的海量流量下报文识别的方法。

与现有技术相比,本发明实施例的有益效果在于:通过Hyperscan的识别扫描影响dpdk的数据分发,同时通过dpdk对特殊数据的分发减小了在Hyperscan应用识别中带来的性能消耗,效的提高了dpdk技术与Hyperscan技术融合的高效性。并在优选方案中利用Hyperscan进行分类编译及识别,在dpdk完成大流量收包的同时,提高了规则匹配效率,从而使dpdk技术遇Hyperscan技术更高效的结合。

【附图说明】

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种海量流量下报文识别的方法流程图;

图2为本发明实施例提供的一种海量流量下报文识别的方法使用的数据访问层顶层框架结构示意图;

图3为本发明实施例提供的另一种海量流量下报文识别的方法流程图;

图4为本发明实施例提供的另一种海量流量下报文识别的方法流程图;

图5为本发明实施例提供的一种海量流量下报文识别的方法中使用的Hyperscan编译期流程示意图;

图6为本发明实施例提供的一种海量流量下报文识别的方法中使用的Hyperscan运行期流程示意图;

图7为本发明实施例提供的一种海量流量下报文识别的方法中使用的wtp报文解码层级关系示意图;

图8为本发明实施例提供的另一种海量流量下报文识别的方法流程图;

图9为本发明实施例提供的另一种海量流量下报文识别的方法流程图;

图10为本发明实施例提供的一种海量流量下报文识别的装置结构示意图。

【具体实施方式】

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。

对本发明实施例中使用到的一些术语解释如下:

(1)Intel Data Plane Development Kit

简写为:dpdk。是intel提供的一套数据平面开发工具集,包括一组lib库相应的工具包集合。为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持。dpdk专注于网络应用中数据包的高性能处理,运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。传统的包处理任务存在内核态与用户态的切换,以及多次的内存拷贝,系统消耗变大,以CPU为核心的系统存在很大的处理瓶颈,dpdk技术提升了在通用服务器的数据包处理效能,dpdk应用程序运行在操作系统的User Space,利用自身提供的数据面库进行收发包处理,绕过了Linux内核态协议栈,以提升报文处理效率。同时,还通过轮询与中断、多线程编程、CPU亲和性、大页表、无锁机制、cache预读取、UIO(Userspace I/O)等机制进一步提高处理性能。

(2)Hyperscan

来自于Intel的高性能的正则表达式匹配库,使用了特定的语法和工作模式来保证其在真实网络场景下的实用性。Hyperscan在引擎中使用Intel处理器所具有的SIMD指令进行加速。同时,用户可以通过回调函数来自定义匹配后采取的行为。由于生成的数据库是只读的,用户可以在多个CPU核或多线程场景下共享数据库来提升匹配扩展性。具备功能多样、支持大规模匹配、支持流模式、高性能高扩展性等特点。Hyperscan可以通过不同的匹配模式(流模式和块模式)来满足不同的使用场景、支持几万到几十万的规则的匹配,并且单核性能可实现3.6Gbps~23.9Gbps,随着使用核数的增加,匹配性能基本处于线性增长的趋势。

(3)Snort

一种网络嗅探器,能够对网络上的数据包进行抓包分析并根据所定义的规则进行响应及处理。通过对获取的数据包,进行各规则的分析后,根据规则链,可采取Activation(报警并启动另外一个动态规则链)、Dynamic(由其它的规则包调用)、Alert(报警),Pass(忽略),Log(不报警但记录网络流量)五种响应的机制。Snort有数据包嗅探,数据包分析,数据包检测,响应处理等多种功能,每个模块实现不同的功能,各模块都是用插件的方式和Snort相结合,功能扩展方便。例如,预处理插件的功能就是在规则匹配误用检测之前运行,完成TIP碎片重组,http解码,telnet解码等功能,处理插件完成检查协议各字段,关闭连接,攻击响应等功能,输出插件将得理后的各种情况以日志或警告的方式输出。

(4)Perl Compatible Regular Expressions

简写为:PCRE,是一个Perl库,包括perl兼容的正则表达式库。

(5)五元组

通信术语。通常是指源IP地址,源端口,目的IP地址,目的端口和传输层协议。

(6)receive side scaling

简写为:RSS。是由微软提出的一种负载分流方法,通过计算网络数据报文中的网络层&传输层二/三/四元组hash值,取hash值的最低有效位用于索引间接寻址表。

(7)ring

Intel的x86处理器是通过ring级别来进行访问控制的,级别共分4层,ring0、ring1、ring2和ring3。ring0层拥有最高的权限,ring3层拥有最低的权限。

(8)内存池

Memory Pool,简写为mempool。是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。直接使用new、malloc等API申请分配内存时,由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等的内存块留作备用,当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存,使得内存分配效率得到提升。

(9)直接存储器访问

Direct Memory Access,简写为DMA。该机制允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载。DMA传输将数据从一个地址空间复制到另外一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。例如,将一个外部内存的区块移动至芯片内部更快的内存区时,处理器可以同时处理其它任务。DMA传输对于高效能嵌入式系统算法和网络具有重要作用。

实施例1:

目前,互联网出入口带宽不断增加,网络流量快速增长,网络攻击行为数量不断增长、复杂性也不断提升。因此,需要对海量流量下的报文进行快速大量的匹配,以查找其中可能存在的恶意报文。本实施例中,将dpdk与hyperscan相结合,同时满足了大流量数据采集与高效的特征字符串匹配,提高了大流量的处理效率。

如图1所示,本发明实施例提供的海量流量中不同类型报文识别阻断的方法具体步骤如下:

步骤101:调用dpdk,分配CPU的常规业务处理核和特殊业务处理核。

本实施例提供的报文识别的方法,在网络接口层(网卡驱动)与监测应用程序之间引入数据访问层,完成报文分发、报文共享、设备隔离以及数据隔离。数据分发功能可以使系统更方便的使用数据并发来实现数据包的并发处理,提升用户监测应用程序。报文共享可以使多个进行共享数据报文,对TCPDump等调试对比工具提供支持,通过TCPDump可以将网络中传送的数据包完全截获下来提供分析,支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句去除无用的信息。进一步的,使用独立的数据访问层也可支持类似监测应用程序的其他独立业务程序。设备隔离可以使本系统能够忽略网卡硬件差异的影响从而有能力扩展到非X86平台。数据隔离可以有效保护系统内核阻止业务程序异常操作引起设备系统故障。

为了实现数据访问层的各项功能,如图2所示,本实施例使用的数据访问层顶层框架需要使用接收接口、发送接口、接收队列池、发送队列池等模块。其中,接收队列池管理所有的接收队列ring,发送队列池管理所有的发送队列ring。

为了建立数据访问层,将数据访问层中各功能模块与实际的硬件设备相匹配,如图3所示,可以通过以下步骤进行初始化配置。

在具体的业务处理场景中,根据业务类型不同,除了常规业务外,还存在一些需要进行特殊处理的业务报文,如某些虽然符合监控策略规则的特征但属于正常业务报文的业务报文,或占用CPU时间较长的报文,或处理时需要对CPU进行特殊设置的报文。在本实施例中,为了将常规业务和特殊业务进行分类处理,对CPU进行初始化时,除了将CPU内核按照常规的收包核、数据转发核和业务处理核进行分组外,还进一步将业务处理核分为常规业务处理核和特殊业务处理核两组,常规业务处理核对常规业务进行处理,特殊业务处理核对特殊业务进行处理。

步骤201:配置报文的收包端口和发送端口,配置CPU的收包核、常规业务处理核、特殊业务处理核和数据转发核,配置内存通道的数量。

步骤202:为每个CPU内核申请用于接收报文数据包和将报文发送到业务处理核的ring,以及一个用于发送数据包的ring,并初始化各ring。

步骤203:建立内存池、ring和DMA之间的映射关系。

步骤204:启动配置后的各端口和ring。

在本实施例的具体实施场景中,如图4所示,可以按照下列步骤进行具体的初始化配置。下列具体配置仅为某个场景的实例,在不同的实施场景中,实际参数配置要根据数据流的大小,收包核、处理核、转发核的序列号和数量而定。

步骤301:配置port1、port2作为收包端口,port3、port4作为发送端口;CPU序列号1-2作为收包核,CPU序列号3-4作为数据转发核,CPU序列号5和7作为常规业务处理核;CPU序列号6和8作为特殊业务处理核,CPU序列号,内存通道数设置为4。

步骤302:每个核申请1个接收队列ring用于数据包接收,申请1个转发ring用于将报文发送到业务处理核。

步骤303:初始化收包端口port1、port2并进行配置,绑定业务转发核,初始化接收队列ring。

步骤304:建立mempool、接收队列ring、转发ring和DMA之间的映射关系,并启动port1、port2。

步骤305:申请一个发送队列ring。

步骤306:对port3、port4进行配置,绑定数据转发核,并将发送队列ring进行初始化。

步骤307:建立mempool、发送队列ring和DMA之间的映射关系,并启动port3、port4。

进一步的,为了提高CPU的处理效率,步骤301-步骤307中使用的接收队列ring、转发ring和发送队列ring都为无锁队列,多个CPU在操作同一个队列时,若同时具有入队线程和出队线程时,两个线程可以并发操作,而不需要任何加锁行为,在保证高并发处理情况下保持线程的安全,并提高CPU的处理效率。

步骤102:加载监控策略规则文件和业务特征文件,将监控策略规则文件和业务特征文件转换为Hyperscan模式的规则数据库和业务特征数据库。

为了识别业务报文中可能存在的恶意报文,需要获取恶意报文的监控策略规则,符合监控策略规则特征的报文被识别为恶意报文。另一方面,为了对常规业务报文和特殊业务报文进行分类,本实施例中还需要根据业务特征文件中的业务特征规则对业务报文进行识别,业务特征可以为业务的应用ID特征、业务的收发端口号等。

为了便于使用Hyperscan进行匹配,本实施例使用的监控策略规则文件和业务特征文件按照snort语法格式编写,规则数据库使用hs_database_t。针对UDP协议的单个报文和TCP数据的整条数据流两种数据模块,规则数据库和业务特征数据库可以选择使用流模式识别规则库或块模式识别规则库,或两种数据库同时使用;识别规则库中保存每条正则表达式规则以及对应的event,event为识别命中后的事件id,规则数据库和业务特征数据库被本实施例中所有业务处理线程共享。

Hyperscan以自动机理论为基础,其工作流程主要分成两个部分:编译期(compiletime)和运行期(run-time)。

(1)编译期

Hyperscan自带C++编写的正则表达式编译器。如图5所示,它将正则表达式作为输入,针对不同的CPU内核架构平台,用户定义的模式及特殊语法,经过复杂的图分析及优化过程生成对应的数据库。另外,生成的数据库可以被序列化后保存在内存中,以供运行期提取使用。

(2)运行期

Hyperscan的运行期是通过C语言来开发的。图6为Hyperscan在运行期的主要流程。用户需要预先分配一段内存来存储临时匹配状态信息,之后利用编译生成的数据库调用Hyperscan内部的匹配引擎(如NFA,DFA等)来对输入进行模式匹配。Hyperscan在引擎中使用Intel处理器所具有的SIMD指令进行加速。同时,用户可以通过回调函数来自定义匹配发生后采取的行为。由于生成的数据库是只读的,用户可以在多个CPU核或多线程场景下共享数据库来提升匹配扩展性。

具体地,针对单条正则表达式的规则编译调用hs_compile,原型为:

使用的参数定义为:expression是正则表达式字符串;flags用于控制正则的行为,例如:忽略大小写、使“.”符号包含换行等;mode确定了生成database的格式,主要有BLOCK,STREAM和VECTOR三种,每一种模式的database只能由相应的scan接口使用;platform用于指定此database的目标平台的CPU特性,platform的值为NULL表示目标平台与当前平台一致;db用于保存编译后的database;error用于接收错误信息。

针对多条正则表达式的规则编译调用hs_compile_multi,原型为:

使用的参数定义为:expressions是多个正则表达式字符串;flags和ids分别是expressions对应的flag和id数组;elements是表达式字符串的个数;其余参数定义与hs_compile的参数定义相同。

步骤103:调用dpdk完成数据接入,根据Hyperscan的业务特征数据库和数据五元组hash值的key区分常规业务和特殊业务,将每个数据五元组放入相应CPU内核的数据队列。

通过调用dpdk开发套件,收包核1-2完成大流量数据的接入,并将接收数据入队列(inqueue)。为保证同一五元组数据输入到同一接收核上,避免匹配时处理五元组不同部分进行内核切换造成的处理效率损失,将输入放入数据队列时,需要将接入的数据中同一个五元组的数据输入到同一个用于接收的CPU核心的接收队列ring中。在本实施例的具体实施场景中,采用dpdk的软哈希算法(RSS)做到同源同宿,以保证每个核上数据流的单一性和完整性。

进行数据接入后,根据业务特征数据库对业务报文进行分类,区分常规业务报文也特殊业务报文。在具体实施中,为了提高分类效率降低分类计算复杂度,可以使用hash表进行分类。根据业务特征数据库生成hash表,hash表的key为特殊业务对应的hash值的key;判断每个数据五元组hash值的key是否存在于hash表中;若数据五元组hash值的key存在于hash表中,表示该数据五元组为特殊业务,将数据五元组放入hash表中相应的位置,并放入特殊业务处理核的接收队列ring中,待特殊业务处理核进行处理;若不存在于hash表中,则表示该数据五元组是常规业务,将数据五元组放入常规业务处理核的接收队列ring中,待常规业务处理核进行处理。将常规业务和特殊业务的数据五元组分类存放至不同CPU核的接收队列ring中后,完成了不同类型的业务报文的分发,通过常规业务和特殊业务的区分,减小了在hyperscan应用识别中带来的性能消耗,有效的提高了dpdk技术与hyperscan技术融合的高效性。

步骤104:从每个CPU内核的数据队列中逐个取出数据五元组进行解码,生成每个数据五元组对应的数据报文。

将常规业务和特殊业务的数据五元组分类存放至不同CPU核的接收队列ring中后,常规业务处理核和特殊业务处理核分别循环读取各自接收队列ring中的数据进行并行处理。

针对从每个CPU内核的接收队列ring中读取(dequeue)到的数据,还需要进行链路层、网络层、传输层和应用层四层协议的快速解码,解码信息主要用于后续的监控规则匹配。在本实施例的具体实施场景中,根据数据五元组中的协议层级,按照先序遍历的方式构建树结构,其中,树的层级与协议层级一致,树的每一个节点为一个协议节点;构建树结构的同时,对树的每一个节点进行解码。

如图8所示,进行解码的具体步骤为:

步骤401:由各层协议节点构建一棵由协议节点组成的树,即tree结构。

步骤402:根据协议节点对树进行逐层扩展。

步骤403:在构建树的同时,使用先序遍历方式完成树中各节点的遍历。

步骤404:通过遍历完成各层协议的解码工作。

上述步骤中,步骤403和步骤404同步完成,即每构建一个节点,同时完成对该节点的解码,完成对该节点的遍历,而不需要等待树建构完成后在进行遍历,提高了解码效率。

具体的,需要进行解码的字段包括:ETHER、ICMP、IP、TCP、UDP、DNS、HTTP、SMTP、POP3、IMAP、WTP等协议的协议变量数据。如图7所示,为WTP报文解码的层级关系。解码的字段不少于300个。本实施例提供的实施方式可以支持Ipv4和ipv6协议解码。

进一步的,为了对TCP、UDP承载的数据进行维护,在对数据进行解码时,还需要对接收到的数据进行基于五元组的会话管理,以便于对报文所承载的数据的生命周期进行维护。具体的,会话(session)管理包括:session的创建、更新、老化和关闭。为了更精确便捷的维护会话节点的生命周期,可以使用硬件定时器维护基于五元组的会话的生命周期。

在本实施例的具体实施场景中,基于五元组的会话管理通过hash表进行维护,其中hash表的key为五元组信息。判断数据五元组是否有对应的会话;若没有对应的会话,创建对应的会话,加入会话hash表中,并提交超时;若存在相应的会话,更新对应的会话hash节点,并判断会话是否结束。

如图9所示,可以通过如下步骤进行会话管理:

步骤501:对接收队列ring中的数据进行解码输出,并查找是否hash表中是否有相同的节点。

步骤502:当查找结果为空时,创建新的hash节点,同时提交超时器。

步骤503:当查找到相同节点时,更新已有节点,并判断当前session是否结束。

步骤504:若当前session已结束,则删除超时器,并关闭会话。

步骤505:若当前session仍未结束,则只更新该session节点信息。

步骤506:当超时器返回时,检查session当前状态较提交时是否有更新。

步骤507:若session无更新,删除超时器,并关闭session。

步骤508:若session状态有更新,则更新session节点信息,并重新提交超时器,直至下一次超时到达。

具体的,在步骤503中,TCP会话是否结束的判断依据为判断当前会话是否有FIN或RST包,

步骤105:根据Hyperscan的规则数据库和业务数据库,使用相应的CPU内核分别对相应队列中的数据报文进行扫描匹配,获取恶意报文,并对恶意报文进行处理。

为了对不同类型的数据报文进行识别,还需要使用Hyperscan进行特征扫描。具体实施过程中,可以根据规则的不同特性,选用不同的扫描匹配方式提高特征扫描的效率。

(1)若规则数据库或业务特征数据库的一条规则同时包含多个并列的五元组特征和字符串特征,对规则中的数据报文的五元组特征和字符串特征进行并行扫描,再对扫描结果进行整合。如下的监控策略:udp.dstport<=1025&&udp.dstport>=1023&&udp.payload.len>991,包含三个并列的简单规则语句,数据流扫描规则数据库时,该条策略的三个语句的扫描会同时进行,获取每一个语句的匹配结果,再根据(语句1匹配结果)&&(语句2匹配结果)&&(语句3匹配结果)获取最终的匹配结果,减小了规则扫描时间。

(2)若规则数据库或业务特征数据库的规则包括多重限定,依次对数据报文的五元组特征和字符串特征进行串行扫描,按从左往右的顺序依次查找该条规则的各个语句。具体的,如udp.payload=="\xb9\x21\x01"&&tcp.payload=="\x24\x26\x22",数据流扫描测量规则数据库和业务规则数据库时,会依次扫描udp.payload、tcp.payload,通过后缀表达式方式计算最终的扫描结果。

进一步的,基于五元组会话管理的基础上,还需要在常规业务处理核上进行hyperscan的应用识别扫描。判断常规业务核上的每个业务报文的应用ID是否为特殊业务ID;若是特殊业务ID,将数据报文的五元组信息、应用ID和预设特殊业务标识符重新组包,将组包后的数据放入特殊业务处理核的数据队列,由特殊业务处理核进行扫描匹配;若不是特殊业务ID,由常规业务处理核进行扫描匹配。某个业务报文的应用ID为业务数据库中的特殊业务时,将该业务报文重新封装为数据包,数据包中含有特殊业务标识符、应用ID以及原业务报文的五元组信息,将该数据包回传到dpdk的接收核(1、2核)对应的收包队列中;dpdk的收包队列中检索到带有特殊标识符承载的数据包,提取数据包中的五元组信息,通过dpdk的RSS算法计算出五元组hash值,并更新到特殊业务元组hash表中;数据接收核(1、2)核接收数据后,检索hash表中的五元组信息,返回检索结果为真时,将该条数据分发到特殊业务处理核(6、8核)的队列中,进行单独处理,直接对应用ID赋值,减少了后续hyperscan识别应用的环节;这种处理方法通过hyperscan的识别扫描影响dpdk的数据分发,同时通过dpdk对特殊数据的分发减小了在hyperscan应用识别中带来的性能消耗。

对接受到的报文进行解码后,需要在基于会话管理的基础上,确认当前加载了最新监控策略规则库后,进行监控策略的扫描匹配,并输出匹配结果。在具体的使用场景中,需要根据不同的协议选择Hyperscan的不同匹配模式进行匹配。例如:若报文为UDP协议的单个报文扫描,使用block模式;若报文为TCP数据的整条流扫描,使用steam模式。

在本实施例的实际场景中,进行匹配前,需要先分配好每次匹配需要用的临时数据(scratch),并调用hs_alloc_scratch(database,&scratch)为每个数据库分配临时空间。

对于UDP协议承载的单个报文数据采用block模式,调用hs_scan进行匹配,原型为:

使用的参数定义为:db为步骤103中编译获得的database;data和length分别是要匹配的数据和数据长度;flags用于在未来版本中控制函数行为,目前未使用;scratch是匹配时要用的临时数据,已分配好;onEvent:即匹配时调用的回调函数,用户可以通过回调函数来自定义匹配后采取的行为;context是用户自定义指针。

对于TCP协议承载的数据,采用stream模式匹配,由于需要用到stream模式,所以在匹配前要先将流打开

hs_error_t hs_open_stream(const hs_database_t*db,

unsigned int flag,

hs_stream_t**stream)

使用的参数定义为:db为预先编译的模式数据库;flags:修改流行为的标志,提供此参数供将来使用,目前不使用;stream:成功时,将返回指向生成的hs_stream_t的指针,失败时为NULL。

将流打开后,再调用hs_scan_stream进行匹配,原型为:

使用的参数定义为:id是数据所属的stream对应hs_stream_t指针;其余参数与hs_scan相同。

Hyperscan的流模式可以实现TCP数据的跨包扫描,可以在TCP数据流未进行重组的情况下完成协议的跨包识别,但需要缓存TCP数据流的上下文,并通过hash表实现维护,当完成对当前数据包的有效负载扫描,并确定命中规则后,根据命中的识别规则在识别库中查找对应的event ID,保存在会话的hash节点中。命中的event ID即对应了数据流中命中了监控策略规则的恶意报文。

进一步的,为了提高匹配效率,无论是block模式还是stream模式,在查找匹配过程中,参数flag均要设置为HS_FLAG_DOALL,避免hyperscan的性能下降。

在步骤105中对数据队列中的报文进行扫描匹配后,即根据命中的识别规则在识别库中查找对应的event ID后,还需要命中监控策略规则的恶意报文进行阻断或netflow日志上报。

根据实施场景的实际需要,可以选择阻断方案和上报方案,也可以选择其它针对恶意报文的处理方案。

(1)阻断方案:当前数据包命中监控策略后,立即按照原始数据流中五元组信息组建RST报文,共两个RST报文,分别发给客户端和服务端,同时输出报文(inqueue)到dpdk发包队列中,数据转发核(5-6核)在读取到报文后,通过配置好的发包端口发送到协议栈中,客户端和服务端在收到RST报文后,自动关闭会话,流结束,实现阻断的效果。

(2)netflow日志上报方案:基于会话管理的基础上,会话正常结束或超时结束后,通过预先下发的netflow定制格式提供网络流量的会话级视图,记录下每个TCP/IP事务的信息,按照模板信息组织上报字段信息,并以TLV分片的格式进行流日志信息上报;输出报文(inqueue)到dpdk发包队列中,数据转发核在读取到报文后,利用socket通信,进行监控值日的上报。netflow日志上报方案的优点是,基于模板(Template)进行统计数据输出,方便添加需要输出的数据域,并支持多种netflow新功能,使用灵活,扩展性强。具体的,可以使用netflow V9定制格式。

本实施例提供的海量流量中恶意报文识别阻断的方法,通过DPDK与Hyperscan相结合的方式,充分利用了DPDK对数据包的处理性能,以及Hyperscan高效灵活的正则表达匹配能力,提供了一种可用于海量流量场景的快速准确的规则匹配方式,实现了海量数据报文的全面快速监控,有效监控各种网络攻击行为,满足用户全面监测并保护网络安全、实现网络安全稳定运行的目的。

实施例2:

在上述实施例1提供的海量流量下报文识别的方法的基础上,本发明还提供了一种可用于实现上述方法的海量流量下报文识别的装置,如图10所示,是本发明实施例的装置架构示意图。本实施例的海量流量下报文识别的装置包括一个或多个处理器21以及存储器22。其中,图10中以一个处理器21为例。

处理器21和存储器22可以通过总线或者其他方式连接,图10中以通过总线连接为例。

存储器22作为一种海量流量下报文识别方法非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的海量流量下报文识别方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行海量流量下报文识别的装置的各种功能应用以及数据处理,即实现实施例1的海量流量下报文识别的方法。

存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

程序指令/模块存储在存储器22中,当被一个或者多个处理器21执行时,执行上述实施例1中的海量流量下报文识别的方法,例如,执行以上描述的图1、图3、图4、图8和图9所示的各个步骤。

本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种海量流量下报文识别的方法和装置
  • 一种基于TCP报文特征的网络流量识别方法及装置
技术分类

06120112533877