网络安全 频道

IDS欺骗之Fragroute(2)

(2).IP碎片

   当路由器准备将IP分组发送到网络上,而该网络又无法将这个IP分组一次全部发送时,路由器必需将分组分成小块,使其长度能够满足这一网络对分组大小的限制,这些分割出来的小块就叫作碎片(fragmentation)。IP分组可以独立地通过不同的路径转发,使得碎片只有到达目的主机之后才可能汇集到一块,而且碎片不一定按照次序到达。到达目的主机后,目的主机会重组IP分片。

   当一个路由器分割一个IP分组时,要把IP分组头的大多数段值复制到每个碎片中,其中16位的标志符是必须复制的段,它能够唯一地标志一个IP分组,使目的主机能够判断每个碎片所属的IP分组,而且每个碎片中都偏移值,用来标记素片在IP分组中的位置。

   由于目标系统能够重组IP分片,因此需要网络入侵检测系统具有种族IP分片的能力。如果网络入侵检测系统没有重组IP分片的能力,将无法检测通过IP分片进入的攻击数据。不过,现在的网络入侵检测产品基本都具有良好的IP分片重组能力,因此基本的IP碎片问题不会给网络入侵检测系统造成太大的麻烦。但是,象碎片重叠之类的技术仍然会带来很大的问题。

   下面我们详细介绍如何使用IP碎片欺骗网络入侵检测系统。


基本的重组问题

   IP碎片通常会按照顺序到达目的地,最后的碎片的MF位为0(表示这是最后一个碎片)。不过,IP片有可能不按照顺序到达,目标系统必须能够重组碎片。但是,如果网络入侵检测系统总是假设IP碎片是按照顺序到达就会出现漏报的情况。攻击者可以打乱碎片的的到达顺序,达到欺骗IDS的目的。

   除此之外还有一个问题,IDS必须把IP碎片保存到一个缓冲区里,等所有的碎片到达之后重组IP分组。如果攻击者不送出所有的碎片,就可能使那些缓存所有碎片的IDS消耗掉所有内存。目标系统必须有处理这种情况的能力。一些系统会根据TTL,丢弃碎片。IDS必须以和目标系统相同的方式处理碎片。如果IDS接收被监视的主机丢弃的碎片流,就会被攻击者插入垃圾数据;如果IDS丢弃被监视系统接受的数据,就可能遗漏攻击数据流量。


碎片重叠问题

   目前,主要有两种技术用于逃避检测设备的监视。第一种就是使用尽可能小的碎片,例如:每个碎片只有8个字节(碎片最小8个字节),而每个碎片中都没有足够的信息,从而逃过检测。但是,现在的包过滤设备一般会主动丢弃这种碎片,入侵检测设备也会发出碎片攻击的报警,因此这种逃避方式很难奏效。

   另外一种方式就是碎片重叠。在IP分组中有一个13位的域(fragment offset),标识每个碎片在原始IP分组中的偏移。构造错误的碎片偏移值,可能造成碎片的重叠,如图:


|<--- offset=0 size=256 ---->|
+-----------------------+----+
| | | frag1
| | |
+-----------------------+----+
+----+----------------------+
| | | frag2
| | |
+----+----------------------+
|<-- offset=248,size=256 -->|
图2

   图2中,frag1负载的数据偏移值为0(也就是第一个碎片),大小是256,而第二个碎片frag2的数据偏移是248,造成了两个碎片的部分数据重叠。这样会使某个碎片的数据覆盖掉另一个碎片的重叠数据。而哪一个碎片重叠部分的数据被覆盖由操作系统决定。例如,如果frag1先于frag2到达,在NT/Y2K和solaris2.6中,frag1的数据会覆盖frag2的重叠数据;而在Linux中,frag2的数据会覆盖frag1的数据。而如果两个碎片不按正常顺序到达,也就是frag2先于frag1到达,在NT/Y2K和solaris2.6中,frag2的数据会覆盖frag1的重叠数据;而在Linux中,frag1的数据会覆盖frag2的数据。这些细节在使用fragroute之前一定要弄清楚。

   究竟是后面到达的碎片覆盖先到达的重叠数据,还是后到达碎片的重叠数据被覆盖可以使用fragroute软件包中的一个工具fragtest进行判断。fragroute的配置选项ip_frag size [new|old]用于IP碎片覆盖方式的配置,new表示后到达的碎片覆盖先到碎片的重叠数据,old表示后到达的碎片覆盖先到碎片的重叠数据。这两个选项是fragroute配置选项中比较难以理解的。

   对于碎片重叠,如果网络入侵检测系统的处理方式不同,就会造成漏报。例如,使用运行于Linux之上的snort作为网络入侵检测系统,而攻击者的攻击目标是Y2K系统。

0
相关文章