DDOS攻防之TCP原理篇之SYN Flood

TCP协议的SYN Flood攻击,这种攻击方式虽然原始,但是生命力顽强,长久以来在DDoS圈里一直处于德高望重的地位。SYN Flood攻击的影响也不容小觑,从攻击事件中可以看到,以SYN Flood为主的数十G流量,很容易就造成被攻击目标网络瘫痪。

但TCP类的攻击远不止如此,本篇我们就来全面讲解基于TCP协议的各种DDoS攻击方式和防御原理,首先来了解TCP协议的基础知识。

0x01 TCP协议基础

提起TCP,相信大家都不会陌生,每一位网络工程师入门时学到的第一个协议就是TCP了吧。由于与生俱来的优良品质(面向连接、超时重传等可靠性保证),这个传输层协议构建了网络的半壁江山,很多常用的协议或应用如Web、Telnet/SSH、FTP等都是承载于TCP的。

这里我们用一些篇幅再来温习一遍TCP协议,我们以一次FTP连接建立和断开的过程为例,分析TCP报文的交互过程,了解TCP报文中的关键字段。下面给出了使用Wireshark工具中Flow Graph功能绘制出的整个交互过程的流图:
DDOS攻防之TCP原理篇之SYN Flood_第1张图片
我们重点关注交互过程的一头一尾,即三次握手建立连接以及四次握手断开连接的过程。

三次握手建立连接

在TCP中,通信双方使用三次握手来建立一个连接。第一次握手,客户端向服务器发起请求,报文中的SYN标志位置为1,序号为2452765130(用X标记),如下图所示:
DDOS攻防之TCP原理篇之SYN Flood_第2张图片
第二次握手,服务器收到客户端的请求后,向客户端回应报文。报文中的SYN和ACK标志位均置为1,序号为1996069412(用Y标记),确认序号为客户端的序号+1即X+1=2452765131,如下图所示:
DDOS攻防之TCP原理篇之SYN Flood_第3张图片
第三次握手,客户端收到服务器回应的报文后,首先检查报文中的确认序号是否正确。如果确认序号正确(客户端的序号+1),发送确认报文。确认报文中的ACK标志位置为1,确认序号为服务器的序号+1即Y+1=1996069413,如下图所示:
DDOS攻防之TCP原理篇之SYN Flood_第4张图片
而如果客户端检查服务器回应报文中的确认序号不正确,则会发送RST(Reset)复位报文,报文中的RST标志位置为1,表示连接出现问题,需要重新建立。

经过上述三次握手的交互过程,通信双方的一个TCP连接就建立完成了。

四次握手断开连接

由于TCP连接的全双工特性(两个方向上能同时传输数据),所以通信双方断开一个连接需要经过四次握手的交互过程,或者叫做四次挥手更为准确,双方都向对方挥手告别。

根据上面展示的报文交互流程图中的信息,断开连接时第一次握手是由服务器发起的,服务器要关闭与客户端的连接,服务器发送的报文中FIN标志位和ACK标志位均置为1,序号为1996069507(用X标记),如下图所示:
DDOS攻防之TCP原理篇之SYN Flood_第5张图片
第二次握手,客户端收到服务器的FIN报文后,向服务器回应报文。报文中的ACK标志位置为1,确认序号为客户端的序号+1即X+1=1996069508,如下图所示:
DDOS攻防之TCP原理篇之SYN Flood_第6张图片
第三次握手,客户端要关闭与服务器的连接,客户端发送的报文中FIN标志位和ACK标志位均置为1,序号为2452765157(用Z标记),如下图所示:
DDOS攻防之TCP原理篇之SYN Flood_第7张图片
第四次握手,服务器收到客户端的FIN报文后,向客户端回应报文。报文中的ACK标志位置为1,确认序号为客户端的序号+1即Z+1=2452765158,如下图所示:
DDOS攻防之TCP原理篇之SYN Flood_第8张图片
经过上述四次握手的交互过程,通信双方就断开了一个TCP连接。

上面简单回顾了三次握手和四次握手的交互过程,我们会发现,TCP连接建立和断开过程中涉及的概念很多。首先是TCP报文类型有很多种,包括SYN、ACK、FIN以及RST等,不同类型的报文各司其职;其次,TCP报文内容也比较复杂,除了IP地址和端口之外,还包括序号、确认序号、各种标志位等等。

我们从安全角度来看,把自己想象成是攻击者,怎么利用这些交互过程来对TCP进行攻击呢?可能的攻击方式包括以下几类:

1、Flood类攻击,例如向被攻击目标发送海量的SYN、ACK、FIN或RST报文,占用被攻击目标的系统资源,使其无法提供正常服务。

2、连接耗尽类攻击,例如与被攻击目标完成三次握手后不再发送报文一直维持连接,或者立刻发送FIN或RST报文,断开连接后再次快速发起新的连接等,消耗TCP连接资源。

3、异常报文类攻击,例如TCP报文中的标志位全都置为1或置为0、SYN和FIN标志位同时置为1等,这些不符合TCP协议规范的异常报文就可能会导致被攻击目标系统崩溃。

下面我们就逐一介绍这些攻击方式,以及华为Anti-DDoS解决方案相应的防御方法,首先登场的是德高望重的SYN Flood攻击。

0x02 SYN Flood攻击与防御

SYN Flood指的是攻击者利用工具或者操纵僵尸主机,向目标服务器发起大量的TCP SYN报文,当服务器回应SYN-ACK报文时,攻击者不再继续回应ACK报文。这样就会导致服务器上存在大量的TCP半连接,服务器的资源会被这些半连接耗尽,无法响应正常的请求。

华为Anti-DDoS解决方案防御SYN Flood攻击的常用手段是源认证,从SYN报文建立连接的“行为”入手,判断是不是真实源发出的请求。源认证包括基本源认证和高级源认证两种方式,我们先来学习基本源认证。

基本源认证

基本源认证的原理是Anti-DDoS系统代替服务器向客户端响应SYN-ACK报文,报文中带有错误的确认序号。我们在前面介绍过,真实的客户端收到带有错误确认序号的SYN-ACK报文后,会向服务器发送RST报文,要求重新建立连接;而虚假源收到带有错误确认序号的SYN-ACK报文,不会做出任何响应。Anti-DDoS系统通过观察客户端的响应情况,来判断客户端的真实性。
DDOS攻防之TCP原理篇之SYN Flood_第9张图片
1、当连续一段时间内去往目标服务器的SYN报文超过告警阈值后,Anti-DDoS系统启动源认证机制。源认证机制启动后,Anti-DDoS系统将会代替服务器向客户端响应带有错误确认序号的SYN-ACK报文。

2、如果这个源是虚假源,是一个不存在的地址或者是存在的地址但却没有发送过SYN报文,不会做出任何响应。

3、如果这个源是真实客户端,则会向服务器发送RST报文,要求重新建立连接。Anti-DDoS系统收到RST报文后,将该客户端的源IP地址加入白名单。

4、后续这个客户端发出的SYN报文命中白名单直接通过。

基本源认证方式存在一定的局限性,如果网络中存在某些设备会丢弃带有错误确认序号的SYN-ACK报文,或者有的客户端不响应带有错误确认序号的SYN-ACK报文,基本源认证就不能生效了。此时,可以使用高级源认证来验证客户端的真实性。

高级源认证

高级源认证的原理也是Anti-DDoS系统代替服务器向客户端响应SYN-ACK报文,但与基本源认证不同的是,SYN-ACK报文中带有正确的确认序号。真实的客户端收到带有正确确认序号的SYN-ACK报文后,会向服务器发送ACK报文;而虚假源收到带有正确确认序号的SYN-ACK报文,不会做出任何响应。Anti-DDoS系统通过观察客户端的响应情况,来判断客户端的真实性。
DDOS攻防之TCP原理篇之SYN Flood_第10张图片
1、当连续一段时间内去往目标服务器的SYN报文超过告警阈值后,Anti-DDoS系统启动源认证机制。源认证机制启动后,Anti-DDoS系统将会代替服务器向客户端响应带有正确确认序号的SYN-ACK报文。

2、如果这个源是虚假源,是一个不存在的地址或者是存在的地址但却没有发送过SYN报文,不会做出任何响应。

3、如果这个源是真实客户端,则会向服务器发送ACK报文,对收到的SYN-ACK报文进行确认。Anti-DDoS系统收到ACK报文后,将该客户端的源IP地址加入白名单。同时,Anti-DDoS系统会向客户端发送RST报文,要求重新建立连接。

4、后续这个客户端发出的SYN报文命中白名单直接通过。

无论是基本源认证还是高级源认证,其原理都是Anti-DDoS系统发送SYN-ACK报文来对源进行认证,形象点说,Anti-DDoS系统收到SYN报文后会反弹SYN-ACK报文。如果网络中存在海量的SYN报文,同样Anti-DDoS系统也会反弹出去海量的SYN-ACK报文,这样势必就会造成网络拥塞更加严重。

为了避免这个问题,减少反弹的SYN-ACK报文对网络拥塞的影响,Anti-DDoS系统提供了首包丢弃功能。

首包丢弃

TCP的可靠性保证除了面向连接(三次/四次握手)之外,还体现在超时与重传机制。TCP协议规范要求发送端每发送一个报文,就启动一个定时器并等待确认信息;如果在定时器超时前还没有收到确认,就会重传报文。

首包丢弃功能就是利用了TCP的超时重传机制,Anti-DDoS系统对收到的第一个SYN报文直接丢弃,然后观察客户端是否重传。如果客户端重传了SYN报文,再对重传的SYN报文进行源认证,即反弹SYN-ACK报文,这样就可以大大减少反弹报文的数量。
DDOS攻防之TCP原理篇之SYN Flood_第11张图片
实际部署时,我们将首包丢弃和源认证结合使用。防御SYN Flood攻击时,先通过首包丢弃功能来过滤掉一些攻击报文,当重传的SYN报文超过告警阈值后,再启动源认证。这样就能够减少反弹的SYN-ACK报文的数量,缓解网络拥塞情况。对于虚假源攻击,尤其是对于不断变换源IP和源端口的虚假源攻击,可以达到最佳防御效果。

SYN Flood攻击的原理和防御方式介绍完毕,下一篇我们将介绍另外几种Flood类攻击,包括SYN-ACK Flood、ACK Flood以及FIN/RST Flood,请大家继续关注。

你可能感兴趣的:(DDOS攻防之TCP原理篇之SYN Flood)