陶涛
摘要:SYN洪泛攻击是出现在这几年的一种具有很强攻击力而又缺乏有效防御手段的Internet攻击手段,是目前网络安全界研究的热点。TCP SYN 洪流攻击是最常见的DoS攻击手段之一。文中着重对TCP SYN 洪流攻击及其防范措施进行了深入研究,提出了一种新的综合攻击检测技术,较好地解决了对此类攻击的防范问题。
关键词:SYN洪泛攻击;DOS攻击;TCP协议;三次握手协议;防范策略
中图分类号TP309文献标识码:A文章编号:1009-3044(2012)30-7208-02
SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。
1 SYN洪泛攻击原理及其防范策略
1.1 SYN洪泛攻击所存在的基础环境
SYN洪泛攻击首次出现在1996年。当时主要是应用于攻击网络服务提供商(ISP)的邮件和Telnet服务,并造成了停机。给服务器操作造成严重的影响。
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
TCP 传输控制块是一种包含一个连接所有信息的传输协议数据结构状态的TCP连接项目,和已建立完整连接但仍未由应用程序通过accept()调用提取的项目)。一个单一的传输控制块所占内存大小取决于连接中所用的TCP选项和其他一些功能的实现。通常一个传输控制块至少280字节,在某些操作系统中已经超过了1300字节。TCP的SYN-RECEIVED状态用于指出这个连接仅仅是半开连接,请求是否合法仍被质疑。传输控制块分配空间的大小取决于接收的SYN包——在连接被完全建立或者说连接发起人的返回可达性被证实之前。这就导致了一个明显潜在的DoS攻击,到达的SYN包将被分配过多的传输控制块而导致主机的内核内存被耗尽。为了避免这种内存耗尽,操作系统通常给监听接口关联了一个"backlog"队列参数,它同时维护连接的传输控制块上限数量和SYN-RECEIVED状态。尽管这种方案使主机的可用内存免遭攻击,但是backlog队列本身就带来了一个(小的)受攻击源。当backlog中没有空间时,就不可能再响应新的连接请求,除非传输控制块能被回收或者从SYN-RECIEVE状态中移除。
试图发送足够多的SYN包而耗尽backlog是TCP SYN洪泛的目的。攻击者在SYN包中加入源IP地址,这样就不会导致主机将已分配的传输控制块从SYN-RECEVIED状态队列中移除(因为主机将响应SYN-ACK)。因为TCP是可靠的,目的主机在断开半开连接并在SYN-RECIEVED队列中移除传输控制块之前将等待相当长的时间。在此期间,服务器将不能响应其他应用程序合法的新TCP连接请求。
1.2 SYN攻击方式及应对方式详解
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
1.2.1 直接攻击
如果攻击者用他们自己的没有经过伪装的IP地址快速地发送SYN数据包,这就是所谓的直接攻击。这种攻击非常容易实现,因为它并不涉及攻击者操作系统用户层以下的欺骗或修改数据包。例如,攻击者简单地发送很多的TCP连接请求来实现这种攻击。然而,这种攻击要想奏效攻击者还必须阻止他的系统响应SYN-ACK包,因为任何ACK、RST或ICMP(Internet Control Message Protocol)包都将让服务器跳过SYN-RECEIVED状态(进入下一个状态)而移除传输控制块(因为连接已经建立成功或被回收了)。攻击者可以通过设置防火墙规则来实现,让防火墙阻止一切要到达服务器的数据包(SYN除外),或者让防火墙阻止一切进来的包来使SYN-ACK包在到达本地TCP处理程序之前就被丢弃了。
一旦被检测到,这种攻击非常容易抵御,用一个简单的防火墙规则阻止带有攻击者IP地址的数据包就可以了。这种方法在如今的防火墙软件中通常都是自动执行的。
1.2.2 欺骗式攻击
SYN洪泛攻击的另一种方式是IP地址欺骗。它比直接攻击方式更复杂一点,攻击者还必须能够用有效的IP和TCP报文头去替换和重新生成原始IP报文。如今,有很多代码库能够帮助攻击者替换和重新生成原始IP报文。
对于欺骗式攻击,首先需要考虑的就是选择地址。要使攻击成功,位于伪装IP地址上的主机必须不能响应任何发送给它们的SYN-ACK包。攻击者可以用的一个非常简单的方法,就是仅需伪装一个源IP地址,而这个IP地址将不能响应SYN-ACK包,或许因为这个IP地址上根本就没有主机,或许因为对主机的地址或网络属性进行了某些配置。另一种选择是伪装许多源地址,攻击者会假想其中的一些伪装地址上的主机将不会响应SYN-ACK包。要实现这种方法就需要循环使用服务器希望连接的源IP地址列表上的地址,或者对一个子网内主机做相同的修改。
如果一个源地址被重复地伪装,这个地址将很快被检测出来并被过滤掉。在大多数情况下运用许多不同源地址伪装将使防御变得更加困难。在这种情况下最好的防御方法就是尽可能地阻塞源地址相近的欺骗数据包。
假设攻击者是在一个“互联”的网络中(例如一个自治系统(Autonomous System)),由其ISP限制攻击者所在网络流量的输入输出过滤将能够制止这种欺骗攻击——如果这种方法能被机构部署到正确位置的话。这种流量输入输出过滤的防御方式将限制一些合法的通信,比如移动IP三角路由运作模式,因此不可能被普遍部署。IP安全协议(IPsec)同样也提供了一种抵御欺骗包的优秀方式,但是这协议因为部署限制还不能被使用。由于对于服务器方通常不可能要求链接发起人的ISP去实施地址过滤或者要求其使用IP安全协议,因此抵御这种用多地址伪装的欺骗攻击还需要更加复杂的解决方案,将在后文讨论到。
1.2.3 分布式攻击
对于单个运用欺骗式攻击的攻击者真正的限制因素是如果这些伪装数据包能够以某种方式被回溯到其真正的地址,攻击者将被简单地击败。尽管回溯过程需要一些时间和ISP之间的配合,但它并不是不可能的。但是攻击者运用在网络中主机数量上的优势而发动的分布式SYN洪泛攻击将更加难以被阻止。如图3所示,这些主机群可以用直接攻击,也可以更进一步让每台主机都运用欺骗攻击。
如今,分布式攻击才是真正可怕的,因为攻击者可以拥有数以千计的主机供他来进行拒绝服务(DoS)攻击。由于这些大量的主机能够不断地增加或减少,而且能够改变他们的IP地址和其连接,因此要阻止这类攻击目前还是一个挑战。
1.2.4 攻击的一些参数
SYN洪泛攻击能够比一般的仅仅是向目标网络发送大量数据包的蛮力DoS攻击用更少的数据包进行攻击。但是这需要对服务器的操作系统有一定了解,比如它分配了多少的backlog队列空间,在超时并丢弃传输控制块前它会将传输控制块在SYN-RECIEVED状态里保持多久。例如,攻击者可以发送刚好是backlog队列大小的一定数量的SYN包,并且其周期刚好是传输控制块被回收的时间,这样就可以让服务器永远不可用。
最近的一些系统基本都是默认backlog大小为1024字节,但是网络上的很多服务器都将其配置为128字节或更少。通常重传SYN-ACK的时间阈值时5秒,是通常成功接收时间的两倍,默认超时时间是3秒,在第一个SYN-ACK发出到其传输控制块被回收的时间是189秒。
2 总结
现在看来,一些SYN缓存技术的变体应该作为固化功能将其植入到服务器操作系统中去,而且这些变体可以适当的情况下结合其他解决方案(基于地址的过滤,ACK伪装防火墙,IP安全协议等等)一起部署。目前服务器的发展也正在致力于研究防御性更强的TCP协议,也希望这些补充协议能够早日部署。
参考文献:
[1] 李凯.基于统计特性的SYN Flood攻击防御方法研究[D].西南交通大学,2009.
[2] 罗新密.DDoS攻击防范策略研究[J].湖南商学院学报,2003(3).
[3] 李占新.分布式拒绝服务攻击原理和防治策略[J].电脑编程技巧与维护,2011(16).
[4] 濮青.DoS(拒绝服务)攻击技术及其防范[J].中国数据通信, 2002(8).
[5] 蒋凌云,王汝传. 基于流量自相似模型的SYN-Flood DDoS攻击防范[J].南京邮电大学学报:自然科学版,2007(2) .