基于数据包字节分布的应用程序流量分类方法和存储介质转让专利

申请号 : CN202011221497.1

文献号 : CN112036518B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 付绍静杨璐铭罗玉川柳林王勇军徐明赵文涛解培岱刘强马行空

申请人 : 中国人民解放军国防科技大学

摘要 :

本发明提供了一种基于数据包字节分布的应用程序流量分类方法和存储介质,所述应用程序流量分类方法通过从连续的数据包字节分布序列中提取特征,并使用基于树提升的XGBoost分类算法进行应用程序流量的分类。本发明使用负载数据报文的字节流,以将负载特征转化为字节分布特征,规避了数据包负载中的误导特征,实现了以负载数据报文序列为分析单元的应用程序流量分类。因此,所述应用程序流量分类方法具有高效性、实时性的特点。

权利要求 :

1.一种基于数据包字节分布的应用程序流量分类方法,其特征在于,包括:

获取待分类的目标应用程序流量,

从所述目标应用程序流量中获取目标数据报文序列,所述目标数据报文序列包含多个目标负载数据报文,所述目标负载数据报文为过滤掉负载长度为零的负载数据报文,对所述目标数据报文序列进行字节分布统计,以根据所述目标数据报文序列的目标字节分布序列获得目标序列特征,该步骤包括:对所述目标数据报文序列中的各个所述目标负载数据报文进行数据包的字节分布统计,获得目标字节分布序列,所述目标字节分布序列包含多个目标字节分布,从所述目标字节分布序列中的各个所述目标字节分布提取特征,获得与各个所述目标负载数据报文对应的特征序列,所述特征序列包含多个目标数据报文特征,使各个所述特征序列构成目标数据报文特征序列,并从所述目标数据报文特征序列中提取特征,获得目标序列特征,将所述目标序列特征输入至训练好的XGBoost分类器中,触发所述XGBoost分类器依据所述目标序列特征对所述目标应用程序流量进行检测识别,以输出所述目标应用程序流量对应的分类结果。

2.根据权利要求1所述的应用程序流量分类方法,其特征在于,还包括对所述XGBoost分类器进行训练,所述训练的步骤包括:

从训练数据库中获得样本应用程序流量,

从所述样本应用程序流量中获取样本负载数据报文,

对所述样本负载数据报文进行字节分布统计,以根据字节分布统计值获得所述样本负载数据报文的样本序列特征,将所述样本序列特征输入至XGBoost分类器中,以获得与所述样本序列特征对应的样本分类结果,根据当前的所述样本分类结果计算获得所述XGBoost分类器的当前损失参数,并根据所述当前损失参数调整所述XGBoost分类器的分类参数,判断所述当前损失参数是否满足预设的收敛条件,若满足,则对所述训练步骤完成。

3.根据权利要求1所述的应用程序流量分类方法,其特征在于,从所述目标字节分布中提取的特征包括字节分布熵、可见字符分布熵、不可见字符分布熵、扩展字符分布熵、可见字符占比、不可见字符占比、扩展字符占比、0x00字节占比和0xFF字节占比。

4.根据权利要求3所述的应用程序流量分类方法,其特征在于,在各个所述目标字节分布中添加所述目标负载数据报文的间隔时间,从所述目标字节分布中提取的特征还包括所述间隔时间、所述目标负载数据报文的负载长度和协议。

5.根据权利要求3所述的应用程序流量分类方法,其特征在于,从所述目标数据报文特征序列中提取的特征包括所述目标数据报文特征序列中的各个数值型特征的序列特征,所述序列特征包括各个所述数值型特征的最大值、最小值、平均值和标准差。

6.根据权利要求5所述的应用程序流量分类方法,其特征在于,从所述目标数据报文特征序列中提取的特征还包括所述目标数据报文特征序列的过零率。

7.根据权利要求2所述的应用程序流量分类方法,其特征在于,所述样本负载数据报文为过滤掉负载长度为零的负载数据报文,对所述样本负载数据报文进行字节分布统计,以根据所述样本负载数据报文的字节分布获得所述样本负载数据报文的样本序列特征的步骤包括:分别对多个所述样本负载数据报文进行数据包的字节分布计算,以相应的获得多个样本字节分布,并在各个所述样本字节分布中添加所述样本负载数据报文的间隔时间,分别从各个所述样本字节分布中提取特征,以作为与各个所述样本负载数据报文对应的各个样本数据报文特征,使各个所述样本数据报文特征构成的样本数据报文特征序列,并从所述样本数据报文特征序列中提取特征,以作为所述样本序列特征。

8.一种存储介质,其特征在于,所述存储介质为可读存储介质,所述可读存储介质上存储的计算机程序被处理器执行时实现如权利要求1至7中任意一项所述的应用程序流量分类方法。

说明书 :

基于数据包字节分布的应用程序流量分类方法和存储介质

技术领域

[0001] 本发明属于应用程序流量分类技术领域,具体是涉及到一种基于数据包字节分布的应用程序流量分类方法和存储介质。

背景技术

[0002] 早期的应用流量分类技术是基于端口识别的方法实现的,其基本思想是每个应用程序由其注册的端口号进行标识。随着网络技术的不断发展,随机端口号的应用程序以及未注册端口的应用程序被大量使用,使得基于端口识别进行应用程序分类的方法变得很不可靠。因此,随后另一种流量分类技术—深度包检测技术(Deep Packet Inspection,DPI)被广泛应用。DPI通过对应用层数据包负载进行深入的特征签名匹配,实现网络流量的分类。但是,随着以安全传输层协议(Transport Layer Security,TLS)为代表的流量加密技术广泛使用,传统的DPI技术也因此失效。
[0003] 基于端口识别和基于DPI检测的流量分类技术,本质上都是通过解析数据包的固有成分来达到分类目的的。它们都只能根据人为规定的规则而无法智能的进行流量分类。随着以大数据和人工智能为代表的新兴技术的发展,基于机器学习的流量分类方法应运而生。
[0004] 基于机器学习的应用流量分类的方法是从流量数据集中提取特征,应用机器学习的方式实现流量分类。完整数据流的前几个数据包基本就可以判定整个数据流的性质,显然数据流中前几个数据包的特征具有较大的特征重要性,因此,现有的基于机器学习的应用流量分类工作大多基于数据流分类实现,即在数据预处理时依据五元组对数据进行分割,将应用程序流量识别转化为网络数据流的分类问题。然而,基于数据流的应用程序流量分类方法会存在如下问题:
[0005] (1)在实时网络流量检测过程中,获取到的网络数据流通常是不完整的,基于完整数据流的一些特征可能会提取不到。例如,虽然数据流中的前几个包具有较大的特征权重,但无法保证始终能够实时捕获到数据流中靠前部分的数据包。这个问题在面对如视频流量这样的长会话流量时表现得尤其明显。
[0006] (2)基于单一会话数据流的特征无法完整的表示出应用程序的网络行为。因为,应用程序产生的流量一般不是单会话的,而是用于实现不同功能协同的多会话的。
[0007] (3)真实网络环境具有复杂性,一段时间内的网络数据报文几乎不可能之来自于单一程序。
[0008] 由此可见,在基于机器学习的应用流量分类的方法中,如何提取出能够反映应用程序流量的显著性特征是流量分类工作的关键。在特征提取过程中,需要避免一些与应用程序行为特征弱相关但在数据集中具有极大区分性特征,我们称其为误导特征。最为典型的误导特征是数据包中的IP地址字段。例如不同应用程序的服务器是不同的,因而可以通过目标IP地址过滤进而实现应用程序的分类;但IP地址并不能反映应用程序在网络流量上的行为特点,一旦服务器IP地址发生了变更,该模型便立即失效。
[0009] 在人工提取特征的过程中,可以通过利用领域知识避免这种误导特征被提取。然而在使用深度神经网络模型方法中,特征提取过程是通过表征学习在模型中自动完成的,是不受人工控制的。故而深度学习模型更容易产生被误导信息误导的问题。为了解决这类问题,现有技术的做法是对IP地址进行匿名化处理。
[0010] 但是在现实中,我们对这种误导特征的认识是有限的,故而误导特征无法全部避免。换言之,如果直接将数据包内容作为输入,我们始终无法将这些误导特征全部挑出并进行随机化处理。如果在特征提取过程中误提取到了这些不能反映应用程序网络行为特点的误导特征,那么训练出模型的有效性就会大打折扣。

发明内容

[0011] 有鉴于此,本发明提供了一种基于数据包字节分布的应用程序流量分类方法和存储介质,以解决现有技术因为无法避免的误导特征而造成的分类模型有效性低的问题。
[0012] 一种基于数据包字节分布的应用程序流量分类方法,包括:
[0013] 获取待分类的目标应用程序流量,
[0014] 从所述目标应用程序流量中获取目标负载数据报文,
[0015] 对所述目标负载数据报文进行数据包的字节分布计算,以根据所述目标负载数据报文的字节分布获得所述目标负载数据报文的目标序列特征,
[0016] 将所述目标序列特征输入至训练好的XGBoost分类器中,触发所述XGBoost分类器依据所述目标序列特征对所述目标应用程序流量进行检测识别,以输出所述目标应用程序流量对应的分类结果。
[0017] 优选地,所述的应用程序流量分类方法还包括对所述XGBoost分类器进行训练,[0018] 所述训练的步骤包括:
[0019] 从训练数据库中获得样本应用程序流量,
[0020] 从所述样本应用程序流量中获取样本负载数据报文,
[0021] 对所述样本负载数据报文进行字节分布统计,以根据字节分布统计值获得所述样本负载数据报文的样本序列特征,
[0022] 将所述样本序列特征输入至XGBoost分类器中,以获得与所述样本序列特征对应的样本分类结果,
[0023] 根据当前的所述样本分类结果计算获得所述XGBoost分类器的当前损失参数,并根据所述当前损失参数调整所述XGBoost分类器的分类参数,
[0024] 判断所述当前损失参数是否满足预设的收敛条件,若满足,则对所述训练步骤完成。
[0025] 优选地,基于交互式数据包处理工具Scapy实时获取所述目标应用程序流量,[0026] 所述目标负载数据报文为过滤掉负载长度为零的负载数据报文。
[0027] 优选地,对所述目标负载数据报文进行数据包的字节分布统计,以根据所述数据包的字节分布获得所述目标负载数据报文的目标序列特征的步骤包括:
[0028] 分别对多个所述目标负载数据报文进行数据包的字节分布计算,以相应的获得多个目标字节分布,
[0029] 分别从各个所述目标字节分布中提取特征,以作为与各个所述目标负载数据报文对应的各个目标数据报文特征,
[0030] 使各个所述目标数据报文特征构成的目标数据报文特征序列,并从所述目标数据报文特征序列中提取特征,以作为所述目标序列特征。
[0031] 优选地,从所述目标字节分布中提取的特征包括字节分布熵、可见字符分布熵、不可见字符分布熵、扩展字符分布熵、可见字符占比、不可见字符占比、扩展字符占比、0x00字节占比和0xFF字节占比。
[0032] 优选地,在各个所述目标字节分布中添加所述目标负载数据报文的间隔时间,从所述目标字节分布中提取的特征还包括所述时间间隔、所述目标负载数据报文的负载长度和协议。
[0033] 优选地, 从所述目标数据报文特征序列中提取的特征包括所述目标数据报文特征序列中的各个数值型特征的序列特征,所述序列特征包括各个所述数值型特征的最大值、最小值、平均值和标准差。
[0034] 优选地,从所述目标数据报文特征序列中提取的特征还包括所述目标数据报文特征序列的过零率。
[0035] 优选地,所述样本负载数据报文为过滤掉负载长度为零的负载数据报文,[0036] 对所述样本负载数据报文进行字节分布统计,以根据所述样本负载数据报文的字节分布获得所述样本负载数据报文的样本序列特征的步骤包括:
[0037] 分别对多个所述样本负载数据报文进行数据包的字节分布计算,以相应的获得多个样本字节分布,并在各个所述样本字节分布中添加所述样本负载数据报文的间隔时间,[0038] 分别从各个所述样本字节分布中提取特征,以作为与各个所述样本负载数据报文对应的各个样本数据报文特征,
[0039] 使各个所述样本数据报文特征构成的样本数据报文特征序列,并从所述样本数据报文特征序列中提取特征,以作为所述样本序列特征。
[0040] 一种存储介质,所述存储介质为可读存储介质,所述可读存储介质上存储的计算机程序被处理器执行时实现如上述任意一项所述的应用程序流量分类方法。
[0041] 本发明的有益效果一:以负载数据报文序列为最小分析单元,无需使用五元组从流量中进行数据流提取,也避免了对数据报文进行复杂的流重组操作。且以传输层负载的字节分布为基础;
[0042] 本发明的有益效果二:通过统计分析进一步提取出反映数据报文类型的特征,无需考虑传输层以下的复杂应用层协议,也无需为了统一模型输入对数据报文进行截断或填充操作,所有特征提取都是字节统计操作,简单高效;
[0043] 本发明的有益效果三:只需要输入连续的数据报文序列即可,更加适用于实时应用程序流量分类任务,具有较好的实用性;
[0044] 本发明的有益效果四:避免直接使用数据报文负载作为输入,提取的特征以传输层负载字节分布为基础,规避了模型提取到误导特征的风险。

附图说明

[0045] 图1为依据本发明实施例提供的应用程序流量分类的流程框图;
[0046] 图2为依据本发明实施例提供的从目标负载数据报文中提取目标序列特征的提取过程示意图。

具体实施方式

[0047] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所产生的所有其他实施例,都属于本发明保护的范围。此外需要说明的是,在具体实施方式这一项内容中“所述…”是仅指本发明的中的技术属于或特征。
[0048] 本发明提供了一种基于数据包字节分布的应用程序流量分类方法,其主要包括步骤1至步骤4。
[0049] 步骤1:获取待分类的目标应用程序流量。
[0050] 步骤2:从所述目标应用程序流量中获取目标负载数据报文。
[0051] 步骤3:对所述目标负载数据报文进行数据包的字节分布计算,以根据所述目标负载数据报文的字节分布获得所述目标负载数据报文的目标序列特征。
[0052] 步骤4:将所述目标序列特征输入至训练好的XGBoost分类器中,触发所述XGBoost分类器依据所述目标序列特征对所述目标应用程序流量进行检测识别,以输出所述目标应用程序流量对应的分类结果所述分类结果为应用程序流量对应的应用程序的名称名。
[0053] 在所述步骤1中,所述目标应用程序流量的实时获取可以基于Scapy工具来实现,Scapy是一款强大的交互式数据包处理工具、数据包生成器、网络扫描器、网络发现工具和数据包嗅探工具。从网络嗅探功能看,Scapy可以代替tcpdump和tshark的功能。在所述步骤2中,从通过Scapy实时获取到的一小段时间数据报文中抽取获得包含负载数据的负载数据报文。由于从网络的角度来看,在应用程序功能的实现主要依靠网络数据传输,而网络数据的传输有TCP和UDP两种方式。其中,UDP协议是不可靠传输协议,协议实现较为简单,TCP协议是面向连接的、可靠的、基于字节流的传输协议,包括了握手机制、重传机制等保证传输可靠的机制,协议实现较为复杂。因此,在应用程序所产生的网络流量中,除了用于传输数据的包含负载的TCP或UDP报文外,还包括很多用于传输控制过程中信息传递的报文。除此之外,还有用于网络各个端点之间传递控制消息的ICMP报文、链路层用于物理地址解析的ARP报文。而且应用程序传递的数据主要依靠传输层负载,故而在所述步骤2中,我们仅需要获取负载数据报文为后续识别所用。此外,在步骤2中,我们获取所述目标负载数据报文时,需要滤去掉中应用层负载长度为0的负载数据包,主要包括TCP握手包、ARP数据包、ICMP数据包等。这些数据包不用于应用程序数据传输,而只是用于网络传输控制过程中的信息传递,因而需要被过滤掉。
[0054] 数据报文特征提取是流量分类工作的关键,需要在提取出能够反映应用程序流量的显著性特征的同时规避误导特征。但是在现实中,我们对这种误导特征的认识是有限的,是直接使用数据报文负载无法规避的。为了避免误导特征,本发明基于数据包的字节分布进行目标负载数据报文的特征提取,即我们需要对所述目标负载数据报文进行字节分布计算,以根据所述目标负载数据报文的字节分布获得所述目标负载数据报文的目标序列特征。
[0055] 图1为依据本发明实施例提供的应用程序流量分类的流程框图,图2为依据本发明实施例提供的从所述目标负载数据报文中提取目标序列特征的提取过程示意图。如图1和图2所示,所述步骤3进一步包括步骤31至步骤33。
[0056] 步骤31:分别对步骤2中获取的多个所述目标负载数据报文进行数据包的字节分布计算,以相应的获得多个目标字节分布,多个所述目标字节分布构成目标字节分布序列。其中,多个所述目标负载数据报文构成目标数据报文序列。
[0057] 步骤32:分别从所述目标字节分布序列的各个所述目标字节分布中提取特征,以作为与各个所述目标负载数据报文对应的各个目标数据报文特征,各个所述目标数据报文特征构成目标数据报文特征序列。
[0058] 步骤33:从所述目标数据报文特征序列中提取特征,以作为所述目标序列特征。
[0059] 误导特征在数据包中所占字节比例很小,因此字节分布统计结果中误导特征几乎被完全覆盖掉了。然而,对于不同应用程序类型对应的数据包,其字节分布有具有明显差异。例如:TLS产生的数据包由于使用了流量加密技术,其字节分布较为均匀;HTTP传输文本文件(如HTML)的报文中,可见字符所占比例很高;HTTP传输而非文本文件(如图片、语音、视频、二进制文件等)的报文中,可见字符所占比例相对较低。除此之外,不同类型的报文在字节分布混乱度上也具有一定的差别。我们使用字节分布熵来表示这种混乱度,字节分布熵定义如下:
[0060]
[0061] 其中, 表示字节 在数据包负载中出现的频率。
[0062] 此外,在256个字节中,0x00与0xFF两种字节相对来说比较特殊,在一些应用程序自身的协议中,常用于报文填充等功能,故而作为特征进行提取。
[0063] 基于上述分析,在所述步骤32中,从各个所述目标字节分布中提取的特征包括字节分布熵、可见字符分布熵、不可见字符分布熵、扩展字符分布熵、可见字符占比、不可见字符占比、扩展字符占比、0x00字节占比和0xFF字节占比。除此之外,从各个所述目标字节分布中,我们还提取了所述目标负载数据报文的间隔时间、传输层负载长度以及传输层协议作为额外特征。
[0064] 从每个所述负载数据报文对应的目标字节分布中提取到的特征的属性如表1所示:
[0065] 表1:目标字节分布中提取到的特征属性表
[0066]
[0067] 在所述步骤33中,从所述目标数据报文特征序列中提取的特征包括所述目标数据报文特征序列中的各个数值型特征的序列特征,所述序列特征包括各个所述数值型特征的最大值、最小值、平均值和标准差,此外,从所述目标数据报文特征序列中提取的特征还包括所述目标数据报文特征序列的过零率。所述过零率可以表示目标数据报文特征序列的波动情况,在计算所述过零率之前,还需要对目标数据报文特征序列进行标准化处理。因此,在依据本发明实施例中,最终,最终提取获得的所述目标序列特征为11×5+1=56维向量,其中该式子中11表示所述目标字节分布中提取的数值型特征的个数,5为从所述目标数据报文特征序列中提取的序列特征的个数,1为非数值型特征的个数。
[0068] XGBoost分类器是基于XGBoost算法实现的分类。XGBoost一个优化的分布式梯度增强库,旨在高效、灵活和便捷地实现梯度提升决策树(Gradient Boosting Decision Tree,GBDT)。GBDT是一种迭代的决策树算法,需要构建多棵决策树。GBDT的基本思想是使用现有的所有决策树的结果之和作为预测值,再构建下一个决策树去拟合残差,如此循环迭代后,使用最终所有决策树结果之和作为输出结果。XGBoost本质上仍是GBDT,但力争把模型速度和效率尽可能的发挥到极致。XGBoost在求解损失函数的极值是用到了牛顿法,将损失函数使用泰勒展开到二阶形式,另外又加入了表示模型复杂程度的正则化项。根据XGBoost的基本原理可知,XGBoost可以实现对目标函数高效的拟合。利用此原理,我们可以将其应用到应用程序流量的分类。在采用XGBoost分类器进行应用程序流量的分类之前,我们需要基于Python的xgboost库对XGBoost分类器进行训练,并将训练好的文件保存。如图1所示,所述训练的步骤包括步骤01至步骤04。
[0069] 步骤01:从训练数据库中获得样本应用程序流量。
[0070] 步骤02:从所述样本应用程序流量中获取样本负载数据报文。
[0071] 步骤03:对所述样本负载数据报文进行字节分布统计,以根据字节分布统计值获得所述样本负载数据报文的样本序列特征。
[0072] 步骤04:将所述样本序列特征输入至XGBoost分类器中,以获得与所述样本序列特征对应的样本分类结果,根据当前的所述样本分类结果计算获得所述XGBoost分类器的当前损失参数,并根据所述当前损失参数调整所述XGBoost分类器的分类参数,判断所述当前损失参数是否满足预设的收敛条件,若满足,则对所述训练步骤完成。
[0073] 所述步骤02中,获取所述样本负载数据报文步骤2中获取所述目标负载数据报文的方法相同,同样,在所述步骤03中,对所述样本负载数据报文进行字节分布统计,以根据字节分布统计值获得所述样本负载数据报文的样本序列特征的具体实现步骤与步骤3中的对所述目标负载数据报文进行字节分布统计,以根据字节分布统计值获得所述目标负载数据报文的目标序列特征相同,因此,所述步骤02和步骤03再次步骤详细复述。
[0074] 此外,本发明还提供了一种存储介质,所述存储介质为可读存储介质,所述可读存储介质上存储的计算机程序被处理器执行时实现依据本发明提供的任意一项所述的应用程序流量分类方法。
[0075] 本发明提供的所述应用程序流量分类方法通过从连续的数据包字节分布序列中提取特征,并使用基于树提升的XGBoost分类算法进行应用程序流量的分类,其获得的有意效果如下:
[0076] (1)以负载数据报文序列为最小分析单元,无需使用五元组从流量中进行数据流提取,也避免了对数据包进行复杂的流重组操作。且以传输层负载的字节分布为基础;
[0077] (2)通过统计分析进一步提取出反映数据报文类型的特征,无需考虑传输层以下的复杂应用层协议,也无需为了统一模型输入对数据报文进行截断或填充操作,所有特征提取都是字节统计操作,简单高效;
[0078] (3)只需要输入连续的数据报文序列即可,更加适用于实时应用程序流量分类任务,具有较好的实用性;
[0079] (4)避免直接使用数据报文负载作为输入,提取的特征以传输层负载字节分布为基础,规避了模型提取到误导特征的风险。
[0080] 依照本发明的实施例如上文所述,这些实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施例。根据以上描述,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地利用本发明以及在本发明基础上的修改使用。本发明仅受权利要求书及其全部范围和等效物的限制。