SYN泛洪攻击

转自《SYN洪泛攻击的原理、预防和排除》

SYN泛洪攻击概述

SYN泛洪攻击利用TCP三次握手协议的缺陷,向目标主机发送大量的伪造源地址的SYN连接请求,使得被攻击方资源耗尽,从而不能够为正常用户提供服务。

SYN泛洪攻击原理

在TCP协议中被称为三次握手(Three-way Handshake)的连接过程中,如果一个用户向服务器发送了SYN报文,服务器又发出 SYN+ACK 应答报文后未收到客户端的 ACK 报文,这种情况下服务器端会再次发送SYN+ACK给客户端,并等待一段时间后丢弃这个未完成的连接,这段时间的长度称为SYN Timeout,一般来说这个时间是分钟的数量级。

SYN 泛洪攻击所做的就是利用这个SYN Timeout和TCP/IP协议族中的另一个漏洞: 报文传输过程中对报文的源 IP 地址完全信任进行攻击。SYN 泛洪攻击通过发送大量的伪造 TCP 链接报文而造成大量的 TCP 半连接,服务器端将为了维护这样一个庞大的半连接列表而消耗非常多的资源。这样服务器端将忙于处理攻击者伪造的TCP连接请求而无法处理正常连接请求,甚至会导致堆栈的溢出崩溃
造成SYN洪泛攻击最主要的原因是TCP/IP协议的脆弱性。TCP/IP是一个开放的协议平台,它将越来越多的网络连接在一起,它基于的对象是可信用户群,所以缺少一些必要的安全机制,带来很大的安全威胁。例如常见的IP欺骗、TCP连接的建立、ICMP数据包的发送都存在巨大的安全隐患,给SYN洪泛攻击带来可乘之机。

SYN泛洪攻击类别

  1. 直接攻击
    攻击者直接用自己没有经过伪装的IP地址快速地发送SYN数据报。
    这种攻击必须阻止自己系统响应SYN-ACK报文,因为任何ACK、RST或ICMP都能让服务器跳过SYN-RECVD状态而溢出TCB。
    攻击者可以通过设置防火墙规则来实现,让防火墙阻止一切要到达服务器的数据包(SYN除外),或者让防火墙阻止一切进来的包来使SYN-ACK包在到达本地TCP处理程序之前就被丢弃了。 一旦被检测到,这种攻击非常容易抵御,用一个简单的防火墙规则阻止带有攻击者IP地址的数据包就可以了。这种方法在如今的防火墙软件中通常都是自动执行的。

  2. 欺骗式攻击
    攻击者必须能够用有效的IP和TCP报文头去替换和重新生成原始IP报文。
    要使攻击成功,位于伪装IP地址上的主机必须不能响应任何发送给它们的SYN-ACK包。攻击者可以用的一个非常简单的方法,就是仅需伪装一个源IP地址,而这个IP地址将不能响应SYN-ACK包,或许因为这个IP地址上根本就没有主机,或许因为对主机的地址或网络属性进行了某些配置。另一种选择是伪装许多源地址,攻击者会假想其中的一些伪装地址上的主机将不会响应SYN-ACK包。要实现这种方法就需要循环使用服务器希望连接的源IP地址列表上的地址,或者对一个子网内主机做相同的修改。 如果一个源地址被重复地伪装,这个地址将很快被检测出来并被过滤掉。在大多数情况下运用许多不同源地址伪装将使防御变得更加困难。在这种情况下最好的防御方法就是尽可能地阻塞源地址相近的欺骗数据包。假设攻击者是在一个“互联”的网络中(例如一个自治系统(Autonomous System)),由其ISP限制攻击者所在网络流量的输入输出过滤将能够制止这种欺骗攻击——如果这种方法能被机构部署到正确位置的话。这种流量输入输出过滤的防御方式将限制一些合法的通信,比如移动IP三角路由运作模式,因此不可能被普遍部署。
    IP安全协议(IPsec)同样也提供了一种抵御欺骗包的优秀方式,但是这协议因为部署限制还不能被使用。由于对于服务器方通常不可能要求链接发起人的ISP去实施地址过滤或者要求其使用IP安全协议,因此抵御这种用多地址伪装的欺骗攻击还需要更加复杂的解决方案。

  3. 分布式攻击
    攻击者运用在网络中主机数量上的优势而发动的分布式SYN洪泛攻击将更加难以被阻止。这些主机群可以用直接攻击,也可以更进一步让每台主机都运用欺骗攻击

SYN泛洪防御技术

  • 缩短SYN timeout时间

  • 设置SYN cookie
    给每一个请求连接的IP地址分配一个cookie,如果短时间内连续受到某个IP的重复SYN文,认定是受到了攻击,以后从这个IP地址来的包会被丢弃。服务器端在收到客户端的SYN 包后,防火墙代替服务器向客户端发送SYN+ACK包,如果客户端在一段时间内没有应答或中间的网络设备发回了ICMP错误消息,防火墙则丢弃此状态信息; 如果客户端的ACK到达,防火墙代替客户端向服务器发送SYN包,并完成后续的握手最终建立客户端到服务器的连接。通过这种技术,保证了每个SYN包源的真实有效性,确保服务器不被虚假请求浪费资源,从而防范了对服务器的SYN 泛洪攻击。SYN cookie不在主机上保存任何状态,只保存所有初始TCP连接状态,用一个队列来存储。它使用编码函数将所有信息加密后用SYN+ACK发送到客户端,并且将最后的三次握手最后部分返回给服务器。 当然它还有一个缺陷就是不能将初始的SYN的所有选项加密成cookie,第二个问题就是TCP协议要求对不应答的数据进行转发,假设服务器在放弃或者丢弃连接之前转发SYN+ACK , 就会发送一个RST给客户端去关闭这个连接.当SYN + ACK到达客户端,但是返回的ACK丢失,这种结果就导致客户端和服务器端状态建立不平等。 通常,这种情况被服务器转发处理,但是在SYN cookie中,主机中不保存任何状态,这种转发的机制是不存在的。
    SYN cookie是通过返回的ACK来完成整个连接的建立,不依赖于流程化的SYN, SYN+ACK传送。这可能造成ACK请求ROOD攻击, 这种攻击依赖使用正确的值来允许建立连接。这也提供一个绕过防火墙的可能,因为防火墙依赖SYN来过滤外部连接,而现在建立连接根本不依靠SYN包了。另一个SYN cookie的困难就是同TCPV6 的兼容上。TCP/IP的运作依靠发送系列化的对等递增的序列数,并且用先前接受的SYN SEQ值来建立连接完成三次握手过程。 然而,一旦TCP连接完成了,TCP/IP的序列号的使用是强制性的,这要求服务器纪录下初始的序列号,不论这个项是否需要。 因此SYN cookie不能应用于高性能要求的服务器。通常的方法是使用状态分配机制,并且只在大量状态被分配的时候才启用SYN cookie。

  • 设置SYN可疑队列
    根据攻击程序伪造IP地址的方法。将SYN Flood攻击大致分成以下几种情况: (1)攻击者使用单一的虚假IP地址进行攻击。在这种情况下。攻击者向被攻击主机发送的所有攻击包的源IP地址都是同一个虚假的IP地址。 (2)攻击者使用一组虚假的IP地址进行攻击。这种情况比上一种攻击情况有了改进,进行攻击时。攻击者先生成一组IP地址,再将这些IP地址依此添加到成的每个攻击包的源TP地址中。 (3)攻击者使用一个网段范围的地址进行攻击。这是攻击者使用较普遍,也是攻击成功率较高的一种攻击情况。进行攻击时,攻击者精心选择一个地址分配比较稀疏的网段,通常会选择一个B类网段。 针对以上几种情况,可采用对接收的数据按一定规则加以分类,将数据分为攻击数据、可疑数据和正常数据三种类型,然后分别排队处理。
    首先,对同一IP地址在短时间内发送大量重复连接请求时,可将其作为攻击数据直接丢弃,其次,对于一组IP地址在短时间内发送大量重复连接请求时,将其放入可疑数据队列,当某个IP地址发出的连接请求数大于某一阈值时.即作为攻击数据进行丢弃处理:若收到某个IP地址发送的应答,则将其转入正常数据队列。最后,对于使用一个网段范围的地址进行攻击的,即服务器在短时间内收到某个网络地址内不同主机发出大量的连接请求,此时仍将其放入可疑数据队列,对于此网段中正常上网的主机当收到服务器重复的SYN+ACK数据包时。就向服务器发送一个RST数据包,从而结束半连接状态;对于此网段中没有开机或上网的主机。即虚假源IP地址。为防止堆栈溢出崩溃,可不按通常的运行方式为其分配相应的数据结构和存储状态信息,只向源IP发送确认信息,将TCP连接保持一种无状态的握手方式巾,直到超时后将其丢弃或者收到源IP的连接确认,再将其转入正常数据队列,并分配相应的数据结构和存储状态信息。当服务器负载较重时,首先丢弃可疑数据队列中的数据,然后冉随机地丢弃正常数据队列中的数据,确保服务器的正常运行。

  • 使用防火墙
    防火墙位于客户端和服务器之间.因此利用防火墙来阻止DoS攻击能有效地保护内部的服务器。针对SYN Flood,防火墙通常有三种防护方式:SYN网关、被动式SYN网关和SYN中继。
    (1)SYN网关: 防火墙收到客户端的SYN包时,直接转发给服务器:防火墙收到服务器的SYN/ACK包后,一方面将SYN/ACK包转发给客户端,另一方面以客户端的名义给服务器回送一个ACK包.完成TCP的三次握手,让服务器端由半连接状态进入连接状态。当客户端真正的ACK包到达时。有数据则转发给服务器,否则丢弃该包。由于服务器能承受连接状态要比半连接状态高得多。所以这种方法能有效地减轻对服务器的攻击。
    (2)被动式SYN网关: 设置防火墙的SYN请求超时参数,让它远小于服务器的超时期限.防火墙负责转发客户端发往服务器的SYN包,服务器发往客户端的SYN/ACK包、以及客尸,端发往服务器的ACK包。这样,如果客户端在防火墙计时器到期时还没发送ACK包,防火墙则往服务器发送RST包,以使服务器从队列中删去该半连接。由于防火墙的超时参数远小于服务器的超时期限,出此这样能有效防止SYN Flood攻击.
    (3)SYN中继: SYN中继防火墙在收到客户端的SYN包后.并不向服务器转发而是记录该状态信息后主动给客户端回送SYN/ACK包,如果收 到客户端的ACK包。表明是正常访问,由防火墙向服务器发送SYN包并完成三次握手。这样由防火墙作为代理来实现客户端和服务器端的连接。可以完全过滤不可用连接发往服务器。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页