从上面的结果能看出:
* 分片标志位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在高负载流量下的攻击检测效率,就是利用这个特性。
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碎片攻击
* 视窗系统系统请打上最新的Service Pack,目前的Linux内核已不受影响。
* 如果可能,在网络边界上禁止碎片包通过,或用iptables限制每秒通过碎片包的数目。
* 如果防火墙有重组碎片的功能,请确保自身的算法没有问题,否则被DoS就会影响整个网络。
* Win2K系统中,自定义IP安全策略,设置“碎片检查”。
.
分页: [1] [2]
- 上一篇:网络安全入门教程
- 下一篇:实例介绍用IPFILTER充当企业防火墙