DDOS攻击简介

DDOs攻击主要有两种类型:流量攻击和占用服务器资源攻击

针对于TCP/IP协议的不同,ddos可以利用好几个协议的漏洞进行攻击。

基于TCP协议的攻击

SYN Flood 攻击

基于TCP协议的攻击主要利用的是TCP的三次握手漏洞,由于TCP建立连接的时候需要三次握手,当服务器收到一个SYN包后,服务器会处于SYN_Received状态,并且在系统中保存半连接的数据,同时发送SYN-ACK包给客户端,但是此时客户端消失了,而处于这个状态的服务器会有一个定时器,在收不到客户端的回复的时候,会重新的发送SYN-ACk数据包(3-5次,并且等待一个SYN-time,一般是30秒到2分钟),此时半连接的数据一直占着系统资源,这样的话,如果有大量这种行为就会导致服务器资源被一直占用着,而正常连接行为的客户却得不到处理。这就是所谓的SYN攻击

ACK Flood 攻击

ACK Flood攻击是在TCP连接建立之后,所有的数据传输TCP报文都是带有ACK标志位的,主机在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法,例如该数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应RST包告诉对方此端口不存在。
这里,服务器要做两个动作:查表、回应 ACK/RST。这种攻击方式显然没有SYN Flood给服务器带来的冲击大,因此攻击者一定要用大流量ACK小包冲击才会对服务器造成影响。按照我们对TCP协议的理解,随机源IP的ACK小包应该会被Server很快丢弃,因为在服务器的TCP堆栈中没有这些ACK包的状态信息。但是实际上通过测试,发现有一些TCP服务会对ACK Flood比较敏感,比如说JSP Server,在数量并不多的ACK小包的打击下,JSP Server就很难处理正常的连接请求。对于Apache或者IIS来说,10kpps的ACK Flood不构成危胁,但是更高数量的ACK Flood会造成服务器网卡中断频率过高,负载过重而停止响应。可以肯定的是,ACK Flood不但可以危害路由器等网络设备,而且对服务器上的应用有不小的影响。

也有另外一种攻击:connection 攻击,就是大量的肉机与服务器建立连接,占用服务器的资源不放,而一台服务器的连接数量是有限的,大量的连接都被占用了,新的正常连接得不到服务。

基于UDP的攻击

UDP Flood是日渐猖厥的流量型DoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。 100k pps的UDP Flood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDP FLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。

基于ICMP的攻击

死亡之ping

IP协议规定IP包最大尺寸为65536,大部分的处理程序在处理IP包的时候,会假定报文不会超过最大的尺寸,利用该漏洞,可以发送大于65536的数据包,使得系统在处理报文的时候发生内存溢出,从而使得系统崩溃。这就是死亡之ping的实现原理,发送大于限制长度的报文来使得服务器出现系统奔溃

echo攻击

利用ICMP的echo机制,对服务器发送大量的ICMP包,占用服务器的带宽,也可以利用ICMP的广播机制,将源端IP伪造成服务器的IP,向网络广播ICMP echo request,从而使得大量的网络机器向服务器发送ICMP echo应答包,占用服务器的大量带宽。

针对链接的ICMP DoS

针对连接的DoS攻击,可以终止现有的网络连接。针对网络连接的DoS攻击会影响所有的IP设备,因为它使用了合法的ICMP消息。Nuke通过发送一个伪造的ICMP Destination Unreachable或Redirect消息来终止合法的网络连接。更具恶意的攻击,如puke和smack,会给某一个范围内的端口发送大量的数据包,毁掉大量的网络连接,同时还会消耗受害主机CPU的时钟周期。

基于ICMP重定向的路由欺骗技术

攻击者可利用ICMP重定向报文破坏路由,并以此增强其窃听能力。除了路由器,主机必须服从ICMP重定向。如果一台机器想网络中的另一台机器发送了一个ICMP重定向消息,这就可能引起其他机器具有一张无效的路由表。如果一台机器伪装成路由器截获所有到某些目标网络或全部目标网络的IP数据包,这样就形成了窃听。通过ICMP技术还可以抵达防火墙后的机器进行攻击和窃听。

注:重定向路由欺骗技术尚无实际应用。

HTTP Get 攻击

这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQLServer、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此攻击者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。