SYN Flood防御原理
SYN Flood防御原理
介绍SYN flood的攻击和防御原理。
SYN flood是基于TCP协议栈发起的攻击,在了解SYN flood攻击和防御原理之前,还是要从TCP连接建立的过程开始说起。
TCP交互过程
在TCP/IP协议中,TCP协议提供可靠的连接服务,无论是哪一方向另一方发送数据前,都必须先在双方之间建立一条连接通道,这就是TCP三次握手,如图1所示。
图1 TCP三次握手
第一次握手:客户端向服务器端发送一个SYN(Synchronize)报文,指明想要建立连接的服务器端口,以及序列号ISN。
第二次握手:服务器在收到客户端的SYN报文后,将返回一个SYN-ACK的报文,表示客户端的请求被接受,同时在SYN-ACK报文中将确认号设置为客户端的ISN号加1。ACK即表示确认(Acknowledgment)。
第三次握手:客户端收到服务器的SYN-ACK包,向服务器发送ACK报文进行确认,ACK报文发送完毕,三次握手建立成功。
如果客户端在发送了SYN报文后出现了故障,那么服务器在发出SYN-ACK应答报文后是无法收到客户端的ACK报文的,即第三次握手无法完成,这种情况下服务器端一般会重试,向客户端再次发送SYN-ACK,并等待一段时间。如果一定时间内,还是得不到客户端的回应,则放弃这个未完成的连接。这也是TCP的重传机制。
SYN flood攻击
SYN flood攻击正是利用了TCP三次握手的这种机制发动攻击。如图2,攻击者向服务器发送大量的SYN报文请求,当服务器回应SYN-ACK报文时,不再继续回应ACK报文,导致服务器上建立大量的半连接,直至老化。这样,服务器的资源会被这些半连接耗尽,导致正常的请求无法回应。
图2 SYN flood攻击示意图
FW针对SYN flood攻击,一般会采用TCP代理和源认证两种方式进行防御。
TCP代理
TCP代理是指我们的FW部署在客户端和服务器中间,当客户端向服务器发送的SYN报文经过FW时,FW代替服务器与客户端建立三次握手。一般用于报文来回路径一致的场景。
图3 TCP代理报文交互过程
如图3,FW收到SYN报文,对SYN报文进行拦截,代替服务器回应SYN-ACK报文。
如果客户端不能正常回应ACK报文,则判定此SYN报文为非正常报文,FW代替服务器保持半连接一定时间后,放弃此连接。 如果客户端正常回应ACK报文,FW与客户端建立正常的三次握手,则判定此SYN报文为正常业务报文,非攻击报文。FW立即与服务器再建立三次握手,此连接的后续报文直接送到服务器。
整个TCP代理的过程对于客户端和服务器都是透明的。
TCP代理过程中,FW会对收到的每一个SYN报文进行代理和回应,并保持半连接,所以当SYN报文流量很大时,对FW的性能要求非常的高。
但是TCP代理只能应用在报文来回路径一致的场景中,如果来回路径不一致,代理就会失败。
TCP源认证
TCP源认证是FW防御SYN flood攻击的另一种方式,没有报文来回路径必须一致的限制,所以应用更普遍。
图4 TCP源探测报文交互图
如图4,当FW收到客户端发送的SYN报文时,对SYN报文进行拦截,并伪造一个带有错误序列号的SYN-ACK报文回应给客户端。
如果客户端是虚假源,则不会对错误的SYN-ACK报文进行回应。 如果客户端是真实源发送的正常请求SYN报文,当收到错误的SYN-ACK报文时,会再发出一个RST报文,让FW重新发一个正确的SYN-ACK报文;FW收到这个RST报文后,判定客户端为真实源,则将这个源加入白名单,在白名单老化前,这个源发出的报文都认为是合法的报文,FW直接放行,不再做验证。
TCP源认证对客户端的源只做一次验证通过后,就加入白名单,后续就不会每次都对这个源的SYN报文做验证,这样大大提高了TCP源认证的防御效率和防御性能,可以有效缓解FW性能压力。
如果网络中存在会丢弃源探测报文的设备,则不能使用源探测功能。
首包丢弃
有些攻击是不断变换源IP地址或者源端口号的,这样的攻击报文都不相同,如果使用源认证方式防御,对每个攻击报文都进行反弹处理,当攻击量很大时,反弹量也会很大,非常消耗性能,且容易造成链路拥塞。
首包丢弃与源认证方式结合可有效防御变换源IP或源端口号的大流量攻击。
正常情况下,TCP报文具有超时重传功能,如果在交互过程中报文被丢弃,则报文会重传。首包丢弃正是利用了报文的重传机制,将收到的第一个报文丢弃,如果后续有重传报文则直接放行。当重传报文速率达到告警阈值后再进入源认证流程,以减少反弹量。
FW判定报文是否属于重传报文是基于三元组及时间间隔来判断的。三元组包含源IP地址、源端口和协议;时间间隔可以自定义配置。
当报文没有匹配到任何三元组时,认为该报文是首包,将其丢弃,并记录三元组信息和时间。
当报文匹配到某三元组,则计算该报文与匹配该三元组的上一个报文到达的时间间隔。 如果时间间隔低于设定的下限,或者高于设定的上限,则认为是首包,将其丢弃;如果时间间隔落在配置的上限和下限之间,则认为是后续的重传包直接放行。当到达同一目的IP的重传SYN报文速率达到源认证告警阈值后再进入源认证流程。
以SYN报文为例,处理流程如图5所示。
图5 首包丢弃处理过程
当前仅支持对SYN报文进行首包丢弃。
首包丢弃功能只支持IPv4报文,不支持IPv6报文。
2、本资源基本为原创,部分来源其他付费资源平台或互联网收集,如有侵权请联系及时处理。
3、本站大部分文章的截图来源实验测试环境,请不要在生产环境中随意模仿,以免带来灾难性后果。
转载请保留出处: www.zh-cjh.com珠海陈坚浩博客 » SYN Flood防御原理
作者: cjh
手机扫一扫,手机上查看此文章: |
一切源于价值!
其他 模板文件不存在: ./template/plugins/comment/pc/index.htm