SYN Flood攻击是什么:
SYN Flood攻击是当前网络上最为常见的DDoS攻击,它利用了TCP协议实现上的一个缺陷。通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。(结合“http和https的全名认知”阅读更好)
SYN Cookie是什么:
SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区TCB(传输控制数据区),而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器再根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。
攻击原理:
看三次握手,会发现这个流程是有缺陷的:在第二次握手中,当服务器发送了syn+ack报文后,若该连接的定时器超过超时重传时间(出现超时的原因可能是syn+ack报文丢失、客户ack报文丢失、RTT时间过长、甚至可能客户是在进行synflood攻击),服务器就会对报文进行重传,当重传次数超过阈值服务器认为TCP连接超时,而后才会销毁该请求套接口释放TCB(传输控制数据区)。如果攻击者用快于服务器TCP连接超时的速度,连续对目标服务器开放的端口发送SYN报文,服务器的所有资源都将被消耗,以至于不能再接受其他客户的正常连接请求。
防止方案:
目前对于SYN Flood攻击一般都通过实时监测tcp的新建连接速率来判断。显然地,当恶意客户端向目标发起攻击时,对目标服务器的请求连接报文会在短时间内大量增加,安全设备发现去往服务器的请求连接速率超过指定的阈值后即可开启防御。
防御的前提当然是要区分出那些请求是合法的连接哪些是SYN泛洪,有一种机制叫SYN cookies。大厂商的防御手段多采用该机制实现,但具体实现起来各公司还是略有区别,我们现在来看几种典型的实现方法。
方法一:①当安全设备获取到发往服务器的SYN报文后,设备模拟服务端会给此源IP回复ack=Cookie的SYN/ACK报文(Cookie是通过五元组加密计算出来的值,正常情况下的ack=seq+1)。
②正常客户端会回复RST报文,而攻击流则不会回复。
③安全设备收到RST报文并校验后便可把回复正确报文的客户端IP加入白名单(校验通过的标准是RST报文中携带的seq等于用该报文的五元组等信息算出的Cookie)。
④后续安全设备放行属于该IP的正常流量。
方法二:①当安全设备获取到发往服务器的SYN报文后,设备模拟服务器给源IP回复seq=Cookie的SYN/ACK报文。
②正常客户端会回复ACK报文,确认序列号为Cookie+1。
③安全设备收到ack报文并校验无误后将该客户端的IP加入白名单,并向客户端发送RST报文断开连接。
④后续安全设备放行属于该IP的正常流量。
方法三:①当安全设备获取到发往服务器的SYN报文后,设备模拟服务器给源IP回复seq=Cookie的SYN/ACK报文。
②正常客户端会回复ACK报文,确认序列号为Cookie+1。
③安全设备收到ack报文并校验无误后,设备与服务发送连接请求,通过三次握手后与服务器建立起连接。
④客户端与防火墙之间建立了连接,防火墙与服务器之间也建立了连接,客户端与服务器间关于此次连接的后续数据报文都将通过安全设备进行代理转发。