Ip碎片随笔

作者: onlyHalfSoul | 来源:发表于2018-05-25 18:25 被阅读24次

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碎片随笔

    IP碎片原理:攻击和防护 一.IP碎片是如何产生的 链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度...

  • TCP/IP 学习碎片

    电路交换与分组交换 电路交换中,交换机主要负责数据的中转处理。计算机首先被连接到交换机上,而交换机与交换机之间则由...

  • 随笔碎片

    那一年,我想给她现在,她想要的却是未来; 这一年,我想给她未来,她想要的却是现在。

  • 碎片随笔

    其一 每天培训,面对高强度、高密度的思想激荡,若想将其全部吸收不太可能,如何选择就需要...

  • 随笔 | 碎片

    今早刷朋友圈,看到友友也在圈里发插花的照片,小小一枝花,承载的是美好生活的向往。 在早出晚归的生活中,唯有休息日才...

  • 碎片化时代,新媒体基本打法

    碎片化 #个人IP #粉丝 #新媒体 碎片化时代,新媒体打法: 1、稳住基本盘,远比争取对立面重要。 社交媒体时代...

  • 什么是 TCP 连接

    《HTTP 权威指南》阅读随笔 世界上绝大部分的 HTTP 通信都是通过 TCP/IP 承载的,TCP/IP 是全...

  • 修炼三年,成就个人IP

    #IP营销#修炼三年,成就个人IP: 每天进步一点点,三年成就个人IP! 每天拿出业余碎片化时间两三个小时,潜心三...

  • 随笔 | 秋日随感三则

    随笔 | 秋日随感三则 01 碎片化的信息,能够用碎片化的方式变成知识。但是要把知识变成智慧,则需要系统化思考和结...

  • 2021-09-24熬汤笔记

    写文当下心情不美好,源于主业淡季加班的异常,回家地铁上记下此文。 好在白天工作间隙有记录些碎片,依照碎片展开随笔吧...

网友评论

    本文标题:Ip碎片随笔

    本文链接:https://www.haomeiwen.com/subject/wlvujftx.html