分类
经验

TCP-SYN Flood攻击

TCP-SYN Flood攻击又称半开式连接攻击,每当我们进行一次标准的TCP连接,都会有一个三次握手的过程,而TCP-SYN Flood在它的实现过程中只有前两个步骤。这样,服务器会在一定时间处于等待接收客户端ACK消息的状态。
由于一台服务器可用的TCP连接是有限的,如果恶意攻击方快速连续地发送此类连接请求,则服务器可用TCP连接队列很快将会阻塞,系统资源和可用带宽急剧下降,无法提供正常的网络服务,从而造成拒绝服务。
TCP-SYN Flood攻击属于DDoS攻击中的一种。

TCP通过三次握手建立连接

TCP连接的建立是一个三次握手的过程。如上图所示:
第一次握手:主机A(通常也称为客户端)发送一个标识了SYN的数据段,表示期望与服务器A建立连接,此数据段的序列号(seq)为a。

第一次握手

第二次握手:服务器A回复标识了SYN+ACK的数据段,此数据段的序列号(seq)为b,确认序列号为主机A的序列号加1(a+1),以此作为对主机A的SYN报文的确认。

第二次握手

第三次握手:主机A发送一个标识了ACK的数据段,此数据段的序列号(seq)为a+1,确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文的确认。

第三次握手

对于TCP-SYN Flood攻击,防火墙一般会采用TCP代理和TCP源探测两种方式进行防御。

方式一:TCP代理
TCP代理是指将防火墙部署在客户端和服务器中间,当客户端向服务器发送的SYN报文经过防火墙时,防火墙代替服务器与客户端建立三次握手。一般用于报文来回路径一致的场景。

TCP代理

1.防火墙收到SYN报文,对SYN报文进行拦截,代替服务器回应SYN+ACK报文。
2.如果客户端不能正常回应ACK报文,则判定此SYN报文为非正常报文,防火墙代替服务器保持半连接一定时间后,放弃此连接。
3.如果客户端正常回应ACK报文,防火墙与客户端建立正常的三次握手,则判定此SYN报文为正常业务报文,非攻击报文。防火墙立即与服务器再建立三次握手,此连接的后续报文直接送到服务器。

整个TCP代理的过程对于客户端和服务器都是透明的。TCP代理过程中,防火墙会对收到的每一个SYN报文进行代理和回应,并保持半连接,所以当SYN报文流量很大时,对防火墙的性能要求非常的高。
TCP代理只能应用在报文来回路径一致的场景中,如果来回路径不一致,代理就会失败。可是在现网中,报文来回路径不一致的场景也是很常见的,那这种情况下如果发生了TCP-SYN Flood攻击,防火墙要怎么防范呢?

方式二:TCP源探测
TCP源探测是防火墙防御TCP-SYN Flood攻击的另一种方式,没有报文来回路径必须一致的限制,所以应用普遍。

TCP源探测

1.当防火墙收到客户端发送的SYN报文时,对SYN报文进行拦截,并伪造一个带有错误序列号的的SYN+ACK报文回应给客户端。
2.如果客户端是虚假源,则不会对错误的SYN+ACK报文进行回应。
3.如果客户端是真实源发送的正常请求SYN报文,当收到错误的SYN+ACK报文时,会再发出一个RST报文,让防火墙重新发一个正确的SYN+ACK报文;防火墙收到这个RST报文后,判定客户端为真实源,则将这个源加入白名单,在白名单老化前,这个源发出的报文都认为是合法的报文,防火墙直接放行,不在做验证。

这里,我们再回头对比一下TCP源探测和TCP代理两种方式,会发现TCP源探测对客户端的源只做一次验证通过后,就加入白名单,后续就不会每次都对这个源的SYN报文进行验证,这样大大提高了TCP源探测的防御效率和防御性能,可以有效缓解防火墙性能压力。

讲了这么多,大家是不是就会觉得TCP源探测对于TCP-SYN Flood攻击已经是一个完美的防御方案了呢?它会不会有什么其他缺点呢?

很长一段时间里,TCP-SYN Flood攻击在防火墙TCP代理和TCP源探测双重防御的压制下,得到了遏制。但是随着木马被广泛植入到更多的肉鸡,一个初级黑客简单操作就可以操纵动则上百G流量的时候, TCP-SYN Flood攻击变得更加嗜血。TCP代理和TCP源探测方式说到底都是使用防火墙牺牲自身的CPU不断的来解决问题。但是一旦海量低开销的TCP-SYN Flood攻击报文同时蜂拥而至时,这种伤敌一千自损八百的方式将走向另外一个极端,防火墙很有可能成为瓶颈。

魔高一尺,道高一丈,随着TCP-SYN Flood攻击的不断变异,防火墙也一直不断地提升着自身的防御能力,下期我们继续探讨防火墙的新技术。

发表评论

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