SYN Flood攻击

概述

本文主要介绍SYN Flood攻击的原理,以及防火墙设备的防御手段;

 

TCP三次握手

TCP建立连接过程需要经过三次握手,在三次握手成功之后,建立连接,进而进行数据传输;假设有客户端和服务器,客户端向服务器发起连接请求:

(1) 客户端向服务器发送SYN报文;

(2) 服务器收到SYN之后向客户端回复SYN-ACK报文

(3)客户端收到SYN-ACK之后向服务器发送ACK报文;

经过上述三个步骤,整个连接建立过程结束;

上述过程中,在服务器收到SYN报文之后,会在内部建立连接请求控制块,该控制块用于跟踪连接建立过程和状态,控制块的生命周期如下:

(1) 如果收到最后一个握手ACK报文,该控制块会转换成为正式的连接控制块;

(2) 如果迟迟未收到最后的那个ACK报文,服务器会通过定时器重发SYN-ACK,直至超时,销毁请求控制块;

明确了上述流程之后,来看SYN Flood的产生;

 

SYN Flood产生

SYN Flood正是利用了上面的服务器收到SYN报文之后,立即就会建立控制块的设计,发起攻击;攻击者通过多台攻陷的“肉机”或者伪造的IP地址,大量的向服务器发送SYN报文,服务器不断的申请资源建立控制块,从而大量占用资源直至资源耗尽,使正常请求服务变慢,或者完全停止服务;

 

SYN Flood检测
1. 新建连接请求数检测

防火墙等中间设备记录SYN报文的速率,如果超过配置的阈值,则认为存在SYN Flood;

2. 服务器半开连接数检测

防火墙等中间设备统计半开连接数目与建立连接数的相对比例,如果发现半开连接数相对于建立连接数有大比例的增加,超过了配置的阈值,则认为存在SYN Flood;

 

SYN Flood防御
1. 完全阻断新连接

直接彻底的不允许任何SYN报文建立连接请求,直接做丢包处理;

2. 释放无效的半开连接

当产生大量的半开连接时,防火墙设备需要检测出无效的半开连接,并模拟客户端与服务器的五元组向服务器发送RST报文,通知服务器释放连接资源;

3. SYN Cookie技术

该技术实际是在客户端和服务器之间建立了TCP Proxy;其过程如下:

(1) 客户端发送SYN报文;

(2) 防火墙收到客户端发来的SYN报文,模拟服务器向客户端发送SYN-ACK报文,其中该报文中的序号为防火墙根据客户端信息按一定规则计算出的Cookie值,作为序号发给客户端;

(3) 客户端在收到SYN-ACK报文之后,正常会回复ACK报文;服务器可能会做如下处理;

a. 防火墙接收这个ACK报文之后,对其中的需要根据客户端信息进行Cookie计算,如果与序号匹配,则认为是一个合法连接,进而执行步骤(4)以下的步骤;

b. 如果客户端未回应ACK报文,则认为是攻击请求,丢包处理;此时未建立控制块;

c. 如果客户端回复了ACK,但是其中的Cookie值检测无法通过,则认为是攻击请求,丢包处理;此时为建立控制块;

(4) 通过Cookie检测之后,防火墙模拟客户端向服务器发送SYN请求,并建立连接控制块,保存于客户端与防火墙的连接状态和防火墙与服务器的连接状态;

(5) 服务器回复SYN-ACK给防火墙;

(6) 防火墙模拟客户端向服务器回复ACK,此时防火墙与服务器之间连接建立完成;

(7) 经过上述步骤,客户端与防火墙直接建立了连接,防火墙与服务器之间建立了连接,后面交互的数据,全部由防火墙进行代理;

 

4. Safe Reset技术

该技术实际上是对正常的TCP连接建立过程进行了干预性的校验;过程如下:

(1) 客户端发送SYN报文;

(2) 防火墙模拟服务器向客户端回复SYN-ACK,其中的确认序号设置为一个错误的序号,并且通过客户端信息计算一个Cookie值作为SYN-ACK的序号发给客户端;

(3) 客户端收到错误的SYN-ACK之后,正常会发送RST结束连接;

(4) 防火墙收到RST后,检测其Cookie,如果检测通过,则后续请求放行,进入流程(5);如果未收到RST或者Cookie校验未通过,则做丢包处理;

(5) 客户端重新发送SYN报文; 防火墙放行状态,不会干预连接建立请求;客户端与服务器正常完成三次握手建立连接;

 

本文链接:SYN Flood攻击

转载声明:转载请注明来源:Linux TCP/IP Stack,谢谢!


发表评论

电子邮件地址不会被公开。 必填项已用*标注