前言:三次握手的机制决定这个漏洞的必然存在。
提问:什么是洪泛攻击?
洪泛攻击
我们先回忆以下,正常情况下的三次握手:
正常的三次握手,在每次握手的时候,数据包中都会包含己方IP和对端IP,这样对端应答时根据数据包对端的IP,进行准确的应答。
例如上图第一次握手时,客户端请求时,会在数据包中包含客户端IP,服务端第二次握手,根据客户端的IP,准确进行第二次握手。
那么问题来了,假如客户端在第一次握手时,所传输的IP是个虚拟IP会怎么样?
如图:
上图就是 SYN 洪泛攻击。三次握手中有一个第二次握手,服务端向客户端应答请求,应答请求是需要客户端 IP 的,攻击者就伪造这个 IP,往服务器端狂发送第一次握手的内容,当然第一次握手中的客户端 IP 地址是伪造的,从而服务端忙于进行第二次握手但是第二次握手当然没有结果,所以导致服务器端被拖累,死机。
解决方案
提问:如何解决SYN洪泛攻击?
面对这种攻击,有以下方案:
无效连接监视释放
这种方法不停监视所有的连接,包括三次握手的,还有握手一次的,反正是所有的,当达到一定(与)阈值时拆除这些连接,从而释放系统资源。这种方法对于所有的连接一视同仁,不管是正常的还是攻击的,所以这种方式不推荐。
延缓 TCB 分配方法
一般的做完第一次握手之后,服务器就需要为该请求分配一个 TCB(连接控制资源),通常这个资源需要 200 多个字节。延迟 TCB 的分配,当正常连接建立起来后再分配 TCB 则可以有效地减轻服务器资源的消耗。
使用防火墙(推荐方案)
防火墙在确认了连接的有效性后,才向内部的服务器(Listener)发起 SYN 请求。
学习建议:对于SYN洪泛攻击,本文只是小篇幅的简单介绍。读者如果不是专门做网络通信这块的,大致了解下就好,当然如果有精力的话可以多了解,毕竟技多不压身。
至于专门做网络这块的大佬们,你们是至少要知道为啥使用防火墙才是推荐的方案的(手动挖鼻孔)。