醋醋百科网

Good Luck To You!

「网络安全」常见攻击篇(17)——SYN洪水攻击

什么是SYN洪水攻击?

SYN Flood 或称 SYN洪水、SYN洪泛是一种阻断服务攻击,起因于攻击者传送一系列的SYN请求到目标系统。

TCP连接三次握手

当一个客户端尝试和一个服务器建立TCP连接,客户端和服务端会交换一系列报文。 这种连接技术广泛的应用在各种TCP连接中,例如telnet,Web,email,等等。 SYN(synchronous)是TCP/IP建立连接时使用的握手信号,用户和服务器之间的正常连接需要正确执行3次握手,具体流程如下图所示:

TCP连接三次握手图

当客户端尝试与服务器建立TCP连接时,客户端和服务器在正常情况下交换一组信息,如下所示:

  1. 客户端将SYN同步信息发送到服务器并请求连接设置。
  2. 服务器响应客户端SYN-ACK响应请求。
  3. 客户端承诺ACK并建立连接。

这是在所谓的TCP 3次握手中使用TCP传输协议的每个连接的基础。

SYN洪水原理

正常情况下,客户端发送一个SYN报文给服务端,服务端发送一个SYN-ACK包以回应客户端,接着,客户端就返回一个ACK包来实现一次完整的TCP连接。

然而,在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,他可能不会接到客户端回应的ACK包。这个也就是所谓的半开放连接,服务端需要耗费一定的数量的系统内存来等待这个未决的连接,虽然这个数量是受限的,但是恶意者可以通过创建很多的半开放式连接来发动SYN洪水攻击 。

通过ip欺骗可以很容易的实现半开放连接。攻击者发送SYN包给服务端系统,这个看起来是合法的,但事实上所谓的客户端根本不会回应这个 。SYN-ACK报文,这意味着服务端将永远不会接到ACK报文。 而此时,半开放连接将最终耗用受害者所有的系统资源,受害者将不能再接收任何其他的请求。通常等待ACK返回包有超时限制,所以半开放连接将最终超时,而受害者系统也会自动修复。虽然这样,但是在受害者系统修复之前,攻击者可以很容易的一直发送虚假的SYN请求包来持续攻击。

在大多数情况下,受害者几乎不能接受任何其他的请求,但是这种攻击不会影响到已经存在的进站或者是出站连接。虽然这样,受害者系统还是可能耗尽系统资源,以导致其他种种问题。 攻击系统的位置几乎是不可确认的,因为SYN包中的源地址多数都是虚假的。当SYN包到达受害者系统的时候,没有办法找到他的真实地址 ,因为在基于源地址的数据包传输中,源ip过滤是唯一可以验证数据包源的方法。

什么是SYN cookie?

SYN cookie是一个防止SYN洪水攻击技术。现在SYN cookie已经是linux内核的一部分了(默认的stat是no),但是在linux系统的执行过程中它只保护linux系统。如果创建一个linux防火墙,他可以为整个网络和所有的网络操作系统提供SYN COOKIE保护你可以用这个防火墙来阻断半开放式tcp连接,所以这个受保护的系统不会进入半开放状态(TCP_SYN_RECV)。当连接完全建立的时候,客户机到服务器的连接要通过防火墙来中转完成。

SYN cookie就是用一个cookie来响应TCP SYN请求的TCP实现,根据上面的描述,在正常的TCP实现中,当服务端接收到一个SYN数据包,他返回 一个SYN-ACK包来应答,然后进入TCP-SYN-RECV(半开放连接)状态来等待最后返回的ACK包。服务端用一个数据空间来描述所有未决的连接, 然而这个数据空间的大小是有限的,所以攻击者将塞满这个空间。 在TCP SYN COOKIE的执行过程中,当服务端接收到一个SYN包的时候,他返回一个SYN-ACK包,这个数据包的ACK序列号是经过加密的,也就 是说,它由源地址,端口源次序,目标地址,目标端口和一个加密种子计算得出。然后服务端释放所有的状态。如果一个ACK包从客户端返回, 服务端将重新计算它来判断它是不是上个SYN-ACK的返回包。如果这样,服务端就可以直接进入TCP连接状态并打开连接。从而使服务端避免守侯半开放连接。

什么是SYN COOKIE 防火墙 ?

SYN COOKIE 防火墙是SYN cookie的一个扩展,SYN cookie是建立在TCP堆栈上的,他为linux操作系统提供保护。SYN cookie防火墙是linux的一大特色,你可以使用一个防火墙来保护你的网络以避免遭受SYN洪水攻击。
下面是SYN cookie防火墙的原理
client firewall server
------ ---------- ------
1. SYN----------- - - - - - - - - - ->
2. <------------SYN-ACK(cookie)
3. ACK----------- - - - - - - - - - ->
4. - - - - - - -SYN--------------->
5. <- - - - - - - - - ------------SYN-ACK
6. - - - - - - -ACK--------------->
7. -----------> relay the ------->
<----------- connection <-------
1:一个SYN包从客户端发送到服务端。
2:防火墙在这里扮演了服务端的角色来回应一个带SYN cookie的SYN-ACK包给客户端。
3:客户端发送ACK包,接着防火墙和客户端的连接就建立了。
4:防火墙这个时候再扮演客户端的角色发送一个SYN给服务端。5:服务端返回一个SYN给客户端 。
6:防火墙扮演客户端发送一个ACK确认包给服务端,这个时候防火墙和服务端的连接也就建立了 。
7:防火墙转发客户端和服务端之间的数据 。
如果系统遭受SYN Flood,那么第三步就不会有,而且无论在防火墙还是服务端都不会收到相应在第一步的SYN包,所以我们就击退了这次SYN洪水攻击。

如何检测SYN攻击?

检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。我们使用系统自带的netstat 工具来检测SYN攻击:

# netstat -n -p TCP
tcp 0  0 10.11.11.11:23 124.173.152.8:25882  SYN_RECV 
tcp 0  0 10.11.11.11:23 236.15.133.204:2577  SYN_RECV -
tcp 0  0 10.11.11.11:23 127.160.6.129:51748  SYN_RECV -
tcp 0  0 10.11.11.11:23 222.220.13.25:47393  SYN_RECV -
tcp 0  0 10.11.11.11:23 212.200.204.182:60427 SYN_RECV -
tcp 0  0 10.11.11.11:23 232.115.18.38:278  SYN_RECV -
tcp 0  0 10.11.11.11:23 239.116.95.96:5122 SYN_RECV -
tcp 0  0 10.11.11.11:23 236.219.139.207:49162 SYN_RECV -

上面是在LINUX系统中看到的,很多连接处于SYN_RECV状态(在WINDOWS系统中是SYN_RECEIVED状态),源IP地址都是随机的,表明这是一种带有IP欺骗的SYN攻击。

LINUX环境下查看某个端囗的未连接队列的条目数:

#netstat -n -p TCP | grep SYN_RECV | grep :22 | wc -l

如何防范SYN攻击?

关于SYN攻击防范技术,主要有两大类,一类是通过防火墙、路由器等过滤网关防护,另一类是通过加固TCP/IP协议栈防范。


感谢您的阅读,喜欢的话就转发并关注小编吧。


上一篇:「网络安全」常见攻击篇(16)——ICMP洪水攻击

下一篇:「网络安全」常见攻击篇(18)——UDP FLood攻击

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言