Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15163973
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: 网络与安全

2008-05-31 21:01:22

发现者:Sinbad
  公布日期:2002年1月11日
  漏洞类型:远程拒绝服务
  受影响的版本:
  Snort 1.8.3 build 88
  
  测试的平台:
  Linux
  
  漏洞分析:
  Snort是一个轻量级开放源代码的网络IDS,它包含了丰富的攻击特征库,能够实时检测到网络中的攻击企图和异常情况。
  
  漏洞存在于源代码decode.c中对ICMP协议进行解码的函数DecodeICMP(),作者先从IP数据包中减去ICMP首部长度得出ICMP数据部分的长度:
  
  p->dsize = (u_short)(len - ICMP_HEADER_LEN);
  
  我们注意到,decode.h头文件中定义的ICMP首部长度是8个字节:
  
  #define ICMP_HEADER_LEN 8
  
  看看ICMP数据包的结构图,首部的8个字节包括了Type,Code,Checksum,ID和SEQ。
  
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -
  | Type | Code | Checksum | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 8字节
  | ID | SEQ | |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -
  | DATA |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  
  但是,在解析Echo Reply和Echo Request包时又从p->dsize中减去了id号和seq号的长度(4个字节),见下面的代码:
  
  case ICMP_ECHOREPLY:
  /* setup the pkt id ans seq numbers */
  p->dsize -= sizeof(struct idseq); //这里
  p->data += sizeof(struct idseq);
  break;
  
  case ICMP_ECHO:
  /* setup the pkt id and seq numbers */
  p->dsize -= sizeof(struct idseq); //这里
  /* add the size of the
  * echo ext to the data
  * ptr and subtract it
  * from the data size */
  p->data += sizeof(struct idseq);
  break;
  
  没搞错吧,第一此减去8已经是DATA长度了,现在又减去4,这是啥长度?Come on,我给你一个DATA部分小于4的数据包:
  
  # ping -c 1 -s 1 192.168.0.1
  
  看你怎么计算:
  
  # snort -dv host 192.168.0.3 and 192.168.0.1
  -*> Snort! <*-
  Version 1.8.3 (Build 88)
  By Martin Roesch (roesch@sourcefire.com, )
  192.168.0.3 -> 192.168.0.1 ICMP TTL:64 TOS:0x0 ID:0 IpLen:20 DgmLen:29 DF
  Type:8 Code:0 ID:9435 Seq:0 ECHO
  Segmentation fault (core dumped)
  
  呵,core dumped……
  
  
  如何修补:
  Snort的作者Marty发布了patch,很简单,就把ICMP_HEADER_LEN改成了4,这将包含在build 90版本中:
  http://www.securityfocus.com/archive/1/249623
  
  另一哥们chris把第二次减去4的代码给注释了,非拉着我一起发布安全公告:
  
  
  我最初贴在bugtraq上的邮件:
  http://www.securityfocus.com/archive/1/249340
阅读(384) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~