拒绝服务( Denial of Service,简称DoS),是一种简单的破坏性攻击,通常是利用传输协议中的某个弱点、系统存在的漏洞、或服务的漏洞,对目标系统发起大规模的进攻,用超出目标处理能力的海量数据包消耗可用系统资源、带宽资源等,或造成程序缓冲区溢出错误,致使其无法处理合法用户的正常请求,无法提供正常服务,最终致使网络服务瘫痪,甚至系统死机。
Ping是一个非常著名的程序,这个程序的目的是为了测试另一台主机是否可达。现在所有的操作系统上几乎都有这个程序,它已经成为系统的一部分。
Ping程序的目的是为了查看网络上的主机是否处于活动状态。
通过发送一份ICMP回显请求报文给目的主机,并等待返回ICMP回显应答,根据回显应答的内容判断目的主机的状况。
Ping之所以会造成伤害是源于早期操作系统在处理ICMP协议数据包存在漏洞。
早期很多操作系统在接收ICMP数据报文的时候,只开辟64KB的缓存区用于存放接收到的数据包。
一旦发送过来的ICMP数据包的实际尺寸超过64KB(65535B),操作系统将收到的数据报文向缓存区填写时,报文长度大于64KB,就会产生一个缓存溢出,结果将导致TCP/IP协议堆栈的崩溃,造成主机的重启动或是死机。
Ping程序有一个“-l”参数(即表示length)可指定发送数据包的尺寸,因此,使用Ping这个常用小程序就可以简单地实现这种攻击。例如通过这样一个命令:
Ping -l 65540 192.168.1.140
如果对方主机存在这样一个漏洞,就会形成一次拒绝服务攻击。这种攻击被称为“死亡之Ping”
解决方案
Ping Of Death攻击的攻击特征、检测方法和反攻击方法总结如下:
◼ 攻击特征:该攻击数据包大于65535个字节。由于部分操作系统接收到长度大于65535字节的数据包时,就会造成内存溢出、系统崩溃、重启、内核失败等后果,从而达到攻击的目的。
◼ 检测方法:判断数据包的大小是否大于65535个字节。
◼ 反攻击方法:使用新的补丁程序,当收到大于65535个字节的数据包时,丢弃该数据包,并进行系统审计
泪滴攻击的攻击特征、检测方法和反攻击方法总结如下:
◼ 攻击特征:Teardrop工作原理是向被攻击者发送多个分片的IP包,某些操作系统收到含有重叠偏移的伪造分片数据包时将会出现系统崩溃、重启等现象。
◼ 检测方法:对接收到的分片数据包进行分析,计算数据包的片偏移量(Offset)是否有误。
◼ 反攻击方法:添加系统补丁程序,丢弃收到的病态分片数据包并对这种攻击进行审计
这种攻击利用RST位来实现。
假设现在有一个合法用户(61.61.61.61)已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为61.61.61.61,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为61.61.61.61发送的连接有错误,就会清空缓冲区中建立好的连接。
这时,如果合法用户61.61.61.61再发送合法数据,服务器就已经没有这样的连接了,该用户就必须重新开始建立连接
SYN洪水
SYN flood是一种最为经典的DDOS攻击,其发现于1996年,但至今仍然保持着非常强大的生命力。SYN flood如此猖獗是因为它利用了TCP协议设计中的缺陷,而TCP/IP协议是整个互联网的基础,牵一发而动全身,如今想要修复这样的缺陷几乎成为不可能的事情。
它发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。
SYN Flood是利用TCP连接的三次握手过程的特性实现的
在TCP连接的三次握手过程中,假设一个客户端向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN/ACK应答报文后是无法收到客户端的ACK报文的,这种情况下服务器端一般会重试,并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为SYN Timeout。一般来说这个时间是分钟的数量级。
一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务器端
将为了维护一个非常大的半连接列表而消耗非常多的资源。
即使是简单的保存并遍历半连接列表也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。
实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃——既使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,这种情况就称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
SYN“洪水”的防御
SYN洪水攻击比较难以防御,以下是几种解决方法:
◼ 缩短SYN Timeout时间:由于SYN Flood攻击的效果取决于服务器上
保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃该连接的时间,可以成倍的降低服务器的负荷
◼ 设置SYN Cookie :就是给每一个请求连接的IP地址分配一个
Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃
◼ 负反馈策略:
正常情况下,OS对TCP连接的一些重要参数有一个常规的设置: SYN Timeout时间、SYNACK的重试次数等等。
这个常规设置针对系统优化,可以给用户提供方便快捷的服务;一旦服务器受到攻击,SYN Half link 的数量超过系统中TCP活动Half link最大连接数的设置,系统将会认为自己受到了SYN Flood攻击,并将根据攻击的判断情况作出反应:减短SYN Timeout时间、减少SYN-ACK的重试次数等等措施,力图将攻击危害减到最低
◼ 退让策略:
退让策略是基于SYN Flood攻击代码的一个缺陷:SYN Flood一旦攻击开始,将不会再进行域名解析。
切入点:假设一台服务器在受到SYN Flood攻击后迅速更换自己的IP地址,那么攻击者仍在不断攻击的只是一个空的IP地址,并没有任何主机,而
防御方只要将DNS解析更改到新的IP地址就能在很短的时间内恢复用户通过域名进行的正常访问。
为了迷惑攻击者,我们甚至可以放置一台“牺牲”服务器让攻击者满足于攻击的“效果” 。
◼ 分布式DNS负载均衡
在众多的负载均衡架构中,基于DNS解析的负载均衡本身就拥有对SYN Flood的免疫力。
基于DNS解析的负载均衡能将用户的请求分配到不同IP的服务器主机上,攻击者攻击的永远只是其中一台服务器,一来这样增加了攻击者的成本,二来过多的DNS请求可以帮助我们追查攻击者的真正踪迹
◼ 防火墙
Land是因特网上常见的拒绝服务攻击类型,它是由著名黑客组织rootshell发现的。
原理很简单,向目标机发送大量的源地址和目标地址相同的包,造成目标机解析
Land包时占用大量的系统资源,从而使网络功能完全瘫痪
Land攻击也是利用TCP的三次握手过程的缺陷进行攻击。
在Land攻击中,一个特别打造的SYN包中的源地址和目标地址都被设置成某一个服务器地址,这时将导致接受服务器向它自己的地址发送SYN一ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时。,许多UNIX系统将崩溃。
结果通常使存在漏洞的机器崩溃。
Land攻击可简要概括如下:
◼ 攻击特征:用于Land攻击的数据包中的源地址和目标地址是相同的。操作系统接收到这类数据包时,不知道该如何处理堆栈中的这种情况,或者循环发送和接收该数据包,消耗大量的系统资源,从而有可能造成系统崩溃或死机等现象。
◼ 检测方法:判断网络数据包的源/目标地址是否相同。 ◼ 反攻击方法:适当配置防火墙设备或过滤路由器的过滤规则可以防止这种攻击行为,并对这
种攻击进行审计。
Smurf攻击是利用IP欺骗和ICMP回应包引起目标主机网络阻塞,实现DoS攻击。
Smurf攻击原理:在构造数据包时将源地址设置为被攻击主机的地址,而将目的地址设置为某网络的广播地址,于是,大量的ICMP echo回应包被发送给被攻击主机,使其因网络阻塞而无法提供服务。
比Ping of Death洪水的流量高出1或2个数量级。
如果目标网络是一个很大的以太网,有200台主机,那么在这种情况下,入侵者每发送一个ICMP数据包,目标主机就会收到200个数据包,因此目标主机很快就会被大量的回复信息吞没,无法处理其他的任何网络传输。
这种攻击不仅影响目标主机,还能影响目标主机的整个网络系统
• 在TCP建立连接时,会进行TCP三次握手。在此过程中,当服务器端接收到客户端发来的SYN连接请求时,会对该请求进行ACK应答。利用TCP握手的ACK应答,既可以进行ACK反射攻击。
• 方法:受控主机可向大量服务器发送伪造源IP地址的SYN请求数据包,从而使服务器响应大量的ACK应答数据涌向被攻击的目标。从而导致拒绝服务
方法:
✓ 通常DNS相应数据包会比查询数据包大许多,因此攻击者利用普通的DNS查询请求就能够发动放大攻击,并将攻击流量放大2至10倍。
✓ 攻击者发动的DNS查询请求数据包一般为60字节左右,返回的结果的数据包大小通常为3000字节以上,因此,使用该方式进行放大攻击能够达到50倍以上的放大效果。
总结:
✓ 与ACK反射攻击类似,发动DNS放大攻击也需要先进行扫描,以获得大量的开放DNS解析器地址,并向这些开放DNS解析器发送伪造源地址的查询命令来放大攻击流量。
常见的HTTP请求有GET和POST请求两种,通常,GET请求用于从WEB服务器获取数据和资源,POST请求用于向WEB服务器提交数据和资源。在
处理这些请求过程中,WEB服务器通常需要解析请求、处理和执行服务端脚本、验证用户权限并多次访问数据库,这会消耗大量的计算资源和IO访问资源。
方法:
攻击者利用大量受控主机不断地向WEB服务器恶意发送大量的HTTP请求,要求WEB服务器处理,就会完全占用服务器的资源,造成其它正常用户的WEB访问请求处理缓慢甚至得不到处理,导致拒绝服务。
总结:
HTTP洪水攻击的目前对WEB服务威胁最大的攻击之一,有大量的攻击工具支持http洪水攻击,发动简单其效果明显,已经成为攻击者使用的主要攻击方式之一。
分布式拒绝服务DDoS (Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威力。
可以使得分散在互联网各处的机器共同完成对一台主机攻击的操作,从而使主机看起来好象是遭到了不同位置的许多主机的攻击。
这些分散的机器可以分别进行不同类
在进行分布式拒绝服务攻击前,入侵者必须先控制大量的无关主机(请问这些主机可以称之为什么?),并在这些机器上安装进行拒绝服务攻击的软件。
互联网上充斥着安全措施较差的主机,这些主机存在系统漏洞或配置上的错误,可能是一些没有足够安全技术力量的小站点或者一些企业的服务器,入侵者轻易就能进入这些系统。
由于攻击者来自于范围广泛的IP地址,而且来自每台主机的少量的数据包有可能从入侵检测系统的眼皮下溜掉,这就使得防御变得困难
分布式拒绝服务攻击的软件一般分为客户端、服务端与守护程序,这些程序可以使协调分散在互联网各处的机器共同完成对一台主机攻击的操作,从而使主机遭到来自不同地方的许多主机的攻击。
客户端:也称攻击控制台,它是发起攻击的主机
服务端:也称攻击服务器,它接受客户端发来的控制命令
守护程序:也称攻击器、攻击代理,它直接(如SYN Flooding)或者间接与攻击目标进行通信
入侵者attacker通过客户端软件向服务端软件发出攻击指令,服务端在接收到攻击指令后,控制守护进程向目标主机发动攻击。
采用三层结构的做法是确保入侵者的安全,一旦客户端发出指令后,客户端就能断开连接,由服务端指挥守护进程攻击。客户端连接和发送指令的时间很短,隐蔽性极强。
总结:DDoS攻击过程
攻击过程主要有两个步骤:攻占代理主机和向目标发起攻击。具体说来可分为以下几个步骤:
1、探测扫描大量主机以寻找可入侵主机;
2、入侵有安全漏洞的主机并获取控制权;
3、在每台被入侵主机中安装攻击所用的客户进程或守护进程;
4、向安装有客户进程的主控端主机发出命令,由它们来控制代理主机上的守护进程进行协同入侵
不容易定位攻击者的位置
◼ Internet上绝大多数网络都不限制源地址,也就是伪造源地址非常容易
◼ 很难溯源找到攻击控制端的位置
◼ 各种反射式攻击,无法定位源攻击者
完全阻止是不可能的,但是适当的防范工作可以减少被攻击的机会
① 有效完善的设计
② 带宽限制
③ 及时给系统安装补丁
④ 运行尽可能少的服务
⑤ 只允许必要的通信
⑥ 封锁敌意IP地址
一个站点越完善,它的状况会越好。如果公司有一个运行关键任务的Web站点,用户必须连接到Internet,但是与路由器之间只有一条单一的连接,服务器运行在一台单一的计算机上,这样的设计就不是完善的。
这种情况下,攻击者对路由器或服务器进行DoS攻击,使运行关键任务的应用程序被迫离线。理想情况下,公司不仅要有多条与Internet的连接,最好有不同地理区域的连接。
公司的服务位置越分散,IP地址越分散,攻击同时寻找与定位所有计算机的难度就越大。
当DoS攻击发生时,针对单个协议的攻击会损耗公司的带宽,以致拒绝合法用户的服务。例如,如果攻击者向端口25发送洪水般的数据,攻击者会消耗掉所有带宽,所以试图连接端口80的用户被拒绝服务。
一种防范方法是限制基于协议的带宽。例如,端口25只能使用25%的带宽,端口80只能使用50%的带宽
当新的DoS 攻击出现并攻击计算机时,厂商一般会很快确定问题并发布补丁。如果一个公司关注最新的补丁,同时及时安装,这样被DoS攻击的机会就会减少。
记住:这些措施并不能阻止DoS攻击耗尽公司的资源。还有在安装补丁之前,先要对其进行测试。即使厂商声明它可以弥补DoS漏洞,这并不意味着不会产生新的问题。
运行尽可能少的服务可以减少被攻击成功的机会。
如果一台计算机开了20个端口,这就使得攻击者可以在大的范围内尝试对每个端口进行不同的攻击。相反,如果系统只开了两个端口,这就限制了攻击者攻击站点的攻击类型。
另外,当运行的服务和开放的端口都很少时,管理员可以容易的设置安全,因为要监听和担心的事情都很少了。
这一防御机制与上一个标准“运行尽可能少的服务”很相似,不过它侧重于周边环境,主要是防火墙和路由器。关键是不仅要对系统实施最少(或最小)权限原则,对网络也要实施最少权限原则。确保防火墙只允许必要的通信出入网络。
许多公司只过滤进入通信,而对向外的通信不采取任何措施。这两种通信都应该过滤
当一个公司知道自己受到攻击时,应该马上确定发起攻击的IP地址,并在其外部路由器上封锁此IP地址。这样做的问题是,即使在外部路由器上封锁了这些IP地址,路由器仍然会因为数据量太多而拥塞,导致合法用户被拒绝对其他系统或网络的访问。
因此,一旦公司受到攻击应立刻通知其ISP和上游提供商封锁敌意数包。因为ISP拥有较大的带宽和多点的访问,如果他们封锁了敌意通信,仍然可以保持合法用户的通信,也可以恢复遭受攻击公司的连接。