zoukankan      html  css  js  c++  java
  • (原创)攻击方式学习之(4) 拒绝服务(DOS/DDOS/DRDOS)

    历史回顾

    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


    分 布式拒绝服务(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攻击。

    # 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. 监控骨干网络设备,减少骨干网主机的漏洞

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

    3. 加强网络管理,建立合理的应对策略

  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/coderzh/p/1292808.html
Copyright © 2011-2022 走看看