93年七、八月份席卷全球的"红色代码" (code red)病毒和随后升级版的"尼姆达"(Nimda)病毒肆虐互联网,小小的蠕虫病毒致使全球数以百万计的服务器和个人电脑被感染,并造成成批的网站被迫关闭,众多的企业网络中断或局域网阻塞,
高效的电子商务和网络办公系统陷入瘫痪……强大的破坏力对全球网络造成的损失远远超过了上百亿美元。毫不夸张的说,红色代码和尼姆达对网络世界的影响,毫不逊色震惊世界的911恐怖事件对美国的袭击所造成的经济影响。那么是什么赋予这两个病毒这么大的威力呢?我想人们在重新认识病毒通过互联网可怕的迅速传播的同时,更应该思考DoS在这场无硝烟的网络大战中的重要思想。
什么是DoS攻击
那么,DoS到底是什么?接触PC机较早的同志会直接想到微软磁盘操作系统 的DOS--Disk Operation System?哦,不不不,我看盖茨可不像是黑客的老大哟!此DoS非彼DOS也,DoS即Denial Of Service,拒绝服务的缩写。DoS是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。要知道任何事物都有一个极限,所以总能找到一个方法使请求的值大于该极限值,因此就会故意导致所提供的服务资源匮乏,表面上好象是服务资源无法满足需求。所以千万不要自认为拥有了足够宽的带宽和足够快的服务器就有了一个不怕DoS攻击的高性能网站,拒绝服务攻击会使所有的资源变得非常渺小。
其实,我们作个形象的比喻来理解DoS。街头的餐馆是为大众提供餐饮服务,如果一群地痞流氓要DoS餐馆的话,手段会很多,比如霸占着餐桌不结账,堵住餐馆的大门不让路,骚扰餐馆的服务员或厨子不能干活,甚至更恶劣……相应的计算机和网络系统则是为Internet 用户提供互联网资源的,如果有黑客要进行DoS攻击的话,可以想象同样有好多手段!今天最常见的DoS攻击有对计算机网络的带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
什么是DDoS
传统上,攻击者所面临的主要问题是网络带宽,由于较小的网络规模和较慢的网络速度的限制,攻击者无法发出过多的请求。虽然类似"the ping of death"的攻击类型只需要较少量的包就可以摧毁一个没有打过补丁的UNIX系统,但大多数的DoS攻击还是需要相当大的带宽的,而以个人为单位的黑客们很难使用高带宽的资源。为了克服这个缺点,DoS攻击者开发了分布式的攻击。攻击者简单利用工具集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDoS攻击。
DDoS(Distributed Denial Of Service)又把DoS又向前发展了一大步,这种分布式拒绝服务攻击是黑客利用在已经侵入并已控制的不同的高带宽主机(可能是数百,甚至成千上万台)上安装大量的DoS服务程序,它们等待来自中央攻击控制中心的命令,中央攻击控制中心在适时启动全体受控主机的DoS服务进程,让它们对一个特定目标发送尽可能多的网络访问请求,形成一股DoS洪流冲击目标系统,猛烈的DoS攻击同一个网站。在寡不敌众的力量抗衡下,被攻击的目标网站会很快失去反应而不能及时处理正常的访问甚至系统瘫痪崩溃。可见DDoS与DoS的最大区别是人多力量大。DoS是一台机器攻击目标,DDoS是被中央攻击中心控制的很多台机器利用他们的高带宽攻击目标,可更容易地将目标网站攻下。另外,DDoS攻击方式较为自动化,攻击者可以把他的程序安装到网络中的多台机器上,所采用的这种攻击方式很难被攻击对象察觉,直到攻击者发下统一的攻击命令,这些机器才同时发起进攻。可以说DDoS攻击是由黑客集中控制发动的一组DoS攻击的集合,现在这种方式被认为是最有效的攻击形式,并且非常难以抵挡。
无论是DoS攻击还是DDoS攻击,简单的看,都只是一种破坏网络服务的黑客方式,虽然具体的实现方式千变万化,但都有一个共同点,就是其根本目的是使受害主机或网络无法及时接收并处理外界请求,或无法及时回应外界请求。其具体表现方式有以下几种:
1.制造大流量无用数据,造成通往被攻击主机的网络拥塞,使被攻击主机无法正常和外界通信。
2.利用被攻击主机提供服务或传输协议上处理重复连接的缺陷,反复高频的发出攻击性的重复服务请求,使被攻击主机无法及时处理其它正常的请求。
3.利用被攻击主机所提供服务程序或传输协议的本身实现缺陷,反复发送畸形的攻击数据引发系统错误的分配大量系统资源,使主机处于挂起状态甚至死机。
常见的DoS攻击
拒绝服务攻击是一种对网络危害巨大的恶意攻击。今天,DoS具有代表性的攻击手段包括Ping of Death、TearDrop、UDP flood 、SYN flood、Land Attack、IP Spoofing DoS等。我们看看它们又是怎么实现的。
死亡之 ping ( ping of death ) :ICMP (Internet Control Message Protocol,Internet控制信息协议)在Internet上用于错误处理和传递控制信息。它的功能之一是与主机联系,通过发送一个"回音请求"(echo request)信息包看看主机是否"活着"。最普通的ping程序就是这个功能。而在TCP/IP的RFC文档中对包的最大尺寸都有严格限制规定,许多操作系统的TCP/IP协议栈都规定ICMP 包大小为64KB,且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。"Ping of Death" 就是故意产生畸形的测试Ping(Packet Internet Groper)包,声称自己的尺寸超过 ICMP 上限,也就是加载的尺寸超过 64KB上限,使未采取保护措施的网络系统出现内存分配错误,导致 TCP/IP 协议栈崩溃,最终接收方荡机。
泪滴( teardrop ) :泪滴攻击利用在 TCP/IP 协议栈实现中信任IP 碎片中的包的标题头所包含的信息来实现自己的攻击。IP 分段含有指示该分段所包含的是原包的哪一段的信息,某些 TCP/IP协议栈(例如NT 在service pack 4 以前)在收到含有重叠偏移的伪造分段时将崩溃。 UDP 洪水 (UDP flood) :如今在Internet上UDP(用户数据包协议)的应用比较广泛,很多提供WWW和Mail等服务设备通常是使用Unix的服务器,它们默认打开一些被黑客恶意利用的UDP服务。如echo服务会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一个数据包时随机反馈一些字符。UDP flood假冒攻击就是利用这两个简单的 TCP/IP 服务的漏洞进行恶意攻击,通过伪造与某一主机的 Chargen 服务之间的一次的 UDP 连接,回复地址指向开着Echo 服务的一台主机,通过将Chargen 和 Echo服务互指,来回传送毫无用处且占满带宽的垃圾数据,在两台主机之间生成足够多的无用数据流,这一拒绝服务攻击飞快地导致网络可用带宽耗尽。 SYN 洪水 ( SYN flood ) :我们知道当用户进行一次标准的TCP(Transmission Control Protocol)连接时,会有一个3次握手过程。首先是请求服务方发送一个SYN(Synchronize Sequence Number)消息,服务方收到SYN后,会向请求方回送一个SYN-ACK表示确认,当请求方收到SYN-ACK后,再次向服务方发送一个ACK消息,这样一次TCP连接建立成功。"SYN Flooding"则专门针对TCP协议栈在两台主机间初始化连接握手的过程进行DoS攻击,其在实现过程中只进行前2个步骤:当服务方收到请求方的SYN-ACK确认消息后,请求方由于采用源地址欺骗等手段使得服务方收不到ACK回应,于是服务方会在一定时间处于等待接收请求方ACK消息的状态。而对于某台服务器来说,可用的TCP连接是有限的,因为他们只有有限的内存缓冲区用于创建连接,如果这一缓冲区充满了虚假连接的初始信息,该服务器就会对接下来的连接停止响应,直至缓冲区里的连接企图超时。如果恶意攻击方快速连续地发送此类连接请求,该服务器可用的TCP连接队列将很快被阻塞,系统可用资源急剧减少,网络可用带宽迅速缩小,长此下去,除了少数幸运用户的请求可以插在大量虚假请求间得到应答外,服务器将无法向用户提供正常的合法服务。
Land (Land Attack)攻击:在 Land 攻击中,黑客利用一个特别打造的SYN 包--它的原地址和目标地址都被设置成某一个服务器地址进行攻击。此举将导致接受服务器向它自己的地址发送 SYN-ACK 消息,结果这个地址又发回 ACK 消息并创建一个空连接,每一个这样的连接都将保留直到超时,在 Land 攻击下,许多 UNIX将崩溃,NT 变得极其缓慢(大约持续五分钟)。
IP欺骗DOS攻击:这种攻击利用TCP协议栈的RST位来实现,使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。假设现在有一个合法用户(100.100.100.100)已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为100.100.100.100,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从100.100.100.100发送的连接有错误,就会清空缓冲区中已建立好的连接。这时,合法用户100.100.100.100再发送合法数据,服务器就已经没有这样的连接了,该用户就被拒绝服务而只能重新开始建立新的连接。
常见的DDoS攻击
smurf、Fraggle 攻击、Trinoo、Tribe Flood Network(TFN)、TFN2k以及Stacheldraht是比较常见的DDoS攻击程序,我们再看看它们的原理,其攻击思路基本相近。 Smurf 攻击:Smurf是一种简单但有效的 DDoS 攻击技术,Smurf还是利用ping程序进行源IP假冒的直接广播进行攻击。在Internet上广播信息可以通过一定的手段(通过广播地址或其他机制)发送到整个网络中的机器。当某台机器使用广播地址发送一个ICMP echo请求包时(例如Ping),一些系统会回应一个ICMP echo回应包,这样发送一个包会收到许多的响应包。Smurf攻击就是使用这个原理来进行的,同时它还需要一个假冒的源地址。也就是说Smurf在网络中发送的源地址为要攻击的主机地址,目的地址为广播地址的ICMP echo请求包,使许多的系统同时响应并发送大量的信息给被攻击主机(因为他的地址被攻击者假冒了)。Smurf是用一个伪造的源地址连续ping一个或多个计算机网络,这就导致所有计算机响应的那个主机地址并不是实际发送这个信息包的攻击计算机。这个伪造的源地址,实际上就是攻击的目标,它将被极大数量的响应信息量所淹没。对这个伪造信息包做出响应的计算机网络就成为攻击的不知情的同谋。一个简单的 smurf 攻击最终导致网络阻塞和第三方崩溃,这种攻击方式要比 ping of death 洪水的流量高出一两个数量级。这种使用网络发送一个包而引出大量回应的方式也被叫做Smurf"放大"。
Fraggle 攻击:Fraggle 攻击对 Smurf 攻击作了简单的修改,使用的是 UDP 应答消息而非 ICMP。
"trinoo"攻击:trinoo 是复杂的 DDoS 攻击程序,是基于UDP flood的攻击软件。它使用"master"程序对实际实施攻击的任何数量的"代理"程序实现自动控制。当然在攻击之前,侵入者为了安装软件,已经控制了装有master程序的计算机和所有装有代理程序的计算机。攻击者连接到安装了master程序的计算机,启动master程序,然后根据一个IP地址的列表,由master程序负责启动所有的代理程序。接着,代理程序用UDP 信息包冲击网络,向被攻击目标主机的随机端口发出全零的4字节UDP包,在处理这些超出其处理能力垃圾数据包的过程中,被攻击主机的网络性能不断下降,直到不能提供正常服务,乃至崩溃。它对IP地址不做假,因此此攻击方法用得不多。
"Tribal Flood Network"和 "TFN2K" 攻击:Tribe Flood Network与trinoo一样,使用一个master程序与位于多个网络上的攻击代理进行通讯,利用ICMP给代理服务器下命令,其来源可以做假。TFN可以并行发动数不胜数的DoS攻击,类型多种多样,而且还可建立带有伪装源IP地址的信息包。 可以由TFN发动的攻击包括:SYN flood、UDP flood、ICMP回音请求flood及Smurf(利用多台服务器发出海量数据包,实施DoS攻击)等攻击。TFN的升级版TFN2k进一步对命令数据包加密,更难查询命令内容,命令来源可以做假,还有一个后门控制代理服务器。
"stacheldraht"攻击:Stacheldraht也是基于TFN和trinoo一样的客户机/服务器模式,其中Master程序与潜在的成千个代理程序进行通讯。在发动攻击时,侵入者与master程序进行连接。Stacheldraht增加了新的功能:攻击者与master程序之间的通讯是加密的,对命令来源做假,而且可以防范一些路由器用RFC2267过滤,若检查出有过滤现象,它将只做假IP地址最后8位,从而让用户无法了解到底是哪几个网段的哪台机器被攻击;同时使用rcp (remote copy,远程复制)技术对代理程序进行自动更新。Stacheldraht 同TFN一样,可以并行发动数不胜数的DoS攻击,类型多种多样,而且还可建立带有伪装源IP地址的信息包。Stacheldraht所发动的攻击包括UDP 冲击、TCP SYN 冲击、ICMP 回音应答冲击。
如何防止DoS/DdoS攻击
DoS攻击几乎是从互联网络的诞生以来,就伴随着互联网络的发展而一直存在也不断发展和升级。值得一提的是,要找DoS的工具一点不难,黑客群居的网络社区都有共享黑客软件的传统,并会在一起交流攻击的心得经验,你可以很轻松的从Internet上获得这些工具,像以上提到的这些DoS攻击软件都是可以从网上随意找到的公开软件。所以任何一个上网者都可能构成网络安全的潜在威胁。DoS攻击给飞速发展的互联网络安全带来重大的威胁。然而从某种程度上可以说,DoS攻击永远不会消失而且从技术上目前没有根本的解决办法。
面对凶多吉少的DoS险滩,我们该如何对付随时出现的黑客攻击呢?让我们首先对造成DoS攻击威胁的技术问题做一下总结。DoS攻击可以说是如下原因造成的:
1.软件弱点是包含在操作系统或应用程序中与安全相关的系统缺陷,这些缺陷大多是由于错误的程序编制,粗心的源代码审核,无心的副效应或一些不适当的绑定所造成的。由于使用的软件几乎完全依赖于开发商,所以对于由软件引起的漏洞只能依靠打补丁,安装hot fixes和Service packs来弥补。当某个应用程序被发现有漏洞存在,开发商会立即发布一个更新的版本来修正这个漏洞。由于开发协议固有的缺陷导致的DoS攻击,可以通过简单的补丁来弥补系统缺陷。
2.错误配置也会成为系统的安全隐患。这些错误配置通常发生在硬件装置,系统或者应用程序中,大多是由于一些没经验的,无责任员工或者错误的理论所导致的。如果对网络中的路由器,防火墙,交换机以及其他网络连接设备都进行正确的配置会减小这些错误发生的可能性。如果发现了这种漏洞应当请教专业的技术人员来修理这些问题。
3.重复请求导致过载的拒绝服务攻击。当对资源的重复请求大大超过资源的支付能力时就会造成拒绝服务攻击(例如,对已经满载的Web服务器进行过多的请求使其过载)。
要避免系统免受DoS攻击,从前两点来看,网络管理员要积极谨慎地维护系统,确保无安全隐患和漏洞;而针对第三点的恶意攻击方式则需要安装防火墙等安全设备过滤DoS攻击,同时强烈建议网络管理员应当定期查看安全设备的日志,及时发现对系统的安全威胁行为。