如何防范tcp syn flood 攻击
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何防范tcp syn flood 攻击相关的知识,希望对你有一定的参考价值。
TCP SYN Flood攻 击的原理机制/检测与防范及防御方法 现在的攻击者,无所不在了.对于一些攻击手法,很多高 手也都是看在眼里而没什么实质性防范措施.除了改端 口,换IP,弄域名..还能做什么? 本篇文章介绍了TCP SYN Flood攻击的原理机制/检测与防范及防御方法,希望能给大伙一个思路. TCP SYN Flood攻击的机制 客户端通过发送在TCP报头中SYN标志置位的数据分段到服务端来请求建立连接。通常情况下,服务端会按照IP报头中的来源地址来返回SYN/ACK置位 的数据包给客户端,客户端再返回ACK到服务端来完成一个完整的连接(Figure-1)。 在攻击发生时,客户端的来源IP地址是经过伪造的(spoofed),现行的IP路由机制仅检查目的IP地址并进行转发,该IP包到达目的主机后返回 路径无法通过路由达到的,于是目的主机无法通过TCP三次握手建立连接。在此期间因为TCP缓存队列已经填满,而拒绝新的连接请求。目的主机一直尝试直至 超时(大约75秒)。这就是该攻击类型的基本机制。 发动攻击的主机只要发送较少的,来源地址经过伪装而且无法通过路由达到的SYN连接请求至目标主机提供TCP服务的端口,将目的主机的TCP缓存队列 填满,就可以实施一次成功的攻击。实际情况下,发动攻击时往往是持续且高速的。 Figure-3 SYN Flood Attack 这里需要使用经过伪装且无法通过路由达到的来源IP地址,因为攻击者不希望有任何第三方主机可以收到来自目的系 统返回的SYN/ACK,第三方主机会返回一个RST(主机无法判断该如何处理连接情况时,会通过RST重置连接),从而妨碍攻击进行。 Figure-4 IP Spoofing 由此可以看到,这种攻击方式利用了现有TCP/IP协议本身的薄弱环节,而且攻击者可以通过IP伪装有效的隐蔽自己。但对于目的主机来说,由于无法判 断攻击的真正来源。而不能采取有效的防御措施。 TCP SYN Flood检测与防范 一、分析 从上面的分析,可以看出TCP SYN Flood远程拒绝服务攻击具有以下特点: 针对TCP/IP协议的薄弱环节进行攻击; 发动攻击时,只要很少的数据流量就可以产生显著的效果; 攻击来源无法定位; 在服务端无法区分TCP连接请求是否合法。 二、系统检查 一般情况下,可以一些简单步骤进行检查,来判断系统是否正在遭受TCP SYN Flood攻击。 1、服务端无法提供正常的TCP服务。连接请求被拒绝或超时; 2、通过 netstat -an 命 令检查系统,发现有大量的SYN_RECV连接状态。三、防范 如何才能做到有效的防范呢? 1、 TCP Wrapper 使用TCP Wrapper(只有unix-like系统支持该功能,NT?可怜)可能在某些有限的场合下有用,比如服务端只处理有限来源IP的TCP连接请求,其它 未指定来源的连接请求一概拒绝。这在一个需要面向公众提供服务的场合下是不适合的。而且攻击者可以通过IP伪装(IP Spoof)来直接攻击受TCP Wrapper保护的TCP服务,更甚者可以攻击者可以伪装成服 务器本身的地址进行攻击。 2、增加TCP Backlog容量 增加TCP Backlog容量是一种治标不治本的做法。它一方面要占用更多的系统内存,另一方面延长了TCP处理缓存队列的时间。攻击者只要不停地的进行SYN Flood一样可以达到拒绝服务的目的。 3、 ISP接入 所有的ISP在边界处理进入的主干网 络的IP数据包时检测其来源地址是否合法,如果非指定来源IP地址范围,可以认为是IP Spoofing行为并将之丢弃。 在实际环境中,应为涉及的范围太过广泛,该方案无法实施。这是一个社会问题而非技 术问题。 TCP SYN Flood检测与防范 一、TCP连接监控(TCP Interception) 为了有效的防范TCP SYN Flood攻击,在保证通过慢速网络的用户可以正常建立到服务端的合法连接的同时,需要尽可能的减少服务端TCP Backlog的清空时间,大多数防 火墙采用了TCP连接监控的工作模式。 1.防火墙接到来自用户端Z的SYN连接请求,在本地建立面向该连接的监控表项; 2.防火墙将该连接请求之转发至服务端A; 3.服务端A相应该连接请求返回SYN/ACK,同时更新与该连接相关联的监控表项; 4.防火墙将该SYN/ACK转发至用户端Z; 5.防火墙发送ACK至服务端A,同时服务端A中TCP Backlog该连接的表项被移出; 6.这时,根据连接请求是否合法,可能有以下两种情况发生: a.如果来自用户端Z的连接请求合法,防火墙将该ACK转发至服务端A,服务端A会忽略该ACK,因为一个完整的TCP连接已经建立; b.如果来自用户端Z的连接请求非法(来源IP地址非法),没有在规定的时间内收到返回的ACK,防火墙会发送RST至服务端A以拆除该连接。 7.开始TCP传输过程。 由此可以看出,该方法具有两个局限: 1.不论是否合法的连接请求都直接转发至服务端A,待判断为非法连接(无返回ACK)时才采取措施拆除连接,浪费服务端系统资源; 2.防火墙在本地建立表项以监控连接(一个类似TCP Backlog的表),有可能被攻击者利用。 二、天网DoS防御网关 天网防火墙采用经过优化的TCP连接监控工作方式。该方式在处理TCP连接请求的时候,在确定连接请求是否合法以前,用户端Z与服务端A是隔断的。 1.防火墙接到来自用户端Z的SYN连接请求; 2.防火墙返回一个经过特殊处理的SYN/ACK至客户端Z以验证连接的合法性; 3.这时,根据连接请求是否合法,可能有以下两种情况发生: a.防火墙接收到来自客户端Z的ACK回应,该连接请求合法。转至第4步继续; b.防火墙没有接收到来自客户端Z的ACK回应,该连接请求非法,不进行处理; 4.防火墙在本地建立面向该连接的监控表项,并发送与该连接请求相关联的SYN至服务端A; 5.防火墙接到来自服务端A的SYN/ACK回应; 6.防火墙返回ACK以建立一个完整的TCP连接; 7.防火墙发送ACK至客户端Z,提示可以开始TCP传输过程。 其中,在第2/3/4/7步过程中,防火墙内部进行了如下操作: 1.在第2步中,为了验证连接的合法性,防火墙返回的SYN/ACK是经过特殊处理的,并提示客户端Z暂时不要传送有效数据; 2.在第3步中,防火墙接收到来自客户端Z的ACK,检验其合法性。 3.在第4步中,防火墙在本地建立面向该连接的监控表项,同时发送与该连接相关的SYN至服务端A; 4.在第7步中,防火墙通过将TCP数据传输与监控表项进行比对,并调整序列号和窗口以使之匹配。开始TCP数据传输。 在这里,天网防火墙通过高效的算法(64K位的Hash)提供了超过30万以上的同时连接数的容量,为数据传输的高效和可靠提供了强有力地保障。
希望能帮到你,求采纳。 参考技术A SYN
Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,它是利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式,最终导致系统或服务器宕机。
在讨论SYN
Flood原理前,我们需要从TCP连接建立的过程开始说起:
TCP与UDP不同,它是基于连接的,为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接。也就是我们经常听说的TCP协议中的三次握手(Three-way
Handshake),建立TCP连接的标准过程如下:
首先,客户端发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;
其次,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK(即确认Acknowledgement)的报文,表示客户端的请求被接受,同时TCP初始序号自动加一。
最后,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。
SYN
Flood攻击正是利用了TCP连接的三次握手,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN
Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不会对服务器端造成什么大的影响,但如果有大量的等待丢失的情况发生,服务器端将为了维护一个非常大的半连接请求而消耗非常多的资源。我们可以想象大量的保存并遍历也会消耗非常多的CPU时间和内存,再加上服务器端不断对列表中的IP进行SYN+ACK的重试,服务器的负载将会变得非常巨大。如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃。相对于攻击数据流,正常的用户请求就显得十分渺小,服务器疲于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户会表现为打开页面缓慢或服务器无响应,这种情况就是我们常说的服务器端SYN
Flood攻击(SYN洪水攻击)。
从防御角度来讲,存在几种的解决方法:
第一种是缩短SYN
Timeout时间,由于SYN
Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度
x
SYN
Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下,可以成倍的降低服务器的负荷。但过低的SYN
Timeout设置可能会影响客户的正常访问。
第二种方法是设置SYN
Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,并记录地址信息,以后从这个IP地址来的包会被一概丢弃。这样做的结果也可能会影响到正常用户的访问。
上述的两种方法只能对付比较原始的SYN
Flood攻击,缩短SYN
Timeout时间仅在对方攻击频度不高的情况下生效,SYN
Cookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用SOCK_RAW随机改写IP报文中的源地址,以上的方法将毫无用武之地。
SYN Flood 防范
简介:
SYN Flood 是 DoS( 拒绝服务攻击 )与 DDoS( 分布式拒绝服务攻击 )的方式之一,这是一种利用 TCP 协议缺陷,发送大量伪造 TCP
连接请求,从而使得服务器资源耗尽( CPU 满负载或内存不足 )的攻击方式。
TCP 三次握手:
1、客户端发送一个包含 SYN 标志的 TCP 报文到服务端,报文指明客户端使用的端口及 TCP 连接的初始序列号。
2、服务器在收到客户端的 SYN 报文后,将返回一个 SYN+ACK 报文,表示接受请求,同时 TCP 序列号加一,ACK确认。
3、客户端收到后,返回一个确认报文 ACK 给服务器,同时 TCP 序列号加一,到此建立连接完成。
SYN Flood :
当客户端将 TCP 连接请求发给服务器后,自己死机或掉线无法收到服务器发回的 SYN+ACK 应答报文,这时服务器会隔一段时间去重新发送
应答报文,重试次数上限后,如果客户端还没有响应,即丢弃这个未完成的连接。如果恶意的模拟这种情况,服务器将使用很多资源去维护这个
半连接表,还需去重试这些恶意的半连接请求,从而对正常的访问请求失去响应或变的非常缓慢,这就是 SYN Flood 攻击。( TCP 洪水攻击 )
如何确认是否为 SYN Flood 攻击:
通常情况,服务器负荷突然升高甚至失去响应,使用 netstat -ant 可以看到大量的 SYN_RCVD 的半连接,数量大于 500 或超过总连接数的
10% ,系统日志 messages 中有 SYN Flooding 字样等,则可认定为遭到 SYN Flood 攻击。
防范一、更改内核参数(只能有效降低)、临时封源 IP 地址
net.ipv4.tcp_synack_retries = 0 ( 默认 5 )
## TCP 连接三次握手中第二次握手请求次数,每次等待 30 ~ 40 秒,如果对方没有回应第三个握手包(ACK),即:重试。
面临 SYN Flood 即 TCP 洪水攻击时,可以将此参数改为 0 ,即:回应第二个握手包给客户端后,如果收不到客户端回应的第三个握手包,
不进行重试,加快半开连接的回收,防止系统资源被耗尽。弊端:当网络状态很差时,有可能客户端没有收到服务器发出的第二个握手包,那
么连接服务器可能会失败。但是问题并不大,客户端也有第一次握手重试次数。
net.ipv4.tcp_syncookies = 1 ( 默认 0 )
## 开启 SYN Cookies ,当半连接队列溢出时,向请求连接的 IP 分配 Cookies ,短时间内连续收到某 IP 的重复 SYN 报文,即认为受到攻击,
之后收到此 IP 地址来的包都会被丢弃,可阻止少量 SYN 攻击。
net.ipv4.tcp_max_syn_backlog = 2048
## SYN 队列长度,可容纳更多的半连接数,最大限度接受客户端请求。(这个取值范围没弄明白,现在是按一倍内存取的)
netstat -ant | grep ‘SYN_RECV‘ > SYN.txt 分析 IP 地址,使用 iptables 干掉它。
防范二、使用硬件防火墙来抵挡(成本高)
可以让客户端先跟硬防建立 TCP 连接,连接成功后才转发到后端服务器。
以上是关于如何防范tcp syn flood 攻击的主要内容,如果未能解决你的问题,请参考以下文章