首页 -> 安全研究

安全研究

安全漏洞
关于ipchains firewall的漏洞

发布日期:1999-12-15
更新日期:1999-12-15

受影响系统:
Linux ipchains firewall
描述:
翻译:dspman

根据bugtraq的报告,在2.2内核的linux中的ipchain firewall存在如下的漏洞:
  
Data Protect的研究人员发现广泛应用在Linix系统中的ipchains firewall被发现具有潜在的安全漏洞。在某些情况下,一个攻击者可以通过防火墙的包过滤机制与某些机器通信,这些机器允许进入的数据包达到特定的端口。这类攻击和以往的讨论的分段(fragmentation)攻击不同,分段攻击者会利用分段来改写协议头中的TCP或者UDP信息。但是在这种新的攻击中,端口的信息被改写为被防火墙所屏蔽的端口,由此来达到攻破防火墙,取得端口控制的目的。

在本文中,我们会为2.2.10的内核提供一个补丁,用来修正这个错误。
  
程序描述
  
Linux ipchains firewall的代码中对IP的分段有特别的规定:IP的分段不包含供分析传输协议头的足够信息。从偏移0开始的分段因为长度不够而不能提供完整的传输头信息,将被当作偏移〉0的分段处理(在TCP中是〉1)。下面是相关的在ip_fw.c中的代码:
  
         if (offset == 0) {
                 unsigned int size_req;
                 switch (ip->protocol) {
                 case IPPROTO_TCP:
                         /* Don''t care about things past flags word */
                         size_req = 16;
                         break;
  
                 case IPPROTO_UDP:
                 case IPPROTO_ICMP:
  
                         size_req = 8;
                         break;
                 default:
                         size_req = 0;
  
                 }
  
                 offset = (ntohs(ip->tot_len) < (ip->ihl<<2)+size_req);
  
         }
  
  
我们可以看到,偏移为0的分段,由于太短而提供不了完整的传输协议头信息,被当作其他的分段而处理了。 这样,一个攻击者就可以进行如下的端口改写攻击了:
  

1. 攻击者发送一个分段,包括偏移0,IP_MF位和完整的传输协议头,这个协议头符合防火墙的过滤规则并且被发送到被攻击的主机。
  
2. 攻击者发送一个分段,包括偏移0,IP_MF位,并且规定长度为4个字节(这个是关键)。在分段中还包含了被防火墙屏蔽的端口。这个分段会被防火墙接收然后这些分段在被攻击的主机上重组,这样就覆盖了步骤1中的端口信息。
  
3. 攻击者发送一个分段,包括一个被清零的IP_MF位,标记该分段组的结束。
  
根据被攻击主机的重组分段的策略,步骤1和2可能要交换。
  
还有两条很重要的条件要满足:
  
1. 包过滤器必须在Linux的内核中被配置为CONFIG_IP_ALWAYS_DEFRAG。如果包过滤器在进行防火墙规则检查之前就重组了分段,那么攻击就失效了!
  
2. 包过滤器必须允许非第一个的分段通过。在Linux ipchains的how-to中是建议管理员选择CONFIG_IP_ALWAYS_DEFRAG或者建立这样的一条规则。有了这个规则后这类攻击将由于包过滤器的屏蔽后续分段而失效!
  


建议:
修复信息
  
如下的Linux内核补丁将关闭这个漏洞。
  
可能的修复方法是重新配置ipchains使它一直重组分段,或者把有关允许非第一个的IP分段通过的规则去掉。可以从ipchains的-f开关选项得到帮助!
  
以下是补丁:
  
*** linux.old/net/ipv4/ip_fw.c  Wed Jun  9 05:33:07 1999
--- linux/net/ipv4/ip_fw.c      Fri Jul 23 19:20:45 1999
  
***************
  
*** 37,42 ****
  
--- 37,45 ----
  
   * 19-May-1999: Star Wars: The Phantom Menace opened.  Rule num
   *            printed in log (modified from Michael Hasenstein''s patch).
   *            Added SYN in log message. --RR
+  * 23-Jul-1999: Fixed small fragment security exposure opened on 15-May-1998.
+  *              John McDonald <jm@dataprotect.com>
+  *              Thomas Lopatic <tl@dataprotect.com>
   */
  /*
  
***************
*** 644,650 ****
                default:
  
                        size_req = 0;
                }
  
!               offset = (ntohs(ip->tot_len) < (ip->ihl<<2)+size_req);
        }
        src = ip->saddr;
  
--- 647,666 ----
                default:
                        size_req = 0;
                }
  
!
!               /* If it is a truncated first fragment then it can be
!                * used to rewrite port information, and thus should
!                * be blocked.
!                */
!
!               if (ntohs(ip->tot_len) < (ip->ihl<<2)+size_req)
!               {
!                       if (!testing && net_ratelimit()) {
!                               printk("Suspect short first fragment.\n");
!                               dump_packet(ip,rif,NULL,NULL,0,0,0,0);
!                       }
!                       return FW_BLOCK;
!               }
        }
  
        src = ip->saddr;

浏览次数:7928
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障