多重应用协议识别方法和装置制造方法

文档序号:7807013阅读:335来源:国知局
多重应用协议识别方法和装置制造方法
【专利摘要】本发明公开了一种多重应用协议识别方法和应用协议识别引擎。多重应用协议识别方法基于XML语言提供了特征条件、解密套件条件、应用协议特征、应用协议命中动作、多种检测识别模型及相应的规则描述方法;应用协议识别引擎包括强关联识别模块、单包识别模块、多包识别模块、算法解密识别模块、通道提取识别模块等识别模块、配置模块以及应用协议特征匹配单元、全流表存储单元、半流关联表存储单元、规则库存储单元。本发明解决了灵活的规则描述配置机制以及在线、精确和全面识别应用协议和加密流量识别的问题。
【专利说明】多重应用协议识别方法和装置
【技术领域】
[0001]本发明属于网络应用流量识别与分类【技术领域】,特别是涉及一种多重应用协议识别方法和装置。
【背景技术】
[0002]网络应用流量的识别与分类是内容过滤、流量分析、带宽管理、安全通信及互联网监管和运维的基础。在网络安全领域,待识别和分类的网络应用流量主要可分为普通应用流量、入侵/攻击/渗透流量、病毒/木马/蠕虫/僵尸网络异常流量、匿名通信流量等,其中普通应用流量又可分为明文流量、加密流量、Web流量和P2P流量等。
[0003]由于下一代高速网络中应用流量组成的复杂性及应用协议特征和流量行为特征的多样性,特别是流量透传、伪装、分片和加密的隐蔽性,使得应用协议识别引擎的设计面临着严峻挑战。一方面,传统的基于端口的应用协议识别方法已不能满足对应用流量进行精确分类的需要,需要引入基于特征关键字的深度包检测方法和基于应用流量行为特征的深度流检测方法,同时应支持端口特征、IP特征、单关键字特征、多关键字特征、正则表达式特征、通道关联特征、包长特征、包方向特征和包位置特征等;另一方面,为了达到应用流量的高识别率,需要综合运用上述多种应用协议识别方法并支持单包匹配、多包匹配、强/弱关联匹配、通道提取匹配、算法解密匹配等多种检测识别模型。
[0004]为了实现上述应用协议识别需求,并保证应用协议的可配置、可升级、可扩展性,将应用协议识别的逻辑功能实现与应用协议识别特征的描述进行分离,应用协议识别引擎应提供一种应用协议识别规则的描述和配置机制,并支持丰富的应用协议特征和检测识别模型描述语法。
[0005]应用协议识别引擎是各类网络安全网关的核心部件,用以对报文进行分类、业务识别和应用感知,是分组转发、QoS队列调度、负载均衡、内容过滤和网络测量的前提和基础,其位于每报文处理的关键路径上,在高速网络环境下其匹配速度和分类精度将是整个系统性能的瓶颈之一。因此,应用协议识别引擎必须同时保证在线识别能力、高精确度和高识别率。

【发明内容】

[0006]本发明的目的是:解决现有网络应用流量识别与分类技术存在的上述问题,提供一种应用协议识别方法和装置,可以在线、精确和全面识别各种网络应用流量。
[0007]为实现上述目的,本发明基于XML语言提供了一种多重应用协议识别方法和应用协议识别引擎,其中,多重应用协议识别方法提供了特征条件、解密套件条件、应用协议特征、应用协议命中动作、检测识别模型及相应的描述方法;应用协议识别引擎包括:应用协议特征匹配单元、全流表存储单元、半流关联表存储单元、规则库存储单元、识别模块和配置模块。
[0008]在本发明的一个或多个实施例中,特征条件指定应用协议所应满足的基本条件约束,用以描述应用协议基本特征。特征条件包括特征字节码条件〈hex〉、特征字符串条件〈string〉、特征偏移量条件〈offset〉、特征长度条件〈length〉、特征字节序条件〈endian〉、特征运算符条件〈operator〉、IP条件<ip>、端口条件〈port〉和正则表达式条件<pcre>。
[0009]在本发明的一个或多个实施例中,特征字节码条件〈hex〉指定应用协议特征的内容由字节码描述,其内容取值为由十六进制字符组成并且固定为网络字节序的位串,并且由type属性指定内容取值的类型和格式。其中,type属性的取值包括single单值类型、range区间类型、singleSet单值列表类型和rangeSet单值/区间混合列表类型。
[0010]在本发明的一个或多个实施例中,特征字符串条件〈string〉指定应用协议特征的内容由字符串进行描述,其内容取值为ASCII字符串,并且由case属性指定内容取值是否为大小写敏感格式。其中,case属性的取值包括yes大小写敏感格式和no大小写不敏感格式。
[0011]在本发明的一个或多个实施例中,特征偏移量条件〈offset〉指定应用协议特征的特征字节码条件〈hex〉或特征字符串条件〈string〉的位置偏移量,其内容取值为整型值,并且由relative属性指定位置偏移量的相对参考方向。其中,〈offset〉的内容取值为-1表不位置偏移不固定,非负值则表不确定的位置偏移!relative属性的取值包括head数据包载荷头位置、last上一个应用协议特征结束位置和tail数据包载荷尾位置。
[0012]在本发明的一个或多个实施例中,特征长度条件〈length〉指定应用协议特征的特征字节码条件〈hex〉或特征字符串条件〈string〉内容的长度,其内容取值为非负整型值。
[0013]在本发明的一个或多个实施例中,特征字节序条件〈endian〉指定数据包载荷中由特征偏移量条件〈offset〉和特征长度条件〈length〉指定位置处的内容的字节序。〈endian〉的内容取值包括big大端字节序和little小端字节序。
[0014]在本发明的一个或多个实施例中,特征运算符条件〈operator〉指定数据包载荷中由特征偏移量条件〈offset〉、特征长度条件〈length〉和特征字节序条件〈endian〉描述位置处的内容与特征字节码条件〈hex〉或特征字符串条件〈string〉的内容所应满足的运算关系。〈operator〉的内容取值包括eq等于、ne不等于、It小于、gt大于、inRange属于区间、ninRange不属于区间、inset属于集合和ninSet不属于集合。
[0015]在本发明的一个或多个实施例中,IP条件<ip>指定应用协议特征为IP地址,其内容取值为IPv4或IPv6格式的IP地址,并且由vet和side属性设置IP地址的版本和归属端。其中,ver属性的取值包括ipv4和ipv6,其中,ipv4指定IP地址为带掩码的IPv4版本格式,ipv6指定IP地址为IPv6版本格式;side属性的取值包括local、remote和either,其中,local指定数据包的源IP地址,remote指定数据包的目的IP地址,either指定数据包的源或目的IP地址。
[0016]在本发明的一个或多个实施例中,端口条件〈port〉指定应用协议特征为端口,并且由type和side属性设定端口的格式和归属端。其中,type属性的取值包括single和range,其中,single指定十进制格式的单个端口,range指定十进制格式的端口范围;side属性的取值包括local、remote和either,其中,local指定数据包的源端口,remote指定数据包的目的端口,either指定数据包的源或目的端口。
[0017]在本发明的一个或多个实施例中,正则表达式条件<pcre>指定应用协议特征为正则表达式,其内容取值为标准PCRE格式的正则表达式。
[0018]在本发明的一个或多个实施例中,解密套件条件指定对数据包载荷进行解密以验证应用协议特征时所使用的解密算法套件,为应用协议特征的依赖条件。解密套件条件包括简单解密算法条件〈crypto〉、解密符号表达式条件〈cryptosymexp〉、密钥类型条件〈keytype〉、静态密钥条件〈stakey〉、动态密钥条件〈dynkey〉和解密模式条件〈cryptomode〉等基本密码算法条件、静态解密条件〈staticDecrypt〉和动态解密条件〈dynamicDecrypt〉。
[0019]在本发明的一个或多个实施例中,简单解密算法条件〈crypto〉指定静态或动态解密时使用的解密密码算法。〈crypto〉的内容取值包括异或X0R、加法ADD和减法SUB。
[0020]在本发明的一个或多个实施例中,解密符号表达式条件〈cryptosymexp〉指定静态或动态解密时使用的解密运算符号表达式,其内容由密钥符号k、当前密文符号C、下一密文符号η、整数常量及异或运算符号~、加法运算符号+、减法运算符号-和括号组成。〈cryptosymexp〉用以描述复杂的迭代解密模式场景。
[0021]在本发明的一个或多个实施例中,密钥类型条件〈keytype〉指定解密密钥的类型。〈keytype〉的内容取值包括block分组密码密钥类型和stream流密码密钥类型。
[0022]在本发明的一个或多个实施例中,静态密钥条件〈stakey〉指定解密使用的静态密钥。〈stakey〉由特征字节码条件〈hex〉和特征长度条件〈length〉组成。其中,〈hex〉的type属性的取值只能为single单值类型和singleSet单值列表类型,分别表示block分组密码密钥类型的单密钥和stream流密码密钥类型的流密钥。
[0023]在本发明的一个或多个实施例中,动态密钥条件〈dynkey〉由特征偏移量条件〈offset〉、特征长度条件〈length〉和特征字节序条件〈endian〉组成。〈dynkey〉指定动态密钥为从数据包载荷的〈offset〉处提取的长度为〈length〉并且字节序为〈endian〉的字节码。
[0024]在本发明的一个或多个实施例中,解密模式条件〈cryptomode〉指定静态或动态解密的操作模式。〈cryptomode〉的内容取值包括ecb简单模式和cbc迭代模式。其中,I)对于ecb模式,当密钥类型条件〈keytype〉设置为block类型时,ecb模式使用简单解密算法条件〈crypto〉和单密钥〈stakey〉或〈dynkey〉对数据包载荷中指定位置处的内容按密钥长度条件〈length〉分组依次进行解密;当密钥类型条件〈keytype〉设置为stream类型时,ecb模式使用简单解密算法〈crypto〉和流密钥〈stakey〉或〈dynkey〉对数据包载荷中指定位置处的内容按字节分组依次进行解密。2)对于cbc模式,当密钥类型条件〈keytype〉设置为block类型时,cbc模式使用解密符号表达式条件〈cryptosymexp〉指定的迭代解密算法和单密钥〈stakey〉或〈dynkey〉对数据包载荷中指定位置处的内容按密钥长度条件〈length〉分组依次进行解密;当密钥类型条件〈keytype〉设置为stream类型时,cbc模式使用解密符号表达式条件〈cryptosymexp〉指定的迭代解密算法和流密钥〈stakey〉或〈dynkey〉对数据包载荷中指定位置处的内容按字节分组依次进行解密。
[0025]在本发明的一个或多个实施例中,静态解密条件〈staticDecrypt〉指定对数据包载荷中的应用协议特征位置处的内容进行静态解密时使用的解密套件,其内容由简单解密算法条件〈crypto〉、解密符号表达式条件〈cryptosymexp〉、密钥类型条件〈keytype〉、静态密钥条件〈stakey〉和解密模式条件〈cryptomode〉构成。[0026]在本发明的一个或多个实施例中,动态解密条件〈dynamicDecrypt〉指定对数据包载荷中的应用协议特征位置处的内容进行动态解密时使用的解密套件,其内容由简单解密算法条件〈crypto〉、解密符号表达式条件〈cryptosymexp〉、密钥类型条件〈keytype〉、动态密钥条件〈dynkey〉、解密模式条件〈cryptomode〉组成。若动态密钥为密文,则〈dynamicDecrypt〉还应包括静态解密条件〈staticDecrypt〉以将动态密钥还原为明文。
[0027]在本发明的一个或多个实施例中,应用协议特征包括关键字签名基本特征〈sigKeyword〉、包长签名基本特征〈sigPayloadLen〉、IP签名基本特征〈siglp〉、端口签名基本特征〈sigPort〉、正则表达式签名基本特征〈sigPere〉、关联基本特征〈relate〉和算法插件基本特征〈sigAlgoPlugin〉等应用协议基本特征和数据包特征〈packet〉。
[0028]在本发明的一个或多个实施例中,关键字签名基本特征〈sigKeyword〉的内容由特征偏移量条件〈offset〉、特征长度条件〈length〉、特征字节序条件〈endian〉、特征运算符条件〈operator〉、特征字节码条件〈hex〉或特征字符串条件〈string〉、静态解密条件〈staticDecrypt〉或动态解密条件〈dynamicDecrypt〉组成。〈sigKeyword〉描述了在数据包载荷的偏移位置〈offset〉处提取的长度〈length〉的字节码(若指定了〈staticDecrypt〉或〈dynamicDecrypt〉,则需先进行解密)按照字节序〈endian〉与字节码〈hex〉或字符串〈siring〉应满足运算符〈operator〉。〈sigKeyword〉可设置 id、role 和 cipher 属性,其中,id属性指定关键字签名的编号;role属性指定关键字签名的角色,其取值包括basic和trivial,其中,basic指定关键字签名为唯一的主要特征,trivial指定关键字签名为次要特征;cipher属性指定关键字签名是否需要解密,其取值包括none、staic和dynamic,其中,none指定关键字签名无需解密,static指定关键字签名需使用〈staticDecrypt〉解密,dynamic指定关键字签名需使用〈dynamicDecrypt〉解密。
[0029]在本发明的一个或多个实施例中,包长签名基本特征〈sigPayloadLen〉的内容由特征偏移量条件〈offset〉、特征长度条件〈length〉、特征字节序条件〈endian〉、特征运算符条件〈operator〉和特征字节码条件〈hex〉组成。〈sigPayloadLen〉描述了从数据包载荷的偏移位置〈offset〉处提取的长度〈length〉的字节码按照字节序〈endian〉转换成的整数值加上字节码〈hex〉的值与数据包包长应满足运算符〈operator〉;若〈length〉的值为0,则表示无需从数据包载荷提取内容,但指定字节码〈hex〉的值与数据包包长应满足关系〈operator〉。〈sigPayloadLen〉可设置id和role属性,其中,id属性指定包长签名的编号;role属性指定包长签名的角色,其取值为trivial,表示指定包长签名为次要特征。
[0030]在本发明的一个或多个实施例中,IP签名基本特征〈siglp〉的内容由IP条件<ip>组成。〈siglp〉描述了数据包应带有的IP地址。〈siglp〉可设置id和role属性,其中,id属性指定IP签名的编号;role属性指定IP签名的角色,其取值为trivial,表示指定IP签名为次要特征。
[0031]在本发明的一个或多个实施例中,端口签名基本特征〈sigPort〉的内容由端口条件〈port〉组成。〈sigPort〉描述了数据包应带有的端口。〈sigPort〉可设置id和role属性,其中,id属性指定端口签名的编号;role属性指定端口签名的角色,其取值为trivial,表示指定端口签名为次要特征。
[0032]在本发明的一个或多个实施例中,正则表达式签名基本特征〈sigPere〉的内容由特征偏移量条件〈offset〉、特征字节码条件〈hex〉或特征字符串条件〈string〉和正则表达式条件<pcre>组成,其中,〈hex〉或〈string〉为正则表达式<pcre>包含的确定性子串。〈sigPere〉描述了在数据包载荷的偏移位置〈offset〉处开始的内容应符合正则表达式<pcre>。〈sigPere〉可设置id和role属性,其中,id属性指定正则表达式签名的编号;role属性指定正则表达式签名的角色,其取值包括basic和trivial,其中,basic指定正则表达式签名为唯一的主要特征,trivial指定正则表达式签名为次要特征。
[0033]在本发明的一个或多个实施例中,关联基本特征<relae>的内容由IP条件<ip>、端口条件〈port〉、传输层协议〈tpProto〉、应用协议标识符〈appProtoId〉和延迟确认包数〈delayPktNum〉组成。〈relate〉描述了通过已识别流的半流关联表缓存应用协议类型以进行后续直接关联识别所需要的信息。其中,IP条件<ip>和端口条件〈port〉皆为空元素,其指定为当前数据包的源(或目的)IP和端口 ;传输层协议〈tpProto〉指定当前数据包的传输层协议,其内容取值为tcp或udp ;应用协议标识符〈appProtoId〉指定关联的应用协议类型编号;延迟确认包数〈delayPktNum〉指定在关联识别出应用协议类型之后应延迟确认该识别结果并指定了应继续扫描数据包的个数。〈relate〉可设置method属性指定通道关联的类型和方法,其取值包括strong、weak和extract,其中,strong指定通道关联为强关联类型,关联信息由 <ip>、〈port〉、〈tpProto〉、〈appProtoId〉和〈delayPktNum〉组成,此处〈appProtoId〉表示命中半流关联表时所识别出的应用协议类型;weak指定通道关联为弱关联类型,关联信息由<ip>、〈tpProto〉和〈appProtoId〉组成,此处〈appProtoId〉表示关联识别的来源应用协议类型,弱关联类型的关联基本特征通常用作预过滤特征extract指定通道关联为提取关联类型,关联信息由〈appProtoId〉组成,关联通道信息从已识别为〈appProtoId〉类型的流的当前或后续数据包中按照检测识别模型指定的格式提取。
[0034]在本发明的一个或多个实施例中,算法插件基本特征〈sigAlgoPlugin〉的内容由动态共享库插件〈libso〉和算法函数<func>组成。〈sigAlgoPlugin〉描述了数据包应满足的应用协议特征由动态共享库导出的算法函数进行提供和验证。其中,动态共享库插件〈libso〉指定提供算法函数的动态共享库的名称;算法函数〈func〉指定应用协议识别算法函数名称,应用协议识别算法函数由动态共享库插件〈libso〉指定的动态共享库导出,其接口和含义由〈sigAlgoPlugin〉所属的检测识别模型进行定义和解释。
[0035]在本发明的一个或多个实施例中,数据包特征〈packet〉的内容由关键字签名基本特征〈sigKeyword〉、包长签名基本特征〈sigPayloadLen〉、IP签名基本特征〈siglp〉、端口签名基本特征〈sigPort〉、正则表达式签名基本特征〈sigPcre〉和关联基本特征〈relate〉等应用协议基本特征中的一个或多个组成。〈packet〉描述了在指定的流方向、包位置和包方向上的数据包满足的应用协议特征。〈packet〉可设置id、logrel、flowdir、pktdir和pktpos属性,其中,id属性指定数据包特征的编号;logrel属性指定多个应用协议基本特征之间应满足的逻辑关系,其取值包括and、or和逻辑表达式,其中,and指定多个应用协议基本特征之间满足逻辑与关系,or指定多个应用协议基本特征之间满足逻辑或关系,逻辑表达式指定多个应用协议基本特征之间满足逻辑表达式描述的逻辑关系,逻辑表达式由由逻辑与、逻辑或、括号和应用协议基本特征的编号组成;flowdir属性指定由五元组标识的流的流方向,其取值包括up、down和both,其中,up指定客户端到服务器端的流方向,即上行流方向,down指定服务器端到客户端的流方向,即下行流方向,both指定上行和下行双向流方向;pktdir属性指定数据包在特定流方向上的包方向,其取值包括up、down和either,其中,up指定数据包位于客户端到服务器端的上行方向,down指定数据包位于服务器端到客户端的下行方向,either指定数据包位于上行或下行方向;pktpos属性指定数据包在特定流方向上的包位置,其取值为-1时指定不固定的位置编号,取值为正整数时指定固定的位置编号。
[0036]在本发明的一个或多个实施例中,应用协议命中动作包括延迟确认动作〈delayConfirm〉、继续扫描动作〈scanRest〉和通道关联动作〈relateChannel〉,而一个或多个应用协议命中动作组成规则动作〈act1n〉。〈act1n〉描述了在流的应用协议已识别后应进行的操作。
[0037]在本发明的一个或多个实施例中,延迟确认动作〈delayConfirm〉的内容由延迟确认包数〈delayPktNum〉组成。〈delayConfirm〉描述了在流的应用协议已识别之后应延迟确认该识别结果并应继续扫描流中的其他数据包。其中,延迟确认包数〈delayPktNum〉指定继续扫描的数据包个数。
[0038]在本发明的一个或多个实施例中,继续扫描动作〈scanRest〉指定在流的应用协议已识别之后是否应继续扫描当前数据包载荷的其余部分以识别承载的上层精确应用协议。〈scanRest〉的内容取值包括yes和no,其中,yes指定继续扫描当前数据包载荷的其余部分,no指定无需继续扫描当前数据包载荷。
[0039]在本发明的一个或多个实施例中,通道关联动作〈relateChannel〉的内容由一个或多个关联基本特征〈relate〉组成。〈relateChannel〉描述了在流的应用协议已识别之后应提取指定的通道关联信息并添加到已识别流的半流关联表中。
[0040]在本发明的一个或多个实施例中,检测识别模型由应用协议识别规则进行描述,包括强关联识别模型〈appProtoRelateRule〉、单包识别模型〈appProtoSPktRule〉、多包识别模型〈appProtoMPktRule〉、算法解密识别模型〈appProtoAlgoDecryptRule〉和通道提取识别模型〈appProtoChannelExtractRule〉等。不同类型的检测识别模型具有相同的结构,都由规则头〈ruleHead〉、规则体〈ruleBody〉和可选的规则动作〈act1n〉三个部分组成,其中,〈ruleHead〉描述检测识别模型的应用协议信息,〈ruleBody〉描述检测识别模型的基于应用协议特征匹配的识别决策算法,而〈act1n〉则描述检测识别模型已识别之后的动作。所有的检测识别模型具有同样格式的规则头〈ruleHead〉,但规则体〈ruleBody〉的格式不尽相同,而对于有些检测识别模型则无需指定规则动作〈act1n〉。
[0041]在本发明的一个或多个实施例中,规则头〈ruleHead〉的内容由应用协议标识符〈appProtoId〉、承载层应用协议标识符〈bearerAppProtoId〉、传输层协议〈tpProto〉、IP层协议〈ipProto〉和优先级〈pr1rity〉组成。其中,〈appProtoId〉指定应用协议识别规则描述的应用协议编号,<bearerAppProtoId>指定当应用协议识别规则描述的应用协议由另一种应用协议进行承载时承载层应用协议的编号,〈tpProto〉指定包含应用协议特征的数据包位于的传输层封装协议的类型,〈ipProto〉指定包含应用协议特征的数据包位于的网络层封装协议的类型,〈pr1rity〉指定应用协议识别规则的优先级。
[0042]在本发明的一个或多个实施例中,强关联识别模型〈appProtoRelateRule〉的内容由规则头〈ruleHead〉和规则体〈ruleBody〉组成。〈appProtoRelateRule〉描述了可通过已识别流的半流关联表缓存应用协议类型进而后续直接关联识别应用协议类型的深度流检测识别模型。其中,〈ruleBody〉由包含关联基本特征〈relate〉的数据包特征〈packet〉组成,而且〈relate〉应指定为强关联类型。
[0043]在本发明的一个或多个实施例中,单包识别模型〈appProtoSPktRule〉的内容由规则头〈ruleHead〉、规则体〈ruleBody〉和规则动作〈act1n〉组成。〈appProtoSPktRule〉描述了可通过单个数据包特征确定应用协议类型的深度包检测识别模型。其中,〈ruleBody〉由单个数据包特征〈packet〉组成,〈act1n〉可由延迟确认动作〈delayConfirm〉、继续扫描动作〈scanRest〉和通道关联动作〈relateChannel〉中的一个或多个组成。
[0044]在本发明的一个或多个实施例中,多包识别模型〈appProtoMPktRule〉的内容由规则头〈ruleHead〉、规则体〈ruleBody〉和规则动作〈act1n〉组成。〈appProtoMPktRule〉描述了可通过同一条数据流上的多个数据包特征确定应用协议类型的深度流检测识别模型。其中,〈ruleBody〉由预过滤数据包特征〈preFilter〉和多数据包特征〈mpacket〉组成。预过滤数据包特征〈preFilter〉的内容由一个数据包特征〈packet〉组成,其描述了数据流在满足指定应用协议的多数据包特征之前应首先符合的预过滤条件。多数据包特征〈mpacket〉的内容由多个数据包特征〈packet〉组成,并可通过设置seq、succ和method属性指定多个数据包特征之间应满足的连续性、有序性和运算关系。其中,seq属性指定符合数据包特征的数据包到达的有序性,其取值包括yes和no,其中,yes指定符合数据包特征的数据包有序到达,no指定符合数据包特征的数据包不必有序到达;succ属性指定符合数据包特征的数据包到达的连续性,其取值包括yes和no,其中,yes指定符合数据包特征的数据包连续到达,no指定符合数据包特征的数据包不必连续到达;method属性指定多个数据包特征之间存在的运算关系,其取值包括none、eqDiffInterPkt和eqDiffSamePkt,其中,none指定多个数据包特征之间不存在运算关系,eqDifflnterPkt指定多个数据包特征包含的单个基本特征之间存在等差运算关系,eqDiffSamePkt指定多个数据包特征中每个数据包特征包含的两个基本特征之差相等。规则动作〈act1n〉由通道关联动作<relateChannel> 组成。
[0045]在本发明的一个或多个实施例中,算法解密识别模型〈appProtoAlgoDecryptRule〉的内容由规则头〈ruleHead〉、规则体〈ruleBody〉和规则动作〈act1n〉组成。〈appProtoAlgoDecryptRule〉描述了可通过先解密数据包密文数据再验证协议特征从而确定数据流的应用协议类型的深度包检测识别模型。其中,〈ruleBody〉由预过滤数据包特征〈preFilter〉和算法解密特征〈algoDecrypt〉。〈preFilter〉的内容由一个数据包特征〈packet〉组成,其指定在进行算法解密识别之前数据包应先满足的先决特征条件。算法解密特征〈algoDecrypt〉的内容由函数算法解密特征〈funcAlgoDecrypt〉或密码算法解密特征〈cipherAlgoDecrypt〉组成,其描述了算法解密识别的方式和解密方法。函数算法解密特征〈funcAlgoDecrypt〉的内容由算法插件基本特征〈sigAlgoPlugin〉组成,其描述了用于算法解密识别应用协议类型的算法函数特征;其中,〈sigAlgoPlugin〉提供的算法函数〈func>具有统一的固定接口形式,其接受规则、数据包、流上下文等输入并输出协议识别结果。密码算法解密特征〈cipherAlgoDecrypt〉的内容由包含支持解密的关键字签名基本特征〈sigKeyword〉的数据包特征〈packet〉组成,其描述了通过密码算法进行解密识别时的数据包特征;其中,〈sigKeyword〉分别通过动态解密条件〈dynamicDecrypt〉和静态解密条件〈staticDecrypt〉支持动态解密和静态解密两种解密方式。规则动作〈act1n〉由通道关联动作〈relateChannel〉组成。[0046]在本发明的一个或多个实施例中,通道提取识别模型〈appProtoChannelExtractRule〉的内容由规则头〈ruleHead〉、规则体〈ruleBody〉和规则动作〈act1n〉组成。〈appProtoChannelExtractRule〉描述了可通过解析已识别的控制通道并提取协商的关联数据通道从而确定数据流的应用协议类型的深度包检测识别模型。其中,〈ruleBody〉由预识别应用协议标识符〈preldentAppProtoId〉、预过滤数据包特征〈preFilter〉和通道提取器〈extractor〉组成。〈preldentAppProtoId〉指定在进行通道提取之前数据流应预先被识别为的应用协议类型;〈preFilter>的内容由一个数据包特征〈packet〉组成,其指定在进行通道提取之前数据流应首先满足的数据包特征;〈extractor〉的内容由正则通道提取器〈pcreExtractor〉或函数通道提取器〈funcExtractor〉组成,其指定解析和提取关联数据通道的IP地址和端口的方式和方法。正则通道提取器〈pcreExtractor〉的内容由解码器〈decoder〉、IP提取器〈ipExtractor〉和端口提取器〈portExtractor〉组成,并可设置loop属性,其描述了按照正则表达式设定的IP和端口格式解析文本格式协议和提取关联通道。其中,loop属性指定是否需要多次连续解析和提取关联通道;解码器〈decoder〉的内容由解码格式〈dectype〉、解码头部特征〈decHead〉和解码尾部特征〈decTail〉组成,其描述了需要进行解码的关联通道提取区的解码格式和特征,其中,〈dectype〉指定关联通道提取区的解码格式;〈deCHead>和〈decTail〉的内容都由关键字签名基本特征〈sigKeyword〉组成,其分别描述了需要进行解码的关联通道提取区开始位置和结束位置的特征;IP提取器〈ipExtractor〉和端口提取器〈portExtractor〉的内容都由包含正则表达式签名基本特征〈sigPcre〉的数据包特征〈packet〉组成,并可设置cgroup、ver、encoding、fmt和del属性,其分别描述了待提取IP地址字符串和端口字符串的格式特征;其中,〈sigPcre〉指定捕获IP地址分组或端口分组的PCRE正则表达式,cgroup属性指定正则表达式捕获IP地址分组或端口分组的编号,ver属性指定IP地址的协议版本,encoding属性指定IP地址字符串或端口字符串的编码格式,fmt属性指定IP地址字符串或端口字符串为多域或单值格式,del属性指定多域格式IP地址字符串或端口字符串的域分隔符。函数通道提取器〈funcExtractor〉的内容由算法插件基本特征〈sigAlgoPlugin〉组成,其描述了用以解析和提取关联通道的算法函数特征。其中,〈sigAlgoPlugin〉提供的算法函数<func>具有统一的固定接口形式,其接受规则、数据包、流上下文等输入并提供关联通道(IP、端口和传输协议)、关联通道个数等输出。规则动作〈act1n〉由通道关联动作〈relateChannel〉组成,并且〈relateChannel〉由强关联类型的关联基本特征〈relate〉组成。
[0047]在本发明的一个或多个实施例中,应用协议特征匹配单元包括分流匹配单元、关联表匹配单元、深度包检测单元和基本特征匹配单元。
[0048]在本发明的一个或多个实施例中,分流匹配单元首先利用IP协议号将流量分割为TCP流量和UDP流量,并进一步利用Web分流状态机将TCP流量分割为Web流量和非Web流量。其中,Web分流状态机为由Web流量的多个协议特征生成的确定型有限状态自动机。
[0049]在本发明的一个或多个实施例中,关联表匹配单元利用已识别的流的半流关联表执行关联查表匹配。其中,半流关联表包括强关联表和弱关联表。强关联表是由已识别并指定要执行强关联类型的通道关联动作的流的源(或目的)IP、源(或目的)端口和传输层协议的三元组生成的哈希表,并且在哈希节点中保存有应用协议类型信息;在强关联匹配时,关联表匹配单元对输入数据包的源(或目的)IP、源(或目的)端口和传输层协议的三元组进行哈希运算后查找强关联表并根据查找结果确定流的应用协议类型。弱关联表是由已识别并指定要执行弱关联类型的通道关联动作的流的源(或目的)IP与传输层协议的二元组生成的哈希表;在弱关联匹配时,关联表匹配单元对输入数据包的源(或目的)IP和传输层协议的二元组进行哈希运算后查找弱关联表并根据查找结果判定是否命中预过滤数据包特征的弱关联类型的关联基本特征。
[0050] 在本发明的一个或多个实施例中,深度包检测单元对应用协议识别规则的数据包特征进行匹配并输出命中了数据包特征的应用协议识别规则子集,其核心包括多模式串匹配单元、混合匹配单元和匹配结果判别单元。其中,多模式串匹配单元利用确定型多模匹配状态机执行匹配并验证命中关键字的偏移位置约束,输出初步命中的应用协议识别规则子集,并进而利用基本特征匹配单元和关联表匹配单元对命中规则的数据包特征的其余应用协议基本特征执行匹配;其中,多模匹配状态机由规则库中应用协议识别规则的数据包特征或预过滤数据包特征的主要的关键字签名基本特征或正则表达式签名基本特征经过预处理生成。混合匹配单元利用基本特征匹配单元和关联表匹配单元对规则库中未加入多模式串匹配单元的应用协议识别规则的数据包特征或预过滤数据包特征的应用协议基本特征执行匹配,并输出初步命中的应用协议识别规则子集。匹配结果判别单元根据多模式串匹配单元和混合匹配单元输出的应用协议识别规则的数据包特征或预过滤数据包特征的应用协议基本特征的命中状态和应用协议基本特征之间应满足的逻辑关系判定并输出最终命中了数据包特征的应用协议识别规则子集。
[0051 ] 在本发明的一个或多个实施例中,基本特征匹配单元包括包位置方向匹配单元、包长匹配单元、正则表达式匹配单元、单模式串匹配单元、算法插件匹配单元、动态解密匹配单元、静态解密匹配单元、IP地址匹配单元和端口匹配单元等。其中,包位置方向匹配单元执行数据包特征指定的流方向、包位置和包方向的验证;包长匹配单元执行数据包特征指定的包长签名基本特征的验证;正则表达式匹配单元执行数据包特征指定的正则表达式签名基本特征的验证;单模式串匹配单元执行数据包特征指定的无需解密的关键字签名基本特征的验证;算法插件匹配单元执行数据包特征指定的算法插件基本特征的算法函数验证;动态解密匹配单元执行数据包特征指定的带动态解密条件的关键字签名基本特征的验证;静态解密匹配单元执行数据包特征指定的带静态解密条件的关键字签名基本特征的验证;IP地址匹配单元执行数据包特征指定的IP签名基本特征的验证;端口匹配单元执行数据包特征指定的端口签名基本特征的验证。
[0052]在本发明的一个或多个实施例中,全流表存储单元保存会话流表、流节点、流子节点以及相应的节点池。其中,会话流表为由标识流的源目IP、源目端口和传输层协议的五元组生成的哈希表,流节点为哈希表中与流对应的节点,节点中保存流的应用协议识别状态;流子节点与深度包检测单元输出的应用协议识别规则相对应,并保存在当前流的流节点中,多个流子节点串接成单向链表,其中,流子节点保存对应的应用协议识别规则的中间匹配状态;流节点池与流子节点池为预分配的节点内存池。会话流表根据数据包到达时间刷新时间戳,并定时按照设定的超时间隔或状态转换进行流节点的老化,而流子节点在当前流识别结束之后或者对应的流节点老化之时将被老化;老化的流节点和流子节点被回收到对应的节点内存池。[0053]在本发明的一个或多个实施例中,半流关联表存储单元保存强关联表、弱关联表、强关联表节点、弱关联表节点以及相应的节点池。其中,强关联表节点和弱关联表节点保存应用协议识别规则指定并且从已识别流中提取的关联基本特征,关联表节点的应用协议类型根据应用协议识别结果进行更新;强关联表节点池与弱关联表节点池为预分配的节点内存池。关联表节点在进行关联匹配查询时刷新时间戳,并定时按照设定的超时间隔或特定的应用协议超时间隔进行老化;老化的关联表节点被回收到对应的节点内存池。
[0054]在本发明的一个或多个实施例中,规则库存储单元保存主规则库和影子规则库。其中,主规则库为当前处于活动状态的规则库,而影子规则库为处于待命状态的规则库;当进行规则库升级时,将首先更新影子规则库,并对其进行预处理生成新的深度包检测单元核心,然后进行热切换使新生成的深度包检测单元核心生效并使原影子规则库成为处于活动状态的主规则库,而原主规则库则成为影子规则库,原深度包检测单元核心将被销毁。
[0055]在本发明的一个或多个实施例中,识别模块包括强关联识别模块、单包识别模块、多包识别模块、算法解密识别模块和通道提取识别模块。
[0056]在本发明的一个或多个实施例中,强关联识别模块基于强关联识别模型构建,其通过关联表匹配单元查找半流关联表存储单元中的强关联表进行强关联匹配和应用协议识别。若查找成功,则根据命中的关联表节点确定待识别流的应用协议类型:若命中的关联表节点指定了延迟确认包数,则延迟确认该识别结果以允许应用协议识别引擎的其他识别模块继续扫描当前及后续数据包,否则直接在相应的流节点中标记当前流已识别为关联表节点中指定的应用协议类型;若查找失败,则交由应用协议识别引擎的其他识别模块继续识别。
[0057]在本发明的一个或多个实施例中,单包识别模块基于单包识别模型并联合多包、算法解密和通道提取识别模型构建,其通过分流匹配单元和深度包检测单元进行匹配和应用协议识别。其中,深度包检测单元分为Web应用深度包检测单元、TCP深度包检测单元和UDP深度包检测单元,Web应用深度包检测单元由规则库中Web类应用相应的单包识别规则的数据包特征生成,TCP深度包检测单元由规则库中通过TCP协议传输的非Web类应用相应的单包、多包、算法解密和通道提取识别规则的数据包特征或预过滤数据包特征生成,而UDP深度包检测单元由规则库中通过UDP协议传输的应用相应的单包、多包、算法解密和通道提取识别规则的数据包特征或预过滤数据包特征生成。单包识别模块首先通过分流匹配单元将待识别流粗分为Web流量、TCP非Web流量或UDP流量,若为Web流量则通过对应的Web应用深度包检测单元扫描整个HTTP报文头和若干字节数据,否则通过对应的TCP深度包检测单元或UDP深度包检测单元扫描数据包载荷的全包或头尾部若干字节,最后输出命中了数据包特征的单包识别规则、命中了数据包特征或预过滤数据包特征的多包识别规则以及命中了预过滤数据包特征的算法解密识别规则和通道提取识别规则。若同时命中了多条单包识别规则,则选择其中优先级最高的规则;若命中的单包识别规则指定了规则动作,则执行相应的延迟确认、继续扫描数据包载荷其余部分或强关联、弱关联、提取关联等通道关联操作。若最终成功命中,则将当前流标记为命中的单包识别规则指定的应用协议类型,否则交由应用协议识别引擎的其他识别模块继续识别。
[0058]在本发明的一个或多个实施例中,多包识别模块基于多包识别模型构建,其通过单包识别模块的深度包检测单元进行匹配和应用协议识别。多包识别模块通过单包识别模块过滤出初步命中的多包识别规则子集,对命中的规则生成相应的流多包子节点并将其保存在当前待识别流所对应的流节点中,对后续到达的数据包,由单包识别模块的深度包检测单元继续匹配,多包识别模块根据匹配结果和保存的匹配状态验证流多包子节点对应的规则指定的多数据包特征及其连续性、有序性和运算关系等约束条件并判定命中状态,同时更新匹配状态并将其保存在流多包子节点中。若最终成功命中,则将当前流标记为命中的多包识别规则指定的应用协议类型,否则交由应用协议识别引擎的其他识别模块继续识别。
[0059]在本发明的一个或多个实施例中,算法解密识别模块基于算法解密识别模型构建,其通过算法插件匹配单元、动态解密匹配单元和静态解密匹配单元进行匹配和应用协议识别。算法解密识别模块首先通过单包识别模块过滤出初步命中的算法解密识别规则子集,然后对命中规则的函数算法解密特征或密码算法解密特征分别由算法插件匹配单元、动态解密匹配单元或静态解密匹配单元继续匹配,最后根据匹配结果判定最终命中状态。若最终成功命中,则将当前流标记为命中的算法解密识别规则指定的应用协议类型,否则交由应用协议识别引擎的其他识别模块继续识别。
[0060]在本发明的一个或多个实施例中,通道提取识别模块基于通道提取识别模型构建,其通过正则表达式匹配单元和算法插件匹配单元进行关联通道提取并进而通过强关联识别模块进行应用协议识别。通道提取识别模块通过已经成功识别并且指定了提取关联类型的通道关联动作的其他识别模块获取候选的通道提取识别规则子集,并根据单包识别模块输出的通道提取识别规则预过滤数据包特征的命中状态最终确定用以进行通道提取的规则;通道提取识别模块根据规则指定的正则通道提取器或函数通道提取器分别由正则表达式匹配单元或算法插件匹配单元提取关联通道的IP地址、端口和传输层协议,并根据规则指定的强关联类型的通道关联动作将关联基本特征添加到强关联表中;若待提取的关联通道数据分布在多个数据包之中,则为命中的规则生成相应的流通道提取子节点并将其保存在当前流所对应的流节点中,对当前及后续到达的数据包,缓存相应的关联通道数据,然后再进行关联通道的提取。
[0061]在本发明的一个或多个实施例中,配置模块进行应用协议识别引擎的识别参数及规则库的配置。应用协议识别引擎的识别参数包括识别模块(强关联识别模块、多包识别模块、算法解密识别模块和通道提取识别模块)的启用/禁用开关、延迟确认动作开关、数据包载荷全包扫描开关、数据包载荷头尾部扫描字节数、HTTP报文数据扫描字节数、流扫描数据包个数、关联表老化超时间隔、特定应用协议的关联表老化超时间隔等。规则库的配置包括规则库的加载与解析、规则库的预处理、规则库的在线升级及热切换、规则库的持久化存储和规则库的查询等。
[0062]实施本发明具有如下有益效果:
[0063]I)本发明基于XML语言提供了新的应用协议特征、检测识别模型及其描述方法。该方法能够描述复杂加密应用的协议特征;能够描述同一种应用协议的不同流之间的关联和层次关系;能够描述应用协议的同一条流上的单个或多个数据包的特征及其之间的位置、方向、顺序和运算关系;能够通过逻辑表达式或符号表达式描述任意复杂度的应用协议特征之间的约束或加密应用协议特征的解密运算。
[0064]2)高识别率和高精确度。本发明采用强关联识别、单包识别、多包识别、算法解密识别、通道提取识别等多重应用协议识别方法进行细粒度、深层次识别,同时采用多层次匹配、多级过滤架构,以及已识别应用协议之后的继续深度扫描和延迟确认功能,从而具有极高的应用协议识别率、精确度与精细度。
[0065]3)加密流量识别。本发明采用动态解密、静态解密、算法函数解密等算法解密识别方法以及多包识别、强关联识别等深度流检测方法可有效识别加密流量。
[0066]4)高识别性能与可扩展性。本发明采用高效的确定型多模匹配状态机作为匹配核心,并通过TCP、UDP和Web分流方法以及预过滤方法缩小流量匹配范围以进一步提升识别性能,同时,基于本发明提供的多重应用协议识别方法可在具有硬件分流机制的多核硬件平台实现应用协议识别引擎的多实例并行、流水线匹配,从而具有线性的识别性能扩展能力,可通过增加引擎实例的数目实现整体匹配性能的线性增长。
【专利附图】

【附图说明】
[0067]图1为数据包特征和通道关联动作及其描述方法的示意图;
[0068]图2为应用协议识别引擎的功能框图;
[0069]图3为应用协议特征匹配单元的功能框图;
[0070]图4为多重应用协议识别方法的工作流程图;
[0071]图5为多重应用协议识别流水线的工作原理示意图;
[0072]图6为应用协议识别引擎多实例并行匹配装置的工作原理示意图。
【具体实施方式】
[0073]下面结合附图及实施例对本发明作进一步的详细说明。应当明白,本发明所公开的具体方法、功能、结构和装置既可以独立实现,也可以按照各种方式组合实现,以下所描述的【具体实施方式】本质上仅是示例性的,仅用以解释本发明,并不意图限制本发明范围。
[0074]图1给出了本发明实施例提供的数据包特征<paCket>101和通道关联动作<relateChannel>136及其描述方法的示意图。
[0075]如图1所示,数据包特征<packet>101由关键字签名基本特征<sigKeyword>102和包长签名基本特征<sigPayloadLen>128组成,并且id属性指定其编号为I, logrel属性指定为逻辑与,flowdir属性指定为双向流方向,pktpos属性指定为不固定的包位置-1,pktdir属性指定为上行包方向,其描述了数据包应同时满足关键字签名基本特征<sigKeyword>102和包长签名基本特征<sigPayloadLen>128,而且该数据包在双向流方向上可以为任意包位置但应具有上行包方向。
[0076]关键字签名基本特征<sigKeyword>102描述了在特征偏移量条件<offset>103指定的相对于数据包载荷头部偏移8个字节位置处提取的、特征长度条件<length>104指定的4字节长的字节码在根据动态解密条件<dynamicDecrypt>108进行解密后,按照特征字节序条件<endian>105指定的大端字节序与特征字节码条件<hex>107指定的十六进制字节码100edd04应满足特征运算符条件<operaor>106指定的等于关系。动态解密条件<dynamicDecrypt>108描述了按照解密符号表达式条件<cryptosymexp>109指定的解密算法表达式、解密模式条件<cryptomode>110指定的cbc迭代解密模式、密钥类型条件<keytype>116指定的流密钥类型、根据静态解密条件<staticDecrypt>117进行解密的动态密钥条件<dynkey>lll进行解密;其中,动态密钥条件<dynkey>lll指定动态密钥为从特征偏移量条件〈ofTSet>112指定的相对于数据包载荷头部偏移4个字节位置处提取的、特征字节序条件<endian>114指定的大端字节序的、特征长度条件<length>113指定的4字节长的密文字节码。静态解密条件<staticDecrypt>117描述了按照简单解密算法条件<crypto>118指定的异或解密算法、解密模式条件<cryptomode>119指定的ecb简单模式、密钥类型条件〈keytype>124指定的分组密钥类型、静态密钥条件<Stakey>120指定的静态密钥进行解密;其中,静态密钥条件<stakey>120指定静态密钥为特征长度条件<length>121指定的I字节长的、特征字节码条件<hex>122指定的十六进制字节码ea。
[0077]包长签名基本特征<sigPayloadLen>128描述了数据包的包长介于特征字节码条件<hex>133指定的、特征运算符条件<operator>132指定的区间类型的字节码005c和007a之间。
[0078]通道关联动作<relateChannel>136由单个关联基本特征<relate>137组成,而关联基本特征<relate>137由IP条件<ip>138、端口条件<port>139、传输层协议<tpProto>140、延迟确认包数<delayPktNum>141和应用协议标识符<appProtoId>142组成,并且method属性指定为强关联类型。关联基本特征<relate>137描述了从数据包中提取IP条件<ip>138指定的本地IP、端口条件<port>139指定的本地端口和传输层协议<tpPix)tO>140指定的TCP协议类型添加到强关联表,并指定当命中强关联表项时经过延迟确认包数〈delayPktNUm>141指定的3个数据包之后再将流识别为应用协议标识符<appProtoId>142指定的协议号为3的应用协议类型。
[0079]图2给出了本发明实施例提供的应用协议识别引擎200的功能框图。如图2所示,应用协议识别引擎200包括识别模块202、配置模块204、应用协议特征匹配单元216、规则库存储单元218、全流表存储单元220和半流关联表存储单元222。其中,识别模块202包括强关联识别模块206、单包识别模块208、多包识别模块210、算法解密识别模块212和通道提取识别模块214。
[0080]图3给出了本发明实施例提供的应用协议特征匹配单元216的功能框图。如图3所示,应用协议特征匹配单元216包括关联表匹配单元302、分流匹配单元304、深度包检测单元306和基本特征匹配单元308。其中,深度包检测单元306包括多模式串匹配单元310、混合匹配单元312和匹配结果判别单元314,基本特征匹配单元308包括包位置方向匹配单元316、包长匹配单元318、正则表达式匹配单元320、单模式串匹配单元322、算法插件匹配单元324、动态解密匹配单元326、静态解密匹配单元328、IP地址匹配单元330和端口匹配单元332。
[0081]强关联识别模块206通过关联表匹配单元302进行强关联匹配和应用协议识别。关联表匹配单元302对输入数据包的源(或目的)IP、源(或目的)端口和传输层协议的三元组进行哈希运算后查找半流关联表存储单元222中的强关联表并根据命中的关联表节点确定流的应用协议类型,并将全流表存储单元220中当前流对应的流节点标记为已识别的应用协议类型。
[0082]单包识别模块208通过分流匹配单元304和深度包检测单元306进行匹配和应用协议识别。其中,深度包检测单元306的工作过程通常可分为预处理和匹配两个阶段。
[0083]在深度包检测单元306的预处理阶段,配置模块204对输入的规则库存储单元218中保存的单包识别模块208、多包识别模块210、算法解密识别模块212和通道提取识别模块214的影子规则库统一进行预处理,生成深度包检测单元306的核心,即多模式串匹配单元310和混合匹配单元312,并执行无缝热切换使新生成的深度包检测单元306核心生效,规则库存储单元218中的影子规则库成为处于活动状态的主规则库,而原主规则库则成为影子规则库,原深度包检测单元核心将被销毁。
[0084]在深度包检测单元306的预处理阶段,将生成深度包检测单元的三个实例,包括Web应用深度包检测单元、TCP深度包检测单元和UDP深度包检测单元。其中,Web应用深度包检测单元由单包识别模块208的Web类应用规则的数据包特征生成,TCP深度包检测单元由通过TCP协议传输的非Web类应用相应的单包识别模块208、多包识别模块210、算法解密识别模块212和通道提取识别模块214的规则的数据包特征或预过滤数据包特征生成,而UDP深度包检测单元由通过UDP协议传输的应用相应的单包识别模块208、多包识别模块210、算法解密识别模块212和通道提取识别模块214的规则的数据包特征或预过滤数据包特征生成。
[0085]在深度包检测单元306的匹配阶段,多模式串匹配单元310和混合匹配单元312以待分类流中的带有效负载的数据包和规则库存储单元218中的主规则库作为输入,并联合基本特征匹配单元308和关联表匹配单元302对应用协议识别规则的数据包特征进行匹配,输出初步命中的应用协议识别规则子集和应用协议识别规则的数据包特征或预过滤数据包特征的应用协议基本特征的命中状态,然后,匹配结果判别单元314对应用协议基本特征之间应满足的逻辑关系进一步进行验证,从而筛选出最终命中了数据包特征的单包识别规则、命中了数据包特征或预过滤数据包特征的多包识别规则以及命中了预过滤数据包特征的算法解密识别规则和通道提取识别规则并输出。
[0086]多包识别模块210通过单包识别模块208的深度包检测单元306进行匹配和应用协议识别。多包识别模块210通过深度包检测单元306过滤出初步命中的多包识别规则子集,对命中的规则生成相应的流多包子节点并将其保存在当前待识别流所对应的全流表存储单元220中,对后续到达的数据包,由深度包检测单元306继续匹配,多包识别模块210根据匹配结果和保存的匹配状态判定流多包子节点对应的规则的命中状态,同时更新匹配状态并将其保存在全流表存储单元220中的流多包子节点中。
[0087]算法解密识别模块212通过算法插件匹配单元324、动态解密匹配单元326和静态解密匹配单元328进行匹配和应用协议识别。算法解密识别模块212首先通过单包识别模块208的深度包检测单元306过滤出初步命中的算法解密识别规则子集,然后对命中规则的函数算法解密特征或密码算法解密特征分别由算法插件匹配单元324、动态解密匹配单元326或静态解密匹配单元328继续匹配,最后根据匹配结果判定最终命中状态。
[0088]通道提取识别模块214通过正则表达式匹配单元320和算法插件匹配单元324进行关联通道提取并进而通过强关联识别模块206进行应用协议识别。通道提取识别模块214通过已经成功识别并且指定了提取关联类型的通道关联动作的单包识别模块208、多包识别模块210或算法解密识别模块212获取候选的通道提取识别规则子集,并根据单包识别模块208输出的通道提取识别规则预过滤数据包特征的命中状态最终确定用以进行通道提取的规则;通道提取识别模块214根据规则指定的正则通道提取器或函数通道提取器分别由正则表达式匹配单元320或算法插件匹配单元324提取关联通道的IP地址、端口和传输层协议,并根据规则指定的强关联类型的通道关联动作将关联基本特征添加到半流关联表存储单元222中的强关联表中;若待提取的关联通道数据分布在多个数据包之中,则为命中的规则生成相应的流通道提取子节点并将其保存在当前流所对应的全流表存储单元220中,对当前及后续到达的数据包,缓存相应的关联通道数据,然后再进行关联通道的提取。
[0089]配置模块204对应用协议识别引擎200的识别参数进行设置和查询,包括流扫描数据包个数、延迟确认动作开关,强关联识别模块206、多包识别模块210、算法解密识别模块212和通道提取识别模块214的启用/禁用开关,单包识别模块208的数据包载荷全包扫描开关、数据包载荷头尾部扫描字节数、HTTP报文数据扫描字节数,强关联识别模块206的关联表老化超时间隔、特定应用协议的关联表老化超时间隔等;配置模块204通过规则库存储单元218对应用协议识别引擎200的规则库进行配置,包括规则库的加载与解析、规则库的预处理、规则库的在线升级及热切换、规则库的持久化存储和规则库的查询等。
[0090]图4给出了本发明实施例提供的多重应用协议识别方法的工作流程图。如图4所示,多重应用协议识别方法的主要工作流程如下:
[0091]O)选中应用协议识别引擎200的识别模块202 ;
[0092]I)输入数据包、流节点上下文,更新流相关统计信息;其中,流节点上下文包括流节点、流子节点等,流相关统计信息保存在流节点中,包括包计数、各流方向上的当前包位
置等;
[0093]2)进入强关联识别模块206执行匹配:若当前流已强关联识别成功,则更新对应的流节点的识别状态,回收流节点中的全部流子节点,并转至步骤I)继续执行;否则转至步骤3)继续执行;
[0094]3)进入单包识别模块208执行匹配:首先通过分流匹配单元304将待识别流粗分为Web流量、TCP非Web流量或UDP流量,进而通过对应的Web应用深度包检测单元406、TCP深度包检测单元404或UDP深度包检测单元402进行匹配;若当前流已单包识别成功,则更新对应的流节点的识别状态,并转至步骤6)继续执行;否则转至步骤4)继续执行;
[0095]4)进入多包识别模块210执行匹配:若当前流已多包识别成功,则更新对应的流节点的识别状态,并转至步骤6)继续执行;否则更新对应的流多包子节点的匹配状态,并转至步骤5)继续执行;
[0096]5)进入算法解密识别模块212执行匹配:若当前流已算法解密识别成功,则更新对应的流节点的识别状态,并转至步骤6)继续执行;否则转至步骤I)继续执行;
[0097]6)进入通道提取识别模块214执行匹配:若通道提取识别成功完成,则回收流节点中的全部流子节点,否则更新对应的流通道提取子节点;转至步骤I)继续执行;
[0098]图5给出了本发明实施例提供的多重应用协议识别流水线的工作原理示意图。如图5所示,多重应用协议识别流水线由第一级流水节点502、第二级流水节点504、第三级流水节点506、第四级流水节点508和第五级流水节点510组成,每级流水节点包括一个应用协议识别线程,各级流水节点之间分别通过FIFO队列512、FIF0队列514、FIF0队列516和FIFO队列518进行通信,前一级流水节点作为生产者将中间识别结果放入队列,后一级流水节点则作为消费者从队列中取出中间识别结果继续进行识别。其中,第一级流水节点502对应强关联识别模块206,第二级流水节点504对应单包识别模块208,第三级流水节点506对应多包识别模块210,第四级流水节点508对应算法解密识别模块212,第五级流水节点510对应通道提取识别模块214。
[0099]多重应用协议识别流水线的主要工作流程如下:
[0100]O)输入数据包、流节点上下文,更新流相关统计信息;其中,流节点上下文包括流节点、流子节点等,流相关统计信息保存在流节点中,包括包计数、各流方向上的当前包位
置等;
[0101]I)进入第一级流水节点502:
[0102]与强关联识别模块206对应的识别线程读取数据包和流节点上下文,进行强关联识别并生成中间识别结果,将其放入FIFO队列512,然后将处理流程转至下一级流水节点;
[0103]2)进入第二级流水节点504:
[0104]与单包识别模块208对应的识别线程读取FIFO队列512,进行单包识别并生成中间识别结果,将其放入FIFO队列514,然后将处理流程转至下一级流水节点;
[0105]3)进入第三级流水节点506:
[0106]与多包识别模块210对应的识别线程读取FIFO队列514,进行多包识别并生成中间识别结果,将其放入FIFO队列516,然后将处理流程转至下一级流水节点;
[0107]4)进入第四级流水节点508:
[0108]与算法解密识别模块212对应的识别线程读取FIFO队列516,进行算法解密识别并生成中间识别结果,将其放入FIFO队列518,然后将处理流程转至下一级流水节点;
[0109]5)进入第五级流水节点510:
[0110]与通道提取识别模块214对应的识别线程读取FIFO队列518,判断当前识别结果:若已成功识别,则更新对应的流节点的识别状态,回收流节点中的流子节点,并进行通道提取识别;否则,将中间识别结果存入流节点中。
[0111]到此,本次流水线识别结束。
[0112]图6给出了本发明实施例提供的应用协议识别引擎多实例并行匹配装置的工作原理示意图。如图6所示,应用协议识别引擎多实例并行匹配装置包括硬件平台602和软件平台604。其中,硬件平台602包括NUMA_0节点608、NUMA_1节点610和硬件分流网卡606等;软件平台604包括应用协议识别进程612和应用协议识别进程614等。
[0113]NUMA_0节点608和NUMA_1节点610具有相同的结构,包括两个CPU核心和本地内存,其中,每个CPU核心都可访问所有NUMA节点上的本地内存和远端内存。
[0114]硬件分流网卡606包括四个接收队列通道,分别对应于NUMA_0节点608和NUMA_1节点610的四个CPU核心,数据包通过硬件哈希函数和分流哈希表被分流到相应的接收队列,并保证同一条数据流总是被分发到同一个CPU核心进行处理。
[0115]应用协议识别进程612包括识别线程616、识别线程618和识别资源620。其中,识别线程616和识别线程618为应用协议识别引擎的实例化线程,并分别与NUMA_0节点608的两个CPU核心绑定;识别资源620包括本地规则库、本地关联表和本地会话流表,其中,本地关联表和本地会话流表的节点内存池预先从NUMA_0节点608的本地内存进行分配。识别线程616和识别线程618共享识别资源620。
[0116]应用协议识别进程614与应用协议识别进程612完全类似,包括识别线程622、识别线程624和识别资源626,此处不再赘述。[0117]应用协议识别进程612与应用协议识别进程614共享NUMA_0节点608和NUMA_1节点610的内存,因此可以申请和访问对方的识别资源,但优先使用本地识别资源。当本地关联表和本地会话流表的节点不够分配时,可以从远端节点内存池进行申请,并在老化时优先回收到原节点内存池。
[0118]识别资源620和识别资源626的本地关联表为半流关联表,硬件分流网卡606并不能保证半流被分发到同一个NUMA节点,因此,在对流进行应用协议的强关联识别时需要同时访问识别资源620和识别资源626的本地关联表,并且首先查找本地关联表,若未命中则继续查找远端关联表。
【权利要求】
1.一种多重应用协议识别方法和应用协议识别引擎,其特征在于: 多重应用协议识别方法基于XML语言提供了特征条件、解密套件条件、应用协议特征、应用协议命中动作、多种检测识别模型及相应的规则描述方法; 应用协议识别引擎包括应用协议特征匹配单元、全流表存储单元、半流关联表存储单元、规则库存储单元、识别模块和配置模块。
2.根据权利要求1所述的特征条件,其特征在于: 所述的特征条件指定应用协议所应满足的基本条件约束,用以描述应用协议基本特征; 所述的特征条件包括特征字节码条件〈hex〉、特征字符串条件〈string〉、特征偏移量条件〈offset〉、特征长度条件〈length〉、特征字节序条件〈endian〉、特征运算符条件〈operator〉、IP条件<ip>、端口条件〈port〉和正则表达式条件<pcre> ; 所述的特征字节码条件〈hex〉指定应用协议特征的内容由字节码描述,其内容取值为由十六进制字符组成并且固定为网络字节序的位串,并且由type属性指定内容取值为单值类型、区间类型、单值列表类型或单值/区间混合列表类型; 所述的特征字符串条件〈string〉指定应用协议特征的内容由ASCII字符串进行描述,并且由case属性指定内容取值是否为大小写敏感格式; 所述的特征偏移量条 件〈offset〉指定应用协议特征的所述的特征字节码条件〈hex〉或所述的特征字符串条件〈string〉的固定或不固定位置的偏移量,并且由relative属性指定位置偏移量的相对参考方向; 所述的特征长度条件〈length〉指定应用协议特征的所述的特征字节码条件〈hex〉或所述的特征字符串条件〈string〉内容的长度; 所述的特征字节序条件〈endian〉指定数据包载荷中由所述的特征偏移量条件〈offset〉和所述的特征长度条件〈length〉指定位置处的内容的字节序; 所述的特征运算符条件〈operator〉指定数据包载荷中由所述的特征偏移量条件〈offset〉、所述的特征长度条件〈length〉和所述的特征字节序条件〈endian〉描述位置处的内容与所述的特征字节码条件〈hex〉或所述的特征字符串条件〈string〉的内容所应满足的运算关系; 所述的IP条件<ip>指定应用协议特征为IPv4或IPv6格式的IP地址,并且由ver和side属性分别设置IP地址的版本和归属端; 所述的端口条件〈port〉指定应用协议特征为端口,并且由type和side属性分别设定端口的单值或区间类型格式和归属端; 所述的正则表达式条件<pcre>指定应用协议特征为标准PCRE格式的正则表达式。
3.根据权利要求1到2所述的解密套件条件,其特征在于: 所述的解密套件条件指定对数据包载荷进行解密以验证应用协议特征时所使用的解密算法套件,为应用协议特征的依赖条件; 所述的解密套件条件包括简单解密算法条件〈crypto〉、解密符号表达式条件〈cryptosymexp〉、密钥类型条件〈keytype〉、静态密钥条件〈stakey〉、动态密钥条件〈dynkey〉和解密模式条件〈cryptomode〉等基本密码算法条件、静态解密条件〈staticDecrypt〉和动态解密条件〈dynamicDecrypt〉;所述的简单解密算法条件〈crypto〉指定静态或动态解密时使用的解密密码算法,其内容取值包括异或、加法和减法; 所述的解密符号表达式条件〈cryptosymexp〉指定静态或动态解密时使用的解密运算符号表达式,其内容由密钥符号k、当前密文符号C、下一密文符号η、整数常量及异或运算符号~、加法运算符号+、减法运算符号-和括号组成;〈Crypt0SymeXp>用以描述复杂的迭代解密模式场景; 所述的密钥类型条件〈keytype〉指定解密密钥的类型,其内容取值包括分组密码密钥类型和流密码密钥类型; 所述的静态密钥条件〈stakey〉指定解密使用的静态密钥,其由所述的特征字节码条件〈hex〉和所述的特征长度条件〈length〉组成。其中,〈hex〉的type属性的取值只能为单值类型和单值列表类型,分别表示分组密码密钥类型的单密钥和流密码密钥类型的流密钥; 所述的动态密钥条件〈dynkey〉由所述的特征偏移量条件〈offset〉、所述的特征长度条件〈length〉和所述的特征字节序条件〈endian〉组成;〈dynkey>指定动态密钥为从数据包载荷的〈offset〉处提取的长度为〈length〉并且字节序为〈endian〉的字节码; 所述的解密模式条件〈cryptomode〉指定静态或动态解密的操作模式,其内容取值包括ecb简单模式和cbc迭代模式。其中,I)对于ecb简单模式,当所述的密钥类型条件〈keytype〉设置为分组密码密钥类型时,ecb模式使用所述的简单解密算法条件〈crypto〉和所述的静态密钥条件〈stakey〉或所述的动态密钥条件〈dynkey〉指定的单个密钥对数据包载荷中指定位置 处的内容按所述的静态密钥条件〈stakey〉或所述的动态密钥条件〈dynkey〉指定的所述的特征长度条件〈length〉分组依次进行解密;当所述的密钥类型条件〈keytype〉设置为流密码密钥类型时,ecb简单模式使用所述的简单解密算法〈crypto〉和所述的静态密钥条件〈stakey〉或所述的动态密钥条件〈dynkey〉指定的流密钥对数据包载荷中指定位置处的内容按字节分组依次进行解密。2)对于cbc迭代模式,当所述的密钥类型条件〈keytype〉设置为分组密码密钥类型时,cbc迭代模式使用所述的解密符号表达式条件〈cryptosymexp〉指定的迭代解密算法和所述的静态密钥条件〈stakey〉或所述的动态密钥条件〈dynkey〉指定的单个密钥对数据包载荷中指定位置处的内容按所述的静态密钥条件〈stakey〉或所述的动态密钥条件〈dynkey〉指定的所述的特征长度条件〈length〉分组依次进行解密;当所述的密钥类型条件〈keytype〉设置为流密码密钥类型时,cbc迭代模式使用所述的解密符号表达式条件〈cryptosymexp〉指定的迭代解密算法和所述的静态密钥条件〈stakey〉或所述的动态密钥条件〈dynkey〉指定的流密钥对数据包载荷中指定位置处的内容按字节分组依次进行解密; 所述的静态解密条件〈staticDecrypt〉指定对数据包载荷中的应用协议特征位置处的内容进行静态解密时使用的解密套件,其内容由所述的简单解密算法条件〈crypto〉、所述的解密符号表达式条件〈cryptosymexp〉、所述的密钥类型条件〈keytype〉、所述的静态密钥条件〈stakey〉和所述的解密模式条件〈cryptomode〉构成; 所述的动态解密条件〈dynamicDecrypt〉指定对数据包载荷中的应用协议特征位置处的内容进行动态解密时使用的解密套件,其内容由所述的简单解密算法条件〈crypto〉、所述的解密符号表达式条件〈cryptosymexp〉、所述的密钥类型条件〈keytype〉、所述的动态密钥条件〈dynkey〉、所述的解密模式条件〈cryptomode〉组成;若动态密钥为密文,则〈dynamicDecrypt〉还应包括所述的静态解密条件〈staticDecrypt〉以将动态密钥还原为明文。
4.根据权利要求1到3所述的应用协议特征,其特征在于: 所述的应用协议特征包括关键字签名基本特征〈sigKeyword〉、包长签名基本特征<sigPayloadLen>、IP签名基本特征〈siglp〉、端口签名基本特征〈sigPort〉、正则表达式签名基本特征〈sigPcre〉、关联基本特征〈relate〉和算法插件基本特征〈sigAlgoPlugin〉等应用协议基本特征和数据包特征〈packet〉; 所述的关键字签名基本特征〈sigKeyword〉的内容由所述的特征偏移量条件〈offset〉、所述的特征长度条件〈length〉、所述的特征字节序条件〈endian〉、所述的特征运算符条件〈operator〉、所述的特征字节码条件〈hex〉或所述的特征字符串条件〈string〉、所述的静态解密条件〈staticDecrypt〉或所述的动态解密条件〈dynamicDecrypt〉组成。〈sigKeyword〉描述了在数据包载荷的偏移位置〈offset〉处提取的长度〈length〉的字节码(若指定了所述的静态解密条件〈staticDecrypt〉或所述的动态解密条件〈dynamicDecrypt〉,则需先进行解密)按照字节序〈endian〉与字节码〈hex〉或字符串〈string〉应满足运算符〈operator〉。〈sigKeyword〉可设置 id、role 和 cipher 属性,其中,id属性指定关键字签名的编号;role属性指定关键字签名的角色,包括指定关键字签名为唯一的主要特征或指定关键字签名为次要特征cipher属性指定关键字签名是否需要解密,包括指定关键字签名无需解密、指定关键字签名需使用所述的静态解密条件〈staticDecrypt〉解密或指定关键字签名需使用所述的动态解密条件〈dynamicDecrypt〉解密; 所述的包长签名基本 特征〈sigPayloadLen〉的内容由所述的特征偏移量条件〈offset〉、所述的特征长度条件〈length〉、所述的特征字节序条件〈endian〉、所述的特征运算符条件〈operator〉和所述的特征字节码条件〈hex〉组成。〈sigPayloadLen〉描述了从数据包载荷的偏移位置〈offset〉处提取的长度〈length〉的字节码按照字节序〈endian〉转换成的整数值加上字节码〈hex〉的值与数据包包长应满足运算符〈operator〉;若〈length〉的值为0,则表示无需从数据包载荷提取内容,但指定字节码〈hex〉的值与数据包包长应满足关系〈operator〉。〈sigPayloadLen〉可设置id和role属性,其中,id属性指定包长签名的编号;role属性指定包长签名的角色,包括指定包长签名为次要特征;所述的IP签名基本特征〈siglp〉的内容由所述的IP条件<ip>组成。〈siglp〉描述了数据包应带有的IP地址。〈siglp〉可设置id和role属性,其中,id属性指定IP签名的编号;role属性指定IP签名的角色,包括指定IP签名为次要特征; 所述的端口签名基本特征〈sigPort〉的内容由所述的端口条件〈port〉组成。〈sigPort〉描述了数据包应带有的端口。〈sigPort〉可设置id和role属性,其中,id属性指定端口签名的编号;role属性指定端口签名的角色,包括指定端口签名为次要特征;所述的正则表达式签名基本特征〈sigPcre〉的内容由所述的特征偏移量条件〈offset〉、所述的特征字节码条件〈hex〉或所述的特征字符串条件〈string〉和所述的正则表达式条件<pcre>组成,其中,〈hex〉或〈string〉为所述的正则表达式<pcre>包含的确定性子串。〈sigPcre〉描述了在数据包载荷的偏移位置〈offset〉处开始的内容应符合正则表达式<pcre>。〈sigPcre〉可设置id和role属性,其中,id属性指定正则表达式签名的编号;role属性指定正则表达式签名的角色,包括指定正则表达式签名为唯一的主要特征或指定正则表达式签名为次要特征; 所述的关联基本特征〈relate〉的内容由所述的IP条件<ip>、所述的端口条件〈port〉、传输层协议〈tpProto〉、应用协议标识符〈appProtoId〉和延迟确认包数<delayPktNum>组成。〈relate〉描述了通过已识别流的半流关联表缓存应用协议类型以进行后续直接关联识别所需要的信息。其中,所述的IP条件<ip>和所述的端口条件〈port〉皆为空元素,其指定为当前数据包的源(或目的)IP和端口 ;所述的传输层协议〈tpProto〉指定当前数据包的传输层协议;所述的应用协议标识符〈appProtoId〉指定关联的应用协议类型编号;所述的延迟确认包数〈delayPktNum〉指定在关联识别出应用协议类型之后应延迟确认该识别结果并指定了应继续扫描数据包的个数。〈relate〉可设置method属性指定通道关联的类型和方法,包括强关联类型、弱关联类型和提取关联类型;其中,当指定通道关联为强关联类型时,关联信息由<ip>、〈port〉、〈tpProto〉、〈appProtoId〉和〈delayPktNum〉组成,此处〈appProtoId〉表示命中半流关联表时所识别出的应用协议类型;当指定通道关联为弱关联类型时,关联信息由<ip>、〈tpProto〉和〈appProtoId〉组成,此处〈appProtoId〉表示关联识别的来源应用协议类型,弱关联类型的关联基本特征通常用作预过滤特征;当指定通道关联为提取关联类型时,关联信息由〈appProtoId〉组成,关联通道信息从已识别为〈appProtoId〉类型的流的当前或后续数据包中按照检测识别模型指定的格式提取; 所述的算法插件基本特征〈sigAlgoPlugin〉的内容由动态共享库插件<libso>和算法函数<func>组成。〈sigAlgoPlugin〉描述了数据包应满足的应用协议特征由动态共享库导出的算法函数进行提供和验证。其中,所述的动态共享库插件〈libso〉指定提供算法函数的动态共享库的名称;所述的算法函数〈func>指定应用协议识别算法函数名称,应用协议识别算法函数由所述的动态共享库插件〈libso〉指定的动态共享库导出,其接口和含义由〈sigAlgoPlugin〉所属的检测识别模型进行定义和解释; 所述的数据包特征〈packet〉的内容由所述的关键字签名基本特征〈sigKeyword〉、所述的包长签名基本特征〈sigPayloadLen〉、所述的IP签名基本特征〈siglp〉、所述的端口签名基本特征〈sigPort〉、所述的正则表达式签名基本特征〈sigPcre〉和所述的关联基本特征〈relate〉等应用协议基本特征中的一个或多个组成。〈packet〉描述了在指定的流方向、包位置和包方向上的数据包满足的应用协议特征。〈packet〉可设置id、logrel、flowdir、pktdir和pktpos属性,其中,id属性指定数据包特征的编号;logrel属性指定多个应用协议基本特征之间应满足的逻辑关系,包括指定多个应用协议基本特征之间满足逻辑与关系、逻辑或关系、逻辑表达式描述的逻辑关系,所述的逻辑表达式由由逻辑与、逻辑或、括号和应用协议基本特征的编号组成;flowdir属性指定由五元组标识的流的流方向,包括指定客户端到服务器端的上行流方向、指定服务器端到客户端的下行流方向、指定上行和下行双向流方向;pktdir属性指定数据包在特定流方向上的包方向,包括指定数据包位于客户端到服务器端的上行方向、指定数据包位于服务器端到客户端的下行方向、指定数据包位于上行或下行方向;pktp0S属性指定数据包在特定流方向上的包位置,包括指定不固定的位置编号、指定固定的位置编号。
5.根据权利要求1到4中所述的应用协议命中动作,其特征在于: 所述的应用协议命中动作包括延迟确认动作〈del ay Confirm〉、继续扫描动作〈scanRest〉和通道关联动作〈relateChannel〉,而一个或多个应用协议命中动作组成规则动作〈act1n〉。其中,〈act1n〉描述了在流的应用协议已识别后应进行的操作; 所述的延迟确认动作〈delayConfirm〉的内容由延迟确认包数〈delayPktNum〉组成,其描述了在流的应用协议已识别之后应延迟确认该识别结果并应继续扫描流中的其他数据包。其中,所述的延迟确认包数〈delayPktNum〉指定继续扫描的数据包个数; 所述的继续扫描动作〈scanRest〉指定在流的应用协议已识别之后是否应继续扫描当前数据包载荷的其余部分以识别承载的上层精确应用协议,其内容包括指定继续扫描当前数据包载荷的其余部分、指定无需继续扫描当前数据包载荷; 所述的通道关联动作〈relateChannel〉的内容由一个或多个所述的关联基本特征〈relate〉组成,其描述了在流的应用协议已识别之后应提取指定的通道关联信息并添加到已识别流的半流关联表中。
6.根据权利要求1到5所述的检测识别模型,其特征在于: 所述的检测识别模型由应用协议识别规则进行描述,包括强关联识别模型〈appProtoRelateRule〉、单包识别模型〈appProtoSPktRule〉、多包识别模型〈appProtoMPktRule〉、算法解密识别模型〈appProtoAlgoDecryptRule〉和通道提取识别模型〈appProtoChannelExtractRule〉等。不同类型的检测识别模型具有相同的结构,都由规则头〈ruleHead 〉、规则体〈ruleBody〉和可选的规则动作〈act1n〉三个部分组成,其中,<ruleHead>描述检测识别模型的应用协议信息,〈ruleBody〉描述检测识别模型的基于应用协议特征匹配的识别决策算法,而〈act1n〉则描述检测识别模型已识别之后的动作;所述的规则头〈ruleHead〉的内容由应用协议标识符〈appProtoId〉、承载层应用协议标识符〈bearerAppProtoId〉、传输层协议〈tpProto〉、IP层协议〈ipProto〉和优先级〈pr1rity〉组成。其中,所述的〈appProtoId〉指定应用协议识别规则描述的应用协议编号,所述的〈bearerAppProtoId〉指定当应用协议识别规则描述的应用协议由另一种应用协议进行承载时承载层应用协议的编号,所述的〈tpProto〉指定包含应用协议特征的数据包位于的传输层封装协议的类型,所述的〈ipProto〉指定包含应用协议特征的数据包位于的网络层封装协议的类型,所述的〈pr1rity〉指定应用协议识别规则的优先级; 所述的强关联识别模型〈appProtoRelateRule〉的内容由所述的规则头〈ruleHead〉和所述的规则体〈ruleBody〉组成。〈appProtoRelateRule〉描述了可通过已识别流的半流关联表缓存应用协议类型进而后续直接关联识别应用协议类型的深度流检测识别模型。其中,〈ruleBody〉由包含所述的关联基本特征〈relate〉的所述的数据包特征〈packet〉组成,而且〈relate〉应指定为强关联类型; 所述的单包识别模型〈appProtoSPktRule〉的内容由所述的规则头〈ruleHead〉、所述的规则体〈ruleBody〉和所述的规则动作〈act1n〉组成。〈appProtoSPktRule〉描述了可通过单个数据包特征确定应用协议类型的深度包检测识别模型。其中,〈ruleBody〉由单个所述的数据包特征〈packet〉组成,〈act1n〉可由所述的延迟确认动作〈delayConfirm〉、所述的继续扫描动作〈scanRest〉和所述的通道关联动作〈relateChannel〉中的一个或多个组成;所述的多包识别模型〈appProtoMPktRule〉的内容由所述的规则头〈ruleHead〉、所述的规则体〈ruleBody〉和所述的规则动作〈act1n〉组成。〈appProtoMPktRule〉描述了可通过同一条数据流上的多个数据包特征确定应用协议类型的深度流检测识别模型。其中,〈ruleBody〉由预过滤数据包特征〈preFilter〉和多数据包特征〈mpacket〉组成。所述的预过滤数据包特征〈preFi Iter>的内容由一个所述的数据包特征〈packet〉组成,其描述了数据流在满足指定应用协议的多数据包特征之前应首先符合的预过滤条件。所述的多数据包特征〈mpacket〉的内容由多个所述的数据包特征〈packet〉组成,并可通过设置seq、succ和method属性指定多个数据包特征之间应满足的连续性、有序性和运算关系。其中,seq属性指定符合数据包特征的数据包到达的有序性,包括指定符合数据包特征的数据包有序到达、指定符合数据包特征的数据包不必有序到达;succ属性指定符合数据包特征的数据包到达的连续性,包括指定符合数据包特征的数据包连续到达、指定符合数据包特征的数据包不必连续到达;method属性指定多个数据包特征之间存在的运算关系,包括指定多个数据包特征之间不存在运算关系、指定多个数据包特征包含的单个基本特征之间存在等差运算关系、指定多个数据包特征中每个数据包特征包含的两个基本特征之差相等;所述的规则动作〈act1n〉由所述的通道关联动作〈relateChannel〉组成; 所述的算法解密识别模型〈appProtoAlgoDecryptRule〉的内容由所述的规则头〈ruleHead〉、所述的规则体〈ruleBody〉和所述的规则动作〈act1n〉组成。〈appProtoAlgoDecryptRule〉描述了可通过先解密数据包密文数据再验证协议特征从而确定数据流的应用协议类型的深度包检测识别模型。其中,〈ruleBody〉由预过滤数据包特征〈preFilter〉和算法解密特征〈algoDecrypt〉。所述的预过滤数据包特征〈preFilter〉的内容由一个所述的数据包特征〈packet〉组成,其指定在进行算法解密识别之前数据包应先满足的先决特征条件。所述的算法解密特征〈algoDecrypt〉的内容由函数算法解密特征〈funcAlgoDecrypt〉或密码算法解密特征〈cipherAlgoDecrypt〉组成,其描述了算法解密识别的方式和解密方法。所述的函数算法解密特征〈funcAlgoDecrypt〉的内容由所述的算法插件基本特征〈sigAlgoPlugin〉组成,其描述了用于算法解密识别应用协议类型的算法函数特征;其中,〈sigAlgoPlugin〉提供的所述的算法函数<func>具有统一的固定接口形式,其接受规则、数据包、流上下文等输入并输出协议识别结果。所述的密码算法解密特征〈cipherAlgoDecrypt〉的内容由包含支持解密的所述的关键字签名基本特征〈sigKeyword〉的所述的数据包特征〈packet〉组成,其描述了通过密码算法进行解密识别时的数据包特征;其中,〈sigKeyword〉分别通过所述的动态解密条件〈dynamicDecrypt〉和所述的静态解密条件〈staticDecrypt〉支持动态解密和静态解密两种解密方式。所述的规则动作〈act1n〉由所述的通道关联动作〈relateChannel〉组成; 所述的通道提取识别模型〈appProtoChannelExtractRule〉的内容由所述的规则头〈ruleHead〉、所述的规则体〈ruleBody〉和所述的规则动作〈act1n〉组成。〈appProtoChannelExtractRule〉描述了可通过解析已识别的控制通道并提取协商的关联数据通道从而确定数据流的应用协议类型的深度包检测识别模型。其中,〈ruleBody〉由预识别应用协议标识符〈preldentAppProtoId〉、预过滤数据包特征〈preFilter〉和通道提取器〈extractor〉组成。〈preldentAppProtoId〉指定在进行通道提取之前数据流应预先被识别为的应用协议类型;〈preFilter>的内容由一个所述的数据包特征〈packet〉组成,其指定在进行通道提取之前数据流应首先满足的数据包特征^extractor〉的内容由正则通道提取器〈pcreExtractor〉或函数通道提取器〈funcExtractor〉组成,其指定解析和提取关联数据通道的IP地址和端口的方式和方法。所述的正则通道提取器〈pcreExtractor〉的内容由解码器〈decoder〉、IP提取器〈ipExtractor〉和端口提取器〈portExtractor〉组成,并可设置loop属性,其描述了按照正则表达式设定的IP和端口格式解析文本格式协议和提取关联通道。其中,loop属性指定是否需要多次连续解析和提取关联通道;所述的解码器〈decoder〉的内容由解码格式〈dectype〉、解码头部特征〈decHead〉和解码尾部特征〈decTail〉组成,其描述了需要进行解码的关联通道提取区的解码格式和特征,其中,〈dectype〉指定关联通道提取区的解码格式;〈decHead〉和〈decTail〉的内容都由所述的关键字签名基本特征〈sigKeyword〉组成,其分别描述了需要进行解码的关联通道提取区开始位置和结束位置的特征;所述的IP提取器〈ipExtractor〉和所述的端口提取器〈portExtractor〉的内容都由包含所述的正则表达式签名基本特征〈sigPcre〉的所述的数据包特征〈packet〉组成,并可设置cgroup、ver、encoding、fmt和del属性,其分别描述了待提取IP地址字符串和端口字符串的格式特征;其中,〈sigPcre〉指定捕获IP地址分组或端口分组的PCRE正则表达式,cgroup属性指定正则表达式捕获IP地址分组或端口分组的编号,ver属性指定IP地址的协议版本,encoding属性指定IP地址字符串或端口字符串的编码格式,fmt属性指定IP地址字符串或端口字符串为多域或单值格式,del属性指定多域格式IP地址字符串或端口字符串的域分隔符。所述的函数通道提取器〈funcExtractor〉的内容由所述的算法插件基本特征〈sigAlgoPlugin〉组成,其描述了用以解析和提取关联通道的算法函数特征。其中,〈sigAlgoPlugin〉提供的所述的算法函数〈func〉具有统一的固定接口形式,其接受规则、数据包、流上下文等输入并提供关联通道(IP、端口和传输协议)、关联通道个数等输出。所述的规则动作〈act1n〉由所述的通道关联动作〈relateChannel〉组成,并且〈relateChannel〉由强关联类型的所述的关联基本特征〈relate〉组成。
7.根据权利要求1 到6所述的应用协议特征匹配单元,其特征在于: 所述的应用协议特征匹配单元包括分流匹配单元、关联表匹配单元、深度包检测单元和基本特征匹配单元; 所述的分流匹配单元首先利用IP协议号将流量分割为TCP流量和UDP流量,并进一步利用Web分流状态机将TCP流量分割为Web流量和非Web流量。其中,所述的Web分流状态机为由Web流量的多个协议特征生成的确定型有限状态自动机; 所述的关联表匹配单元利用已识别的流的半流关联表执行关联查表匹配。其中,半流关联表包括强关联表和弱关联表。所述的强关联表是由已识别并指定要执行强关联类型的通道关联动作的流的源(或目的)IP、源(或目的)端口和传输层协议的三元组生成的哈希表,并且在哈希节点中保存有应用协议类型信息;在强关联匹配时,所述的关联表匹配单元对输入数据包的源(或目的)IP、源(或目的)端口和传输层协议的三元组进行哈希运算后查找强关联表并根据查找结果确定流的应用协议类型。所述的弱关联表是由已识别并指定要执行弱关联类型的通道关联动作的流的源(或目的)IP与传输层协议的二元组生成的哈希表;在弱关联匹配时,所述的关联表匹配单元对输入数据包的源(或目的)IP和传输层协议的二元组进行哈希运算后查找弱关联表并根据查找结果判定是否命中所述的预过滤数据包特征的弱关联类型的所述的关联基本特征; 所述的深度包检测单元对应用协议识别规则的所述的数据包特征进行匹配并输出命中了所述的数据包特征的应用协议识别规则子集,其核心包括多模式串匹配单元、混合匹配单元和匹配结果判别单元。其中,所述的多模式串匹配单元利用确定型多模匹配状态机执行匹配并验证命中关键字的偏移位置约束,输出初步命中的应用协议识别规则子集,并进而利用所述的基本特征匹配单元和所述的关联表匹配单元对命中规则的所述的数据包特征的其余应用协议基本特征执行匹配;其中,所述的多模匹配状态机由规则库中应用协议识别规则的所述的数据包特征或所述的预过滤数据包特征的主要的所述的关键字签名基本特征或所述的正则表达式签名基本特征经过预处理生成。所述的混合匹配单元利用所述的基本特征匹配单元和所述的关联表匹配单元对规则库中未加入所述的多模式串匹配单元的应用协议识别规则的所述的数据包特征或所述的预过滤数据包特征的所述的应用协议基本特征执行匹配,并输出初步命中的应用协议识别规则子集。所述的匹配结果判别单元根据所述的多模式串匹配单元和所述的混合匹配单元输出的应用协议识别规则的所述的数据包特征或所述的预过滤数据包特征的所述的应用协议基本特征的命中状态和所述的应用协议基本特征之间应满足的逻辑关系判定并输出最终命中了所述的数据包特征的应用协议识别规则子集; 所述的基本特征匹配单元包括包位置方向匹配单元、包长匹配单元、正则表达式匹配单元、单模式串匹配单元、算法插件匹配单元、动态解密匹配单元、静态解密匹配单元、IP地址匹配单元和端口匹配单元等。其中,所述的包位置方向匹配单元执行所述的数据包特征指定的流方向、包位置和包方向的验证;所述的包长匹配单元执行所述的数据包特征指定的所述的包长签名基本特征的验证;所述的正则表达式匹配单元执行所述的数据包特征指定的所述的正则表达式签名基本特征的验证;所述的单模式串匹配单元执行所述的数据包特征指定的无需解密的所述的关键字签名基本特征的验证;所述的算法插件匹配单元执行所述的数据包特征指定 的所述的算法插件基本特征的算法函数验证;所述的动态解密匹配单元执行所述的数据包特征指定的带动态解密条件的所述的关键字签名基本特征的验证;所述的静态解密匹配单元执行所述的数据包特征指定的带静态解密条件的所述的关键字签名基本特征的验证;所述的IP地址匹配单元执行所述的数据包特征指定的所述的IP签名基本特征的验证;所述的端口匹配单元执行所述的数据包特征指定的所述的端口签名基本特征的验证。
8.根据权利要求1到7所述的全流表存储单元,其特征在于: 所述的全流表存储单元保存会话流表、流节点、流子节点以及相应的节点池; 所述的会话流表为由标识流的源目IP、源目端口和传输层协议的五元组生成的哈希表,所述的流节点为哈希表中与流对应的节点,节点中保存流的应用协议识别状态; 所述的流子节点与所述的深度包检测单元输出的应用协议识别规则相对应,并保存在当前流的所述的流节点中,多个所述的流子节点串接成单向链表,其中,所述的流子节点保存对应的应用协议识别规则的中间匹配状态; 所述的流节点池与所述的流子节点池为预分配的节点内存池; 所述的会话流表根据数据包到达时间刷新时间戳,并定时按照设定的超时间隔或状态转换进行所述的流节点的老化,而所述的流子节点在当前流识别结束之后或者对应的所述的流节点老化之时将被老化;老化的所述的流节点和所述的流子节点被回收到对应的节点内存池。
9.根据权利要求1到8所述的半流关联表存储单元,其特征在于: 所述的半流关联表存储单元保存所述的强关联表、所述的弱关联表、强关联表节点、弱关联表节点以及相应的节点池; 所述的强关联表节点和所述的弱关联表节点保存应用协议识别规则指定并且从已识别流中提取的所述的关联基本特征,关联表节点的应用协议类型根据应用协议识别结果进行更新; 所述的强关联表节点池与所述的弱关联表节点池为预分配的节点内存池; 所述的关联表节点在进行关联匹配查询时刷新时间戳,并定时按照设定的超时间隔或特定的应用协议超时间隔进行老化;老化的所述的关联表节点被回收到对应的节点内存池。
10.根据权利要求1到9所述的规则库存储单元,其特征在于: 所述的规则库存储单元保存主规则库和影子规则库; 所述的主规则库为当前处于活动状态的规则库,而所述的影子规则库为处于待命状态的规则库; 当进行规则库升级时,将首先更新所述的影子规则库,并对其进行预处理生成新的所述的深度包检测单元核心,然后进行热切换使新生成的所述的深度包检测单元核心生效并使所述的原影子规则库成为处于活动状态的所述的主规则库,而所述的原主规则库则成为所述的影子规则库,所述的原深度包检测单元核心将被销毁。
11.根据权利要求1到10所述的识别模块,其特征在于: 所述的识别模块包括强关联识别模块、单包识别模块、多包识别模块、算法解密识别模块和通道提取识别模块; 所述的强关联识别模炔基于所述的强关联识别模型构建,其通过所述的关联表匹配单元查找所述的半流关联表存储单元中的所述的强关联表进行强关联匹配和应用协议识别。若查找成功,则根据命中的关联表节点确定待识别流的应用协议类型:若命中的关联表节点指定了所述的延迟确认包数,则延迟确认该识别结果以允许所述的应用协议识别引擎的其他识别模块继续扫描当前及后续数据包,否则直接在相应的流节点中标记当前流已识别为关联表节点中指定的应用协议类型;若查找失败,则交由所述的应用协议识别引擎的其他识别模块继续识别; 所述的单包识别模炔基于所述的单包识别模型并联合所述的多包、算法解密和通道提取识别模型构建,其通过所述的分流匹配单元和所述的深度包检测单元进行匹配和应用协议识别。其中,所述的深度包检测单元分为Web应用深度包检测单元、TCP深度包检测单元和UDP深度包检测单元,所述的Web应用深度包检测单元由规则库中Web类应用相应的单包识别规则的所述的数据包特征生成,所述的TCP深度包检测单元由规则库中通过TCP协议传输的非Web类应用相应的单包、多包、算法解密和通道提取识别规则的所述的数据包特征或所述的预过滤数据包特征生成,而所述的UDP深度包检测单元由规则库中通过UDP协议传输的应用相应的单包、多包、算法解密和通道提取识别规则的所述的数据包特征或所述的预过滤数据包特征生成。所述的单包识别模块首先通过所述的分流匹配单元将待识别流粗分为Web流量、TCP非Web流量或UDP流量,若为Web流量则通过对应的所述的Web应用深度包检测单元扫描整个HTTP报文头和若干字节数据,否则通过对应的所述的TCP深度包检测单元或所述的UDP深度包检测单元扫描数据包载荷的全包或头尾部若干字节,最后输出命中了所述的数据包特征的单包识别规则、命中了所述的数据包特征或所述的预过滤数据包特征的多包识别规则以及命中了所述的预过滤数据包特征的算法解密识别规则和通道提取识别规则。若同时命中了多条单包识别规则,则选择其中优先级最高的规则;若命中的单包识别规则指定了规则动作,则执行相应的延迟确认、继续扫描数据包载荷其余部分或强关联、弱关联、提取关联等通道关联操作。若最终成功命中,则将当前流标记为命中的单包识别规则指定的应用协议类型,否则交由所述的应用协议识别引擎的其他识别模块继续识别; 所述的多包识别模炔基于所述的多包识别模型构建,其通过所述的单包识别模块的所述的深度包检测单元进行匹配和应用协议识别。所述的多包识别模块通过所述的单包识别模块过滤出初步命中的多包识别规则子集,对命中的规则生成相应的流多包子节点并将其保存在当前待识别流所对应的流节点中,对后续到达的数据包,由所述的单包识别模块的所述的深度包检测单元继续匹配,所述的多包识别模块根据匹配结果和保存的匹配状态验证流多包子节点对应的规则指定的所述的多数据包特征及其连续性、有序性和运算关系等约束条件并判定命中状态,同时更新匹配状态并将其保存在流多包子节点中。若最终成功命中,则将当前流标记为命中的多包识别规则指定的应用协议类型,否则交由所述的应用协议识别引擎的其他识别模块继续识别; 所述的算法解密识别模炔基于所述的算法解密识别模型构建,其通过所述的算法插件匹配单元、所述的动态解密匹配单元和所述的静态解密匹配单元进行匹配和应用协议识另IJ。所述的算法 解密识别模块首先通过所述的单包识别模块过滤出初步命中的算法解密识别规则子集,然后对命中规则的函数算法解密特征或密码算法解密特征分别由所述的算法插件匹配单元、所述的动态解密匹配单元或所述的静态解密匹配单元继续匹配,最后根据匹配结果判定最终命中状态。若最终成功命中,则将当前流标记为命中的算法解密识别规则指定的应用协议类型,否则交由所述的应用协议识别引擎的其他识别模块继续识别; 所述的通道提取识别模炔基于所述的通道提取识别模型构建,其通过所述的正则表达式匹配单元和所述的算法插件匹配单元进行关联通道提取并进而通过所述的强关联识别模块进行应用协议识别。所述的通道提取识别模块通过已经成功识别并且指定了提取关联类型的所述的通道关联动作的其他识别模块获取候选的通道提取识别规则子集,并根据所述的单包识别模块输出的通道提取识别规则所述的预过滤数据包特征的命中状态最终确定用以进行通道提取的规则;所述的通道提取识别模块根据规则指定的所述的正则通道提取器或所述的函数通道提取器分别由所述的正则表达式匹配单元或所述的算法插件匹配单元提取关联通道的IP地址、端口和传输层协议,并根据规则指定的强关联类型的所述的通道关联动作将所述的关联基本特征添加到所述的强关联表中;若待提取的关联通道数据分布在多个数据包之中,则为命中的规则生成相应的流通道提取子节点并将其保存在当前流所对应的流节点中,对当前及后续到达的数据包,缓存相应的关联通道数据,然后再进行关联通道的提取。
12.根据权利要求1到11所述的配置模块,其特征在于:所述的配置模块进行应用协议识别引擎的识别参数及规则库的配置; 所述的应用协议识别引擎的识别参数包括所述的识别模块(所述的强关联识别模块、所述的多包识别模块、所述的算法解密识别模块和所述的通道提取识别模块)的启用/禁用开关、延迟确认动作开关、数据包载荷全包扫描开关、数据包载荷头尾部扫描字节数、HTTP报文数据扫描字节数、流扫描数据包个数、关联表老化超时间隔、特定应用协议的关联表老化超时间隔等; 所述的规则库的配置包括规则库的加载与解析、规则库的预处理、规则库的在线升级及热切换、规则库的持久化存储和规则库的查询等。
【文档编号】H04L12/24GK104038389SQ201410286352
【公开日】2014年9月10日 申请日期:2014年6月19日 优先权日:2014年6月19日
【发明者】高长喜 申请人:高长喜
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1