1 概述
1.1 产生背景
SYN Flood攻击是一种通过向目标服务器发送SYN报文,消耗其系统资源,削弱目标服务器的服务提供能力的行为。一般情况下,SYN Flood攻击是在采用IP源地址欺骗行为的基础上,利用TCP连接建立时的三次握手过程形成的。
众所周知,一个TCP连接的建立需要双方进行三次握手,只有当三次握手都顺利完成之后,一个TCP连接才能成功建立。当一个系统(称为客户端)请求与另一个提供服务的系统(称为服务器)建立一个TCP连接时,双方要进行以下消息交互:
(1) 客户端向服务器发送一个SYN消息;
(2) 如果服务器同意建立连接,则响应客户端一个对SYN消息的回应消息(SYN/ACK);
(3) 客户端收到服务器的SYN/ACK以后,再向服务器发送一个ACK消息进行确认。
当服务器收到客户端的ACK消息以后,一个TCP的连接成功完成。连接的建立过程如图1所示:

图1 TCP连接的建立
在上述过程中,当服务器收到SYN报文后,在发送SYN/ACK回应客户端之前,需要分配一个数据区记录这个未完成的TCP连接,这个数据区通常称为TCB资源,此时的TCP连接也称为半开连接。这种半开连接仅在收到客户端响应报文或连接超时后才断开,而客户端在收到SYN/ACK报文之后才会分配TCB资源,因此这种不对称的资源分配模式会被攻击者所利用形成SYN Flood攻击。

图2 SYN Flood攻击原理图
如图2所示,攻击者使用一个并不存在的源IP地址向目标服务器发起连接,该服务器回应SYN/ACK消息作为响应,由于应答消息的目的地址并不是攻击者的实际地址,所以这个地址将无法对服务器进行响应。因此,TCP握手的最后一个步骤将永远不可能发生,该连接就一直处于半开状态直到连接超时后被删除。如果攻击者用快于服务器TCP连接超时的速度,连续对目标服务器开放的端口发送SYN报文,服务器的所有TCB资源都将被消耗,以至于不能再接受其他客户端的正常连接请求。
为保证服务器能够正常提供基于TCP协议的业务,防火墙必须能够利用有效的技术瓦解以及主动防御SYN Flood攻击。
1.2 技术优点
H3C在SYN Flood 攻击防范技术的实现上具有以下四个方面的特色。

  1. 支持基于安全区域的配置方式
    H3C实现的SYN Flood攻击防范支持基于安全区域的配置方式,所有攻击检测策略均配置在安全区域上,配置简洁又不失灵活性,既降低网络管理员配置负担,又能满足复杂组网情况下针对安全区域实施不同攻击防范策略的要求。
  2. 提供丰富的告警日志信息
    H3C实现的SYN Flood攻击防范功能可提供丰富的告警日志信息,可以与第三方软件配合使用,其日志和审计功能不仅能够针对攻击进行实时监测,还能对攻击的历史日志进行方便的查询和统计分析,便于对攻击事件进行有效的跟踪和追查。
  3. 精确阻断攻击流量
    H3C实现的SYN Flood攻击防范功能采用基于行为模式的异常检测算法对目标服务器的网络流量进行检测,通过实时跟踪TCP服务器连接的状态机协商过程,能够有效区分攻击流量和正常流量,从而精确阻断攻击流量。
  4. 提供灵活的防范措施
    针对SYN Flood攻击,H3C防火墙提供了灵活的防范措施,可根据用户的实际需要,选择对攻击行为进行日志输出、报文丢弃、启用SYN Cookie防护功能、启用Safe Reset防护功能、通知服务器释放无效半开连接等防范动作。
    2 技术实现
    在Internet上,公共服务器是SYN Flood攻击实施的主要对象。Internet上任何客户端向某个特定的公共服务器发起访问时,其目的IP地址必定是公共服务器对外公开的IP地址。H3C防火墙通过攻击检测技术,统计和分析向公共服务器发起的所有连接的行为特征,来检测和识别攻击报文。
    在检测到针对服务器的SYN Flood攻击行为后,H3C防火墙可以支持选择多种应对攻击的防范措施,主要包括两大类:
    l 连接限制技术:采用SYN Flood攻击防范检测技术,对网络中的新建TCP半开连接数和新建TCP连接速率进行实时检测,通过设置检测阈值来有效地发现攻击流量,然后通过阻断新建连接或释放无效连接来抵御SYN Flood攻击。
    l 连接代理技术:采用SYN Cookie或Safe Reset技术对网络中的TCP连接进行代理,通过精确的验证来准确的发现攻击报文,实现为服务器过滤掉恶意连接报文的同时保证常规业务的正常运行。连接代理技术除了可以对已检测到攻击的服务器进行代理防范,也可以对可能的攻击对象事先配置,做到全部流量代理,而非攻击发生后再代理,这样可以避免攻击报文已经造成一定损失。
    2.1 SYN Flood攻击检测技术
    根据统计对象的不同特征,SYN Flood攻击检测可分为两种类型:半开连接数检测、新建连接速率检测。
    2.1.1 半开连接数检测
  5. 原理介绍
    当恶意客户端向目标服务器发起SYN Flood 攻击时,如果恶意客户端采用了仿冒的源IP,那么在目标服务器上会存在大量半开连接。
    这类半开连接与正常的半开连接的区别在于,正常半开连接会随着客户端和服务器端握手报文的交互完成而转变成全连接,而仿冒源IP的半开连接永远不会完成握手报文的交互。
    为有效区分仿冒半开连接和正常半开连接,防火墙就需要实时记录所有客户端向服务器发起的所有半开连接数和完成了握手交互且转变为全连接的半开连接数,二者之差(即未完成的半连接数)在服务器未受到攻击时会保持在一个相对恒定的范围内。如果未完成的半连接数突然增多,甚至接近服务器的资源分配上限时就可以怀疑此时服务器正受到异常流量的攻击。

图3 半开连接数检测示意图
如图3所示,管理员可以根据被保护服务器的处理能力设置半开连接数阈值。如果服务器无法处理客户端所有连接请求,就会导致未完成的半开连接数(即客户端向服务器发起的所有半开连接数和完成了握手交互变成全连接的半开连接数之差)超过指定阈值,此时防火墙可以判定服务器正在遭受SYN Flood 攻击。

  1. 应用限制
    半开连接数统计要求防火墙能够记录客户端到服务器端的所有连接状态。即,客户端和服务器端的报文都需要经过防火墙处理。因此,基于半开连接数的统计检测需要防火墙部署在所保护的服务器出口和入口的关键路径上。
    2.1.2 新建连接速率检测
  2. 原理介绍
    当恶意客户端向目标服务器发起SYN Flood攻击时,不管恶意客户端采用仿冒源IP手段还是使用真实的客户端,其呈现的结果就是发往服务器的报文会在短时间内大量增加。
    恶意客户端发向服务器的报文中,一部分是新建连接的报文,一部分是已建立连接的后续数据报文。H3C防火墙通过记录每秒新建连接的数量,并与设定的阈值进行比较来判断向目标服务器发起SYN Flood攻击行为是否发生,若达到或超过,则认为攻击行为发生。

图4 新建连接速率检测示意图
如图4所示,在对被保护服务器进行监测时,防火墙在一秒的时间间隔内统计客户端向服务器发起的新建连接请求数量,作为当前的新建请求速率。当新建连接请求速率超过指定阈值时,防火墙设备可以认为服务器可能遭受了SYN Flood攻击。

  1. 应用限制
    新建连接数统计要求防火墙能够记录客户端到服务器端的所有新建连接个数。即,客户端发往服务器端的报文必须要经过防火墙处理。因此,基于新建连接数的统计检测需要防火墙部署在所保护的服务器入口的关键路径上。
    2.2 SYN Flood攻击防范技术
    H3C防火墙可以支持选择多种应对攻击的防范措施,主要包括以下四种技术:
    l 阻断新建连接——通过随时阻断服务器处理能力之外的新建连接来减轻服务器的被攻击程度。
    l 释放无效连接——通过在攻击发生后通知服务器释放无效连接来协助服务器及时恢复服务能力。
    l SYN Cookie和Safe Reset——通过验证发起连接的客户端的合法性,使服务器免受SYN Flood攻击。这两种技术适用于不同的组网需求。
    2.2.1 阻断新建连接
  2. 原理介绍
    实际上,最简单的防范方法就是暂时阻止任何客户端向服务器发起的新建连接请求。阻断新建连接的时机是由SYN Flood攻击检测发现攻击决定的,只要防火墙发现连接数阈值(半开连接数阈值、新建连接数阈值)被超过时,就开始阻断新建连接来防范攻击行为。关于SYN Flood攻击检测技术的详细介绍请参见“2.1 SYN Flood攻击检测技术”。
    下面是分别通过两种检测技术发现攻击后的连接阻断处理过程。
    l 半开连接数限制
    如图5所示,防火墙检测到客户端与服务器之间的当前半开连接数目超过半开连接数阈值时,所有后续的新建连接请求报文都会被丢弃,直到服务器完成当前的半开连接处理,或当前的半开连接数降低到安全阈值时,防火墙才会放开限制,重新允许客户端向服务器发起新建连接请求。

图5 半开连接数限制示意图
l 新建连接数限制
如图6所示,防火墙对新建连接报文的速率进行统计,只允许新建连接速率不超过阈值情况下的新建连接报文通过,超过阈值之后的新建连接报文都被丢弃。直到每秒客户端向服务器发起的连接请求降低到安全阈值以下时,防火墙才会放开限制,重新允许客户端向服务器发起新建连接请求。

图6 新建连接速率限制示意图

  1. 应用限制
    阻断新建连接功能为防火墙检测到SYN Flood攻击后的基本处理手段。在服务器受到SYN Flood攻击时,防火墙能在服务器处理新建连接报文之前将其阻断,削弱了网络攻击对服务器的影响,但无法在服务器被攻击时有效提升服务器的服务能力。因此,该功能一般用于配合防火墙SYN Flood攻击检测,避免瞬间高强度攻击使服务器系统崩溃。
    2.2.2 释放无效连接
  2. 原理介绍
    正如2.1.1 半开连接数检测中所描述,当服务器上的半开连接过多时,其正在处理的半开连接中可能存在恶意客户端仿冒源IP发起的无效连接。为了不让仿冒源IP发起的无效连接占用服务器的资源,防火墙需要在所有半开连接中识别出无效连接,通知服务器释放这这些无效连接。
    防火墙通过模拟无效连接的五元组信息(源IP地址、目的IP地址、源端口号、目的端口号、协议类型),向服务器发送RST报文(连接重置报文)通知服务器释放无效连接。
  3. 应用限制
    释放无效连接功能是一种防火墙检测到攻击后的基本处理手段,在服务器受到SYN Flood攻击的情况下,能够通知服务器释放被恶意攻击报文占用的资源,使服务器得以恢复正常服务。在服务器受到SYN Flood攻击时,此功能主要用于加速被攻击服务器的恢复速度,却无法阻止恶意客户端继续攻击服务器。因此,该功能一般用于配合防火墙SYN Flood检测,在攻击发生后减轻已发生的攻击对服务器的影响。
    2.2.3 SYN Cookie技术
  4. 原理介绍
    SYN Cookie借鉴了HTTP中Cookie的概念。SYN Cookie技术可理解为,防火墙对TCP新建连接的协商报文进行处理,使其携带认证信息(称之为Cookie),再通过验证客户端回应的协商报文中携带的信息来进行报文有效性确认的一种技术。如图7所示,该技术的实现机制是防火墙在客户端与服务器之间做连接代理,具体过程如下:

图7 防火墙使用SYN Cookie防范SYN Flood攻击
(1) 客户端向服务器发送一个SYN消息。
(2) SYN消息经过防火墙时,防火墙截取该消息,并模拟服务器向客户端回应SYN/ACK消息。其中,SYN/ACK消息中的序列号为防火墙计算的Cookie,此Cookie值是对加密索引与本次连接的客户端信息(如:IP地址、端口号)进行加密运算的结果。
(3) 客户端收到SYN/ACK报文后向服务器发送ACK消息进行确认。防火墙截取这个消息后,提取该消息中的ACK序列号,并再次使用客户端信息与加密索引计算Cookie。如果计算结果与ACK序列号相符,就可以确认发起连接请求的是一个真实的客户端。如果客户端不回应ACK消息,就意味着现实中并不存在这个客户端,此连接是一个仿冒客户端的攻击连接;如果客户端回应的是一个无法通过检测的ACK消息,就意味着此客户端非法,它仅想通过模拟简单的TCP协议栈来耗费服务器的连接资源。来自仿冒客户端或非法客户端的后续报文都会被防火墙丢弃,而且防火墙也不会为此分配TCB资源。
(4) 如果防火墙确认客户端的ACK消息合法,则模拟客户端向服务器发送一个SYN消息进行连接请求,同时分配TCB资源记录此连接的描述信息。此TCB记录了防火墙向服务器发起的连接请求的信息,同时记录了步骤(2)中客户端向服务器发起的连接请求的信息。
(5) 服务器向防火墙回应SYN/ACK消息。
(6) 防火墙收到服务器的SYN/ACK回应消息后,根据已有的连接描述信息,模拟客户端向服务器发送ACK消息进行确认。
(7) 完成以上过程之后,客户端与防火墙之间建立了连接,防火墙与服务器之间也建立了连接,客户端与服务器间关于此次连接的后续数据报文都将通过防火墙进行代理转发。
防火墙的SYN Cookie技术利用SYN/ACK报文携带的认证信息,对握手协商的ACK报文进行了认证,从而避免了防火墙过早分配TCB资源。当客户端向服务器发送恶意SYN报文时,既不会造成服务器上TCB资源和带宽的消耗,也不会造成防火墙TCB资源的消耗,可以有效防范SYN Flood攻击。在防范SYN Flood攻击的过程中,防火墙作为虚拟的服务器与客户端交互,同时也作为虚拟的客户端与服务器交互,在为服务器过滤掉恶意连接报文的同时保证了常规业务的正常运行。

  1. 应用限制
    由于SYN Cookie技术最终是依靠防火墙对客户端与服务器之间的所有连接报文进行代理实现的,因此要求防火墙设备必须部署在所保护的服务器入口和出口的关键路径上,保证所有客户端向服务器发送的报文以及服务器向客户端回应的报文都需要经过该设备。
    2.2.4 Safe Reset技术
  2. 原理介绍
    Safe Reset技术是防火墙通过对正常TCP连接进行干预来识别合法客户端的一种技术。防火墙对TCP新建连接的协商报文进行处理,修改响应报文的序列号并使其携带认证信息(称之为Cookie),再通过验证客户端回应的协商报文中携带的信息来进行报文有效性确认。
    防火墙在利用Safe Reset技术认证新建连接的过程中,对合法客户端的报文进行正常转发,对仿冒客户端以及简单模拟TCP协议栈的恶意客户端发起的新建连接报文进行丢弃,这样服务器就不会为仿冒客户端发起的SYN报文分配连接资源,从而避免了SYN Flood 攻击。如图8所示,Safe Reset技术的实现过程如下:

图8 防火墙使用Safe Reset防范SYN Flood攻击
(1) 客户端向服务器发送一个SYN消息。
(2) SYN消息经过防火墙时,防火墙截取该消息,并模拟服务器向客户端回应SYN/ACK消息。其中,SYN/ACK消息中的ACK序列号与客户端期望的值不一致,同时携带Cookie值。此Cookie值是对加密索引与本次连接的客户端信息(包括:IP地址、端口号)进行加密运算的结果。
(3) 客户端按照协议规定向服务器回应RST消息。防火墙中途截取这个消息后,提取消息中的序列号,并对该序列号进行Cookie校验。成功通过校验的连接被认为是可信的连接,防火墙会分配TCB资源记录此连接的描述信息,而不可信连接的后续报文会被防火墙丢弃。
(4) 完成以上过程之后,客户端再次发起连接请求,防火墙根据已有的连接描述信息判断报文的合法性,对可信连接的所有合法报文直接放行。
由于防火墙仅通过对客户端向服务器首次发起连接的报文进行认证,就能够完成对客户端到服务器的连接检验,而服务器向客户端回应的报文即使不经过防火墙也不会影响正常的业务处理,因此Safe Reset技术也称为单向代理技术。
一般而言,应用服务器不会主动对客户端发起恶意连接,因此服务器响应客户端的报文可以不需要经过防火墙的检查。防火墙仅需要对客户端发往应用服务器的报文进行实时监控。服务器响应客户端的报文可以根据实际需要选择是否经过防火墙,因此Safe Reset能够支持更灵活的组网方式。

  1. 应用限制
    l Safe Reset技术要求防火墙设备部署在所保护的服务器入口的关键路径上。但仅需保证所有客户端到服务器报文都必须经过该设备,对服务器端发出的报文是否经该设备没有严格要求。从组网要求来看,Safe Reset 比SYN Cookie适应性更强。
    l 由于防火墙对客户端发起的TCP连接进行了干预,因此Safe Reset技术的实现要求客户端的实现严格遵守TCP协议栈的规定,如果客户端的TCP协议栈实现不完善,即便是合法用户,也可能由于未通过防火墙的严格检查而无法访问服务器。
    l Safe Reset技术依赖于客户端向服务器发送RST报文后再次发起请求的功能,因此应用Safe Reset技术后,客户端发起的每个TCP连接的建立时间会有相应增加,增加的程度因客户端的TCP协议栈实现而有所不同。
    3 典型组网应用
    3.1 SYN Cookie典型组网应用

图9 SYN Cooke典型组网应用图
如图9所示,Internet上存在潜在的攻击者和正常使用各种网络服务的客户端。来自Internet的目的IP为应用服务器的IP报文,以及应用服务器回应的报文都会经过防火墙处理。在防火墙上使能SYN Cookie功能后,合法客户端与应用服务器之间TCP连接的交互报文在通过SYN Cookie验证后由防火墙进行代理发送,而攻击者向应用服务器发起的连接报文因无法通过SYN Cookie的检查而被防火墙过滤,应用服务器因此得到保护。
3.2 Safe Reset典型组网应用

图10 Safe Reset典型组网应用图
如图10所示,Internet上存在潜在的攻击者和正常使用各种网络服务的客户端。来自Internet的目的IP为应用服务器的IP报文都会经过防火墙处理,但服务器回应的报文并不一定经过防火墙。在防火墙上配置Safe Reset功能后,合法的客户端向应用服务器发起的TCP请求报文在通过Safe Reset检查后由防火墙允许放行,攻击者向应用服务器发起的连接报文因无法通过防火墙Safe Reset的检查而被丢弃,应用服务器因此得到保护。
3.3 SYN Flood攻击防范综合组网应用

图11 SYN Flood攻击防范综合组网应用
如图11所示,防火墙的内网属于Trust域,内部服务器的网络属于DMZ域,外部网络属于Untrust域,Untrust域中存在潜在的攻击者。
在防火墙上采用基于域的配置,对DMZ域内的服务器进行SYN Flood攻击防范检测配置,根据服务器的实际流量,配置服务器允许的新建连接速率阈值及半开连接数阈值。若服务器受到SYN Flood攻击,防火墙输出SYN Flood告警日志,并且可以选择对后续向DMZ域内的服务器发起的访问进行(单向或双向)TCP代理,保证到达服务器的TCP连接请求都是正常的。