主题 : IP碎片原理,攻击和防护
级别: 二分秋色
UID: 80768
精华: 0
发帖: 58
威望: 436 点
无痕币: 972 WHB
贡献值: 0 点
在线时间: 6(时)
注册时间: 2009-03-23
最后登录: 2018-05-16

0 IP碎片原理,攻击和防护

IP碎片原理,攻击和防护  
IP碎片原理,攻击和防护为了加深理解IP协议和一些DoS攻击手段大家有必要看看以下内容,也许对你理解这个概念有所帮助.先来看看IP碎片是如何产生的吧.      一.IP碎片是如何产生的       链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。       IP首部包含了分片和重组所需的信息:        | Identification |R|DF|MF| Fragment Offset |       |<-16>|<3>|<-13>|      参数解释:      Identification:发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。       R:保留未用。      DF:Dont Fragment,“不分片”位,如果将这一比特置1 ,IP层将不对数据报进行分片。       MF:More Fragment,“更多的分片”,除了最后一片外,其他每个组成数据报的片都要把该比特置为1。       Fragment Offset:该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。       了解了分片,也分析了IP头的一些信息,让我们看看IP碎片是怎样运用在网络攻击上的.
      二. IP碎片攻击       IP首部有两个字节表示整个IP数据包的长度,所以IP数据包最长只能为0xFFFF,就是65535字节。如果有意发送总长度超过65535 的IP碎片,一些老的系统内核在处理的时候就会出现问题,导致崩溃或者拒绝服务。另外,如果分片之间偏移量经过精心构造,一些系统就无法处理,导致死机。所以说,漏洞的起因是出在重组算法上。下面我们逐个分析一些著名的碎片攻击程序,来了解如何人为制造IP碎片来攻击系统。
      1. 攻击方式之ping o death       ping o death是利用ICMP协议的一种碎片攻击。攻击者发送一个长度超过65535的Echo Request数据包,目标主机在重组分片的时候会造成事先分配的65535字节缓冲区溢出,系统通常会崩溃或挂起。ping不就是发送ICMP Echo Request数据包的吗?让我们尝试攻击一下吧!不管IP和ICMP首部长度了,数据长度反正是多多益善,就65535吧,发送一个包:       # ping -c 1 -s 65535 192.168.0.1       Error: packet size 65535 is too large. Maximum is 65507       一般来说,Linux自带的ping是不允许我们做这个坏事的。      65507是它计算好的:65535-20-8=65507。Win2K下的ping更抠门,数据只允许65500大小。所以你必须找另外的程序来发包,但是目前新版本的操作系统已经搞定这个缺陷了,所以你还是继续往下阅读本文吧。
      2. 攻击方式之jolt2       jolt2.c是在一个死循环中不停的发送一个ICMP/UDP的IP碎片,可以使Windows系统的机器死锁。我测试了没打SP的Windows 2000,CPU利用率会立即上升到100%,鼠标无法移动。       我们用Snort分别抓取采用ICMP和UDP协议发送的数据包。       发送的ICMP包:       01/07-15:33:26.974096 192.168.0.9 -> 192.168.0.1       ICMP TTL:255 TOS:0x0 ID:1109 IpLen:20 DgmLen:29       Frag Offset: 0x1FFE Frag Size: 0x9       08 00 00 00 00 00 00 00 00 .........       发送的UDP包:       01/10-14:21:00.298282 192.168.0.9 -> 192.168.0.1       UDP TTL:255 TOS:0x0 ID:1109 IpLen:20 DgmLen:29       Frag Offset: 0x1FFE Frag Size: 0x9       04 D3 04 D2 00 09 00 00 61 ........a     从上面的结果可以看出:      分片标志位MF=0,说明是最后一个分片。      偏移量为0x1FFE,计算重组后的长度为 (0x1FFE * 8) + 29 = 65549 > 65535,溢出。      IP包的ID为1109,可以作为IDS检测的一个特征。      ICMP包:      类型为8、代码为0,是Echo Request;      校验和为0x0000,程序没有计算校验,所以确切的说这个ICMP包是非法的。      UDP包:  
Total 0.037371(s) query 3, Time now is:05-18 06:34, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛