[网络编程] 同步洪流攻击(TCP SYN FLOOD),ddos攻击的原理和预防

同步洪流攻击(SYN FLOOD ATTACK)是什么?

TCP SYN fllod是一种DDos攻击,它利用TCP三次握手的机理,在其中做文章消耗服务端系统资源,从而导致服务端出现反应迟钝。
实际上,这种攻击会快速发送TCP链接请求,这个速度快过了服务端系统的处理速度,进而导致网络的饱和,正常用户无法享受服务。

攻击原理

客户端和服务端建立正常的三次握手的具体情况是这样的:
1.Client requests connection by sending SYN (synchronize) message to the server.
2.Server acknowledges by sending SYN-ACK (synchronize-acknowledge) message back to the client.
3.Client responds with an ACK (acknowledge) message, and the connection is established.

SNY flood attack会这些进行破坏:
攻击者使用假IP重复发送SYN包到目标服务端的每一个端口。服务端接受这些表面上合法的请求并与之建立链接,接着从自己的端口应答SNY-ACK报文给每一个请求。
攻击者此时,要么不接受SNY-ACK(第3步),要么不发送ACK(第3步),此时服务端就会等待攻击者应答自己,但是明显是等不到的(但是还要等一个固定的时间段),
那么这个socket就被占用了,网络资源也被浪费了。
这种情况下,服务端无法通过发送RST packet来关闭连接,这个连接会维持一个“超时时间”的打开状态。接着会有源源不断的请求上来,连接也不停地创建,超时后关闭
连接的速度压根赶不上连接的创建速度。此时就会有大量的半打开状态(half-open)的连接。正因为如此,SNY flood attack也叫作 half-open attach。

*注: “半打开状态”  和   “半关闭状态”  不一样


“半打开”还没有建立连接,一端等待对端的建链ACK,会有一个超时丢弃机制,出现在三次握手阶段
“半关闭”是已经建立了,后来又断开了,因为没收到对端的断链ACK而产生,也会有一个超时丢弃机制,出现在四次挥手阶段,鉴于上述情况,服务端因为连接表不断溢出,正常的客户端无法得到服务,服务端也可能会崩溃。

半打开状态的超时时间为:1s + 2s + 4s+ 8s+ 16s + 32s = 2^6 -1 = 63s  , 这期间会尝试发送6次SYN,间隔分别是 1 , 2 ,4 ,8 ,16 ,32,共计63s,6次后还没收到对端的ACK,则发送RST。

详细介绍见:[网络协议] Tcp协议中的临界状态半打开、半关闭、TIME_WAIT、CLOSE_WAIT_什么是许接半打川,义关闭状态?-CSDN博客

缓和的办法

现如今操作系统在资源管理方面已经设计的相当良好,连接表很难再被溢出,但是在面对SNY flood attack的时候,系统依旧是脆弱的。

目前有如下几种方法来缓和SNY flood attack(疏,堵):
1.Micro blocks  ---  “疏”,依旧接受SNY请求,但是变相扩大自己的容量。对于SNY请求,不在用大数据结构管理,而采用微型数据结构(16个字节)。


2.SYN cookies   ---  “疏”,依旧接受SNY请求,但是延迟分配资源。客户端发送请求,服务端不立刻分配连接管理资源(分配内存空间),先使用客户端IP,客户端port或者其他特殊字段结合起来生成一个哈希值,附在SNY-ACK packet里面回给客户端,客户端再把哈希值附在ACK packet中回给服务端,服务端验证这个ACK packet中的哈希值和之前的一样后,再分配资源。
(这里涉及到tcp/ip协议的调整,要求客户端和服务端协商好附加哈希验证值的过程)


3.RST cookies   ---  “堵”+“骗”,服务端不再傻乎乎地走正常套路了,服务端在收到SNY后,会故意发一个错误的SNY-ACK给客户端,这个时候,如果使用正常tcp/ip协议的客户端会发现SNY-ACK内容不对,于是会回一个RST给服务端,告诉服务端“你发的东西不对头啊”。如果客户端收到了这个RST packet,那么可以说明对面那个客户端是合法的,接着进入正常流程。


4.Stack tweaking  ---   “疏”,把相关资源首位相接,做成环状(类似于日志模块),TCP栈空间的分配使用环状资源,这样不至于耗尽资源。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值