攻击方式学习之 - 拒绝服务 (DOS/DDOS/DRDOS)
历史回顾
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
分 布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动 DoS 攻击,从而成倍地提高拒绝服务攻击的威 力。通常,攻击者使用一个偷窃帐号将 DDoS 主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在 Internet 上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
什么是 DRDOS
分 布式拒绝服务攻击(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 握手协议
在 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 攻击原理
从 上图可看到,服务器接收到连接请求(syn=j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入 SYN_RECV 状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合 IP 欺骗,SYN 攻击能达到很好的效 果,通常,客户端在短时间内伪造大量不存在的 IP 地址,向服务器不断地发送 syn 包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的 SYN 包将长 时间占用未连接队列,正常的 SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
如何发现 SYN 攻击
最简单的方法,使用 netstat 命令查看是否有很多 TCP 连接的状态为 SYN_RECV 。如:下面的可判定该服务器正在收到 SYN 攻击。
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 的较新版本防 止您发送这些数据。
如何防御拒绝服务攻击
<tt style="margin: 0px; padding: 0px;">
监控骨干网络设备,减少骨干网主机的漏洞关闭不必要的服务。
限制同时打开的 Syn 半连接数目。
缩短 Syn 半连接的 time out 时间。
及时更新系统补丁。
<tt style="margin: 0px; padding: 0px;">
合理配置路由器及防火墙,实现 IDS 和防火墙的联动<tt style="margin: 0px; padding: 0px;">
加强网络管理,建立合理的应对策略
评论