教程:DOS攻击原理以及常见方法介绍

2008-02-23 06:46:43来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  已经有很多介绍DOS(Denial of Service,即拒绝服务)攻击的文章,但是,多数人还是不知道DOS到底是什么,它到底是怎么实现的。本文主要介绍DOS的机理和常见的实施方法。因前段时间仔细了解了TCP/IP协议以及RFC文档,有点心得。同时,文中有部分内容参考了Shaft的文章翻译而得。要想了解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,然后等待服务器的响应。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:黑客软件最常用的连接端口一览

下一篇:病毒假冒工行电子银行升级 窃个人信息