常见IP碎片攻击详解

IP分片攻击实战模拟 虚拟环境进行Dos(拒绝服务攻击)——— IP分片攻击实操 阅读详情
本文简单介绍了IP分片原理,并结合Snort抓包结果详细分析常见IP碎片攻击的原理和特征,
最后对阻止IP碎片攻击给出一些建议。希望对加深理解IP协议和一些DoS攻击手段有所帮助。


1. 为什么存在IP碎片
-=-=-=-=-=-=-=-=-=-=-=
链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一
个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包
要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操
作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为150
0
字节,一般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 Req
uest
数据包,目标主机在重组分片的时候会造成事先分配的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碎片,可以使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包:
目的端口由用户在命令参数中指定;
源端口是目的端口和1235进行OR的结果;
校验和为0x0000,和ICMP的一样,没有计算,非法的UDP。
净荷部分只有一个字符'a'。

jolt2.c应该可以伪造源IP地址,但是源程序中并没有把用户试图伪装的IP地址赋值给src_a
ddr,
不知道作者是不是故意的。

jolt2的影响相当大,通过不停的发送这个偏移量很大的数据包,不仅死锁未打补丁的Windo
ws
系统,同时也大大增加了网络流量。曾经有人利用jolt2模拟网络流量,测试IDS在高负载
流量下的攻击检测效率,就是利用这个特性。


5. teardrop
-=-=-=-=-=-=-=-=-=-=-=
teardrop也比较简单,默认发送两个UDP数据包,就能使某些Linux内核崩溃。Snort抓取的结
果如下:

第一个:
01/08-11:42:21.985853 192.168.0.9 -> 192.168.0.1
UDP TTL:64 TOS:0x0 ID:242 IpLen:20 DgmLen:56 MF
Frag Offset: 0x0 Frag Size: 0x24
A0 A8 86 C7 00 24 00 00 00 00 00 00 00 00 00 00 .....$..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 ....

* MF=1,偏移量=0,分片IP包的第一个。
* 结构图:

|<-------20-------->|<------8------>|<---------------28---------------->|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP | UDP | Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


第二个:
01/08-11:42:21.985853 192.168.0.9 -> 192.168.0.1
UDP TTL:64 TOS:0x0 ID:242 IpLen:20 DgmLen:24
Frag Offset: 0x3 Frag Size: 0x4
A0 A8 86 C7 ....

* MF=0,偏移量=0x3,偏移字节数为 0x3 * 8 = 24,最后一个分片。
* 结构图:

|<-------20-------->|<--4-->|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP | Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

如果修改源代码,第二片IP包的偏移量也可以为0x4,偏移字节数就是 0x4 * 8 = 32。

下面的结构图表示了接收端重组分片的过程,分别对应于偏移字节数为24和32两种情况:

|<-------20-------->|<------8------>|<---------------28---------------->|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP | UDP | Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| +-+-+-+-+
|<------------- 24 ------------->| Data |
| +-+-+-+-+
|<--4-->|

|
| +-+-+-+-+
|<------------------- 32 ------------------>| Data |
| +-+-+-+-+
|<--4-->|

可以看出,第二片IP包的偏移量小于第一片结束的位移,而且算上第二片IP包的Data,也未
超过第一片的尾部,这就是重叠现象(overlap)。老的Linux内核(1.x - 2.0.x)在处理这
种重叠分片的时候存在问题,WinNT/95在接收到10至50个teardrop分片时也会崩溃。你可以
阅读teardrop.c的源代码来了解如何构造并发送这种数据包。


6. 如何阻止IP碎片攻击
-=-=-=-=-=-=-=-=-=-=-=
* Windows系统请打上最新的Service Pack,目前的Linux内核已经不受影响。
* 如果可能,在网络边界上禁止碎片包通过,或者用iptables限制每秒通过碎片包的数目。
* 如果防火墙有重组碎片的功能,请确保自身的算法没有问题,否则被DoS就会影响整个网络

* Win2K系统中,自定义IP安全策略,设置“碎片检查”。


7. 更多资料
-=-=-=-=-=-=-=-=-=-=-=
[1] TCP/IP Illustracted Volume 1 : The Protocols
[2] Microsoft Security Bulletin MS00-029:
http://www.microsoft.com/technet/security/bulletin/ms00-029.asp
[3] BugTraq Mailing List, "Analysis of jolt2.c(MS00-029)":
http://www.securityfocus.com/archive/1/62011
[4] http://www.attrition.org/security/denial/w/teardrop.dos.html
[5] http://packetstormsecurity.org/0005-exploits/jolt2.c
[6] http://packetstormsecurity.org/Exploit_Code_Archive/teardrop.c
网络层协议基础(IP协议相关知识一)、IP分片 一、引入 网络层提供两种服务,一种是虚电路服务。这种服务是在通信时通讯双方建立一个逻辑连接,所有的分组都沿着这条逻辑连接按照存储转发的方式传送。这种服务方式提供的是可靠通信,存在于OSI七层模型的网路层中。 另一种服务是无连接服务,也是现在所普遍使用的,在该服务中,我们使用IP协议进行通信。这种服务存在于TCP/IP五层模型中。 两种服务的对比: 网络层的设计思路: 网络... 阅读详情

相关推荐

1.说明ipv4报文格式以及每个字段的作用2.描述跨网段数据帧转发过程3.实现ip报文分片4.实现arp代理实验5.描述常见的ARP攻击与防范方式

1.说明ipv4报文格式以及每个字段的作用2.描述跨网段数据帧转发过程3.实现ip报文分片4.实现arp代理实验5.描述常见的ARP攻击与防范方式

2301_76871571的博客 2727

网络攻击2——针对TCP/IP各个协议层的攻击

报文的长度字段为16位,即IP报文的最大长度为65535 B,死亡平Ping利用一些长度超大的ICMP报文对系统进行攻击。把报文的源地址和目标地址都设置成某一个受害者的IP地址(源是127网段地址,目的地址是服务器地址),这将导致受害者向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,伪造一个源地址(可以是真实的源地址,也可以是虚假的源地址)的SYN报文大量发给受害者,受害者收到后回应SYN ACK报文,但是受害者不会再收到ACK报文,这就导致受害主机保持了大量的半连接。

m0_49864110的博客 6296

IP分片重组的分析和常见碎片攻击 v0.2

标题:IP分片重组的分析和常见碎片攻击 v0.2作者:yawl@nsfocus.com主页: www.nsfocus.com时间:v0.1:2000/07; v0.2:2000/09一前言本文对linuxIP组装算法进行了分析,因为IP碎片经常用于DOS攻击,在文章后面我结合了一些攻击方法进行了更进一步的说明。内核主要参考版本是2.2.16,另外简要的

collide的专栏 3838

IP分片攻击

IP分片攻击

叫我小虎就行了的博客 752

IP碎片攻击-常见IP碎片攻击详解

IP碎片攻击-常见IP碎片攻击详解   2010-06-27 22:48:29|  分类: Security|字号 订阅 1. 为什么存在IP碎片   链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长

千重浪Linux技术工作室 4775

IP协议安全:泪滴攻击碎片攻击

一、IP协议介绍 IP协议是网络中最繁忙的协议。IP协议是一种best efforts协议,不保证可靠性,数据包可能重复、丢失;无连接协议,同一个连接中的多个报文被独立对待。IP协议主要定义了数据传送的基本单位;执行路由功能;主要规定了主机和路由器应该如何处理数据包;在什么情况下产生错误信息;以及什么情况下应该丢弃数据包。 先介绍现在普遍使用的IPv4,以下是报头格式: 我们可以看到,IP数据报...

weixin_42107987的博客 7037

IP碎片攻击

IP碎片攻击指的是一种计算机程序重组的漏洞。 1. 为什么存在IP碎片 链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。 我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节.

AIwenIPgeolocation的博客 613

IP安全,DDoS攻击、tearDrop攻击和微小IP碎片攻击

目录 arp安全 IP报文格式 DoS攻击 tear drop攻击 微小碎片攻击 IP欺骗,留后门 arp安全 以太网帧的type =0806 表示arp arp攻击:hack伪造arp应答包给target(当target使用...

weixin_30279315的博客 945

IP安全:DDoS攻击、tearDrop攻击和微小碎片攻击

攻击案例 IP欺骗,留后门 假设hack要攻击某主机x,x有一个terminal与某sever建立了连接。 假设tcp的seq是有规律的。 hack 向server发syn洪泛,保证server在收到syn+ack后,不会发送RST hack 伪造ip(与server不同)向x-terminal发包,寻找seq的规律 冒充server_ip,根据seq规律,与x-terminal件里tcp连接 ...

城志的学习笔记 1348

IP分片(IP fragment attack)

所谓Tiny fragment攻击是指通过恶意操作,发送极小的分片来绕过包过滤系统或者入侵检测系统的一种攻击手段。攻击者通过恶意操作,可将TCP报头(通常为20字节)分布在2个分片中,这样一来,目的端口号可以包含在第二个分片中。  对于包过滤设备或者入侵检测系统来说,首先通过判断目的端口号来采取允许/禁止措施。但是由于通过恶意分片使目的端口号位于第二个分片中,因此包过滤设备通过判断第一个分片,决定

sally2021的专栏 5268

5000字“肝”了这篇IP协议

目录 01、IP地址 1.1、简介 1.2、IP地址的组成 1.3、IP地址分类 1.4、特殊IP地址 1.5、子网掩码 02、IP数据包组成 03、IP分片解析 04、IP分片攻击 之前的文章《以太网数据包结构》可以看出图表示IP协议的数据结构 IP协议(Internet Protocol)又称之为网际协议,IP协议处于IP层工作,它是整个TCP/IP协议栈的核心协议之一,上层协议都要依赖IP协议提供的服务,IP协议负责将数据报从源主机发送到目标主机,通过IP地址作为唯一识别码。

人生一路,点滴记录 1万+

处理 报文_【网络干货】网络安全之分片报文攻击防范技术详解

分片报文攻击是通过向目标设备发送分片出错的报文,使得目标设备在处理分片错误的报文时崩溃、重启或消耗大量的 CPU 资源,给目标设备带来损失。分片报文攻击防范是指设备实时检测出分片报文并予以丢弃或者限速处理,实现对本设备的保护。分片报文攻击主要分为以下几类:1、分片数量巨大攻击IP 报文中的偏移量是以 8 字节为单位的。正常情况下, IP 报文的头部有 20 个字节, IP 报文的最大载荷为 655...

weixin_33019803的博客 1728

网测科技_IPV4报文分片攻击测试案例

IPV4报文分片攻击测试案例

Netitest的博客 545

IP Fragment攻击原理

IP Fragment攻击原理

路与肥的博客 2461

利用IP协议分片实施洪水攻击

什么是洪水攻击 在安全领域所指的洪水攻击是指向目标机器发送大量无用的数据包,使得目标机器忙于处理这些无用的数据包,而无法处理正常的数据包。在攻击过程中,目标机器的CPU的使用率将高于正常值,有时甚至会达到100%。这样将使目标机器的性能急剧下降。这有些象我们在日常生活中的电话,如果要使某个电话瘫痪,就不停地拨这个电话的号码,那么其它的电话就无法拨通这个电话,当然,要想不接到骚扰电话,唯一的方法是将电话线拔了。同样,要想计算机完全避免洪水攻击的唯一方法,就是不让这台计算机上网,更直接的就是将网线拔了。 洪水攻

亦在春风的博客 764
上一篇: 加州政府有意大规模普及 Linux 旨在削减成本
下一篇: 使用 netfilter/iptables 为 Linux(内核 2.4.x )配置防火墙
zcatlinux
博客等级 码龄22年 56粉丝 760原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值