SYN Flood攻击与防护

   SYN Flood攻击是什么:

    SYN Flood攻击是当前网络上最为常见的DDoS攻击,它利用了TCP协议实现上的一个缺陷。通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。(结合“http和https的全名认知”阅读更好)

  

  SYN Cookie是什么: 

  SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区TCB(传输控制数据区,通常一个TCB至少需要280个字节,在某些操作系统中TCB甚至需要1300个字节),而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器再根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。  

   

  攻击原理:

    看三次握手(如下图),会发现这个流程是有缺陷的:在第二次握手中,当服务器发送了syn+ack报文后,若该连接的定时器超过超时重传时间(出现超时的原因可能是syn+ack报文丢失、客户ack报文丢失、RTT时间过长、甚至可能客户是在进行synflood攻击),服务器就会对报文进行重传,当重传次数超过阈值服务器认为TCP连接超时,而后才会销毁该请求套接口释放TCB(传输控制数据区)。如果攻击者用快于服务器TCP连接超时的速度,连续对目标服务器开放的端口发送SYN报文,服务器的所有资源都将被消耗,以至于不能再接受其他客户的正常连接请求(某些操作系统在SOCKT的实现上最多可开启512个半开连接(如Linux2.4.20 内核))。

    

   防护措施:

     常见的方法是使用SYN Cache和SYN Cookie技术。

    SYN Cache:收到SYN数据报文时不急于去分配TCB,而是先回应一个SYN ACK报文,并在一个专用HASH表(Cache)中保存这种半开连接信息,直到收到正确的回应ACK报文再分配TCB。

   

  防护方案: 

    目前对于SYN Flood攻击一般都通过实时监测tcp的新建连接速率来判断。显然地,当恶意客户端向目标发起攻击时,对目标服务器的请求连接报文会在短时间内大量增加,安全设备发现去往服务器的请求连接速率超过指定的阈值后即可开启防御。

    防御的前提当然是要区分出那些请求是合法的连接哪些是SYN泛洪,常见的方法是使用SYN Cache和SYN Cookie技术:

      SYN Cache:收到SYN数据报文时不急于去分配TCB,而是先回应一个SYN ACK报文,并在一个专用HASH表(Cache)中保存这种半开连接信息,直到收到正确的回应ACK报文再分配TCB。 

      SYN Cookie:SYN Cache虽然不分配TCB,但是为了判断后续对方发来的ACK报文中的Sequence Number的正确性,还是需要使用一些空间去保存己方生成的Sequence Number等信息,也造成了一些资源的浪费。Syn Cookie技术则完全不使用任何存储资源,这种方法比较巧妙,它使用一种特殊的算法生成Sequence Number。计算规则如:使用对方的IP、端口,己方IP、端口的固定信息,以及对方无法知道而己方比较固定的一些信息,如MSS、时间等,在收到对方的ACK报文后,重新计算一遍,算出  Sequence Number

 

    来看几种典型的使用安全设备的实现方法(安全设备,例如:防火墙):

    方法一:①当安全设备获取到发往服务器的SYN报文后,设备模拟服务端会给此源IP回复ack=Cookie的SYN/ACK报文(Cookie是通过五元组加密计算出来的值,正常情况下的ack=seq+1)。

      ②正常客户端会回复RST报文,而攻击流则不会回复。

      ③安全设备收到RST报文并校验后便可把回复正确报文的客户端IP加入白名单(校验通过的标准是RST报文中携带的seq等于用该报文的五元组等信息算出的Cookie)。

      ④后续安全设备放行属于该IP的正常流量。

    方法二(参考图1):①当安全设备获取到发往服务器的SYN报文后,设备模拟服务器给源IP回复seq=Cookie的SYN/ACK报文。

      ②正常客户端会回复ACK报文,确认序列号为Cookie+1。

      ③安全设备收到ack报文并校验无误后将该客户端的IP加入白名单,并向客户端发送RST报文断开连接。

      ④后续安全设备放行属于该IP的正常流量。

    方法三(参考图2):①当安全设备获取到发往服务器的SYN报文后,设备模拟服务器给源IP回复seq=Cookie的SYN/ACK报文。

      ②正常客户端会回复ACK报文,确认序列号为Cookie+1。

      ③安全设备收到ack报文并校验无误后,设备与服务发送连接请求,通过三次握手后与服务器建立起连接。

      ④客户端与防火墙之间建立了连接,防火墙与服务器之间也建立了连接,客户端与服务器间关于此次连接的后续数据报文都将通过安全设备进行代理转发。

 

    参考图1:

     

 

 

    参考图2:

      

 

posted @ 2021-08-06 16:35  修心而结网  阅读(735)  评论(0编辑  收藏  举报