DOS和DDOS
定义
DOS定义
DoS是Denial of Service的简称,即拒绝服务,其目的是使计算机或网络无法提供正常的服务。
最常见的DoS攻击有计算机网络 带宽攻击和连通性攻击。
带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求就无法通过。
连通性攻击指用大量的 连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
【一是迫使服务器的缓冲区满,不接收新的请求;二是使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接】
DDOS定义
处于不同位置的多个攻击者同时向一个或者数个目标发起攻击,或者一个或多个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击,由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击。
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威 力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在 Internet上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
步骤:
1. 情报 【被攻击目标主机数目、地址情况 目标主机的配置、性能 目标的带宽。】
有多少台主机在支持这个站点,一个大的网站可能有很多台主机利用负载均衡技术提供同一个网站的www服务。
应该攻击哪一个地址,使这台机器瘫痪,但其他的主机还是能向外提供www服务。
使用多少台傀儡机才能达到效果
2. 占领
扫描互联网上那些有漏洞的机器,象程序的溢出漏洞、cgi、Unicode、ftp、数据库漏洞。。。
占领和控制被攻击的主机。取得最高的管理权限,或者至少得到一个有权限完成DDoS攻击任务的帐号。
把DDoS攻击用的程序上载过去,一般是利用ftp。在攻击机上,会有一个DDoS的发包程序,黑客就是利用它来向受害目标发送恶意攻击包的。
3. 攻击
黑客登录到做为控制台的傀儡机,向所有的攻击机发出命令:"预备~ ,瞄准~,开火!"。这时候埋伏在攻击机中的DDoS攻击程序就会响应控制台的命令,一起向受害主机以高速度发送大量的数据包,导致它死机或是无法响应正常的请求。
DDoS就好象有1,000个人同时给你家里打电话,这时候你的朋友还打得进来吗?
http://baike.baidu.com/view/210076.htm
后果
1.被攻击主机上有大量等待的TCP连接
2.网络中充斥着大量的无用的数据包,
3.源地址为假 制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯
4.利用受害主机提供的传输协议上的缺陷反复高速的发出特定的服务请求,使主机无法处理所有正常请求
5.严重时会造成系统死机
攻击
SYN Flood
SYN Flood拒绝服务攻击是通过三次握手而实现的。
三次握手和一些概念:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 未连接队列: 在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到 SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包,删除该条目,服 务器进入ESTABLISHED状态。 Backlog参数:表示未连接队列的最大容纳数目。 SYN-ACK 重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。 半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
简短地说:
客户发送SYN给服务器,服务器接收,发送SYN+ACK,进入SYN_RECV状态。
如果收到客户端的ACK,完成三次握手。
当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效 果,通常,客户端在短时间内伪造大量不存在的IP 地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的【真实的IP会认为,我没有发送请求,不作回应】,服务器需要不断的重发直至超时,这些伪造的SYN包将长 时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。【服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接。这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒~2分钟),如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃,服务器端将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应】
发现SYN攻击:
最简单的方法,使用netstat命令查看是否有很多TCP连接的状态为SYN_RECV 。如:下面的可判定该服务器正在收到SYN攻击。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# netstat -n -t tcp 0 0 10.11.11.11:23 124.173.152.8:25882 SYN_RECV - tcp 0 0 10.11.11.11:23 236.15.133.204:2577 SYN_RECV - tcp 0 0 10.11.11.11:23 127.160.6.129:51748 SYN_RECV - tcp 0 0 10.11.11.11:23 222.220.13.25:47393 SYN_RECV - tcp 0 0 10.11.11.11:23 212.200.204.182:60427 SYN_RECV - tcp 0 0 10.11.11.11:23 232.115.18.38:278 SYN_RECV - tcp 0 0 10.11.11.11:23 239.116.95.96:5122 SYN_RECV - tcp 0 0 10.11.11.11:23 236.219.139.207:49162 SYN_RECV - ...
HTTP GET 洪水
主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQLServer、MySQLServer、Oracle等数据库的网站系统。
特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用。提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此攻击者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务。
常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。
这种攻击的特点是可以完全绕过普通的防火墙防护,轻松找一些Proxy代理就可实施攻击,缺点是对付只有静态页面的网站效果会大打折扣,并且有些Proxy会暴露攻击者的IP地址。
防御:
1. 统计到达每个服务器的每秒钟的GET 请求数,查看是否异常。
2. 判断某个GET 请求是来自代理服务器还是恶意请求。并回应一个带key的响应要求请求发起端作出相应的回馈。如果发起端并不响应则说明是利用工具发起的请求,这样HTTP Get请求就无法到达服务器,达到防护的效果。
http://www.360doc.com/content/10/1016/18/1317564_61533229.shtml
IP欺骗攻击
这种攻击利用RST位来实现。冒充IP,断开合法用户连接。当合法用户在连接时得重新建立。使服务器不对合法用户服务
假设现在有一个合法用户(61.61.61.61)已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为61.61.61.61,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从61.61.61.61发送的连接有错误,就会清空缓冲区中建立好的连接。
这时,如果合法用户61.61.61.61再发送合法数据,服务器就已经没有这样的连接了,该用户就必须从新开始建立连接。攻击时,攻击者会伪造大量的IP地址,向目标发送RST数据,使服务器不对合法用户服务,从而实现了对受害服务器的拒绝服务攻击。
Ping of Death
所谓Ping of Death,就是利用一些尺寸超大的ICMP报文对系统进行的一种攻击。IP报文的长度字段为16位,这表明一个IP报文的最大长度为65535。对于 ICMP 回应请求报文,如果数据长度大于65507,就会使ICMP数据+IP头长度(20)+ICMP头长度(8)> 65535。对于有些路由器或系统,在接收到一个这样的报文后,由于处理不当,会造成系统崩溃、死机或重启。
因为以太网长度有限,IP包必段被分片,接收端的及其提取各个分片,并重组为一个完整的IP包。分片并不包含整个IP包的长度信息,因此IP包一旦被分片,重组后的整个IP包的总长度只有在所在分片都接受完毕之后才能确定。
在IP协议规范中规定了一个IP包的最大尺寸,而大多数的包处理程序又假设包的长度超过这个最大尺寸这种情况是不会出现的。因此,包的重组代码所分配的内存区域也最大不超过这个最大尺寸。这样,超大的包一旦出现,包当中的额外数据就会被写入其他正常区域。这很容易导致系统进入非稳定状态,是一种典型的缓存溢出(Buffer Overflow)攻击。【於缓冲区大小只是65535位元组,於是便会发生缓冲区溢出的错误】。在防火墙一级对这种攻击进行检测是相当难的,因为每个分片包看起来都很正常。
如:
Pinging 192.168.1.21 with 65500 bytes of data
ping-1 65510 the.target.ip.addr
ACK洪水攻击
ACK Flood攻击是在TCP连接建立之后,所有的数据传输TCP报文都是带有ACK标志位的。
主机在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在。
如果存在则检查该数据包所表示的状态是否合法,
如果合法,再向应用层传递该数据包。
如果不合法,例如该数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应RST包告诉对方此端口不存在。
服务器要做两个动作:查表、回应ACK/RST
当发包速率很大的时候,主机操作系统将耗费大量的精力接收报文、判断状态,同时要主动回应RST报文,正常的数据包就可能无法得到及时的处理。
防御:
建立一个hash表,用来存放TCP连接“状态”,相对于主机的TCP stack实现来说,状态检查的过程相对简化。例如,不作sequence number的检查,不作包乱序的处理,只是统计一定时间内是否有ACK包在该“连接”(即四元组)上通过,从而“大致”确定该“连接”是否是“活动的”。
回顾前面描述的SYN Cookie算法,其核心思想是主动回应SYN/ACK包,然后校验第3次握手的ACK报文是否合法,目前大多数实现中校验ACK报文的合法性都涉及到较为复杂的算法。
UDP洪水攻击
利用大量UDP小包冲击服务器如(DNS服务器 ,流媒体视频服务器)。通过伪造与某一主机的 Chargen 服务之间的一次的 UDP 连接,回复地址指向开着Echo 服务的一台主机,通过将Chargen 和 Echo服务互指,来回传送毫无用处且占满带宽的垃圾数据,在两台主机之间生成足够多的无用数据流,这一拒绝服务攻击飞快地导致网络可用带宽耗尽。
UDP DNS Query Flood
UDP DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名。
被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域 名超时。
防御:
1. 根据域名 IP 自学习结果主动回应,减轻服务器负载(使用 DNS Cache)
2. 对突然发起大量频度较低的域名解析请求的源 IP 地址进行带宽限制, 在攻击发生时降低很少发起域名解析请求的源 IP 地址的优先级
3. 限制每个源 IP 地址每秒的域名解析请求次数
Connection Flood
利用真实的IP地址向服务器发起大量的连接,并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器服务器上残余连接(WAIT状态)过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的连接。
现在已有工具采用慢速连接的方式,也即几秒钟才和服务器建立一个连接,连接建立成功之后并不释放并定时发送垃圾数据包给服务器使连接得以长时间保持。这样一个IP地址就可以和服务器建立成百上千的连接,而服务器可以承受的连接数是有限的,这就达到了拒绝服务的效果。
防御:
1. 主动清除残余连接。
2. 对恶意连接的IP进行封禁。
3. 限制每个源IP的连接数。
4. 可以对特定的URL进行防护。
5. 反查Proxy后面发起HTTP Get Flood的源。
泪滴(teardrop)攻击
泪滴是一个特殊构造的应用程序,利用IP分组数据包重叠造成TCP/ IP分片重组代码不能恰当处理IP包,通过发送伪造的相互重叠的IP分组数据包,使其难以被接收主机重新组合。
其工作原理是向被攻击者发送多个分片的IP包,某些操作系统收到含有重叠偏移的伪造分片数据包时将会出现系统崩溃、重启等现象。利用UDP包重组时重叠偏移(假设数据包中第二片IP包的偏移量小于结束的位移,而且算上第二片IP包的Data,也未超过第一片的尾部,这就是重叠现象)的漏洞对系统主机发动拒绝服务攻击,最终导致主机瘫痪掉。
Land攻击
land 攻击是一种使用相同的源和目的主机和端口发送数据包到某台机器的攻击。当操作系统接收到这类数据包时,不知道该如何处理,或者循环发送和接收该数据包,这样会消耗大量的系统资源,从而有可能造成系统崩溃或死机。
在Land攻击中,一个特别打造的SYN包中的原地址和目标地址都被设置成某一个服务器地址,这时将导致接受服务器向它自己的地址发送SYN一ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时掉。对Land攻击反应不同,许多UNIX实现将崩溃,而 Windows NT 会变的极其缓慢(大约持续五分钟)。
防御方法:这类攻击的检测方法相对来说比较容易,因为可以直接通过判断网络数据包的源地址和目标地址是否相同确认是否属于攻击行为。反攻击的方法当然是适当地配置防火墙设备或制定包过滤路由器的包过滤规则,并对这种攻击进行审计,记录事件发生的时间、源主机和目标主机的MAC地址和IP地址,从而可以有效地分析并跟踪攻击者的来源。
Smurf攻击
攻击者在远程及其上发送ICMP应答请求服务,
其目标主机不是某一个主机的IP地址,而是某个网络的广播地址,
其请求包的源IP不是发起攻击的IP地址,而是加以伪装的将要攻击的主机IP地址。
大量主机收到ICMP应答请求服务包后,按源IP返回请求信息,从而导致受攻击主机的服务性能下降,甚至崩溃。
步骤:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Smurf攻击一般有3个过程 1.网络扫描 在进行Smurf攻击前,攻击者使用数据包分析工具如 Sniffer 等,寻找那些对于广播方式发送的echo请求分组并不丢弃、并对本地网络中的所有主机进行发送的网络路由器 ,记录下该网络的IP地址。 2.发起攻击 攻击者通过程序伪造一个echo请求的ICMP报文,报文的源地址利用欺骗方式伪造成希望攻击的系统的IP地址,然后循环不断读取具有路由器漏洞的目标网络的IP地址,并向它们的广播地址发送分组。 3.攻击过程 echo请求被发送到的目标网络,称为反弹站点,其路由器从 Internet 上接收到攻击者发出的IP广播地址(如202.196.80.255)的echo请求分组后 ,把以太网广播地址FF:FF:FF:FF:FF:映射过来 ,然后将此echo 请求分组对本地网段中的所有主机进行广播。收到echo请求分组的主机都将及时向源地址回复,全部指向受攻击的系统。被攻击系统的网络将很快被这些 echo响应分组充满而阻塞,不能处理其他任何网络传输,从而引起拒绝正常的系统服务。
ICMP及广播地址:
在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
广播地址可以分为4类: 第一类 受限的广播地址 255.255.255.255。这个地址用于主机配置过程中IP数据报的目的地址。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。 第二类 指向网络的广播地址 主机标识全为1的地址。例如,A类网络的广播地址为X.255.255.255,其中X为A类网络的ID。一个路由器应转发指向网络的广播,但它也有一个不进行转发的选择。 第三类 指向子网的广播地址 主机号全为1,且有特定子网ID的地址。作为子网直接广播地址的IP地址需要与子网掩码相结合。例如,路由器收到发往128.1.2.255的数据报,当B类网络地址子网掩码为255.255.255.0时,该地址就是指望特定子网的广播地址;如子网掩码为255.255.254.0时,该地址就不是指向子网的广播地址。 第四类 指向所有子网的广播地址 子网ID和主机ID全为1。例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。
http://www.360doc.com/content/10/1016/18/1317564_61533229.shtml
防御
1. 关闭不必要的服务。
2. 限制同时打开的Syn半连接数目。
3. 缩短Syn半连接的time out 时间。
4. 及时更新系统补丁
5. 合理配置路由器及防火墙,实现IDS和防火墙的联动
http://www.cnblogs.com/coderzh/archive/2008/09/17/1292808.html