DOS(Denial of Service,即拒绝服务)攻击

DOSDenial of Service ,即拒绝服务)攻击

本文主要介绍 DOS 的机理和常见的实施方法。要想了解 DOS 攻击得实现机理,必须对 TCP 有一定的了解。


   1 、什么是 DOS 攻击

   DOS :即 Denial Of Service ,拒绝服务的缩写,可不能认为是微软的 dos操作系统 了。好象在 5·1 的时候闹过这样的笑话。拒绝服务,就相当于必胜客在客满的时候不再让人进去一样,呵呵,你想吃馅饼,就必须在门口等吧。 DOS 攻击即让目标机器停止提供服务或资源访问。

   2 、有关 TCP 协议的东西

    TCP transmission control protocol ,传输控制协议),是用来在不可 * 的因特网上提供可 * 的、端到端的字节流通讯协议,在 RFC793 中有正式定义,还有一些解决错误的东西 RFC 1122 中有记录, RFC 1323 则有 TCP 的功能扩展。我们常见到的 TCP/IP 协议中, IP 层不保证将数据报正确传送到目的地, TCP 则从本地机器接受用户的数据流,将其分成 不超过 64K 字节的数据片段,将每个数据片段作为单独的 IP 数据包发送出去,最后在目的地机器中再组合成完整的字节流, TCP 协议必须保证可 * 性。发送和 接收方的 TCP 传输以数据段的形式 交换 据,一个数据段包括一个固定的 20 字节,加上可选部分,后面再跟上数据, TCP 协议从发送方传送一个数据段的时候,还要启动计时器,当数据段到达目的地 后,接收方还要发送回一个数据段,其中有一个确认序号,它等于希望收到的下一个数据段的顺序号,如果计时器在确认信息到达前超时了,发送方会重新发送这个 数据段。

  上面,我们总体上了解一点 TCP 协议,重要的是要熟悉 TCP 的数据头( header )。因为数据流的传输最重要的就是 header 里面的东西,至于发送的数据,只是 header 附带上的。客户端和服务端的服务响应就是同 header 里面的数据相关,两端的信息交流和 交换 是根据 header 中的内容实施的,因此,要实现 DOS ,就必须对 header 中的内容非常熟悉。

  下面是 TCP 数据段头格式。 RFC793 中的
  (请大家注意网页显示空格使下面的格式错位了)

   0 1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Source Port | Destination Port |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Sequence Number |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Acknowledgment Number |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Data | |U|A|P|R|S|F| |
   | Offset| Reserved |R|C|S|S|Y|I| Window |
   | | |G|K|H|T|N|N| |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Checksum | Urgent Pointer |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Options | Padding |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | data |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

TCP Header Format

   Source Port Destination Port : 是本地端口和目标端口
   Sequence Number Acknowledgment Number :是顺序号和确认号,确认号是希望接收的字节号。这都是 32 位的,在 TCP 流中,每个数据字节都被编号。
   Data offset : 表明 TCP 头包含多少个 32 位字,用来确定头的长度,因为头中可选字段长度是不定的。
   Reserved : 保留的 6 位,现在没用,都是 0

  接下来是 6 1 位的标志,这是两个计算机数据交流的信息标志。接收和发送断根据这些标志来确定信息流的种类。下面是一些介绍:
   URG :( Urgent Pointer field significant )紧急指针。用到的时候值为 1 ,用来处理避免 TCP 数据流中断
   ACK :( Acknowledgment field significant )置 1 时表示确认号( Acknowledgment Number )为合法,为 0 的时候表示数据段不包含确认信息,确认号被忽略。
   PSH :( Push Function ), PUSH 标志的数据,置 1 时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
   RST :( Reset the connection )用于复位因某种原因引起出现的错误连接,也用来拒绝非法数据和请求。如果接收到 RST 位时候,通常发生了某些错误。
    SYN :( Synchronize sequence numbers )用来建立连接,在连接请求中, SYN=1 ACK=0 ,连接响应时, SYN=1 ACK=1 。即, SYN ACK 来区分 Connection Request Connection Accepted
   FIN :( No more data from sender )用来释放连接,表明发送方已经没有数据发送了。

  知道这重要的 6 个指示标志后,我们继续来。

   16 位的 WINDOW 字段:表示确认了字节后还可以发送多少字节。可以为 0 ,表示已经收到包括确认号减 1 (即已发送所有数据)在内的所有数据段。
  接下来是 16 位的 Checksum 字段,用来确保可 * 性的。
   16 位的 Urgent Pointer ,和下面的字段我们这里不解释了。不然太多了。呵呵,偷懒啊。

  我们进入比较重要的一部分: TCP 连接握手过程。这个过程简单地分为三步。

  在没有连接中,接受方(我们针对 服务器 ), 服务器 处于 LISTEN 状态,等待其他机器发送连接请求。

  第一步:客户端发送一个带 SYN 位的请求,向 服务器 表示需要连接,比如发送包假设请求序号为 10 ,那么则为: SYN=10 ACK=0 ,然后等待 服务器 的响应。

  第二步: 服务器 接收到这样的请求后,查看是否在 LISTEN 的是指定的端口,不然,就发送 RST=1 应答,拒绝建立连接。如果接收连接,那么 服务器 发送确认, SYN 服务器 的一个内码,假设为 100 ACK 位则是客户端的请求序号加 1 ,本例中发送的数据是: SYN=100 ACK=11 ,用这样的数据发送给客户端。向客户端表示, 服务器 连接已经准备好了,等待客户端的确认

这时客户端接收到消息后,分析得到的信息,准备发送确认连接信号到 服务器

  第三步:客户端发送确认建立连接的消息给 服务器 。确认信息的 SYN 位是 服务器 发送的 ACK 位, ACK 位是 服务器 发送的 SYN 位加 1 。即: SYN=11 ACK=101

  这时,连接已经建立起来了。然后发送数据,。这是一个基本的请求和连接过程。需要注意的是这些标志位的关系,比如 SYN ACK

   3 服务器 的缓冲区队列( Backlog Queue

   服务器 不会在每次接收到 SYN 请求就立刻同客户端建立连接,而是为连接请求分配内存空间,建立会话,并放到一个等待队列中。如果,这个等待的队列已经满了,那么, 服务器 就不在为新的连接分配任何东西,直接丢弃新的请求。如果到了这样的地步, 服务器 就是拒绝服务了。
  如果 服务器 接收到一个 RST 位信息,那么就认为这是一个有错误的数据段,会根据客户端 IP ,把这样的连接在缓冲区队列中清除掉。这对 IP 欺骗有影响,也能被利用来做 DOS 攻击。

  上面的介绍,我们了解 TCP 协议,以及连接过程。要对 SERVER 实施拒绝服务攻击,实质上的方式就是有两个:
  
   : 迫使 服务器 的缓冲区满,不接收新的请求。
  
   : 使用 IP 欺骗,迫使 服务器 把合法用户的连接复位,影响合法用户的连接
  
  这就是 DOS 攻击实施的基本思想。具体实现有这样的方法:
  
   1 SYN FLOOD
  
  利用 服务器 的连接缓冲区( Backlog Queue ),利用特殊的程序,设置 TCP Header ,向 服务器 端不断地成倍发送只有 SYN 标志的 TCP 连接请求。当 服务器 接收的时候,都认为是没有建立起来的连接请求,于是为这些请求建立会话,排到缓冲区队列中。
  
  如果你的 SYN 请求超过了 服务器 能容纳的限度,缓冲区队列满,那么 服务器 就不再接收新的请求了。其他合法用户的连接都被拒绝掉。可以持续你的 SYN 请求发送,直到缓冲区中都是你的只有 SYN 标记的请求。
  
  现在有很多实施 SYN FLOOD 的工具,呵呵,自己找去吧。
  
   2 IP 欺骗 DOS 攻击

  这种攻击利用 RST 位来实现。假设现在有一个合法用户 (1.1.1.1) 已经同 服务器 建立了正常的连接,攻击者构造攻击的 TCP 数据,伪装自己的 IP 1.1.1.1 ,并向 服务器 发送一个带有 RST 位的 TCP 数据段。 服务器 接收到这样的数据后,认为从 1.1.1.1 发送的连接有错误,就会清空缓冲区中建立好的连接。这时,如果合法用户 1.1.1.1 再发送合法数据, 服务器 就已经没有这样的连接了,该用户就必须从新开始建立连接。
  
  攻击时,伪造大量的 IP 地址,向目标发送 RST 数据,使 服务器 不对合法用户服务。

3 带宽 DOS 攻击
  
  如果你的连接带宽足够大而 服务器 又不是很大,你可以发送请求,来消耗 服务器 的缓冲区消耗 服务器 的带宽。这种攻击就是人多力量大了,配合上 SYN 一起实施 DOS ,威力巨大。不过是初级 DOS 攻击。呵呵。 Ping 白宫??你发疯了啊!
  
   4 自身消耗的 DOS 攻击
  
  这是一种老式的攻击手法。说老式,是因为老式的系统有这样的自身 BUG 。比如 Win95 (winsock v1), Cisco IOS v.10.x, 和其他过时的系统。
  
  这种 DOS 攻击就是把请求客户端 IP 和端口弄成主机的 IP 端口相同,发送给主机。使得主机给自己发送 TCP 请求和连接。这种主机的 漏洞 会很快把资源消耗光。直接导致当机。这中伪装对一些身份认证系统还是威胁巨大的。
  
  上面这些实施 DOS 攻击的手段最主要的就是构造需要的 TCP 数据,充分利用 TCP 协议。这些攻击方法都是建立在 TCP 基础上的。还有其他的 DOS 攻击手段。
  
   5 塞满 服务器 的硬盘   
  通常,如果 服务器 可以没有限制地执行写操作,那么都能成为塞满硬盘造成 DOS 攻击的途径,比如: 发送垃圾邮件。一般公司的 服务器 可能把邮件 服务器 WEB服务器 都放在一起。破坏者可以发送大量的垃圾邮件,这些邮件可能都塞在一个邮件队列中或者就是坏邮件队列中,直到 邮箱 被撑破或者把硬盘塞满。   
  让日志记录满。入侵者可以构造大量的错误信息发送出来, 服务器 记录这些错误,可能就造成日志文件非常庞大,甚至会塞满硬盘。同时会让管理员痛苦地面对大量的日志,甚至就不能发现入侵者真正的入侵途径。 向匿名 FTP 塞垃圾文件。这样也可以塞满硬盘空间。   


   6 合理利用策略
  
  一般 服务器 都有关于帐户锁定的安全策略,比如,某个帐户连续 3 次登陆失败,那么这个帐号将被锁定。这点也可以被破坏者利用,他们伪装一个帐号去错误登陆,这样使得这个帐号被锁定,而正常的合法用户就不能使用这个帐号去登陆系统了。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值