一.SYN Flood的概念
SYN Flood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分散式拒绝服务攻击)的方式之一,这是一种利用TCP协定缺陷,传送大量伪造的TCP连线请求,从而使得被攻击方资源耗尽(CPU满负荷或记忆体不足)的攻击方式。
二.攻击原理
1.请求端(客户端)传送一个包含SYN标誌的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的连线埠以及TCP连线的初始序号;
2.伺服器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgment)。
3.客户端也返回一个确认报文ACK给伺服器端,同样TCP序列号被加一,到此一个TCP连线完成。以上的连线过程在TCP协定中被称为三次握手(Three-way Handshake)。
重点:TCP连线的三次握手中,假设一个用户向伺服器传送了SYN报文后突然当机或掉线,那幺伺服器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下伺服器端一般会重试(再次传送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连线,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);
一个用户出现异常导致伺服器的一个执行需等待1分钟并不是什幺很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,伺服器端将为了维护一个非常大的半连线列表而消耗非常多的资源----数以万计的半连线,即使是简单的保存并遍历也会消耗非常多的CPU时间和记忆体,何况还要不断对这个列表中的IP进行SYN+ACK的重试。
实际上如果伺服器的TCP/IP栈不够强大,最后的结果往往是堆叠溢出崩溃---即使伺服器端的系统足够强大,伺服器端也将忙于处理攻击者伪造的TCP连线请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),这种时候伺服器就会失去回响,而这种就叫做SYN Flood攻击(SYN洪水攻击)。
三.SYN Flood识别和防御的方法
SYN Flood的目的是占满服务器的连接数,消耗服务器的系统资源。对于服务器自身来说,最直接的做法就是提高服务能力,比如组建集群,升级硬件。但是这种方式成本巨大,且对于海量的攻击报文来说,并没有太大的作用,仅多撑几分钟甚至几秒而已。
所以,必须在这些攻 击报文到达服务器 之前就进行拦截。然而对于防火墙这类安全设备而言,SYN报文是正常的业务报文,防火墙的安全策略必须允许其通过,否则服务器就无法对外提供服务。如果能明确虚假源的IP地址,就能通过精细的安全策略阻止这些源发来的SYN报文。但是管理员无法预知哪些是虚假源。即使能分析出虚假源,也无法做到快速、自动地配置或取消安全策略来应对不可预期的攻击流量。
1.源认证
Anti-DDoS系统拦截客户端发送的SYN报文,代替服务器向客户端发送SYN-ACK报文,如果客户端不应答,则认为该客户端为虚假源;如果客户端应答,则Anti-DDoS系统认为该客户端为真实源,并将其IP地址加入白名单,在一段时间允许该源发送的所有SYN报文通过,也不做代答。
2.首包丢弃
如果Anti-DDoS系统代替服务器应答了所有的SYN Flood攻击报文,那么性能瓶颈仅仅是从服务器转移到了Anti-DDoS系统而已。一旦Anti-DDoS系统的系统资源耗尽,攻击依旧会透传到服务器,而且大量反弹的SYN-ACK报文也会对网络造成一定的压力。Anti-DDoS系统利用首包丢弃来解决这个问题。
TCP协议的可 靠性不仅体现在三次握 手,还体现在超时与重传的机制。正常情况下客户端发送SYN报文后如果在一定时间没有收到服务器的SYN-ACK应答,客户端会重新发送SYN报文。Anti-DDoS系统会丢弃掉收到的第一个SYN报文。SYN Flood攻击时,黑客发送的绝大多数是变源的SYN报文,所有的SYN报文对于Anti-DDoS系统来说都是首包,都将被直接丢弃。如果客户端重传了SYN报文,Anti-DDoS系统再对该报文进行源认证。如此一来,大大减少了Anti-DDoS系统代答的压力。首包丢弃和源认证两种手段结合,对于防御SYN Flood(特别是不断变换源IP和源端口的虚假源攻击)非常有效。
本文暂时没有评论,来添加一个吧(●'◡'●)