ACKFlood攻击的防护方法、装置、设备及介质与流程

文档序号:18009468发布日期:2019-06-25 23:48阅读:797来源:国知局
ACK Flood攻击的防护方法、装置、设备及介质与流程

本发明涉及计算机网络攻击防御技术领域,尤其涉及一种ackflood攻击的防护方法、装置、设备及介质。



背景技术:

随着互联网技术的发展和僵尸网络的兴起,攻击者可以控制成千上万台的被感染主机,从而利用这些被感染主机的真实ip进行分布式拒绝服务(distributeddenialofservice,ddos)攻击,比如ackflood攻击。其中,基于ddos的ackflood攻击是指攻击者利用僵尸网络中大量的被感染主机,发送大量的ack报文进行泛洪攻击,ack报文是tcp(transmissioncontrolprotocol,传输控制协议)中一种带有ack标志位的数据包,用于对成功接收到的数据进行确认。

当攻击者向目标主机发起ackflood攻击时,目标主机会接收到大量非法的ack报文,其操作系统将耗费大量的系统资源来处理这些非法的ack报文,这样不仅会延误目标主机处理合法的ack报文,还会影响到目标主机的其它服务,严重的话还会导致目标主机的操作系统瘫痪。

针对上述问题,目前主要有以下三种方案:

(1)ack限流方法。通过阈值限制或者流量限制来限制ack报文的流量。

(2)tcp状态检测方法。tcp在建立连接时,会有三次握手过程,并且首包必须是syn报文,通过这种状态检测方法来判断是否是合法的ack报文。

(3)利用tcp重传机制的方法。对建立tcp连接的首包,即syn报文先丢弃,对于重传的syn报文再建立连接,先判断是否是真实ip,然后再对后续的ack报文也进行丢弃,再判断在固定时间内是否有重传的ack报文,如果没有,则禁止这个ip的ack报文或者tcp其它类型的报文。

针对上述这三种方案存在以下弊端:

(1)针对ack限流方法,同时也会使合法的ack报文受到限制,从而影响正常用户的上网状态。

(2)针对tcp状态检测方法,当攻击者使用僵尸网络中的被感染主机进行攻击时,由于被感染主机都具有真实ip,会有tcp三次握手,在tcp连接建立后,再发送大量的ack报文,这些ack报文符合tcp状态机,因此这种方法对于真实ip发起的ackflood攻击不起作用。

(3)针对利用tcp重传机制的方法,首先,浪费带宽;其次,如果是真实ip,只要是基于tcp协议栈(不基于tcp协议栈是指攻击者人为构造单一的ack报文)发送的攻击,都会有重传机制,所以无法防御真实ip发起的ackflood攻击;最后,对于采用snat(源地址转换)方式上网的用户,会影响正常用户。snat是指网络服务提供商给很多用户一个公网ip,大家通过这个公网ip采用snat方式进行上网。如果攻击者用这个公网ip发起了ackflood攻击,中间防护设备采用这种方法后,禁止了该公网ip访问服务器,而其他用户也用这个公网ip访问服务器的情况下,就会受到影响。

综上所述,目前还没有一种能够有效防御ackflood攻击的方法。



技术实现要素:

本发明实施例提供了一种ackflood攻击的防护方法、装置、设备及介质,能够有效防御ackflood攻击。

第一方面,本发明实施例提供了一种ackflood攻击的防护方法,应用于中间防护装置中,所述方法包括:

当传输控制协议tcp会话建立后,基于所述tcp会话中数据包和确认ack报文的传输数量,判断所述tcp会话是否发生ackflood攻击;

当判断出所述tcp会话发生ackflood攻击时,对所述tcp会话中传输的ack报文进行合法性校验;

当校验出所述ack报文不合法时,将所述ack报文丢弃。

第二方面,本发明实施例提供了一种ackflood攻击的防护装置,所述装置包括:

判断单元,用于当传输控制协议tcp会话建立后,基于所述tcp会话中数据包和确认ack报文的传输数量,判断所述tcp会话是否发生ackflood攻击;

校验单元,用于当判断出所述tcp会话发生ackflood攻击时,对所述tcp会话中传输的ack报文进行合法性校验;

丢弃单元,用于当校验出所述ack报文不合法时,将所述ack报文丢弃。

本发明实施例提供了一种中间防护设备,包括:至少一个处理器、至少一个存储器以及存储在存储器中的计算机程序指令,当计算机程序指令被处理器执行时实现如上述实施方式中第一方面的方法。

第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序指令,当计算机程序指令被处理器执行时实现如上述实施方式中第一方面的方法。

本发明实施例提供的ackflood攻击的防护方法、装置、设备及介质,在tcp会话建立后,基于该tcp会话中数据包和ack报文的传输数量,判断该tcp会话是否发生ackflood攻击,当判断出该tcp会话发生ackflood攻击时,对该tcp会话中传输的ack报文进行合法性校验,并将校验出的不合法的ack报文丢弃。该技术方案能够有效防御由真实ip发起的ackflood攻击,而且也不会对采用snat方式上网的用户造成影响。

附图说明

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

图1示出了本发明实施例提供的一种ackflood攻击的防护方法的示例性流程图;

图2示出了本发明实施例提供的一种ackflood攻击的防护方法的示例性流程图;

图3示出了本发明实施例提供的一种ackflood攻击的防护装置的示例性结构框图;

图4示出了本发明实施例提供的一种中间防护设备的硬件结构框图。

具体实施方式

下面将详细描述本发明的各个方面的特征和示例性实施例,为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细描述。应理解,此处所描述的具体实施例仅被配置为解释本发明,并不被配置为限定本发明。对于本领域技术人员来说,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明更好的理解。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

首先,对本发明技术方案进行概括说明。本发明的技术方案例如可以解决如下相关技术中的技术问题。基于ddos的ackflood攻击,是指攻击者利用僵尸网络的大量肉鸡,这些肉鸡都是网络中真实存在的主机,然后基于在tcp连接建立后,再发送大量的ackflood攻击。本发明的技术方案可以针对snat(源地址转换)上网方式,准确识别出攻击者,而不会影响公用一个ip的其他正常用户的上网。概括而言,在本发明的技术方案中,首先对ackflood行为进行监测,只对发生了ackflood的会话进行ack包的seq和ack进行校验。通过对会话的ack包的seq和ack合法性检测,并针对不同的情况,给出了不同的处理:包括允许通过,更新会话超时时间,丢弃。结合tcp状态机,如果会话超时删除,那么没有会话的ack包不会再允许通过。会话超时时间可以根据协议类型(tcp还是udp,以及tcp不同的状态,例如syn_sent、syn_recv、established、closed等)不同设定不同的值。

如图1所示,为本发明实施例提供的一种ackflood攻击的防护方法的示例性流程图。图1所示的方法可以应用于中间防护装置中,该中间防护装置可以分别接收到来自客户端和服务器端的数据包,有效防御由真实ip发起的ackflood攻击。该方法包括如下步骤:

步骤101,当tcp会话建立后,基于tcp会话中数据包和ack报文的传输数量,判断tcp会话是否发生ackflood攻击。

本发明实施例中,中间防护装置基于接收到的数据包的五元组信息(源ip、目的ip、源端口、目的端口以及协议类型,协议类型一般为udp(userdatagramprotocol,用户数据报协议)或者tcp)建立客户端和服务器端之间的一条tcp会话,当客户端和服务器端的tcp连接完成时,即完成tcp的三次握手过程,设定该会话的状态为established状态。当tcp会话建立后,中间防护装置再基于tcp会话中数据包和ack报文的传输数量,判断tcp会话是否发生ackflood攻击。

具体的,步骤101可以但不限于按照如下方式实现:

中间防护装置实时监测该tcp会话中数据包和ack报文的传输数量。

也就是说,中间防护装置对该tcp会话的双向数据包和ack报文的数量进行统计,发送者发送数据包,接收者发送ack报文,二者角色也可以互调,即当收到一个数据包时,计数count_data的值加1,当收到一个ack报文时,计数count_ack的值加1。

当ack报文的传输数量与数据包的传输数量的差值大于预设阈值时,确定tcp会话发生ackflood攻击。

一般来说,数据包和ack报文的数量基本上都是均衡的,所以一旦监测到数据包和ack报文的数量发生严重倾斜的时候,即计数count_ack远远大于计数count_data时,就确定为该tcp会话发生了ackflood攻击。此时,可以向后续的执行或处理设备发出预警告示。

步骤102,当判断出tcp会话发生ackflood攻击时,对tcp会话中传输的ack报文进行合法性校验。

具体的,当判断出tcp会话发生ackflood攻击时,判断该tcp会话中传输的ack报文的序列号和确认号是否正确,当判断出ack报文的序列号和确认号均正确时,确定ack报文是合法的;当判断出ack报文的序列号或确认号不正确时,确定ack报文是不合法的。

下面分别对如何判断tcp会话中传输的ack报文的序列号和确认号是否正确进行介绍:

1、判断tcp会话中传输的ack报文的序列号是否正确,可以但不限于按照如下方式实现:

比较ack报文的序列号seq与n的大小;其中,n为该ack报文的上一个合法的ack报文的序列号加一;

当ack报文的序列号等于n时,确定ack报文的序列号正确;

当ack报文的序列号不等于n时,确定ack报文的序列号不正确。

2、判断tcp会话中传输的ack报文的确认号是否正确,可以但不限于按照如下方式实现:

比较ack报文的确认号与m的大小;其中,m为在ack报文之前收到的最新数据包的序列号和该最新数据包的长度值的和值;

当ack报文的确认号小于等于m时,确定ack报文的确认号正确;

由于tcp滑动窗口协议,再加上网络拓扑复杂,即使同一个tcp会话的数据包,也会经过不同的路由到达目的ip地址的主机,因此出现乱序现象,即确认号大的ack报文先到,确认号小的ack报文后到,因此如果ack报文的确认号小于等于m,则确定ack报文的确认号正确。

当ack报文的确认号大于m时,确定ack报文的确认号不正确。

因为发送端没有发送新的数据包,所以此时ack报文的确认号不可能大于m,因此如果ack报文的确认号大于m,则确定ack报文的确认号不正确。

步骤103,当校验出ack报文不合法时,将ack报文丢弃。

采用本发明实施例提供的上述技术方案,可以有效防御由真实ip发起的ackflood攻击,而且也不会对采用snat方式上网的用户造成影响。

另外,可选的,本发明实施例还可以包括:

当ack报文的确认号等于m时,更新预先基于重传次数设置的第一参数;其中,第一参数的初始值为零;

判断更新后的第一参数是否大于预先设置的第一阈值;

当判断出更新后的第一参数大于第一阈值时,将在该ack报文之后接收到的ack报文丢弃,直至接收到新的数据包为止。

因为重传次数一般为3,因此本发明实施例中的第一参数可以但不限于设置为3。

可选的,本发明实施例还可以包括:

当ack报文的确认号小于m时,更新预先基于tcp滑动窗口协议设置的第二参数,得到更新后的第二参数;其中,第二参数的初始值为零;

判断更新后的第二参数是否大于预先设置的第二阈值;

当判断出更新后的第二参数大于第二阈值时,将在该ack报文之后接收到的ack报文丢弃,直至接收到新的数据包为止。

因此tcp的滑动窗口一般发送4个数据包,每个数据包重传次数为3,因此本发明实施例中的第二参数可以但不限于设置为12。

本发明实施例中,第一参数和第二参数的设置,可以使得中间防护设备无需对每一个ack报文都进行序列号和确认号的合法性校验,大大的节省了中间防护设备的处理资源。

另外,可选的,本发明实施例还可以包括:

当ack报文的确认号等于m时,更新tcp会话的会话超时时间,即将tcp会话的会话超时时间重置为初始值。

在这种情况下,该方法还包括:

当tcp会话的会话超时时间结束时,将tcp会话删除;并

将tcp会话删除后接收到的ack报文丢弃。

也就是说,没有建立tcp会话时,接收到的ack报文均会被丢弃,这样可以有效防御由伪造ip发起的ackflood攻击,因此伪造ip是不能够建立tcp连接,不能完成tcp三次握手的。

如图2所示,为本发明实施例提供的一种ackflood攻击的防护方法的详细流程图。该方法包括如下步骤:

步骤201,中间防护装置根据接收到的数据包的五元组信息建立tcp会话。

步骤202,实时监测tcp会话中数据包和ack报文的传输数量。

步骤203,判断tcp会话是否发生ackflood攻击。

当判断出tcp会话发生ackflood攻击时,继续执行步骤204。

步骤204,比较接收到的ack报文的seq(序列号)与n;其中。n为该ack报文的上一个合法的ack报文的seq+1。

当seq=n时,执行步骤205;当seq不等于n时,执行步骤213。

步骤205,比较接收到的ack报文的ack(确认号)与m;其中,m为在该ack报文之前收到的最新数据包的seq和该最新数据包的长度值的和值。

当ack大于m时,执行步骤213;

当ack等于m时,执行步骤206和步骤207;

当ack小于m时,执行步骤206和步骤210。

步骤206,允许该ack报文通过。

步骤207,将第一参数count_equal加1。

另外,将count_equal加1的同时,还可以更新会话超时时间。当该会话超时时间结束时,将该tcp会话删除,并将该tcp会话删除后接收到的ack报文丢弃(此过程未在图2中标出)。

步骤208,判断更新后的count_equal是否大于第一阈值;

当更新后的count_equal大于第一阈值时,执行步骤209;

当更新后的count_equal不大于第一阈值时,返回继续执行步骤204。

步骤209,将在该ack报文之后接收到的ack报文丢弃,直至接收到新的数据包为止。

当接收到新的数据包时,将count_equal重置为初始值,并继续执行步骤204,对接收到的ack报文的合法性进行校验。

步骤210,将第二参数count_less加1。

步骤211,判断更新后的count_less是否大于第二阈值;

当更新后的count_less大于第二阈值时,执行步骤212;

当更新后的count_less不大于第二阈值时,返回继续执行步骤204。

步骤212,将在该ack报文之后接收到的ack报文丢弃,直至接收到新的数据包为止。

当接收到新的数据包时,将count_less重置为初始值,并继续执行步骤204,对接收到的ack报文的合法性进行校验。

步骤213,将该ack报文丢弃。

丢弃该ack报文之后,返回继续执行步骤204,对新的ack报文进行合法性校验。

基于上述ackflood攻击的防护方法,本发明实施例还提供了一种ackflood攻击的防护装置,如图3所示,为本申请实施例提供的一种ackflood攻击的防护装置的示例性结构框图,该装置具体包括:

判断单元301,用于当传输控制协议tcp会话建立后,基于所述tcp会话中数据包和确认ack报文的传输数量,判断所述tcp会话是否发生ackflood攻击;

校验单元302,用于当判断出所述tcp会话发生ackflood攻击时,对所述tcp会话中传输的ack报文进行合法性校验;

丢弃单元303,用于当校验出所述ack报文不合法时,将所述ack报文丢弃。

可选的,判断单元301可以具体用于:

实时监测所述tcp会话中数据包和ack报文的传输数量;

当所述ack报文的传输数量与所述数据包的传输数量的差值大于预设阈值时,确定所述tcp会话发生ackflood攻击。

可选的,校验单元302可以具体用于:

判断所述tcp会话中传输的ack报文的序列号和确认号是否正确;

当判断出所述ack报文的序列号和确认号均正确时,确定所述ack报文是合法的;

当判断出所述ack报文的序列号或确认号不正确时,确定所述ack报文是不合法的。

可选的,当校验单元301判断所述tcp会话中传输的ack报文的序列号是否正确时,具体用于:

比较所述ack报文的序列号与n的大小;其中,所述n为所述ack报文的上一个合法的ack报文的序列号加一;

当所述ack报文的序列号等于n时,确定所述ack报文的序列号正确;

当所述ack报文的序列号不等于n时,确定所述ack报文的序列号不正确。

可选的,当校验单元302判断所述tcp会话中传输的ack报文的确认号是否正确时,可以具体用于:

比较所述ack报文的确认号与m的大小;其中,所述m为在所述ack报文之前收到的最新数据包的序列号和所述最新数据包的长度值的和值;

当所述ack报文的确认号小于等于m时,确定所述ack报文的确认号正确;

当所述ack报文的确认号大于m时,确定所述ack报文的确认号不正确。

进一步的,该装置还可以包括:

第一参数单元,用于当校验单元302确定所述ack报文的确认号等于m时,更新预先基于重传次数设置的第一参数;其中,所述第一参数的初始值为零;

判断更新后的第一参数是否大于预先设置的第一阈值;

当判断出所述更新后的第一参数大于所述第一阈值时,将在所述ack报文之后接收到的ack报文丢弃,直至接收到新的数据包为止。

进一步的,该装置还可以包括:

第二参数单元,用于当校验单元302确定所述ack报文的确认号小于m时,更新预先基于tcp滑动窗口协议设置的第二参数,得到更新后的第二参数;其中,所述第二参数的初始值为零;

判断所述更新后的第二参数是否大于预先设置的第二阈值;

当判断出所述更新后的第二参数大于所述第二阈值时,将在所述ack报文之后接收到的ack报文丢弃,直至接收到新的数据包为止。

另外,该装置还可以包括会话超时时间更新单元和会话删除单元,其中:

会话超时时间更新单元,用于当校验单元302确定所述ack报文的确认号等于m时,更新所述tcp会话的会话超时时间。

会话删除单元,用于当所述tcp会话的会话超时时间结束时,将所述tcp会话删除;并将所述tcp会话删除后接收到的ack报文丢弃。

与相关技术相比,本发明上述各个实施例的技术方案可以实现如下技术效果中的至少一项。

首先,当前很多技术只是简单应对伪造ip的ack防御,识别是否是合法的客户端,不能防御真实ip的ackflood攻击,而本发明的技术方案无论真实还是伪造的,都可以防护。伪造的ip不能够建立tcp连接,不能完成tcp三次握手,本发明的技术方案采用没有建立会话,则不会允许ack包通过的方式。

其次,本发明的技术方案通过统计和监测模块,先判断哪个会话发生了ackflood攻击,再基于发生ackflood的会话进行ack包校验,相对其他方案对所有的会话进行ack包校验,节省了大量的计算资源。

此外,当前技术针对snat上网形式处理的不够好,采用禁止攻击ip的后续访问,本发明的技术方案只丢弃发生ackflood攻击会话的包。

另外,当前技术方案不能防御ddos的真实的分布式攻击,本发明的技术方案可以在大量流量中,准确地识别出攻击者建立的会话,并阻断这个攻击会话。

另外,当前技术基于tcp重传机制认为合法,对于大量的一样的合法的seq和ack的ack构造包,也认为是合法的,而本发明的技术方案采用固定阈值方式,允许合理的部分通过,后续ack包将丢弃。

另外,结合图1和图2描述的本发明实施例的ackflood攻击的防护方法可以由中间防护设备来实现。图4示出了本发明实施例提供的中间防护设备的硬件结构示意图。

中间防护设备可以包括处理器401以及存储有计算机程序指令的存储器402。

具体地,上述处理器401可以包括中央处理器(cpu),或者特定集成电路(applicationspecificintegratedcircuit,asic),或者可以被配置成实施本发明实施例的一个或多个集成电路。

存储器402可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器402可包括硬盘驱动器(harddiskdrive,hdd)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(universalserialbus,usb)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器402可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器402可在数据处理装置的内部或外部。在特定实施例中,存储器402是非易失性固态存储器。在特定实施例中,存储器402包括只读存储器(rom)。在合适的情况下,该rom可以是掩模编程的rom、可编程rom(prom)、可擦除prom(eprom)、电可擦除prom(eeprom)、电可改写rom(earom)或闪存或者两个或更多个以上这些的组合。

处理器401通过读取并执行存储器402中存储的计算机程序指令,以实现上述实施例中的任意一种ackflood攻击的防护方法。

在一个示例中,中间防护设备还可包括通信接口403和总线410。其中,如图4所示,处理器401、存储器402、通信接口403通过总线410连接并完成相互间的通信。

通信接口403,主要用于实现本发明实施例中各模块、装置、单元和/或设备之间的通信。

总线410包括硬件、软件或两者,将中间防护设备的部件彼此耦接在一起。举例来说而非限制,总线可包括加速图形端口(agp)或其他图形总线、增强工业标准架构(eisa)总线、前端总线(fsb)、超传输(ht)互连、工业标准架构(isa)总线、无限带宽互连、低引脚数(lpc)总线、存储器总线、微信道架构(mca)总线、外围组件互连(pci)总线、pci-express(pci-x)总线、串行高级技术附件(sata)总线、视频电子标准协会局部(vlb)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线410可包括一个或多个总线。尽管本发明实施例描述和示出了特定的总线,但本发明考虑任何合适的总线或互连。

该中间防护设备可以基于获取到待测小区的网管性能指标,执行本发明实施例中的ackflood攻击的防护方法,从而实现结合图1和图2描述的ackflood攻击的防护方法。

另外,结合上述实施例中的ackflood攻击的防护方法,本发明实施例可提供一种计算机可读存储介质来实现。该计算机可读存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种ackflood攻击的防护方法。

需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。

以上所述的结构框图中所示的功能块可以实现为硬件、软件、固件或者它们的组合。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(asic)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、rom、闪存、可擦除rom(erom)、软盘、cd-rom、光盘、硬盘、光纤介质、射频(rf)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。

还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。

以上所述,仅为本发明的具体实施方式,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。应理解,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1