为了加深理解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碎片值设置过小有些私服游戏网站打不开。

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

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

    DDOS的攻击原理和如何防护网站和游戏恶意攻击                 1-DDOS全名是Distribution Denial of Service (分布式拒绝服务攻击),很多DOS攻击源 ...

  2. 【CISP笔记】安全攻击与防护

    公开信息收集-搜索引擎 快速定位Google 搜索“5sf67.jsp”可以找到存在此脚本的Web网站Google 搜索“teweb/default.htm”就可找到开放着远程Web连接的服务器信息挖 ...

  3. TCP/IP网络协议攻击

    kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 这部分涉及: ARP缓存欺骗攻击 ICMP重定向攻击 SYN FLOOD ...

  4. TCP/IP协议原理与应用笔记18:构成子网和超网

    1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模      C类地址:少于255台主机的网络      B类地址:介于255~65535台主机的网络     ...

  5. TCP/IP协议原理与应用笔记17:IP编址(重点)

    1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...

  6. TCP/IP协议原理学习笔记

    昨天学习了杨宁老师的TCP/IP协议原理第一讲和第二讲,主要介绍了OSI模型,整理如下: OSI是open system innerconnection的简称,即开放式系统互联参考模型,它把网络协议从 ...

  7. IP 碎片重组

    IP 碎片重组 内核中的IP重组函数. struct sk_buff * ip_defrag(struct sk_buff * skb, u32 user) { ...... //如果内核范围超出限制 ...

  8. IP路由原理

    IP路由原理 一.什么是路由 路由是指导IP报文发送的路径信息. 二.路由表的构成 路由表是路由器转发报文的判断依据 三.路由器单跳操作 四.路由表查找规则 1.选择度量值小的进行转发 2.永远将下一 ...

  9. PHP获取IP地址的方法,防止伪造IP地址注入攻击

    PHP获取IP地址的方法 /** * 获取客户端IP地址 * <br />来源:ThinkPHP * <br />"X-FORWARDED-FOR" 是代理 ...

随机推荐

  1. C#两种创建快捷方式的方法

    C#两种创建快捷方式的方法http://www.cnblogs.com/linmilove/archive/2009/06/10/1500989.html

  2. HDU 1788 Chinese remainder theorem again

    题目链接 题意 : 中文题不详述. 思路 : 由N%Mi=(Mi-a)可得(N+a)%Mi=0;要取最小的N即找Mi的最小公倍数即可. #include <cstdio> #include ...

  3. HDU5596/BestCoder Round #66 (div.2) 二分BIT/贪心

    GTW likes gt    Memory Limit: 131072/131072 K (Java/Others) 问题描述 从前,有nn只萌萌的GT,他们分成了两组在一起玩游戏.他们会排列成一排 ...

  4. maven也是apache下的项目

    maven也是apache下的项目,你看maven官网了,域名都在Apache下

  5. 用Java编写你自己的简单HTTP服务器

    http://blog.csdn.net/yanghua_kobe/article/details/7296156 原文不错. 服务器支持的并发连接数,就是要开多少个线程,每个线程里一个socket监 ...

  6. iOS开发--自动布局

    距离左边的: 距离顶部的: 距离右边的: 距离底部的:

  7. Jlink更新新固件USB连接不上的问题

    采购新买了一个jlink,在调试过程中发现不能使用.拿到手后对jink上电以后,发现灯不亮,到网上查了一下估计是固件损坏的原因,经过一番摸索从新更新了固件,然后可以正常使用了,下面说一下步骤: 新版的 ...

  8. 物联网操作系统Hello China移植mile stone之一:移植基础版本V1.76发布

    Hello China V1.76版发布,这是向ARM系列CPU移植的基础版本.相对V1.75版,该版本主要做了如下的一些调整: 1.  通过宏定义的方式对内核实现了模块化,开发者可以通过开启或关闭预 ...

  9. 改变dijit的长度的心得

    改变dijit的长度要进入到里面改 如dijit/form/Select   (以table的方式来组合控件) 改变的时候,先找到dijitButtonContent 然后在后面样式文件里写就可以了 ...

  10. CodeForces485B——Valuable Resources(水题)

    Valuable Resources Many computer strategy games require building cities, recruiting army, conquering ...