ACK攻击是什么?

ACK攻击是什么?,第1张

SYN工作的原理就是利用两个互联网程序间协议握手的过程进行的攻击。协议握手的过程如下,其中一个应用程序向另一个程序发送一个TCP SYN(同步)数据包。然后目标程序向第一个程序发送一个TCP-ACK应答数据包作为回答第一个程序最后用一个ACK应答数据包确认已经收到。一旦这两个程序握手成功,它们就准备一起运行了。 SYN攻击用一堆TCP SYN数据包来淹没它的受害者。每个SYN数据包迫使目标服务器产生一个SYN-ACK应答数据包然后等待对应的ACK应答。这很快就导致过量的SYN-ACK一个接一个的堆积在缓存队列里。当缓存队列满了以后,系统就会停止应答到来的SYN请求。如果SYN攻击中包括了拥有错误IP源地址的SYN数据包,情况很快就会变得更糟。在这种情况下,当SYN-ACK被送出的时候,ACK应答就永远不会被收到。飞快充满的缓存队列使得合法程序的SYN请求无法再通过。更加厉害的是,与之相似的Land攻击手段使用欺骗性的SYN数据包,它带有一个伪装的IP地址,使得它看起来像是来自你自己的网络。现在,SYN攻击就像是来自于你防火墙的内部,这使得问题更加严重。 大多数时新的操作系统和防火墙可以阻止SYN攻击。另一个简单的阻止SYN攻击的方法是阻塞掉所有带有已知的错误的IP源地址的数据包。

什么是ACK 泛洪 DDoS 攻击?

ACK 泛洪攻击是指攻击者尝试使用TCP ACK 数据包使服务器过载。与其他DDoS 攻击一样,ACK 洪水的目标是通过使用垃圾数据减慢或崩溃目标来拒绝向其他用户提供服务。目标服务器必须处理收到的每个 ACK 数据包,这会占用大量计算能力,无法为合法用户提供服务。

想象一个恶作剧的来电者用假消息填满某人的语音信箱,这样来自真实来电者的语音邮件就无法通过。现在想象这些假消息中的每一条都说:“嗨,我打电话是说我收到了你的消息。” 这有点像 ACK 泛洪 DDoS 攻击中发生的情况。

什么是数据包?

通过Internet 发送的所有数据都被分解为称为数据包的更小段。想想当有人想在 Twitter 上提出一个深入的观点或讲述一个长篇故事时,他们必须将他们的文本分成 280 个字符的部分,然后在一系列推文中发布,而不是一次发布。对于那些不使用 Twitter 的人,想想没有专门的短信应用程序的手机是如何将长 SMS 文本消息分解成更小的部分的。

传输控制协议(TCP) 是 Internet 通信的重要组成部分。使用 TCP 协议发送的数据包在数据包标头中附加了信息。TCP 协议使用数据包头来告诉接收者有多少数据包以及它们应该以什么顺序到达。标头还可以指示数据包的长度、数据包的类型等。

这有点像命名文件夹以便人们知道其中的内容。回到Twitter 的例子,发布一长串推文的人通常会指出该系列推文的总数和每条推文的编号,以帮助读者跟进。

什么是ACK包?

ACK 是“确认”的缩写。ACK 数据包是任何确认接收到一条消息或一系列数据包的 TCP 数据包。ACK 数据包的技术定义是在报头中设置了“ACK”标志的 TCP 数据包。

ACK 数据包是 TCP 握手的一部分,这是一系列三个步骤,可在 Internet 上的任何两个连接的设备之间开始对话(就像人们在开始对话之前可能在现实生活中通过握手互相问候一样)。TCP握手的三个步骤是:

[if !supportLists]00001. [endif]视线

[if !supportLists]00002. [endif]同步确认

[if !supportLists]00003. [endif]唉

打开连接的设备——比如用户的笔记本电脑——通过发送一个 SYN(“同步”的缩写)数据包来启动三向握手。连接另一端的设备——假设它是一个托管在线购物网站的服务器——回复一个 SYN ACK 数据包。最后,用户的笔记本电脑发送一个ACK包,三向握手完成。此过程可确保两个设备都在线并准备好接收额外的数据包,在此示例中,这些数据包将允许用户加载网站。

然而,这不是唯一一次使用ACK 数据包。TCP 协议要求连接的设备确认它们已按顺序接收到所有数据包。假设用户访问托管图像的网页。图像被分解成数据包并发送到用户的浏览器。一旦整个图像到达,用户的设备就会向主机服务器发送一个 ACK 数据包,以确认没有一个像素丢失。如果没有这个 ACK 数据包,主机服务器必须再次发送图像。

由于ACK 数据包是在报头中设置了 ACK 标志的任何 TCP 数据包,因此 ACK 可以是膝上型电脑发送到服务器的不同消息的一部分。如果用户填写表格并向服务器提交数据,膝上型计算机可以将这些数据包之一作为图像的 ACK 数据包。它不需要是一个单独的数据包。

ACK 泛洪攻击是如何工作的?

ACK 泛洪攻击的目标是需要处理收到的每个数据包的设备。防火墙和服务器最有可能成为ACK 泛滥的目标。负载平衡器、路由器和交换机不易受到这些攻击。

合法和非法ACK 数据包看起来基本相同,如果不使用内容交付网络(CDN)过滤掉不必要的ACK 数据包,则很难阻止 ACK 泛洪。虽然它们看起来很相似,但在 ACK DDoS 攻击中使用的数据包不包含数据包的主要部分,也称为有效载荷。为了看起来合法,它们只需要在 TCP 标头中包含 ACK 标志。

ACK 泛洪是第 4 层(传输层)DDoS 攻击。了解第4 层和 OSI 模型。

SYN ACK 泛洪攻击如何工作?

SYN ACK Flood DDoS 攻击与 ACK 攻击略有不同,但基本思想仍然相同:用过多的数据包压倒目标。

记住TCP 三向握手的工作原理:握手的第二步是 SYN ACK 数据包。通常,服务器发送此 SYN ACK 数据包以响应来自客户端设备的 SYN 数据包。在 SYN ACK DDoS 攻击中,攻击者使用 SYN ACK 数据包淹没目标。这些数据包根本不是三向握手的一部分;他们的唯一目的就是破坏目标的正常运作。

攻击者也有可能在SYN 泛洪 DDoS 攻击中使用SYN 数据包。

拒绝服务攻击(Denial of Service,DoS)是目前比较有效而又非常难于防御的一种网络攻击方式,它的目的就是使服务器不能够为正常访问的用户提供服务。所以,DoS对一些紧密依靠互联网开展业务的企业和组织带来了致命的威胁。

SYN Flood是最为有效和流行的一种DoS攻击形式。它利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,消耗目标主机的资源,从而不能够为正常用户提供服务。

1.1 TCP连接建立的过程

要掌握SYN Flood攻击的基本原理,必须先介绍TCP的三次握手机制。

TCP三次握手过程如下:

1)客户端向服务器端发送一个SYN置位的TCP报文,包含客户端使用的端口号和初始序列号x;

2)服务器端收到客户端发送来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,包含确认号为x+1和服务器的初始序列号y;

3)

TCP客户端

客户端端口

(1024-65535)

TCP服务器端

服务器端口

(1-1023)

SYN

SYN/ACK

ACK

客户端收到服务器返回的SYN+ACK报文后,向服务器返回一个确认号为y+1序号为x+1的ACK报文,一个标准的TCP连接完成。如图1所示:

1.2 攻击原理

在SYN Flood攻击中,黑客机器向受害主机发送大量伪造源地址的TCP SYN报文,受害主机分配必要的资源,然后向源地址返回SYN+ACK包,并等待源端返回ACK包,如图2所示。由于源地址是伪造的,所以源端永远都不会返回ACK报文,受害主机继续发送SYN+ACK包,并将半连接放入端口的积压队列中,虽然一般的主机都有超时机制和默认的重传次数,但是由于端口的半连接队列的长度是有限的,如果不断的向受害主机发送大量的TCP SYN报文,半连接队列就会很快填满,服务器拒绝新的连接,将导致该端口无法响应其他机器进行的连接请求,最终使受害主机的资源耗尽。

TCP客户端

客户端端口

(1024-65535)

TCP服务器端

服务器端口

(1-1023)

SYN

SYN/ACK

伪造源地址

2 几种防御技术

SYN Flood攻击给互联网造成重大影响后,针对如何防御SYN Flood攻击出现了几种比较有效的技术。

2.1 SYN-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是密码学中的一个消息认证码函数,也就是满足某种安全性质的带密钥的hash函数,它能够提供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. 高24位用cookie代替;

ii. 接下来的3比特位用客户要求的最大报文长度MMS代替;

iii. 最后5比特位为t mod 32。

客户端收到来自服务器SYN+ACK报文后,返回一个ACK报文,这个ACK报文将带一个cookie(确认号为服务器发送过来的SYN ACK报文的初始序列号加1,所以不影响高24位),在服务器端重新计算cookie,与确认号的前24位比较,如果相同,则说明未被修改,连接合法,然后,服务器完成连接的建立过程。

SYN-cookie技术由于在连接建立过程中不需要在服务器端保存任何信息,实现了无状态的三次握手,从而有效的防御了SYN Flood攻击。但是该方法也存在一些弱点。由于cookie的计算只涉及了包头的部分信心,在连接建立过程中不在服务器端保存任何信息,所以失去了协议的许多功能,比如,超时重传。此外,由于计算cookie有一定的运算量,增加了连接建立的延迟时间,因此,SYN-cookie技术不能作为高性能服务器的防御手段。通常采用动态资源分配机制,当分配了一定的资源后再采用cookie技术,Linux就是这样实现的。还有一个问题是,当我们避免了SYN Flood攻击的同时,同时也提供了另一种拒绝服务攻击方式,攻击者发送大量的ACK报文,使服务器忙于计算验证。尽管如此,在预防SYN Flood攻击方面,SYN-cookie技术仍然是一种有效的技术。

2.2 地址状态监控的解决方法

地址状态监控的解决方法是利用监控工具对网络中的有关TCP连接的数据包进行监控,并对监听到的数据包进行处理。处理的主要依据是连接请求的源地址。

每个源地址都有一个状态与之对应,总共有四种状态:

初态:任何源地址刚开始的状态;

NEW状态:第一次出现或出现多次也不能断定存在的源地址的状态;

GOOD状态:断定存在的源地址所处的状态;

BAD状态:源地址不存在或不可达时所处的状态。

具体的动作和状态转换根据TCP头中的位码值决定:

1)监听到SYN包,如果源地址是第一次出现,则置该源地址的状态为NEW状态;如果是NEW状态或BAD状态;则将该包的RST位置1然后重新发出去,如果是GOOD状态不作任何处理。

2)监听到ACK或RST包,如果源地址的状态为NEW状态,则转为GOOD状态;如果是GOOD状态则不变;如果是BAD状态则转为NEW状态;如果是BAD状态则转为NEW状态。

3)监听到从服务器来的SYN ACK报文(目的地址为addr),表明服务器已经为从addr发来的连接请求建立了一个半连接,为防止建立的半连接过多,向服务器发送一个ACK包,建立连接,同时,开始计时,如果超时,还未收到ACK报文,证明addr不可达,如果此时addr的状态为GOOD则转为NEW状态;如果addr的状态为NEW状态则转为BAD状态;如果为addr的状态为BAD状态则不变。

状态的转换图如图3所示:

初态

GOOD

NEW

BAD

ACK/RST

SYN

ACK/RST

ACK包确认超时

ACK/RST

ACK包确认超时

下面分析一下基于地址状态监控的方法如何能够防御SYN Flood攻击。

1)对于一个伪造源地址的SYN报文,若源地址第一次出现,则源地址的状态为NEW状态,当监听到服务器的SYN+ACK报文,表明服务器已经为该源地址的连接请求建立了半连接。此时,监控程序代源地址发送一个ACK报文完成连接。这样,半连接队列中的半连接数不是很多。计时器开始计时,由于源地址是伪造的,所以不会收到ACK报文,超时后,监控程序发送RST数据包,服务器释放该连接,该源地址的状态转为BAD状态。之后,对于每一个来自该源地址的SYN报文,监控程序都会主动发送一个RST报文。

2)对于一个合法的SYN报文,若源地址第一次出现,则源地址的状态为NEW状态,服务器响应请求,发送SYN+ACK报文,监控程序发送ACK报文,连接建立完毕。之后,来自客户端的ACK很快会到达,该源地址的状态转为GOOD状态。服务器可以很好的处理重复到达的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 Flooding原理及其应对策略. 网络与应用,2003

4. 陈 波. SYN Flood攻击的原理、实现与防范. 计算机应用与研究,2003

【转自世纪安全网 http://www.21safe.com】


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/56727.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-26
下一篇2023-02-26

发表评论

登录后才能评论

评论列表(0条)

    保存