如何防止ACK攻击
拒绝服务(DoS)是目前一种有效且非常难的网络攻击,其目的是使服务器无法为正常访问的用户提供服务。因此,DoS对一些密切依赖互联网开展业务的企业和组织构成了致命的威胁。
SYN Flood是最有效和最流行的DoS攻击形式。它利用TCP三次握手协议的缺陷,向目标主机发送大量伪造源地址的SYN连接请求,消耗目标主机的资源,从而无法为正常用户提供服务。
1.1 TCP连接建立的TCP流程
要掌握SYN Flood攻击的基本原理,首先要介绍TCP的三次握手机制。
TCP三次握手过程如下:
1)客户端向服务器发送SYN-set TCP消息,包含客户端使用的端口号和初始序列号x;
2)服务器收到客户端发送的SYN消息后,向客户端发送一个同时设置了SYN和ACK的TCP消息,包括确认号X
1和服务器的初始序列号Y;
3)
TCP客户端
客户端端口
(1024-65535)
TCP服务器端
服务器端口
(1-1023)
synchronizing同步
同步/确认
命令正确应答
客户端收到服务器返回的SYN
ACK消息后,向服务器返回确认号为Y
1,序列号为X
1的ACK消息,一个标准的TCP连接就完成了。如图1所示:
1.2攻击原则
在SYN Flood攻击中,黑客机器向受害主机发送大量带有伪造源地址的TCP SYN消息。受害主机分配必要的资源,然后向源地址返回SYN
ACK数据包,并等待源地址返回ACK数据包,如图2所示。由于源地址是伪造的,源端永远不会返回ACK报文,受害主机会继续发送SYN
ACK报文,将半连接放入端口的backlog队列。虽然一般主机都有超时机制和默认重传次数,但是端口的半连接队列长度是有限的。如果持续向受害主机发送大量TCP SYN报文,半连接队列会很快填满,服务器会拒绝新的连接,导致端口无法响应其他机器发出的连接请求。
TCP客户端
客户端端口
(1024-65535)
TCP服务器端
服务器端口
(1-1023)
synchronizing同步
同步/确认
伪造的源地址
2几种防御技术
在SYN Flood攻击对互联网造成巨大冲击后,针对如何防御SYN Flood攻击,出现了几种有效的技术。
2.1同步cookie技术
一般服务器收到TCP SYN消息后,会立即为连接请求分配一个缓冲区,然后返回SYN
ACK消息,这样就形成了半连接。SYN Flood就是利用了这一点,在没有完成连接的情况下,发送大量带有伪造源地址的SYN连接请求。这消耗了大量的服务器资源。
SYN-cookie技术针对标准TCP连接建立过程中资源分配的这一缺陷,改变了资源分配的策略。服务器收到SYN消息时,并不立即分配缓冲区,而是利用连接信息生成一个cookie,并将这个cookie作为要返回的SYN
ACK消息的初始序列号。当客户端返回ACK消息时,根据头信息计算cookie,并与返回的确认序列号(初始序列号
1)的前24位进行比较。如果相同,则是正常连接。然后,分配资源,建立连接。
该技术的巧妙之处在于避免了连接信息完全到达前的资源分配,使得SYN Flood攻击的资源消耗无效。实现的关键在于cookie的计算。cookie的计算应该包括这个连接的状态信息,这样攻击者就无法伪造cookie。cookie的计算过程如下:
1)在接收到SYN包之后,服务器计算消息摘要mac:
mac = MAC(A,k);
MAC是密码学中的一种消息认证码函数,即一种具有满足某种安全属性的密钥的哈希函数。它可以提供cookie计算所需的安全性。
a是客户机和服务器的IP地址和端口号以及参数T的串行组合:
a = SOURCE _ IP
SOURCE _ PORT
DST _ IP
DST _ PORT
t
k是服务器的唯一密钥;
时间参数T是一个长度为32位的时间计数器,每64秒递增1;
2)生成cookie:
Cookie = mac(0:24):表示mac值的第0到第24位;
3)设置要返回的SYN
ACK消息的初始序列号。设置过程如下:
I .用cookie替换高24位;
二。接下来的3位由客户要求的最大消息长度MMS代替;
三。后5位是t mod 32。
客户端收到服务器的SYN
ACK消息后,返回一个带有cookie的ACK消息(确认号是服务器发送的SYN ACK消息的初始序列号加1,所以不影响高24位)。在服务器上重新计算cookie,并与确认号的前24位进行比较,如果相同,则连接合法。然后,服务器完成连接建立过程。
SYN-cookie技术由于在连接建立过程中不需要在服务器上保存任何信息,实现了无状态的三次握手,从而有效防御SYN Flood攻击。但是这种方法也有一些弱点。由于cookie的计算只涉及到包头的部分置信度,并且在连接建立过程中没有在服务器端保存任何信息,因此协议的很多功能,比如超时重传都丧失了。另外,由于计算cookie有一定的计算量,增加了连接建立的延迟时间,因此,SYN-cookie技术不能作为高性能服务器的防御手段。通常采用动态的资源分配机制,分配到一定量的资源后采用cookie技术。Linux就是这样实现的。另一个问题是,我们在避免SYN Flood攻击的同时,也提供了另一种拒绝服务攻击模式。攻击者发送大量ACK消息,使得服务器忙于计算和验证。尽管如此,SYN-cookie技术仍然是防止SYN Flood攻击的有效技术。
2.2处理状态监控的解决方案
解决地址监听的方法是使用监听工具监听网络中与TCP连接相关的数据包,并对监听到的数据包进行处理。处理的主要依据是连接请求的源地址。
每个源地址都有一个对应的状态。总共有四种状态:
初始状态:任何源地址的初始状态;
新状态:已有源地址的状态即使第一次出现或多次出现也无法确定;
良好状态:确定现有源地址的状态;
不良状态:源地址不存在或不可达的状态。
具体的动作和状态转换是根据TCP报头中的比特编码值决定的:
1)监听SYN包,如果源地址是第一次出现,则将源地址的状态设置为新状态;如果是新状态或坏状态;分组的RST位置被设置为1,然后被重新发送;状态好的话,什么都不会做。
2)监听ACK或RST包,如果源地址的状态是新的,则改为好的;如果处于良好状态,就不会改变;如果处于不良状态,则将其更改为新状态;如果它处于不良状态,它将改变到新的状态。
3)监听来自服务器的SYN ACK报文(目的地址为addr),表示服务器已经为addr发来的连接请求建立了半连接。为了防止太多的半连接,向服务器发送一个ACK包并建立连接。同时,开始计时。如果超时,则ACK报文还没有收到,证明addr不可达。如果此时addr的状态良好,它将被更改为新状态。如果addr的状态是新的,它将被更改为坏的;如果addr的状态是坏的,它将不会改变。
的状态转换图如图3所示:
初态
好的
新的
严重的
ACK/RST
synchronizing同步
ACK/RST
ACK确认超时
ACK/RST
ACK确认超时
让我们分析一下基于地址状态监控的方法如何防御SYN Flood攻击。
1)对于带有伪造源地址的SYN报文,如果源地址第一次出现,则源地址的状态为新。当监听到服务器的SYN
ACK报文时,表示服务器已经为源地址的连接请求建立了半连接。此时,监控程序代表源地址发送一个ACK消息来完成连接。这样,半连接队列中的半连接数量并不大。定时器开始计数,因此由于源地址是伪造的,ACK消息将不会被接收到。超时后,监控程序发送RST数据包,服务器释放连接,源地址状态变为BAD。然后,对于来自源地址的每个SYN消息,监控程序将主动发送一个RST消息。
2)对于一条合法的SYN报文,如果源地址第一次出现,源地址的状态为NEW,服务器响应请求,发送SYN
ACK报文,监控程序发送ACK报文,连接建立。之后,来自客户端的ACK将很快到达,源地址的状态将变为良好状态。服务器可以很好地处理重复的ACK包。
从上面的分析可以看出,基于监控的方法在不影响正常用户连接的情况下,可以很好的防御SYN Flood攻击。
3摘要
介绍了SYN Flood攻击的基本原理,然后详细描述了两种有效便捷的防御方法:SYN-cookie技术和基于监控的源地址状态技术。SYN-cookie技术实现了无状态握手,避免了SYN Flood的资源消耗。基于监控的源地址状态技术可以监控每台连接服务器的IP地址状态,并采取主动措施避免SYN Flood攻击的影响。这两种技术是目前防御SYN Flood攻击最成熟可行的技术。
参考
1.颜,,人。SYN Flood攻击原理及防范方法。计算机应用,2000
2.孙茜,朱晓燕,王玉林。DDoS环境下的TCP洪水攻击及对策。网络安全技术与应用,2004
3.李磊,赵永祥,陈昌佳。TCP SYN泛洪原理及对策。网络与应用,2003
4.陈波。SYN Flood攻击的原理、实现和防范。计算机应用与研究,2003
[转自世纪安全网http://www.21safe.com]
syn标志位有哪些协议可以使用?
SYN:同步序列,用来建立连接。SYN标志位和ACK 标志位搭配使用,当连接请求的时候,SYN=1、ACK=0;当连接被响应的时候,SYN=1、ACK=1。这个标志的数据包经常被用来进行端口扫描。扫描着发送一个只有SYN的数据包,如果对方响应了一个数据包回来,就表明该主机存在该端口。
syn形式是什么意思?
SYN是同步序列编号(Synchronize Sequence Numbers),是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
TCP连接的第一个包,非常小的一种数据包。SYN 攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。
原理:
SYN Flood利用TCP协议缺陷,发送了大量伪造的TCP连接请求,使得被攻击方资源耗尽,无法及时回应或处理正常的服务请求。
一个正常的TCP连接需要三次握手,首先客户端发送一个包含SYN标志的数据包,其后服务器返回一个SYN/ACK的应答包,表示客户端的请求被接受,最后客户端再返回一个确认包ACK,这样才完成TCP连接。
在服务器端发送应答包后,如果客户端不发出确认,服务器会等待到超时,期间这些半连接状态都保存在一个空间有限的缓存队列中;如果大量的SYN包发到服务器端后没有应答,就会使服务器端的TCP资源迅速耗尽,导致正常的连接不能进入,甚至会导致服务器的系统崩溃。
TCP传输连接中的SYN、ACK、SEQ、AN分别是什么意思?他们所带的数字又是代表什么?
SYN,ACK是标志位SEQ,AN是数据包序号SYN=1, ACK=0, SEQ=200 的意思是:发送的为一个SYN请求,发送端的初始数据包序号为200SYN=1, ACK=1, SEQ=4800, AN=201 的意思是:接收端的确认信息,且接收端的初始数据包序号为4800
SYN协议的功能?
SYN用于建立TCP/IP时的握手连接,由客户端想服务端发送SYN,服务端向客户端发送SYN+ACK响应报文,客户端向服务端发送一个ACK响应报文,然后建立一个完整的连接
手机上出现tcp syn攻击怎么办?
ACK是一种确认应答,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。 r
SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。是最常见又最容易被利用的一种攻击手法。 r
FIN是用来扫描保留的端口,发送一个FIN包(或者是任何没有ACK或SYN标记的包)到目标的一个开放的端口,然后等待回应。许多系统会返回一个复位标r
具体怎么控制我不知道 注册表实施啊