荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: fast (平淡), 信区: Security
标  题: DOS攻击原理以及常见方法介绍
发信站: 荔园晨风BBS站 (Tue Sep 11 13:16:51 2001), 转信

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 Num
ber)为合法,为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和Connectio
n 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位是服务器发送的A
CK位,ACK位是服务器发送的SYN位加1。即:SYN=11,ACK=101。
  这时,连接已经建立起来了。然后发送数据,<SYN=11,ACK=101><DATA>。这是一个
基本的请求和连接过程。需要注意的是这些标志位的关系,比如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。比如Win
95 (winsock v1), Cisco IOS v.10.x, 和其他过时的系统。
这种DOS攻击就是把请求客户端IP和端口弄成主机的IP端口相同,发送给主机。使得主机
给自己发送TCP请求和连接。这种主机的漏洞会很快把资源消耗光。直接导致当机。这种
伪装对一些身份认证系统还是威胁巨大的。
  实施DOS攻击最主要的就是构造需要的TCP数据,充分利用TCP协议。这些攻击方法都
是建立在TCP基础上的。当然还有更多的实施方法,可以自己去研究。

--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.127]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店