Linux下的DOS攻击
DOS是Denial of service的简称,即拒绝服务,造成Dos攻击行为被称为Dos攻击,其目的是使计算机或网络无法提供正常的服务。最常见的Dos攻击有计算机带宽攻击和连通性攻击
概念
计算机和网络系统为Internet用户提供互联网资源,如果黑客要进行Dos攻击的话,可以有很多手段!现在最常见的Dos攻击有对计算机网络的带宽攻击和连通性攻击。
- 带宽攻击指以极大的信息量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。
- 连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源被消耗殆尽,最后导致计算机无法处理合法用户的请求。
传统上,攻击者面临的主要问题是网络带宽,由于较小的网络规模和较慢的网络速度的限制,攻击者无法发出过多的请求。虽然类似“the ping of death”的攻击类型只需要较少量的包就可以摧毁一个没有打过补丁的UNIX系统,但是大多数的DOS攻击还是需要相当大的带宽的,而以个人为单位的黑客们很难使用高带宽的资源。为了克服这个缺点,Dos攻击者开发了分布式攻击。攻击者简单利用工具集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDos攻击。
无论是Dos攻击还是DDos攻击,简单地看,都是一种破坏网络服务的黑客方式,虽然具体的实现方式千变万化,但都有一个共同点,就是其根本目的是使受害主机或网络无法及时接受并处理外界请求,或无法及时回应外界请求。
其具体表现方式有以下几种:
- 制造大流量无用数据,造成通往被攻击主机的网络阻塞,使被攻击主机无法正常和外界通信。
- 利用被攻击主机提供服务或传输协议上处理重复连接的缺陷,反复高频的发出攻击性的重复服务请求,使被攻击主机无法及时处理其他正常的请求。
- 利用被攻击主机所提供服务程序或传输协议的本身实现缺陷,反复发送畸形的攻击数据引发系统错误的分配大量系统资源,使主机处于挂起状态甚至死机。
攻击流程
要理解DOS攻击,首先要理解TCP连接的三次握手过程(Three-wayhandshake)。在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送SYN包(SYN=i)到服务器,并进入SYN SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK=i+1),同时自己也发送一个SYN包(SYN=j),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=j+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务端开始传送数据。
上述过程中的一些重要概念:
-
半连接
收到SYN包而还未收到ACK包时的连接状态为半连接,即尚未完全完成三次握手的TCP连接
-
半连接队列
在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包(SYN=i)开设一个条目,该条目表明服务器已收到SYN包,并向客户发起确认,正在等待客户的确认包。这些条目所标示的连接在服务器处于SYN_ RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
-
Backlog参数:表示半连接队列的最大容纳数目。
SYN-ACK重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首 次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息、从半连接队列中删除。注意,每次 重传等待的时间不一定相同。
-
半连接存活时间
是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
SYN洪水攻击属于DoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费 CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服 务就可以实施。从图4-3可看到,服务器接收到连接请求(SYN=i )将此信息加入未连接队列,并发送请求包给客户端( SYN=j,ACK=i+1 ),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。
配合IP欺骗,SYN攻击能 达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存 在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN 请求 被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
过程如下:
攻击主机C(地址伪装后为C‘)-----大量SYN包---->被攻击主机
C’<-------SYN/ACK包----被攻击主机
由于C’地址不可达,被攻击主机等待SYN包超时。攻击主机通过发大量SYN包填满未连接队列,导致正常SYN包被拒绝服务。另外,SYN洪水攻击还可以通过发大量ACK包进行DoS攻击。
攻击手段
- ping of death
- tear drop
- udp flood
- syn flood
- land attack
- ip spoofing dos
死亡之ping
ICMP(Internet Control Message Protocol,网络控制信息协议)在Internet上用于错误处理和传递控制信息。它的功能之一是与主机联系,通过发送一个“回音请求(echorequest)”信息包看看主机是否“活着”。在TCP/IP的RFC文档中对包的最大尺寸都有严格限制规定,许多操作系统的TCP/IP协议栈都规定ICMP包的大小为64KB,且对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。“Ping of death”就是故意产生畸形的测试ping包,声称自己的尺寸超过ICMP上限,也就是加载的尺寸超过64KB上限,使未采取保护措施的网络系统出现内存分配错误,导致TCP/IP协议栈崩溃,最终接收方宕机。
泪滴(Tear Drop)
泪滴攻击利用TCP/IP协议栈中实现信任IP碎片中的包的标题头所包含的信息来实现自己的攻击。IP分段含有指示该分段所包含的是原包的哪一段的信息,某些TCP/IP协议栈在收到含有重叠偏移的伪造分段时将崩溃。
UDP泛洪(UDP Flood)
如今在Internet上UDP(用户数据包协议)的应用比较广泛,很多提供www和mail等服务设备通常是使用unix的服务器,它们默认打开一些被黑客恶意利用的UDP服务。如echo服务会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一个数据包时随机反馈一些字符。UDP Flood假冒攻击就是利用这两个简单的TCP/IP服务的漏洞进行恶意攻击,通过伪造与某一主机的chargen服务之间的一次UDP连接,回复地址指向开着Echo服务的一台主机,通过将chargen和echo服务互指,来回传送毫无用处且占满带宽的垃圾数据,在两台主机之间生成足够多的无用数据流,这一拒绝服务攻击快速导致网络的可用带宽耗尽。
SYN泛洪(SYN Flood)
标准TCp连接时,会有一个3次握手过程。首先是请求方发送一个SYN消息,服务方收到SYN后,会想请求方回送一个SYN-ACK表示确认,当请求方收到SYN-ACK之后,再次向服务方发送一个ACK消息,一次TCP连接建立成功。SYN泛洪则专门针对TCP协议栈在两台主机间初始化、连接握手的过程进行DOS攻击。
请求方接收到服务方的SYN-ACK之后,采用源地址欺骗手段使得服务方收不到ACK回应,于是服务方在一定时间处于等待接收请求方ACK消息的状态。但是对于以台服务器来说,只有有限的内存缓冲区用来创建连接,若缓冲区内充满虚假连接的初始信息,服务器会对接下来的连接停止响应,直至缓冲区里面的连接企图超时。如果恶意攻击方快速连续的发送此类连接请求,服务器可用的TCP连接队列很快被阻塞,系统可用资源急剧减少,网络可用带宽迅速缩小,长此下去,除了少数幸运用户的请求可以插在大量虚假请求间得到应答外,服务器将无法向用户提供正常的合法服务。
Land Attack攻击
在Land攻击中,黑客利用一个特别打造的SYN包-它的源地址和目标地址都被设置成某一个服务器地址进行攻击。此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都保存至超时,许多UNIX将奔溃。
IP欺骗DOS攻击
这种攻击利用TCP协议栈的RST位来实现,使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。假设现在有一个合法用户A已经与服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为A的IP,向服务器发送一个带有RST位的TCP数据段。服务器收到这样的数据之后,认为从机器A发送的连接有错误,就会清空缓冲区中已经建立好的连接。这时,合法的机器A再发送合法的数据,服务器已经没有这样的连接了,该用户就会被拒绝服务而只能重新开始新的连接。
常见的DOS攻击分类
利用软件实现的缺陷
OOB攻击(常用工具winnuke)
teardrop攻击(常用工具teardrop.cboink.cbonk.c)
land攻击
IGMP碎片包攻击
jolt攻击
Cisco2600路由器IOSversion12.0(10)远程拒绝服务攻击
等等
这些攻击都是利用了被攻击者软件实现上的缺陷完成DOS攻击的。这些攻击工具通常是向被攻击系统发送特定类型的一个或多个报文,这些攻击通常是致命的,一般是一击致死