拒绝服务攻击原理及解决方法(1)
Internet给全世界的人们带来了无限的生机,真正实现了无国界的全球村。但是还有很多困绕我们的因素,象IP地址的短缺,大量带宽的损耗,以及政府规章的限制和编程技术的不足。现在,由于多年来网络系统累积下了无数的漏洞,我们将面临着更大的威胁,网络中潜伏的好事者将会以此作为缺口来对系统进行攻击,我们也不得不为以前的疏忽付出更大的努力。虽然大多的网络系统产品都标榜着安全的旗号,但就我们现在的网络协议和残缺的技术来看,危险无处不在。
拒绝服务攻击是一种遍布全球的系统漏洞,黑客们正醉心于对它的研究,而无数的网络用户将成为这种攻击的受害者。Tribe Flood Network, tfn2k, smurf, targa…还有许多的程序都在被不断的开发出来。这些程序想瘟疫一样在网络中散布开来,使得我们的村落更为薄弱,我们不得不找出一套简单易用的安全解决方案来应付黑暗中的攻击。
在这篇文章中我们将会提供:
对当今网络中的拒绝服务攻击的讨论。
安全环境中的一些非技术性因素以及我们必须克服的一些障碍问题。
如何认清产品推销商所提供的一些谎言。
在我们正式步入对这些问题的技术性讨论之前,让我们先从现实的生活中的实际角度来看一下这些困绕我们的问题。
1、当前的技术概况
在我们进入更为详细的解决方案之前,让我们首先对问题做一下更深入的了解。
与安全相关的这些小问题如果详细来讲的话都能成为一个大的章节,但限于篇幅的原因,我们只能先作一下大体的了解。
软件弱点是包含在操作系统或应用程序中与安全相关的系统缺陷,这些缺陷大多是由于错误的程序编制,粗心的源代码审核,无心的副效应或一些不适当的绑定所造成的。根据错误信息所带来的对系统无限制或者未经许可的访问程度,这些漏洞可以被分为不同的等级。
典型的拒绝服务攻击有如下两种形式:资源耗尽和资源过载。当一个对资源的合理请求大大超过资源的支付能力时就会造成拒绝服务攻击(例如,对已经满载的Web服务器进行过多的请求。)拒绝服务攻击还有可能是由于软件的弱点或者对程序的错误配置造成的。区分恶意的拒绝服务攻击和非恶意的服务超载依赖于请求发起者对资源的请求是否过份,从而使得其他的用户无法享用该服务资源。
错误配置也会成为系统的安全隐患。这些错误配置通常发生在硬件装置,系统或者应用程序中。如果对网络中的路由器,防火墙,交换机以及其他网络连接设备都进行正确的配置会减小这些错误发生的可能性。如果发现了这种漏洞应当请教专业的技术人员来修理这些问题。
如果换个角度,也可以说是如下原因造成的:
错误配置。错误配置大多是由于一些没经验的,无责任员工或者错误的理论所导致的。开发商一般会通过对您进行简单的询问来提取一些主要的配置信息,然后在由经过专业培训并相当内行的专业人士来解决问题。
软件弱点。由于使用的软件几乎完全依赖于开发商,所以对于由软件引起的漏洞只能依靠打补丁,安装hot fixes和Service packs来弥补。当某个应用程序被发现有漏洞存在,开发商会立即发布一个更新的版本来修正这个漏洞。
拒绝服务攻击。拒绝服务攻击大多是由于错误配置或者软件弱点导致的。某些DoS攻击是由于开发协议固有的缺陷导致的,某些DoS攻击可以通过简单的补丁来解决,还有一些导致攻击的系统缺陷很难被弥补。最后,还有一些非恶意的拒绝服务攻击的情况,这些情况一般是由于带宽或者资源过载产生瓶颈导致的,对于这种问题没有一个固定的解决方案。
2、深入DoS
DoS的攻击方式有很多种。最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,致使服务超载,无法响应其他的请求。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者向内的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多么快,内存容量多么大,互连网的速度多么快都无法避免这种攻击带来的后果。因为任何事都有一个极限,所以,总能找到一个方法使请求的值大于该极限值,因此就会使所提供的服务资源匮乏,象是无法满足需求。千万不要自认为自己拥有了足够宽的带宽就会有一个高效率的网站,拒绝服务攻击会使所有的资源变得非常渺小。
传统上,攻击者所面临的主要问题是网络带宽,由较小的网络规模和较慢的网络速度,无法使攻击者发出过多的请求,然而,类似"the ping of death"的攻击类型紧需要很少量的包就可以摧毁一个没有打过补丁的UNIX系统。当然,多数的DoS攻击还是需要相当大的带宽的,但是高带宽是大公司所拥有的,而以个人为主的黑客很难享用。为了克服这个缺点,恶意的攻击者开发了分布式的攻击。这样,攻击者就可以利用工具集合许多的网络带宽来对同一个目标发送大量的请求。
以下的两种情况最容易导致拒绝服务攻击:
由于程序员对程序错误的编制,导致系统不停的建立进程,最终耗尽资源,只能重新启动机器。不同的系统平台都会采取某些方法可以防止一些特殊的用户来占用过多的系统资源,我们也建议尽量采用资源管理的方式来减轻这种安全威胁。
还有一种情况是由磁盘存储空间引起的。假如一个用户有权利存储大量的文件的话,他就有可能只为系统留下很小的空间用来存储日志文件等系统信息。这是一种不良的操作习惯,会给系统带来隐患。这种情况下应该对系统配额作出考虑。
从安全的角度来看,本地的拒绝服务攻击可以比较容易的追踪并消除。而我们这篇文章主要是针对于网络环境下的DoS攻击。下面我们大体讨论一下较为常见的基于网络的拒绝服务攻击:
Smurf (directed broadcast)。广播信息可以通过一定的手段(通过广播地址或其他机制)发送到整个网络中的机器。当某台机器使用广播地址发送一个ICMP echo请求包时(例如PING),一些系统会回应一个ICMP echo回应包,也就是说,发送一个包会收到许多的响应包。Smurf攻击就是使用这个原理来进行的,当然,它还需要一个假冒的源地址。也就是说在网络中发送源地址为要攻击主机的地址,目的地址为广播地址的包,会使许多的系统响应发送大量的信息给被攻击主机(因为他的地址被攻击者假冒了)。使用网络发送一个包而引出大量回应的方式也被叫做"放大器",这些smurf放大器可以在www.netscan.org网站上获得,一些无能的且不负责任的网站仍有很多的这种漏洞。
SYN flooding 一台机器在网络中通讯时首先需要建立TCP握手,标准的TCP握手需要三次包交换来建立。一台服务器一旦接收到客户机的SYN包后必须回应一个SYN/ACK包,然后等待该客户机回应给它一个ACK包来确认,才真正建立连接。然而,如果只发送初始化的SYN包,而不发送确认服务器的ACK包会导致服务器一直等待ACK包。由于服务器在有限的时间内只能响应有限数量的连接,这就会导致服务器一直等待回应而无法响应其他机器进行的连接请求。
Slashdot effect 这种攻击手法使web服务器或其他类型的服务器由于大量的网络传输而过载,一般这些网络流量是针对某一个页面或一个链接而产生的。当然这种现象也会在访问量较大的网站上正常发生,但我们一定要把这些正常现象和拒绝服务攻击区分开来。如果您的服务器突然变得拥挤不堪,甚至无法响应再多的请求时,您应当仔细检查一下这个资源匮乏的现象,确认在10000次点击里全都是合法用户进行的,还是由5000个合法用户和一个点击了5000次的攻击者进行的。
拒绝服务一般都是由过载导致的,而过载一般是因为请求到达了极限。