当前位置: 主页 > 网络知识 > 网络安全 > 详解IP碎片攻击

详解IP碎片攻击

时间:2009-12-31来源:互联网 点击:

本文简单介绍了IP分片原理,并结合Snort抓包结果周详分析常见IP碎片攻击的原理和特征,最后对阻止IP碎片攻击给出一些建议。希望对加深理解IP协议和一些DoS攻击手段有所帮助。
1. 为什么存在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:Don’t Fragment,“不分片”位,如果将这一比特置1 ,IP层将不对数据报进行分片。
MF:More Fragment,“更多的片”,除了最后一片外,其他每个组成数据报的片都要把比特置1。
Fragment Offset:该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。

另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。
每一IP分片都各自路由,到达目的主机后在IP层重组,请放心,首部中的数据能够正确完成分片的重组。你不禁要问,既然分片能被重组,那么所谓的碎片攻击是怎么产生的呢?
2. IP碎片攻击
IP首部有两个字节表示整个IP数据包的长度,所以IP数据包最长只能为0xFFFF,就是65535字节。如果有意发送总长度超过65535的IP碎片,一些老的系统内核在处理的时候就会出现问题,
导致崩溃或拒绝服务。另外,如果分片之间偏移量经过精心构造,一些系统就无法处理,导致死机。所以说,漏洞的起因是出在重组算法上。下面我们逐个分析一些著名的碎片攻击程式,来了解怎么人为制造IP碎片来攻击系统。
3. 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大小。所以你必须找另外的程式来发包,不过目前新版本的操作系统已搞定这个缺陷了,所以你
还是继续往下阅读本文吧。

顺便提一下,记得99年有“爱国主义黑客”(“红客”的前辈)发动全国网民在某一时刻开始ping某美国站点,试图ping死远程服务器。这其实是一种ping flood攻击,用大量的Echo  Request包减慢主机的响应速度和阻塞目标网络,原理和ping o’ death是不相同的,这点要分清晰。
4. jolt2
jolt2.c是在一个死循环中不停的发送一个ICMP/UDP的IP碎片,能使视窗系统系统的机器死锁。我测试了没打SP的视窗系统 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

站长资讯网
.
分页: [1] [2]
TAG: IP碎片,攻击
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言