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包:
     目的端口由用户在命令参数中指定;
     源端口是目的端口和1235进行OR的结果;
     校验和为0x0000,和ICMP的一样,没有计算,非法的UDP。
     净荷部分只有一个字符a。
     jolt2.c应该可以伪造源IP地址,但是源程序中并没有把用户试图伪装的IP地址赋值给src_addr,不知道作者是不是故意的。
     jolt2的影响相当大,通过不停的发送这个偏移量很大的数据包,不仅死锁未打补丁的Windows系统,同时也大大增加了网络流量。曾经有人利用jolt2模拟网络流量,测试IDS在高负载流量下的攻击检测效率,就是利用这个特性。
     
     三. 如何阻止IP碎片攻击

Windows系统请打上最新的Service Pack,目前的Linux内核已经不受影响。如果可能,在网络边界上禁止碎片包通过,或者用iptables限制每秒通过碎片包的数目。如果防火墙有重组碎片的功能,请确保自身的算法没有问题,否则被DoS就会影响整个网络。Win2K系统中,自定义IP安全策略,设置“碎片检查”。

在很多路由上也有" IP 碎片(Fragment) 攻击防御"的设置,网络规模在150台左右,建议IP碎片值设置在:3000包/秒,在海蜘蛛路由上测试过,如果 IP碎片值设置过小有些私服游戏网站打不开。

时间: 2024-10-14 04:36:55

IP碎片原理:攻击和防护的相关文章

DDOS的攻击原理和如何防护网站和游戏恶意攻击

DDOS的攻击原理和如何防护网站和游戏恶意攻击                 1-DDOS全名是Distribution Denial of Service (分布式拒绝服务攻击),很多DOS攻击源一起 攻击某台服务器就组成了DDOS攻击.在中国,DDOS 最早可追溯到1996年,2002年开发频繁出现,2003 年已经初具规模.当时网络带宽普遍比较小,攻击量一般都不会超过100M,国内几乎没有防护的方法 和产品. 而且攻击源IP都是伪造的,无法找到攻击源.一个硬件配置很好的网站,每秒几兆的攻

【笔记】安全攻击与防护

公开信息收集-搜索引擎 快速定位Google 搜索“5sf67.jsp”可以找到存在此脚本的Web网站Google 搜索“teweb/default.htm”就可找到开放着远程Web连接的服务器信息挖掘定点采集Google 搜索 “.doc+website”挖掘信息隐藏信息.mdb..ini..txt..old..bak..001……后台入口 网络信息收集-域名信息 whois用来查询域名是否被注册以及注册的详细资料. https://www.whois.net/ 信息收集技术-域名与IP查询域

Any IP实现原理

当IP地址和路由器不在一个子网的电脑上网时, 它会发包给默认网关.如果找不到默认网关,它会在局域网内发ARP广播.路由器就会回给电脑ARP请求自己的MAC地址.电脑就会更新ARP表里面的默认网关MAC地址,电脑就会通过路由器上网,而且路由器会更新路由表,从而达到通信成功目的. Any IP实现原理,布布扣,bubuko.com

TCP/IP协议原理与应用笔记17:IP编址之 IP地址简介(重点)

1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解主机的属性或者用途) (2)Address:在哪里,软件效率高. (3)Route(路由的标识):怎样到达 3. IP地址结构 (1)32 bit二进制地址 它模拟物理网的编址机制,如下示意图: (2)IP地址分类,如下: TCP/IP协议原理与应用笔记03:IP地址分类

在TestCenter中构造ip碎片包

前些日子要使用TestCenter构造udp碎片流量,自己对udp碎片的概念都还没有弄清楚就根据自己的臆想去构造,结果可想而知,后来也是请教了同事才知道怎么构造udp碎片包,如下图: 在ip头部“IPv4 Header”中有Control Flags和Fragment Offset(int)两个字段,只要对这两个字段进行一些设置,并加上UDP Header头部就可以构造出udp碎片的流量了.那么,这是为什么呢? 在ip包头部有标记字段(Flag)和分段偏移(Fragment Offset)两个字

TCP/IP协议族——IP工作原理及实例详解(上)

 IP协议详解 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址.目的端IP地址,知道IP分片和重组. IP数据报的路由和转发:IP数据报的路由和转发发生在出目标机器之外的所有主机和路由器上.他们决定数据报是否应该转发以及如何转发. IP服务的特点 IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的

[转]Oracle 11g RAC SCAN ip的原理及配置

原文地址:http://tiany.blog.51cto.com/513694/1421917/ Oracle 11g RAC SCAN ip的原理及配置   Oracle 11g RAC网格即插即用(GPnP)工作原理: SCAN概念:   先介绍一下什么叫SCAN,SCAN(Single Client Access Name)是Oracle从11g R2开始推出的,客户端可以通过SCAN特性负载均衡地连接到RAC数据库.SCAN提供一个域名来访问RAC,域名可以解析1个到3个(注意,最多3个

tco/iP协议族——IP工作原理及实例详解(下)

 IP协议详解 上一篇文章文章主要介绍了IP服务的特点,IPv4头部结构IP分片,并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程.本文主要介绍IP路由,IP转发,重定向和IPv6头部结构. IP路由 IP协议的一个核心任务是数据报的路由,即决定发送数据报到目标机器的路径.为了理解IP路由过程,我们先简要分析IP模块的基本流程. IP模块工作流程 从右往左分析上图,它首先对该数据报的头部做CRC校验,确认无误之后就分析其头部的具体信息. 如果该IP数据报的头

TCP/IP协议原理学习笔记

昨天学习了杨宁老师的TCP/IP协议原理第一讲和第二讲,主要介绍了OSI模型,整理如下: OSI是open system innerconnection的简称,即开放式系统互联参考模型,它把网络协议从逻辑上分为了7层.即如上图所示: 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后在转化为1.0,也就是我们常说的数模转换与模数转换).这一层的数据叫做比特. 2.数据链路层:定