2000年2月7日开始,美国Yahoo、eBay等几个著名的大型商业网站连续遭到黑客的袭击,造成网络长达数小时的瘫痪。据统计,袭击所造成的经济损失可能在12亿美元以上。这次袭击引起了各国政府以及全球信息产业界的广泛关注。根据有关报道,这次攻击手法是以大量垃圾包淹没目标网站,使得真正的用户无法使用目标网站系统,至少有数百台电脑同时发起了攻击行动。这是一种“拒绝服务攻击”(Denial of Service,DoS)的典型攻击方式。本文将简要介绍这种攻击方式的原理、工具和解决方法。
拒绝服务攻击和其他大部分攻击不同的是因为他们不是以获得网络或网络上信息的访问权为目的。攻击主要是使服务不能为正常的使用提供服务。通常可以用耗尽网络、操作系统或应用程序有限的资源来实现。
当涉及到特殊的网络服务应用,象HTTP或FTP服务,攻击者能够获得并保持所有服务器支持的有用连接,有效的把服务器或服务的真正使用者关在外面。拒绝访问攻击也能用普通的Internet协议实现,象TCP和ICMP。大部分拒绝服务攻击是使用被攻击系统整体结构上的弱点而不是使用软件的小缺陷或安全漏洞。然而,有些攻击通过采用不希望的、无用的网络报文掀起网络风暴和提供错误的网络资源状态信息危及网络的性能。在我们正式步入对这些问题的技术性讨论之前,让我们先从现实的生活中的实际角度来看一下这些困绕我们的问题。
一.当前的技术概况
在我们进入更为详细的解决方案之前,让我们首先对问题做一下更深入的了解。与安全相关的这些小问题如果详细来讲的话都能成为一个大的章节,但限于篇幅的原因,我们只能先作一下大体的了解。
? 软件弱点是包含在操作系统或应用程序中与安全相关的系统缺陷,这些缺陷大多是由于错误的程序编制,粗心的源代码审核,无心的副效应或一些不适当的绑定所造成的。根据错误信息所带来的对系统无限制或者未经许可的访问程度,这些漏洞可以被分为不同的等级。
? 典型的拒绝服务攻击有如下两种形式:资源耗尽和资源过载。当一个对资源的合理请求大大超过资源的支付能力时就会造成拒绝服务攻击(例如,对已经满载的Web服务器进行过多的请求。)拒绝服务攻击还有可能是由于软件的弱点或者对程序的错误配置造成的。区分恶意的拒绝服务攻击和非恶意的服务超载依赖于请求发起者对资源的请求是否过份,从而使得其他的用户无法享用该服务资源。
? 错误配置也会成为系统的安全隐患。这些错误配置通常发生在硬件装置,系统或者应用程序中。如果对网络中的路由器,防火墙,交换机以及其他网络连接设备都进行正确的配置会减小这些错误发生的可能性。如果发现了这种漏洞应当请教专业的技术人员来修理这些问题。
二.深入D.O.S
DoS的攻击方式有很多种。最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,致使服务超载,无法响应其他的请求。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者向内的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多么快,内存容量多么大,互连网的速度多么快都无法避免这种攻击带来的后果。因为任何事都有一个极限,所以,总能找到一个方法使请求的值大于该极限值,因此就会使所提供的服务资源匮乏,象是无法满足需求。千万不要自认为自己拥有了足够宽的带宽就会有一个高效率的网站,拒绝服务攻击会使所有的资源变得非常渺小。
传统上,攻击者所面临的主要问题是网络带宽,由较小的网络规模和较慢的网络速度,无法使攻击者发出过多的请求,然而,类似"the ping of death"的攻击类型紧需要很少量的包就可以摧毁一个没有打过补丁的UNIX系统。当然,多数的DoS攻击还是需要相当大的带宽的,但是高带宽是大公司所拥有的,而以个人为主的黑客很难享用。为了克服这个缺点,恶意的攻击者开发了分布式的攻击。这样,攻击者就可以利用工具集合许多的网络带宽来对同一个目标发送大量的请求。以下的两种情况最容易导致拒绝服务攻击:
? 由于程序员对程序错误的编制,导致系统不停的建立进程,最终耗尽资源,只能重新启动机器。不同的系统平台都会采取某些方法可以防止一些特殊的用户来占用过多的系统资源,我们也建议尽量采用资源管理的方式来减轻这种安全威胁。
? 还有一种情况是由磁盘存储空间引起的。假如一个用户有权利存储大量的文件的话,他就有可能只为系统留下很小的空间用来存储日志文件等系统信息。这是一种不良的操作习惯,会给系统带来隐患。这种情况下应该对系统配额作出考虑。
从安全的角度来看,本地的拒绝服务攻击可以比较容易的追踪并消除。而我们这篇文章主要是针对于网络环境下的DoS攻击。下面我们大体讨论一下较为常见的基于网络的拒绝服务攻击:
三.D.O.S三种基本攻击形式
(1)服务过载
当大量的服务请求发向一台计算机中的服务守护进程时,就会发生服务过载。这些请求可以通过许多方式发出,许多是故意的。在分时机制中,这些潮水般的请求,使得计算机十分忙碌地处理这些不断到来的请求,以至于无法处理常规的任务。同时,许多新到来的请求被丢弃,因为没有空间来存放这些请求。如果攻击的是一个基于TCP协议的服务,那么这些请求的包还会被重发,结果更加重了网络的负担。这种攻击可能是一个攻击者为了掩盖自己的痕迹,阻止对攻击者的记录和登陆请求的系统计帐审计。这种攻击会阻止系统提供的一种特定服务。(2)消息流
消息流发生于用户向一台网络上的目标主机发送大量的数据包,来延缓目标主机的处理速度,阻止它处理正常的任务这种情况。这些请求可能是请求文件服务,要求登陆或者仅仅是简单的要求响应包(例如ping)。无论是什么形式,这些潮水般的服务请求,加重了目标主机的处理器负载,使目标主机消耗了大量的资源来响应这些请求。极端的情况,这种攻击可以引起目标主机因为没有内存来做缓冲,以存放到来的请求,或者因为其他错误而死机。这种拒绝服务的攻击主要针对网络服务器。一个简单的攻击类型是“广播风暴”。攻击者可以生成这样一个消息,它将指示每一个收到包的主机回答或者重发这个消息。结果网络饱和,并且不能使用。广播风暴很少是由故意的攻击所致,它通常是由于硬件或者软件的缘故,例如,正在开发之中,存在错误或者没有正确地安装。
(三).信号接地
物理方法也可以关闭一个网络。将网络的电缆接地,引入一些其他信号或者将以太网上的端接器拿走,都可以有效地阻止客户发送或者接收消息。这种攻击方式不仅可以阻止那些依赖服务器提供程序和资源的各种机器,也可以阻止向主服务器汇报戳物的登录请求或者危险的行动,来掩盖一次非法访问的企图。在这种情况下,被攻击的主机要向主服务器报告发现的错误信息。保护网络的电缆不被物理地接入其他设备。这也可以减少被监听的威胁。这种保护措施减少了对电缆上的各个节点的监听和欺骗,也可以有效地防备信号接地这类拒绝服务的攻击。
四.拒绝服务具体攻击方法
(一).PING O’DEATH
ping o' death是利用ICMP协议的一种碎片攻击。攻击者发送一个长度超过65535的Echo Request数据包,目标主机在重组分片的时候会造成事先分配的65535字节缓冲区溢出,系统通常会崩溃或挂起。ping不就是发送ICMP Echo Request数据包的吗?让我们尝试攻击一下吧!不管IP和ICMP首部长度了,数据长度反正是多多益善,就65535吧,发送一个包:
# ping -c 1 -s 65535 192.168.0.1
Error: packet size 65535 is too large. Maximum is 65507
不走运,看来Linux自带的ping不允许我们做坏事。65507是它计算好的:65535-20-8=65507。Win2K下的ping更抠门,数据只允许65500大小。所以你必须找另外的程序来发包,但是目前新版本的操作系统已经搞定这个缺陷了,所以你还是继续往下阅读本文吧。
顺便提一下,记得99年有“爱国主义黑客”(“红客”的前辈)发动全国网民在某一时刻开始ping某美国站点,试图ping死远程服务器。这其实是一种ping flood攻击,用大量的EchoRequest包减慢主机的响应速度和阻塞目标网络,原理和ping o' death是不一样的,这点要分清楚。
(二).分布式拒绝服务攻击实例
(1)分布式拒绝服务攻击概述
分布式拒绝服务攻击的理论和技术可能性很早就为网络界所认识,而最近分布式拒绝服务开始被攻击者采用并有泛滥趋势。在分布式拒绝服务攻击中,攻击者利用成百上千个被“控制”节点向受害节点发动大规模的协同攻击,如同时泛洪(flood)受害节点。由于攻击来自很多节点,使得受害程度更加严重,涉及范围更广,也更难发现攻击者。
(2).分布式拒绝服务攻击原理
在这类攻击工具中比较有名的有Trin00、TFN(Tribe Flood Network)、TFN2k以及stacheldraht(德文铁丝网的意思)等。1999年6月,Trin00最先被发现用来进行网络攻击。1999年8月,焦点转向TFN。TFN据称是Mixter在分析Trin00时编写的,TFN后来升级到TFN2k。1999年9月底,类似TFN的称为stacheldraht的攻击出现在欧洲和美国网络上。
分布攻击系统基于Server/Client模型体系。典型的分布攻击系统中,一般由一个攻击者控制一个或几个Master , 再由其控制大量分布的Daemon,Daemon 直接向受害节点泛洪包或实施其他攻击,如附图所示。
下面以Trin00为例说明分布式攻击的原理。Trin00可以在很多节点对受害节点发动协同的UDP洪流攻击。在Daemon编译时,Master的IP地址编入程序,Daemon一旦安装运行时,将向Master的31335端口发送包含数据*HELLO*的UDP包注册自己。攻击者通过telnet或netcat等程序连接Master的27665端口,指令Master向某一个或多个IP地址节点发动攻击;Master将以UDP包的形式向Daemon的27444端口发送命令,由Daemon实施直接的攻击,步骤如下。
1.攻击者→Master,27665/TCP