攻击方式学习之- 拒绝服务(DOS/DDOS/DRDOS)

313 阅读8分钟

历史回顾

  1. 2000年2月的“电子珍珠港事件”,正是互联网史上这样噩梦的集中时刻。2月7日、8日、9日连续三天,黑客对美国包括雅虎、亚马逊、国家贴现经纪公司网站、洛杉矶时报网站等各大网站发起集中攻击,直接造成了10多亿美元的损失。号称世界上最安全的网站——雅虎——是其中最不幸的一位。由于2月正是一年中网上购物最活跃的时候,雅虎的主要收入来自网上广告,在关闭的三小时内本该有1亿个页面被访问,黑客攻击直接造成雅虎至少数百万美元的损失。到现在为止,美国司法部和联邦调查局仍未掌握有关“电子珍珠港事件”的线索,不知道谁是袭击事件的幕后指使、有多少台计算机卷入,袭击原因和地址。但美国联邦调查局宣称——这些幕后黑手将被判5年至10年的监禁,并要求以25万美元或者受害者损失的双倍罚款。那次攻击使用的正是下面要讲到SYN Flood攻击。

2. 2006年9月12日晚上11时37分,百度发表声明,称其在12日下午遭受了有史以来最大的不明身份黑客攻击,百度搜索服务因此在全国各地出现近30分钟的故障。黑客Trail使用的正是下面要讲到的DRDOS攻击。 

什么是DOS

DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络 带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求就无法通过。连通性攻击指用大量的 连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。

什么是DDOS

image

分 布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威 力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在 Internet上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。

什么是DRDOS

image

分 布式拒绝服务攻击(Distributed Reflection Denial Of Servie Attack),简称DRDOS,是新一代的DDOS攻击。当入侵者利用带有请求的SYN数据包对网络路由器进行洪水攻击。这些数据包带有虚假的IP地 址,这些地址都是XXX网站的。这样以来,路由器以为这些 SYN数据包是从XXX网站发送过来的,所以它们便对它们发送SYN/ACK数据包作为三次握手过程的第二步。恶意的数据包就反射到XXX网站的主机上 后,就形成了洪水攻击。

常用手段

常见的DDoS攻击手段有SYN Flood、Ping of Death、ACK Flood、UDP Flood、ICMP Flood、TCP Flood、Connections Flood、Script Flood、Proxy Flood等。

SYN Flood

据统计,在所有黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法。相信很多人还记得2000年YAHOO网站遭受的攻击事例,当时黑客利用的就是简单而有效的SYN攻击,有些网络蠕虫病毒配合SYN攻击造成更大的破坏。

TCP握手协议

image

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。(TCP three-way handshake)

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攻击原理

image

从 上图可看到,服务器接收到连接请求(syn=j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入 SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效 果,通常,客户端在短时间内伪造大量不存在的IP 地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长 时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

如何发现SYN攻击

最简单的方法,使用netstat命令查看是否有很多TCP连接的状态为SYN_RECV 。如:下面的可判定该服务器正在收到SYN攻击。

# 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 - 

Ping of Death

所谓Ping of Death,就是利用一些尺寸超大的ICMP报文对系统进行的一种攻击。IP报文的长度字段为16位,这表明一个IP报文的最大长度为65535。对于 ICMP 回应请求报文,如果数据长度大于65507,就会使ICMP数据+IP头长度(20)+ICMP头长度(8)> 65535。对于有些路由器或系统,在接收到一个这样的报文后,由于处理不当,会造成系统崩溃、死机或重启。

实际上从早先版本的Windows上就可以运行 Ping of Death。在命令行下只需键入:“ping -l 65550 攻击目标”即可。Windows还有一个漏洞就是它不但在收到这种无效数据时会崩溃,而且还可以在偶然的情况下生成这种数据。Windows的较新版本防 止您发送这些数据。

如何防御拒绝服务攻击

  1. <tt style="margin: 0px; padding: 0px;">监控骨干网络设备,减少骨干网主机的漏洞

    1. 关闭不必要的服务。
    2. 限制同时打开的Syn半连接数目。
    3. 缩短Syn半连接的time out 时间。
    4. 及时更新系统补丁。
  2. <tt style="margin: 0px; padding: 0px;">合理配置路由器及防火墙,实现IDS和防火墙的联动

  3. <tt style="margin: 0px; padding: 0px;">加强网络管理,建立合理的应对策略