DoS和DDoS攻击之SYN泛洪攻击

一、什么是半链接队列

服务器第一次收到客户端的 SYN 以后,就会处于 SYN_RCVD 状态,此时双方尚未彻底创建其链接,服务器会把此种状态下请求链接放在一个队列里,咱们把这种队列称之为半链接队列。固然还有一个全链接队列,就是已经完成三次握手,创建起链接的就会放在全链接队列中。若是队列满了就有可能会出现丢包现象。

第三次没有收到ACK包会怎样?
由于Server没有收到ACK确认,因此会重发之前的SYN+ACK(默认重发五次,之后自动关闭连接),Client收到后会重新传ACK给Server。如果 Client向服务器发送数据,服务器会以RST包响应。

这里在补充一点关于SYN-ACK 重传次数的问题: 服务器发送完SYN-ACK包,若是未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,若是重传次数超 过系统规定的最大重传次数,系统将该链接信息从半链接队列中删除。注意,每次重传等待的时间不必定相同,通常会是指数增加,例如间隔时间为 1s, 2s, 4s, 8s, ....

二、DDoS和DoS攻击

DDoS和DoS攻击中的一种方法。下面我们来详细看一下区分:

DoS(拒绝服务):不是DOS操作系统,造成DoS的攻击行为被称为DoS攻击,它的目的是使得计算机或者网络我无法提供正常服务。最常见的DOS攻击有计算机网络带宽攻击和连通性的攻击。

DDoS(分布式拒绝服务);这个的攻击借助于客户/服务器技术,将多个计算机联合起来作为一个攻击平台,对一个或者是多个目标发动攻击,从而成倍的提高就裁决服务攻击的威力。

三、DDoS如何进行攻击

DDoS究竟如何攻击?目前最流行也是最好用的攻击方法就是使用SYN-Flood进行攻击,SYN-Flood也就是SYN洪水攻击。SYN-Flood不会完成TCP三次握手的第三步,也就是不发送确认连接的信息给服务器。这样,服务器无法完成第三次握手,但服务器不会立即放弃,服务器会不停的重试并等待一定的时间后放弃这个未完成的连接,这段时间叫做SYN timeout,这段时间大约30秒-2分钟左右。若是一个用户在连接时出现问题导致服务器的一个线程等待1分钟并不是什么大不了的问题,但是若有人用特殊的软件大量模拟这种情况,那后果就可想而知了。一个服务器若是处理这些大量的半连接信息而消耗大量的系统资源和网络带宽,这样服务器就不会再有空余去处理普通用户的正常请求(因为客户的正常请求比率很小)。这样这个服务器就无法工作了,这种攻击就叫做:SYN-Flood攻击。

常见的SynFlood攻击方法有三种:

  1. 直接攻击:通过直接发送大量伪造TCP的方式进行攻击。在这种攻击中,由于攻击者不对IP地址进行隐蔽,导致攻击源单一,因此很容易发现并清理攻击者。
  2. IP欺骗攻击:通过IP地址的伪造,增加防御者的溯源难度。IP地址伪造技术的实现形式并不复杂 。首先创建一个具有IP报文格式的结构, 然后在该结构中源地址一项上填写虚假的IP地址, 最后将该报文写入输出设备发向目标主机。
  3. 分布式攻击(DDoS):如果攻击者控制大量肉鸡,使用僵尸网络发起攻击,那么攻击的溯源几乎无法进行。甚至有的攻击者还会命令每台设备进行IP地址的伪造,将两种攻击方式进行结合,对被攻击者造成难以抵御的伤害。

SynFlood攻击的防范

  1. 限制半连接流量和缩短SYN Timeout时间:在目标计算机设置检测功能, 即发现不断到针对本机的Syn数据包, 而又不做出应答, 则认为是受到Syn泛洪攻击, 并拒绝与它连接。同时, 由于服务器的应答有一个延迟时间, 可以将延迟时间缩短从而减少对半连接握手状态的等待时间。
  2. Syn cookie:与传统TCP连接不同,服务器再接收到TCP SYN包并返回TCP SYN + ACK包时,并不需要对接下来可能收到的数据包进行资源的预留而是根据这个SYN包计算出一个cookie值。这个cookie作为将要返回的SYN ACK包的初始序列号。当客户端返回一个ACK包时,根据包头信息计算cookie,与返回的确认序列号进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接。

 

TCP连接详解可以参阅看本博客其他博文:TCP详解 - 盼星星盼太阳 - 博客园 (cnblogs.com)

posted @ 2021-12-27 10:12  盼星星盼太阳  阅读(520)  评论(0编辑  收藏  举报