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

一种面向分布式拒绝服务攻击的恶意流量检测方法及装置

文献发布时间:2024-01-17 01:20:32


一种面向分布式拒绝服务攻击的恶意流量检测方法及装置

技术领域

本发明属于互联网技术领域,涉及一种面向分布式拒绝服务攻击的恶意流量检测方法及装置。

背景技术

DDoS攻击(Distributed Denial of Service,分布式拒绝服务攻击)是一种网络攻击方式,攻击者通过操纵大量的“僵尸”计算机、路由器或其他网络设备向受害者发起大量恶意请求,使其无法及时响应合法用户的服务请求,从而导致受害者系统崩溃。DDoS攻击的目的通常是占用受害者系统的带宽和网络资源,使其无法正常工作,最终造成服务停滞、经济损失和名誉受损,且由于DDoS攻击常常是从分布式网络发起,现有的防御手段难以追溯到正确的攻击源,因此对网络安全造成了巨大的威胁,因此需要一种准确检测DDoS恶意攻击的方法。

发明内容

本发明提供一种面向分布式拒绝服务攻击的恶意流量检测方法及装置,其具有检测准确率高、时间消耗量少、资源消耗率低的效果。

第一方面,本发明提供一种面向分布式拒绝服务攻击的恶意流量检测方法,包括:获取流量数据,并对所述流量数据进行包装,得到第一数据包;从所述第一数据包中获取每个元素的流量数据,并基于获取到的流量数据得到权重队列;基于所述权重队列得到权重标准值;基于所述第一数据包、所述权重队列以及所述权重标准值确定所述流量数据是否为合法流量。

其中,所述对所述流量数据进行包装,得到第一数据包的步骤,包括:将所述流量数据进行包装得到初始数据包;提取所述初始数据包中的流量数据队列,并对所述流量数据队列进行包装,得到所述第一数据包,所述第一数据包中每一个元素代表一条流量数据。

其中,所述从所述第一数据包中获取每个元素的流量数据,并基于获取到的流量数据得到权重队列的步骤,包括:从所述第一数据包中获取每个元素的流量数据,将获取到的流量数据转化为第一流量队列;对所述第一流量队列进行处理,得到权重队列。

其中,所述基于所述第一数据包、所述权重队列以及所述权重标准值确定所述流量数据是否为合法流量的步骤,包括:计算所述权重队列中每一元素减去权重标准值的差值绝对值;基于所述差值绝对值得到判定值队列;将所述判定值队列加入所述第一数据包,得到第二数据包;基于所述第二数据包确定所述流量数据是否为合法流量。

其中,所述将所述流量数据进行包装得到初始数据包的步骤,包括:使用Spark的parallelize算子将所述流量数据包装为初始的Spark RDD对象,得到初始数据包;所述提取所述初始数据包中的流量数据队列,并对所述流量数据队列进行包装,得到所述第一数据包的步骤,包括:使用Spark RDD对象的first算子提取初始数据包中的流量数据队列;调用Spark的parallelize算子将流量数据队列包装为Spark RDD对象,得到第一数据包。

其中,所述从所述第一数据包中获取每个元素的流量数据,将获取到的流量数据转化为第一流量队列的步骤,包括:使用Spark RDD对象的map算子调用transform_str2data方法从第一数据包中提取每个元素的流量数据;使用Spark RDD的collect算子将提取的每个元素的流量数据转换为第一流量队列;对所述第一流量队列进行处理,得到权重队列的步骤,包括:利用CRH算法对第一流量队列进行处理,得到所述权重队列。

其中,基于所述权重队列得到权重标准值的步骤,包括:将所述权重队列中每一元素保持为两位小数,得到数据队列;将所述数据队列中出现次数最多的元素作为所述权重标准值。

其中,所述基于所述差值绝对值得到判定值队列的步骤,包括:将所述差值绝对值扩大预定倍数,得到判定值队列;将所述判定值队列加入所述第一数据包,得到第二数据包的步骤,包括:将判定值队列中的元素加入到第一数据包的每一个元素的最后一个字段,得到第二数据包;基于所述第二数据包确定所述流量数据是否为合法流量的步骤,包括:使用Spark RDD对象的map算子调用classify方法分析第二数据包中的每一个元素的最后一个字段;若最后一个字段的值大于1则为恶意流量;如果最后一个字段的值小于1则为合法流量。

第二方面,本发明提供一种面向分布式拒绝服务攻击的恶意流量检测装置,包括:获取模块,用于获取流量数据,并对所述流量数据进行包装,得到第一数据包;提取模块,用于从所述第一数据包中获取每个元素的流量数据,并基于获取到的流量数据得到权重队列;标准确定模块,用于基于所述权重队列得到权重标准值;流量验证模块,用于基于所述第一数据包、所述权重队列以及所述权重标准值确定所述流量数据是否为合法流量。

本发明所提供的面向分布式拒绝服务攻击的恶意流量检测方法,包括:获取流量数据,并对所述流量数据进行包装,得到第一数据包;从所述第一数据包中获取每个元素的流量数据,并基于获取到的流量数据得到权重队列;基于所述权重队列得到权重标准值;基于所述第一数据包、所述权重队列以及所述权重标准值确定所述流量数据是否为合法流量。具有较好的检测性能,对DDoS攻击产生的恶意流量检测成功率高,时间消耗少且资源消耗率低。

附图说明

图1是本发明所提供的一种面向分布式拒绝服务攻击的恶意流量检测方法的一实施例的流程示意图;

图2是本发明所提供的一种面向分布式拒绝服务攻击的恶意流量检测装置的一实施例的结构示意图。

具体实施方式

为了进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及具体实施方式,对本发明进行详细说明。有关本发明的前述及其他技术内容、特点及功效,在以下配合附图的具体实施方式详细说明中即可清楚地呈现。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。所附附图仅是提供参考与说明之用,并非用来对本发明的技术方案加以限制。

现有技术中,为了检测DDoS攻击产生的恶意流量,很多研究人员已经做出了一些努力。

例如,现有技术中,使用深度学习方法,设计了基于递归神经网络的流量检测框架,并利用ISCX2012数据集训练分类器,然后运行训练好的分类器来检测网络中DDoS攻击所产生的恶意流量。该方法需要大量的数据集来训练模型,如果训练用的数据集不够全面或者包含较多的噪声的话就会影响到模型检测的准确性;其次,训练模型和使用模型检测异常流量都需要不少的计算资源和时间,因此在实际网络环境中可能无法满足实时检测的要求;最后,由于不同网络环境下的流量特征通常是不同的,使用ISCX2012数据集训练出来的深度学习模型在其训练环境中可以表现出优秀的性能,但将训练好的模型移植到另一个网络环境中去检测异常流量时就无法保证其性能的好坏,所以该方案的移植性较差。

现有技术还有一种方式通过对网络流量进行协议分析来检测DDoS攻击,其将网络流量所使用的通信协议作为分类标准来对网络流量进行分类,对不同协议类型的网络流量进行不同的特征分析,从而检测出DDoS攻击所产生的恶意流量。该方法是基于协议的分析方法,需要针对不同的通信协议设置不同的处理逻辑,所以在遇到网络流量使用新协议时的可扩展性较差;其次,该方法仅通过协议特征进行分类,而协议的特征可以被攻击者模仿,因此在遇到攻击者模仿协议特征发起DDoS攻击时,便难以区分合法流量和恶意流量;最后,由于需要对不同协议的流量进行特征分析需要大量的计算资源,如果要处理DDoS攻击场景下的高速网络流量,则需要更多的资源支持。

现有技术还有一种方式是将网络流量数据映射到低维空间中,然后利用协方差矩阵分析流量数据的主要成分,通过计算主要成分的权重可以实现对流量数据的分类,从而检测出是否存在异常的网络流量,若某个主成分的权重超过了设定好的阈值,则说明该条流量数据可能是DDoS攻击所产生的恶意流量。该方法需要对数据进行预处理,包括对数据进行归一化和中心化,这增加了算法的复杂度和计算时间;另一方面,需要设置阈值来检测DDoS攻击产生的异常流量,但阈值的设置又需要根据实际情况进行调整,设置不当则会导致检测的准确性下降,从而发生误报或漏报。

现有技术还有一种方式是通过维护一个全局的网络连接状态表,可以检测出一些DDoS攻击所产生的恶意流量的流量特征,比如突然出现的大量请求、请求源的分布、请求数据包的大小频率等,其还可以对流量进行深入的协议分析从而更加准确地检测出DDoS攻击所产生的恶意流量。该方法检测DDoS恶意流量需要针对不同的网络环境进行定制化配置,这需要一定的专业知识,如果配置不当则可能会导致检测准确性下降,从而发生误报或漏报;另一方面,需要时常对新型攻击进行更新,否则可能无法检测到新型的DDoS攻击所产生的恶意流量。

针对现有这些检测方案的问题,本发明利用CRH算法设计了一套满足检测准确率高、时间消耗量少、资源消耗率低的DDoS攻击恶意流量检测方案。

请参见图1,图1是本发明所提供的一种面向分布式拒绝服务攻击的恶意流量检测方法的一实施例的流程示意图,该恶意流量检测方法具体包括:

步骤S11:获取流量数据,并对所述流量数据进行包装,得到第一数据包。

在一实施例中,可以以一秒一次的频率从开源处理平台Kafka上读取到的流量数据messages,并且限制一次最多接收1000条流量数据,以提高计算效率。

将所述流量数据messages进行包装得到初始数据包rdd_get。具体的,使用Spark的parallelize算子将所述流量数据messages包装为初始的Spark RDD对象,得到初始数据包rdd_get;此时的rdd_get中只有一个键值对元素,该元素包含了收集到的所有流量数据。

需要说明的是,Spark是一个开源的大数据处理框架,它支持多种编程语言,并提供了丰富的功能集。Spark利用弹性分布式数据集(Spark RDD)在集群上高效处理数据,被广泛应用于数据分析、数据挖掘、实时处理等大数据场景。Spark中的parallelize算子是一种行动算子,它接收一个本地集合作为输入,并将其转换为分布式数据集,以便在集群上并行处理。

Spark RDD是Spark中的核心概念,代表分布式的、可恢复的数据集。它将数据集划分为多个分区,并且可以在集群中的不同节点上进行并行处理。Spark RDD提供了丰富的转换算子(如映射、过滤、聚合等)和行动算子(如收集、计数、保存等),可高效处理大规模数据。

提取所述初始数据包rdd_get中的流量数据队列traffic_list,并对所述流量数据队列traffic_list进行包装,得到所述第一数据包rdd_use,所述第一数据包rdd_use中每一个元素代表一条流量数据。具体的,使用Spark RDD对象的first算子(Spark中的first算子是一种行动算子,用于返回Spark RDD中的第一个元素)提取初始数据包rdd_get中的流量数据队列traffic_list;调用Spark的parallelize算子将流量数据队列traffic_list包装为Spark RDD对象,得到第一数据包rdd_use。此时rdd_use中的每一个元素都代表着一条流量数据,并包含流量数据的所有必要信息,包括源IP地址ip.src、目标IP地址ip.dst、帧的协议层级信息frame.protocols、帧的长度frame.len、IP协议版本ip.version、IP报头长度ip.hdr_len、报文的生存时间ip.ttl、传输层协议(如TCP、UDP)ip.proto、封装类型frame.encap_type、IP分片偏移量ip.frag_offset、TCP源端口tcp.srcport、TCP目标端口tcp.dstport、TCP数据报的长度tcp.len、TCP确认号tcp.ack、保留标志位tcp.flags.res、ECN-nonce标志位tcp.flags.ns、拥塞窗口减小标志位tcp.flags.cwr、显示拥塞标志位tcp.flags.ecn、紧急标志位tcp.flags.urg、标志位tcp.flags.ac、推标志位tcp.flags.push、重置标志位tcp.flags.reset、同步标志位tcp.flags.syn、结束标志位tcp.flags.fin、TCP窗口大小tcp.window_size、TCP时间间隔tcp.time_delta等字段。

步骤S12:从所述第一数据包中获取每个元素的流量数据,并基于获取到的流量数据得到权重队列。

具体的,从所述第一数据包rdd_use中获取每个元素的流量数据,将获取到的流量数据转化为第一流量队列collect_list;对所述第一流量队列collect_list进行处理,得到权重队列w_list。

在一实施例中,使用Spark RDD对象的map算子(Spark中的map算子是一种转换算子,用于对Spark RDD中所有元素进行统一操作。)调用transform_str2data方法从第一数据包rdd_use中提取每个元素的流量数据;使用Spark RDD的collect算子将提取的每个元素的流量数据转换为第一流量队列collect_list;利用CRH算法对第一流量队列进行处理,得到所述权重队列w_list。

transform_str2data方法用于从一个网络流量中提取除了IP地址ip.src、目标IP地址ip.dst以及帧的协议层级信息frame.protocols之外的其他字段,并将提取的字段组成一个数组。

CRH算法是一种处理多源异构数据的算法,旨在解决多源数据中存在的矛盾问题,该算法通过对每个数据源的可信度进行建模,将数据源的权重引入到优化问题中,同时考虑数据源的异构性和不同类型数据之间的关系,最终找到一套最优的解决方案。CRH算法可以利用不同的数据类型和损失函数同时估计数据源的可靠度和真实信息,相比于其他现有的冲突解决方法,CRH算法的优势在于可以同时处理异构的数据类型并估计数据源的可信度,这样可以更好地发挥每种数据类型的独特特性。因此,CRH算法在多种应用场景中都有广泛的应用,例如文本分类、机器翻译等。

步骤S13:基于所述权重队列得到权重标准值。

具体的,将所述权重队列w_list中每一元素保持为两位小数,得到数据队列;将所述数据队列中出现次数最多的元素作为所述权重标准值w_standard。

在一实施例中,权重队列w_list中的所有元素均为float型数据,使用round函数(round函数即四舍五入)让w_list中的所有元素保留两位小数得到数据队列w_round。使用Counter函数获得w_round队列中出现次数最多的元素作为权重标准值w_standard。Counter函数是用来统计列表、字符串、元组等可迭代对象中每个元素出现的次数的函数。

步骤S14:基于所述第一数据包、所述权重队列以及所述权重标准值确定所述流量数据是否为合法流量。

具体的,第一数据包中包含了若干条元素,每条元素就是一条流量数据,根据第一数据包、权重队列以及权重标准值可以以较高的准确率判断出第一数据包中哪些流量数据是恶意流量和哪些流量数据是合法流量。

具体的,计算所述权重队列w_list中每一元素减去权重标准值w_standard的差值绝对值;基于所述差值绝对值得到判定值队列judge_list;将所述判定值队列加入所述第一数据包rdd_use,得到第二数据包;基于所述第二数据包确定所述流量数据是否为合法流量。

例如,如果第一数据包中有300条数据,那么判定值队列中也一定是300条数据,然后将判定值队列的第一条数据加入到第一数据包中的第一条数据的最后一个字段,判定值队列的第二条数据加入到第一数据包中的第二条数据的最后一个字段,以此类推,然后得到第二数据包。

在一具体实施例中,将所述差值绝对值扩大预定倍数,得到判定值队列judge_list;由于这个差值绝对值的绝对值会比较小,所以将所述差值绝对值扩大预定倍数,例如将其全部乘以30后得到DDoS判定值队列judge_list。将判定值队列judge_list中的元素加入到第一数据包的每一个元素的最后一个字段,得到第二数据包;使用Spark RDD对象的map算子调用classify方法分析第二数据包rdd_use中的每一个元素的最后一个字段,以检测该元素对应的流量数据是否为恶意流量。若最后一个字段的值大于1则为恶意流量;如果最后一个字段的值小于1则为合法流量。

classify方法就是通过分析输入元素的最后一个字段来判断输入元素是否为恶意流量,若输入元素的最后一个字段大于1即判定输入元素为恶意流量,若输入元素的最后一个字段小于1即判定输入元素为合法流量。

本发明涉及了一个针对DDoS攻击恶意流量的满足检测准确率高、时间消耗量少、资源消耗率低的网络流量检测系统。本发明具有较好的检测性能,对DDoS攻击产生的恶意流量检测成功率高,时间消耗少且资源消耗率低。

具体的,本发明从Kafka中不断读取流量数据,并按照每秒读取到的流量数据为一组的方式将流量数据包装为Spark弹性分布式数据集(Spark RDD)对象,为了保证计算效率,设置每一个Spark RDD对象中至多保存1000条流量数据。流量分析组件对Spark RDD对象中的流量数据整体使用CRH算法进行计算,得出Spark RDD对象中每条流量数据对应的权重并将这些权重组合为一个权重队列,对权重队列进行处理得到这个权重队列所对应的权重标准值。流量更新组件根据权重队列和权重标准值按一定算法求出DDoS恶意流量判断值,并将DDoS恶意流量判断值分别添加到Spark RDD中对应的流量数据后面并对其进行分类。通过简单的Spark算子对Spark RDD对象中保存的流量数据进行计算分析,具备准确率高、时间消耗量少、资源消耗率低的优点。针对DDoS攻击产生的恶意流量在流量检测领域中存在的数据异构性和数据不平衡性等问题,本发明设计了一套基于CRH算法的流量检测方案,提高了当前流量检测模型针对DDoS攻击恶意流量检测的鲁棒性和检测效率。另外,本发明可以适配不同的网络环境,具有良好的可扩展性和可移植性。相较于传统的检测方法,本发明的方案能够以较少的计算资源实现更高的检测准确率和效率。最后,本发明的检测方案在本地模拟的DDoS攻击实验中展现了优越的性能,结果表明本方案具有出色的检测效果。

请参见图2,图2为本发明所提供的一种面向分布式拒绝服务攻击的恶意流量检测装置的一实施例的结构示意图,具体包括:获取模块41、提取模块42、标准确定模块43以及流量验证模块44。

其中,获取模块41用于获取流量数据,并对所述流量数据进行包装,得到第一数据包。

在一实施例中,获取模块41用于可以以一秒一次的频率从开源处理平台Kafka上读取到的流量数据messages,并且限制一次最多接收1000条流量数据,以提高计算效率。

获取模块41将所述流量数据messages进行包装得到初始数据包rdd_get。具体的,使用Spark的parallelize算子将所述流量数据messages包装为初始的Spark RDD对象,得到初始数据包rdd_get;此时的rdd_get中只有一个键值对元素,该元素包含了收集到的所有流量数据。

获取模块41提取所述初始数据包rdd_get中的流量数据队列traffic_list,并对所述流量数据队列traffic_list进行包装,得到所述第一数据包rdd_use,所述第一数据包rdd_use中每一个元素代表一条流量数据。具体的,使用Spark RDD对象的first算子提取初始数据包rdd_get中的流量数据队列traffic_list;调用Spark的parallelize算子将流量数据队列traffic_list包装为Spark RDD对象,得到第一数据包rdd_use。

提取模块42用于从所述第一数据包中获取每个元素的流量数据,并基于获取到的流量数据得到权重队列w_list。

在一实施例中,提取模块42用于从所述第一数据包rdd_use中获取每个元素的流量数据,将获取到的流量数据转化为第一流量队列collect_list;对所述第一流量队列collect_list进行处理,得到权重队列w_list。

在一实施例中,提取模块42用于使用Spark RDD对象的map算子调用transform_str2data方法从第一数据包rdd_use中提取每个元素的流量数据;使用Spark RDD的collect算子将提取的每个元素的流量数据转换为第一流量队列collect_list;利用CRH算法对第一流量队列进行处理,得到所述权重队列w_list。

标准确定模块43用于基于所述权重队列得到权重标准值w_standard。

具体的,标准确定模块43用于将所述权重队列w_list中每一元素保持为两位小数,得到数据队列;将所述数据队列中出现次数最多的元素作为所述权重标准值w_standard。

在一实施例中,权重队列w_list中的所有元素均为float型数据,标准确定模块43用于使用round函数(round函数即四舍五入)让w_list中的所有元素保留两位小数得到数据队列w_round。使用Counter函数获得w_round队列中出现次数最多的元素作为权重标准值w_standard。Counter函数是用来统计列表、字符串、元组等可迭代对象中每个元素出现的次数的函数。

流量验证模块44用于基于所述第一数据包rdd_use、所述权重队列w_list以及所述权重标准值w_standard确定所述流量数据是否为合法流量。

具体的,流量验证模块44计算所述权重队列w_list中每一元素减去权重标准值w_standard的差值绝对值;基于所述差值绝对值得到判定值队列judge_list;将所述判定值队列加入所述第一数据包rdd_use,得到第二数据包;基于所述第二数据包确定所述流量数据是否为合法流量。

在一具体实施例中,流量验证模块44将所述差值绝对值扩大预定倍数,得到判定值队列judge_list;由于这个差值绝对值的绝对值会比较小,所以将所述差值绝对值扩大预定倍数,例如将其全部乘以30后得到DDoS判定值队列judge_list。将判定值队列judge_list中的元素加入到第一数据包的每一个元素的最后一个字段,得到第二数据包;使用Spark RDD对象的map算子调用classify方法分析第二数据包rdd_use中的每一个元素的最后一个字段,以检测该元素对应的流量数据是否为恶意流量。若最后一个字段的值大于1则为恶意流量;如果最后一个字段的值小于1则为合法流量。

本发明涉及了一个针对DDoS攻击恶意流量的满足检测准确率高、时间消耗量少、资源消耗率低的网络流量检测系统。本发明具有较好的检测性能,对DDoS攻击产生的恶意流量检测成功率高,时间消耗少且资源消耗率低。

以上仅为本发明的实施方法,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 一种面向软件定义网络的分布式拒绝服务攻击检测方法
  • 一种面向恶意流量检测正负样本均衡生成的过采样方法
技术分类

06120116140787