3.1.3 DoS攻击和DDoS攻击
1.DoS攻击
从网络攻击的方法和所产生的破坏情况来看,DoS是一种简单有效的进攻方式,其目的就是拒绝用户的合法访问,破坏服务器的正常运行,最终使合法用户无法得到服务(见图3.2)。
图3.2 DoS攻击
DoS攻击的基本过程是:攻击者首先向服务器发送众多带有虚假地址的请求,服务器发送回复信息后等待回传信息;由于地址是伪造的,所以服务器一直等不到回传的消息,分配给这次请求的资源就始终无法释放。当服务器等待一定的时间后,连接会因超时而被切断,攻击者会再度传送一批新的请求,在这种反复发送伪地址请求的情况下,服务器资源最终会被耗尽。
根据利用漏洞产生的来源,可将DoS分为如下几类:
❍ 利用软件实现的缺陷;
❍ 利用协议的漏洞;
❍ 资源消耗。
利用软件实现的缺陷
这类攻击包括OOB(Out of Band)攻击、TearDrop攻击、Land攻击、IGMP碎片包攻击、Jolt攻击、Cisco 2600路由器IOS VI 12.0远程拒绝服务攻击等,它们都是利用了被攻击软件的缺陷完成DoS攻击的。通常,攻击工具向被攻击系统发送特定类型的一个或多个报文,且这些攻击通常都是致命的,一般都是一击致死。另外,由于很多攻击可以伪造源地址,所以即使通过IDS或者Sniffer软件记录到攻击报文,也不能找到攻击来源,而且这种类型的攻击多是使用特定类型的几个报文或非常短暂的少量报文而发起的,因此几乎不可能追查源IP地址。
利用协议的漏洞
这种攻击的生存能力非常强。为了能够在网络上进行互联互通,所有的软件实现都必须遵循既有的协议,而如果这种协议存在漏洞的话,那么所有遵循此协议的软件都会受到影响。
SYN泛洪攻击就是利用TCP/IP协议的漏洞发起的。TCP连接的建立一般包括3个步骤:客户端发送SYN包给服务器端;服务器分配一定的资源给这里连接并返回SYN/ACK包,并等待连接建立的最后的ACK包;最后客户端发送ACK报文。这样两者之间建立起连接,就可以通过连接传送数据了。SYN泛洪攻击的过程就是疯狂发送SYN报文,而不返回ACK报文,从而导致服务器占用过多资源,没有能力响应别的操作,或者不能响应正常的网络请求。
SYN泛洪不仅可以远程进行,而且可以伪造源IP地址,要查找源IP地址,必须在运营商骨干网络中沿着路由器逐级向上查找。
当前一些防火墙产品声称有抗DoS的能力,但通常能力有限,大多100Mbit/s的防火墙只能抵抗20~30Mbit/s的SYN泛洪攻击。现在有些安全厂商认识到DoS攻击的危害,开始研发专用的针对DoS攻击的产品。
由于TCP/IP协议相信报文的源地址,由此带来了另一种攻击方式——反射拒绝服务攻击。攻击者还可以利用广播地址和组播协议辅助反射拒绝服务攻击,这样的攻击效果更好。不过大多数路由器都不支持广播地址和组播协议的地址。
还有一类攻击方式是使用大量遵循协议的正常服务请求,由于每个请求会耗费很大的系统资源,由此导致正常服务的请求不能成功。如HTTP协议是无状态协议,攻击者通过构造大量搜索请求来耗费大量服务器资源,从而导致DoS攻击。这种方式攻击比较好处理,由于是正常请求,暴露了正常的源IP地址,直接禁止这些IP就可以了。
资源消耗
这种攻击方式凭借占有的丰富资源,发送大量的垃圾数据侵占用户的资源,导致DoS攻击。比如,ICMP泛洪、mstream泛洪、Connection泛洪。为了获得比目标系统更多的资源,通常攻击者会发动DDoS攻击。攻击者控制多个攻击“肉鸡”发动攻击,这样才能产生预期的效果。在ICMP泛洪、mstream泛洪和Connection泛洪攻击中,前两类攻击是可以伪造IP地址的,因此很难追查,第3种攻击由于需要建立连接,因此可能会暴露攻击“肉鸡”的IP地址,通过防火墙禁止这些IP地址即可防御这种攻击。对于难以追查、禁止的攻击行为,则需要用到专用的抗拒绝服务产品。
在日常的网络威胁中,如下几类DoS攻击较为常见。
❍ 死亡之ping(ping of death)攻击:ICMP在Internet上用于处理错误和传递控制信息。它的功能之一是与主机联系,通过发送一个回应请求(echo request)信息包看看主机是否“存活”。最普通的ping程序就是这个功能。而在TCP/IP的RFC文档中,包的最大尺寸都有严格限制规定,许多操作系统的TCP/IP协议栈都规定ICMP包大小为64KB,且在对包的报头进行读取之后,要根据该报头里包含的信息来为有效载荷生成缓冲区。死亡之Ping攻击就是故意产生畸形的测试ping包,声称自己的尺寸超过ICMP上限,使未采取保护措施的网络系统出现内存分配错误,导致TCP/IP协议栈崩溃,从而造成最终接收方宕机。
❍ TearDrop攻击:也叫泪滴攻击。它的工作原理是向被攻击者发送多个分片的IP包(IP分片数据包中包含该分片数据包属于哪个数据包以及在数据包中的位置等信息),某些操作系统收到含有重叠偏移的伪造分片数据包时会出现系统崩溃、重启等现象。
❍ UDP泛洪:UDP(用户数据报协议)在Internet上的应用比较广泛,很多提供WWW和Mail等服务的设备通常使用的是Linux系统,它会默认打开一些被黑客恶意利用的UDP服务。如Echo服务会显示接收到的每一个数据包,而原本作为测试功能的Chargen服务会在收到每一个数据包时随机反馈一些字符。UDP泛洪就是利用简单的TCP/IP服务(如Echo和Chargen服务)传送毫无用处且占满带宽的垃圾数据,从而导致网络可用带宽耗尽。
❍ SYN泛洪:这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽的攻击方式。
❍ Land攻击:黑客利用一个特别伪造(spoof)的SYN包(它的原地址和目标地址都被设置成某一个服务器的地址)进行攻击。这将导致接收服务器向它自己的地址发送SYN/ACK消息,结果这个地址又发回ACK消息并创建一个空连接。每一个这样的连接都将保留直到超时,由此导致系统崩溃。
❍ IP欺骗攻击:这种攻击利用TCP协议栈的RST位来实现,它通过迫使服务器把合法用户的连接复位来影响合法用户的连接。假设现在有一个合法用户A已经与服务器建立了正常的连接,现在攻击者构造攻击的TCP数据,将自己的IP伪装为A的IP地址,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从用户A发送的连接有错误,就会清空缓冲区中已建立好的连接。这时,合法用户A再发送合法数据时,服务器就已经没有这样的连接了,该用户就被拒绝服务而只能重新开始建立新的连接。
2.DDoS攻击
DDoS攻击原理
与基本的DoS攻击不同,DDoS(Distributed Denial of Service,分布式拒绝服务)攻击是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布、协作的大规模攻击方式,主要瞄准比较大的站点,比如商业公司、搜索引擎和政府部门的站点。通常,DoS攻击只需要一台单机和一个MODEM就可实现,而DDoS攻击则是利用一批受控制的机器向一台机器发起攻击,这样来势迅猛的攻击令人难以防备,因此具有较大的破坏性。
一个经典的DDoS攻击体系分成4大部分,如图3.3所示。第1部分是黑客主机(hacker),用于对控制的傀儡机发号施令。第2部分和第3部分分别是控制傀儡机和攻击傀儡机,它们分别用作控制和实际发起攻击。第4部分则是最终的受害者(被攻击者,victim)。
在图3.3中,需要特别注意控制傀儡机与攻击傀儡机的区别:对第4部分的受害者来说,DDoS的实际攻击包是从第3部分的攻击傀儡机上发出的,第2部分的控制傀儡机只发布命令而不参与实际的攻击。对第2部分和第3部分的计算机,黑客有控制权或者是部分的控制权,并把相应的DDoS程序上传到这些机器上。这些程序与正常的程序一样运行并等待来自黑客的指令,通常它还会利用各种手段隐藏自己以免被发现。平时,这些傀儡机并没有什么异常,只是一旦黑客连接到它们进行控制,并发出指令的时候,被攻击的傀儡机就成为攻击者去发起攻击了。由此可见,在严格意义上,除了第1部分的黑客主机之外,第2部分到第4部分的机器都是受害者。
图3.3 分布式拒绝服务攻击体系结构
DDoS常见的攻击类型
比较常见的DDoS攻击有Smurf攻击、Fraggle攻击、Trinoo、Tribal Flood Network(TFN)、TFN2k以及Stacheldraht等。
❍ Smurf攻击:一种简单但有效的DDoS攻击技术。在Smurf攻击中,攻击者向网络广播地址发送ICMP包,并将回复地址设置成受害网络的广播地址,通过使用ICMP应答请求数据包来淹没受害主机,最终导致该网络的所有主机都对ICMP应答请求作出答复,从而导致网络阻塞。
❍ Fraggle攻击:Fraggle攻击对Smurf攻击作了简单的修改,使用的是UDP应答消息而非ICMP。
❍ Trinoo攻击:Trinoo是较为复杂的DDoS攻击程序,它以UDP泛洪攻击为基础,使用master程序来控制用于发起实际攻击的任何数量的“代理”程序。攻击者连接到安装了master程序的计算机,然后启动master程序,由master程序负责启动所有的代理程序。接着,代理程序用UDP数据包冲击网络,它向被攻击目标主机的随机端口发出全零的4字节UDP包,被攻击主机在处理这些数据包的过程中,网络性能不断下降,最终因垃圾数据包过载而不堪重负,从而不能提供正常服务,乃至崩溃。
❍ Tribal Flood Network(TFN)和TFN2K攻击:TFN与Trinoo一样,都是使用一个master程序与位于多个网络上的攻击代理进行通信,利用ICMP向代理服务器下命令。TFN可以并行发动数不胜数的DoS攻击,类型多种多样,而且还可建立带有伪装源IP地址的数据包。TFN可以发动的攻击包括:SYN泛洪、UDP泛洪、ICMP Echo Request泛洪及Smurf攻击等。TFN2K是TFN的升级版本,可对包含命令的数据包加密,从而使命令内容更难查询,还可以伪造命令来源。
❍ Stacheldraht攻击:Stacheldraht与TFN和Trinoo一样,其中master程序与潜在的成千个代理程序进行通信。攻击者在发动攻击时只需与master程序进行连接即可。Stacheldraht还可以对攻击者与master程序之间的通信进行加密、伪造命令来源,还可以防范一些路由器的过滤行为。若检查出有过滤现象,它将伪造IP地址的后8位,从而使用户无法了解到底是哪几个网段的哪些机器被攻击。Stacheldraht还可以使用远程复制技术对代理程序进行自动更新。Stacheldraht所发动的攻击包括UDP泛洪、TCP SYN泛洪等。