专利名称:防止拒绝服务型攻击的方法
技术领域:
本发明涉及网络中通信设备的安全技术,特别涉及一种防止拒绝服务型攻击的方法。
背景技术:
拒绝服务型攻击(Denial of service-DoS)是黑客攻击网络常用的也是很有破坏力的手段,其显著体现在攻击者对合法用户使用网络服务的破坏,例如(1)发起网络风暴(SYN Flood),使得网络拥塞;(2)中断两台机器间的连接,从而破坏网络服务的使用;(3)破坏特殊的个体使用网络;(4)中断特殊系统或个人的服务。
在四层交换中,用户侧发送一个首包报文(SYN),交换机/路由器系统就要为之建立一条流缓存(Cache)表项,如果攻击者利用这一点,发起SYN Flood攻击,大量的建立流缓存(Cache)表项,很快就会将流缓存表(Cache)塞满,这时正常的连接就无法建立,网络通讯遭到破坏,造成了合法用户的业务中断。
为了对抗黑客的此类恶意进攻,目前,针对多层交换机防DoS攻击主要的有如下几种1、对报文进行检查,丢弃非法的报文。交换/路由设备丢弃如下种类的帧包长过短、分片报文、源IP地址与目的IP地址相同(LAND攻击)、源地址与自身地址相同(或者源是子网广播地址)、源地址不是单播地址、源IP地址是环回地址、目的IP地址是环回地址、目的地址不是有效的单播或多播地址等。
2、基于如下域进行过滤如源IP地址、目的IP地址、TCP端口、Tag域、URL、文件扩展等,可以采用禁止通过服务器或禁止缓存(Cache)访问特殊的内容等方式。
3、交换机发现有DoS攻击发生,自动激发相应的防DoS策略。例如对于以相同五元组、相同初始序列号发起的SYN请求超过8次,将删除该流,并停止处理从该源来的SYN请求;4、利用带宽管理来限制服务器Server的连接速度。这里指配置QOS规则来限制客户Client到服务器Server方向的带宽管理。这样,当黑客攻击某个虚服务VIP时(实际上应该是三元组的虚服务,黑客不会对某个IP地址的各个端口同时攻击),交换/路由设备本身不至于堵塞、灌死,其它VIP还能够对外提供服务;5、利用交换/路由设备中的缓存技术,待三次握手完毕后,才让服务器Server处理该TCP连接,可以达到基本上防止SYN Flood类攻击目的,具体做法如图1。
第1、2、3基于对报文进行检查和域的过滤方法可以避免流量环回、网络风暴的产生,虽然可以使得交换机本身不被DoS攻击打垮,不过添加这样的判断机制会减慢转发的速度。尽管这样的做法是必须的,在设计时也还需要在有效对抗攻击和最少占用资源间进行平衡。
第4种方法利用带宽限制Client到Server的流量,虽然可以从流量上限制攻击,但同时也限制了正常时候用户可以访问的最大速度。
第5种方法待三次握手完毕后,才让服务器Server处理该TCP连接,基本上可以防止SYN Flood攻击,减少被攻击服务器的损失。但对于性能至上的网络处理器来说,要利用缓存来实现该方案,不仅复杂,而且会极大地耗费系统资源。
尽管以上的几种技术解决方法各自可以从不同方面防止对多层网络交换机的DoS攻击,但是共同存在的问题是在对抗DoS攻击同时,牺牲了较多的网络服务资源,影响了网络提供正常服务的能力。
发明内容
本发明的目的在于提供一种防止拒绝服务型攻击的方法,当交换/路由设备提供的某个虚服务受到攻击时,能够帮助被攻击的系统进行预防或减少损失、而且基本不影响其提供正常服务的能力。
本发明的技术方案一一种防止拒绝服务型攻击的方法,该方法包括步骤交换/路由设备收到客户端的首包报文时建立对应的流缓存表项,在该流缓存表项中至少设置第一标志,并将所述首包报文转发到服务器;服务器通过交换/路由设备向客户端返回首包响应报文,并建立半开连接;交换/路由设备收到所述客户端的回应报文时将对应的流缓存表项中的第一标志修改为第二标志,并将该回应报文转发给服务器;以及检查流缓存表项,将第一标志的存在时间已达到第一老化时间的流缓存表项删除,并构建重置报文发送给服务器,由服务器拆除对应的半开连接。
其中所述流缓存表项中还记录有所述首包报文的序列号,在构建用于拆除半开连接的重置报文时,将所述首包报文的序列号加1作为重置报文序列号。
流缓存表项中设置后续包标志,在服务器与客户端建立完全连接后,客户端有后续包匹配上该缓存表项,则将该后续包标志修改为“命中”标记,否则该后续包标志始终保持为“未命中”标记。
当流缓存表项的后续包标志为“未命中”标记的存在时间达到第二老化时间时将该流缓存表项删除,并构建重置报文发送给服务器,由服务器拆除对应的连接。
后续包标志保持为“命中”标记的流缓存表项按系统的正常老化机制处理。
所述的第二老化时间大于第一老化时间,并且均小于系统正常的老化时限值。
本发明的技术方案二一种防止拒绝服务型攻击的方法,其特征在于包括步骤交换/路由设备收到客户端的第一个报文时建立对应的流缓存表项,在该流缓存表项中至少设置第一标志,并将该第一个报文转发给服务器;以及将第一标志的存在时间已达到第一老化时间的流缓存表项删除,并由交换/路由设备回收为该客户端分配的资源。
其中当交换/路由设备收到所述客户端的第二个报文时,将对应的流缓存表项中的第一标志修改为第二标志,以及将第二标志的存在时间已达到第二老化时间的流缓存表项删除,并由交换/路由设备回收为该客户端分配的资源。
当交换/路由设备收到所述客户端的第三个报文时,将对应的流缓存表项中的第二标志修改为第三标志,以及将第三标志的存在时间已达到第三老化时间的流缓存表项删除,并由交换/路由设备回收为该客户端分配的资源。
所述的第三老化时间为系统的正常老化时间,所述的第二老化时间大于第一老化时间且均小于第三老化时间。
所述的第三老化时间为系统的正常老化时间。
本发明具有以下有益效果(1)正常时候用户可以访问的最大速度不会被限制;(2)可以对未完成三次握手和完成三次握手攻击进行防御;(3)网络交换机(WebSwitch)提供的某个虚服务收到攻击时,能够帮助被攻击的服务器减少损失或进行预防;(4)不过多占用系统资源,不对转发等性能有太大影响,适合网络处理器(NP)中对DoS攻击防御的操作。
图1现有技术中三次握手完备后的防拒绝服务攻击流程图;图2为本发明防网络风暴攻击流程图;图3为本发明的防网络风暴攻击的流缓存表项状态变迁图;图4为本发明防三次握手攻击的流缓存表项状态变迁图。
具体实施例方式
实施例一、
网络风暴(SYN Flood)攻击是攻击者将大量的首包报文SYN发送给服务器,服务器收到每个首包报文后会发送首包响应报文SYN ACK,并建立传输控制协议(TCP)半开连接,然后等待客户侧发来的回应报文ACK。但攻击者不会发送服务器等待的回应报文ACK,导致服务器充满了半开连接。由于服务器不断地向外发送得不到任何回应的首包响应报文SYN ACK,使服务器处于异常繁忙的状态,使正常的连接请求很难被处理,最终造成正常业务中断。
参阅图2所示为了避免上述情况的发生,利用流缓存表(Cache)的老化机制在短时间内通知服务器拆除那些得不到回应的半开连接,以减轻服务器受到的攻击,使得服务器有能力去处理正常连接的请求。
当交换或路由设备在收到客户端的首包时,在流缓存(Cache)表种建立起缓存表项。如果客户(Client)的回应报文包在第一老化时间内不到,如8秒内,该缓存表项被快速老化掉,多层交换机构建一个重置报文RST发给服务器。这里说的快速老化专门针对这种半开连接的缓存表项,与系统正常的老化区别对待,即两者的老化时间不同。这样不必将整个老化时间缩短,因为正常老化时间太短,会影响正常的应用服务。而区分半开连接的方法是在缓存表项中设置一个表示是否完成握手的标志位ACK_hit,刚建立表项的时候,该标志位ACK_hit为“0”,即第一标志,表示客户端与服务器未完成握手(即客户端发送的第一个报文),当客户端有回应ACK报文到来时,将该标志位ACK_hit置为“1”,即第二标志,表示客户端与服务器已完成三次握手(即客户端发送的第二个报文)。
结合图2与图3所示,其工作流程如下(1)多层交换机收到客户发来的TCP首包报文SYN,建立对应的流缓存(Cache)表项,并设置表示未完成握手的第一标志(即将标志位ACK_hit设置为0),然后将首包报文SYN转发到服务器端。
服务器向多层交换机返回首包响应SYN ACK报文,并由多层交换机返回给客户端,同时服务器与客户端建立半开的TCP连接。
流缓存表项中除了保存有源IP地址、目的IP地址、源端口号和目的端口号外,还记录首包报文的序列号。
(2)如果多层交换机在第一老化时间内收到客户发来的回应报文ACK时,将匹配上的流缓存(Cache)表项中的第一标志改为第二标志,即将标志位ACK_hit标志置1,表示收到客户端的回应报文ACK,已完成三次握手并建立了完全连接。
(3)定时老化对所有的流缓存表项进行检查,如果发现流缓存表项中的标志位为第一标志(即标志位ACK_hit为“0”),表示该连接没有完成三次握手,于是进一步判断该半开连接的存在时间是否已经达到了第一老化时间,如8秒,如果是,则删除该表项。同时在网络处理器中构造一个相应的重置报文RST发送给服务器侧,由服务拆除半开连接。
流缓存表一旦建立,只要有报文命中该表项,那么就用系统当前的时戳更新流缓存表中的时戳。因此用系统当前的时戳和流缓存表保存的时戳即可计算半开连接的存在时间。
构造重置报文RST报文时,由网络处理器从对应的流缓存表中获取源IP地址(SRC IP),目的IP地址(DST IP),源端口号(SPORT),目的端口号(DPORT)以及首包报文序列号加1(SEQ NUM)等内容,写入重置报文相应的域中。其中重置报文的确认序列号可以填成任意值。
(4)交互完成后,在由服务器端或者客户端发起的拆除TCP连接的情况下,会有结束报文FIN或重置报文RST去拆除连接,同时删除对应的流缓存表项。
对于完成三次握手的连接(即表项中回应命中位ACK_hit为“1”),如果在系统的正常老化时限内,如16秒,没有后继报文命中该流缓存表项,则系统的正常老化机制将该流缓存表项将被删除,并由服务器拆除对应的连接。
参阅图4,快速老化的方法对完成了三次握手的攻击,即建立了完全连接但再也没有后续报文,造成服务器侧被大量的无用连接充斥,从而影响合法用户的业务请求的攻击,也可以予以防御。
在流缓存表中扩展一个后续包命中位Flow_hit,与回应命中位ACK_hit类似。当将流缓存表项中的第一标志修改为第二标志后(即建立完全连接后),如果用户端有后续包命中流缓存表项,则后续包命中位为“命中”标记,如将后续包命中位Flow_hit比特位置“1”,否则后续包命中位始终为“未命中”标记,如将后续包命中位Flow_hit比特位置为“0”。定时老化在对缓存表项进行检查时,对该后续包命中位进行判断,如果为“未命中”标记而且其存在的时间已达到第二老化时间,如12秒,则删除该流缓存表项,并构造重置报文RST发送给服务器,以拆除服务器侧的连接。
对于完成三次握手的连接和有后续包命中的流缓存表项(即表项中回应命中位ACK_hit为“1”和后续包命中位Flow_hit为“1”),会有结束报文FIN、重置报文RST或系统的正常老化机制去拆除连接。
实施例二作为对实施例一的变化,在流缓存表项中直接设置老化时间,而不需要设置后续包命中位标志。其过程如下(1)多层交换机收到客户发来的TCP首包报文SYN,建立对应的流缓存(Cache)表项,并设置表示未完成握手的第一标志和第一老化时间,然后将首包报文SYN转发到服务器端。第一老化时间应小于系统的正常老化时间,如第一老化时间为8秒。
(2)如果多层交换机在第一老化时间内收到客户发来的回应报文ACK时,将匹配上的流缓存(Cache)表项中的第一标志改为第二标志,即将标志位ACK_hit标志置1,表示收到客户端的回应报文ACK,已完成三次握手并建立了完全连接,同时将第一老化时间修改为第二老时间。
(3)定时老化对所有的流缓存表项进行检查。用系统当前的时戳和流缓存表保存的时戳,计算出报文上次命中该表项到当前的时间,如果该时间达到或超过该流缓存表项中设置的第一或第二老化时间,则删除该表项。同时在网络处理器中构造一个相应的重置报文RST发送给服务器侧,由服务拆除相应的连接。
当第二老化时间为系统的正常老化时间时,能实现防御半开连接的攻击。为了防御完成了三次握手的攻击,将第二老化时间设置为大于第一老化时间并且小于系统正常的老化时间,当客户端在回应报文后有后续报文命中流缓存表时将第二老化时间修改为第三老化时间,即系统的正常老化时间,同时该流缓存表保存的时戳也修改系统当前的时戳。如第二老时间为12秒,第三老化时间为16秒。因此,对于已完成三次握手连接,如果客户端在回应报文后没有后续报文命中对应的流缓存表,则在检查到该流缓存表的存在时间超过第二老化时间时即被删除,并构造一个相应的重置报文RST发送给服务器侧,由服务拆除相应的连接。
实施例三、由于传输控制协议是面向连接的,而用户数据报协议(UDP)是面向非连接,但是交换/路由设备在收到客户端的UDP报文后,仍然要为该客户分配资源,因而大量的没有后UDP报文的第一、第二个报文将会占用大量的资源。
由于UDP报文没有TCP报文的特殊标志,如没有SYN、SYN ACK、ACK、RST等报文,因此,为UDP报文分配的资源只能通过老化机制来回收。所以针对不同的服务,需要设置不同的老化时间。
由于报文中没有当前报文为第几个报文的信息,当交换机接收到报文后查找不到匹配的流缓存表时将该报文作为第一个报文,而后续报文从报文本身无法确定当前报文是第几个报文,因此,通过在流缓存表中设置代表报文序号的标志,通过该标志交换机可判断出当前的报文为第几个报文,并对具有不同标志的流缓存表项采用不同的老化时间进行老化。
其主要过程如下1)客户发起某个UDP连接,当交换机收到该连接的第一个UDP报文,则需要为该连接建流缓存表,并设置代表报文序号的第一标志,然后将报文转发给服务器(在转发之前,还会有很多功能性操作,不同的交换机有不同的操作)。
流缓存表一旦建立,只要有报文命中该表项,那么就要用系统当前的时戳更新流缓存表中的时戳2)不管服务器有没有响应,假设交换机收到该连接的第二个UDP报文,那么该报文会命中流缓存表,则将流缓存表中的第一标志修改为第二标志,然后将报文转发给服务器。
3)同理,当交换机收到该连接的第三个UDP报文,也命中流缓存表,此时要将表项中的第二标志修改为第三标志;以及类推。
4)定时对流缓存表进行检查,用系统当前的时戳和流缓存表保存的时戳,计算出报文上次命中该表项到当前的时间,即得到了该流缓存表项中相应的标志已存在的时间,根据该流组成存表项中的标志与相应的老化时间进行比较,即第一、第二、第三标志存在的时间分别与第一、第二、第三老化时间进行比较。如果标志存在的时间达到或超过对应的老化时间,则删除该流缓存表项,由交换机就会回收资源。其中第三老化时间大于第二老化时间,第二老化时间大于第一老化时间。第一即如果交换机只收到某客户端第一个UDP报文,则那么交换机会在第一老化时间内回收为该UDP连接分配的资源;如果只收到用户侧2个UDP报文,那么就会在第二老时间内回收资源。如果第三老化时间为系统的正常老化时间,则收到用户侧三个或三个以上UDP报文,交换机就会在正常的老化时间内回收资源。
本实施例中,在系统的正常老化时间(即第三标志)之前设置了两个保护层次,即第一、二标志,该保护层次可根据业务需要设置,如可以是一个层次,可以是两个层次,甚至三个层次,也可以没有层次等。
实施例四本实施例为实施三例的一种变化,在流缓存中设置报文的序号标志时同时设置相应的老化时间,即设置第一标志时设置第一老化时间,将第一标志修改为第二标志时将第一老化时间修改为第二老化时间,将第二标志修改为第三标志时将第二老化时间修改为第三老化时间,以此类推。定时老化对所有的流缓存表项进行检查,用系统当前的时戳和流缓存表保存的时戳,计算出报文上次命中该表项到当前的时间,如果该时间达到或超过该流缓存表项中设置的老化时间,则删除该表项,由交换机回收资源。其余与实施三同理。
权利要求
1.一种防止拒绝服务型攻击的方法,其特征在于包括步骤交换/路由设备收到客户端的首包报文时建立对应的流缓存表项,在该流缓存表项中设置表示未完成握手的第一标志,并将所述首包报文转发到服务器;服务器通过交换/路由设备向客户端返回首包响应报文并建立半开连接;当交换/路由设备收到所述客户端的回应报文时,将对应的流缓存表项中的第一标志修改为表示已完成握手的第二标志,并将该回应报文转发给服务器;以及检查流缓存表项,将第一标志的存在时间已达到第一老化时间的流缓存表项删除,并构建重置报文发送给服务器,由服务器拆除对应的半开连接。
2.如权利要求1所述的方法,其特征在于,在流缓存表项中设置后续包标志,如果在所述回应报文后,客户端有后续报文命中该流缓存表项,则将该后续包标志修改为“命中”标记,否则该后续包标志始终保持为“未命中”标记。
3.如权利要求2所述的方法,其特征在于,当具有第二标志的流缓存表项的后续包标志为“未命中”标记并且该标志的存在时间达到第二老化时间时,将该流缓存表项删除,并构建重置报文发送给服务器,由服务器拆除对应的连接。
4.如权利要求2所述的方法,其特征在于,后续包标志保持为“命中”标记的流缓存表项按系统的正常老化机制处理。
5.如权利要求1所述的方法,其特征在于,所述流缓存表项中还记录有所述首包报文的序列号,在构建用于拆除半开连接的重置报文时,将所述首包报文的序列号加1作为重置报文序列号。
6.如权利要求4所述的方法,其特征在于,所述的第二老化时间大于第一老化时间,并且均小于系统正常的老化时间。
7.一种防止拒绝服务型攻击的方法,其特征在于包括步骤交换/路由设备收到客户端的首包报文时建立对应的流缓存表项,在该流缓存表项中设置表示未完成握手的第一标志和相应的第一老化时间,并将所述首包报文转发到服务器;服务器通过交换/路由设备向客户端返回首包响应报文并建立半开连接;当交换/路由设备收到所述客户端的回应报文时,将对应的流缓存表项中的第一标志和第一老化时间分别修改为表示已完成握手的第二标志和第二老化时间,并将该回应报文转发给服务器;以及检查流缓存表项,将流缓存表项的存在时间已达到该表项中设置的老化时间的流缓存表项删除,并构建重置报文发送给服务器,由服务器拆除对应的连接。
8.如权利要求7所述的方法,其特征在于,如果在所述回应报文后,客户端有后续报文命中该流缓存表项,则将所述的第二老时间修改为第三老化时间。
9.如权利要求8所述的方法,其特征在于,所述的第三老化时间为系统的正常老化时间,所述的第二老化时间大于第一老化时间并且均小于第三老化时间。
10.一种防止拒绝服务型攻击的方法,其特征在于包括步骤交换/路由设备收到客户端的第一个报文时建立对应的流缓存表项,在该流缓存表项中设置表示该报文序号的第一标志,并将该第一个报文转发给服务器;在所述第一个报文后,该客户端有后续报文命中流缓存表项时,修改该流缓存表项中表示报文序号的标志,以及检查流缓存表项,将第一标志的存在时间已达到第一老化时间的流缓存表项删除,并由交换/路由设备回收为该客户端分配的资源。
11.如权利要求10所述的方法,其特征在于,当交换/路由设备收到所述客户端的第二个报文时,将对应的流缓存表项中的第一标志修改为第二标志,以及将第二标志的存在时间已达到第二老化时间的流缓存表项删除,并由交换/路由设备回收为该客户端分配的资源。
12.如权利要求11所述的方法,其特征在于,当交换/路由设备收到所述客户端的第三个报文时,将对应的流缓存表项中的第二标志修改为第三标志,以及将第三标志的存在时间已达到第三老化时间的流缓存表项删除,并由交换/路由设备回收为该客户端分配的资源;以此类推。
13.如权利要求12所述的方法,其特征在于,所述的第三老化时间为系统的正常老化时间,所述的第二老化时间大于第一老化时间且均小于第三老化时间。
14.一种防止拒绝服务型攻击的方法,其特征在于包括步骤交换/路由设备收到客户端的第一个报文时建立对应的流缓存表项,在该流缓存表项中设置表示报文序号第一标志和相应的第一老化时间;在所述第一个报文后,该客户端有后续报文命中流缓存表项时,修改该流缓存表项中表示报文序号的标志和相应的老化时间,以及检查流缓存表项,将流缓存表项的存在时间已达到该表项中设置的老化时间的流缓存表项删除,并由交换/路由设备回收为该客户端分配的资源。
15.如权利要求14所述的方法,其特征在于,当交换/路由设备收到所述客户端的第二个报文时,将对应的流缓存表项中的第一标志和第一老化时间分别修改为第二标志和第二老化时间。
16.如权利要求15所述的方法,其特征在于,当交换/路由设备收到所述客户端的第三个报文时,将对应的流缓存表项中的第二标志和第二老化时间分别修改为第三标志和第三老化时间,以此类推。
17.如权利要求16所述的方法,其特征在于,所述的第三老化时间为系统的正常老化时间,所述的第二老化时间大于第一老化时间且均小于第三老化时间。
全文摘要
本发明公开了一种防止拒绝服务型攻击的方法,该方法为,交换/路由设备收到客户端的首包报文时建立对应的流缓存表项,在该流缓存表项中设置表示未完成握手的第一标志,并将所述首包报文转发到服务器;服务器通过交换/路由设备向客户端返回首包响应报文并建立半开连接;当交换/路由设备收到所述客户端的回应报文时,将对应的流缓存表项中的第一标志修改为表示已完成握手的第二标志,并将该回应报文转发给服务器;以及检查流缓存表项,将第一标志的存在时间已达到第一老化时间的流缓存表项删除,并构建重置报文发送给服务器,由服务器拆除对应的半开连接。
文档编号H04L12/56GK1553662SQ0313753
公开日2004年12月8日 申请日期2003年6月8日 优先权日2003年6月8日
发明者龚华, 牛琨, 龚 华 申请人:华为技术有限公司