红联Linux门户
Linux帮助

最新发现工作体验,多指教(关于防火墙机制漏洞浅析)

发布时间:2010-09-26 17:02:16来源:红联作者:princevv
QQ : 419337407
今天下午帮学校做项目,正好要用到iptables,而且不是常规的iptables用法,(raw socket配合iptables做nat等等)。由于进展一直不顺利(虽然今天下午还是搞定了),最后才发现其实是linux的防火墙机制的漏洞造成的。

前提知识:
Linux防火墙机制(netfilter的4张表和5条链)
Socket编程基础知识

linux的内核级防火墙模块----netfilter,是自2.6内核引入的强大的防火墙系统,除了常规的静态防火墙,还有支持基于上下文的包分析等等功能。能够同时针对2,3层进行过滤。同是还整合了NAT等功能。很多基于linux的软路由就是用netfilter来实现几乎所有的防火墙功能。

虽然netfilter很好很强大,但是linux并不像思科的ios那样是专门针对网络的,linux本身极高的灵活性在某种程度上说正是造成了netfilter漏洞的主要原因。(只要有个bash,有个编译器,有个编辑器,你就能编译任何你想要的东西了)

netfilter大体的思想是在linux的tcp/ip协议栈特定位置处放置钩子函数,然后抓到对应的数据包然后做出对应的处理。
这种看似很好的做法,遇到了开源的linux,实际上就失去很大一部分的安全性。

入站方向上最大的弱点就是屏蔽不干净。
如果有程序编写的时候使用ncap或者raw socket之类的底层函数,而不使用高层的socket封装,那么在input/forward方向上的过滤则完全无效。使用底层函数的程序依然可以获取到它们想要的数据流(连同一堆不必要的流量一起获取)

出栈方向上就会出现同样问题。尤其是本地发起的数据,很多情况下是使用raw socket,不经过linux内核的协议栈,此时这些数据根本不会经过iptables的FORWARD/POSTROUTING/OUTPUT链,甚至不会被算进内核的包计数中。使用raw socket的程序,在经过内核的NAT的时候会完全被内核忽略,从而没有经过NAT过程。

对于转发的数据,除非出入站方向上有底层函数专门截取,否则所有数据都是经过内核处理,此时几乎没有安全性问题。

利用raw socket,程序就可以在完全绕过netfilter的过滤下正大光明的收发数据。
幸运的是,raw socket的使用需要root权限,否则raw socket会创建失败。(体现了root权限的重要性)
文章评论

共有 6 条评论

  1. 陈超 于 2010-09-28 00:45:05发表:

    高深,榜样,羡慕,努力

  2. liuhaichao 于 2010-09-27 23:23:47发表:

    何时能有这种境界呀 努力

  3. liuhaichao 于 2010-09-27 23:23:30发表:

    何时能有这种境界呀 努力

  4. 昊昊荡荡 于 2010-09-27 23:04:23发表:

    在linux的世界里,我最欣赏的莫过于linux的iptables 防火墙了!
    我学习Linux基本可以说是冲着iptables去的!
    但我的境界离LZ还有十万八千里!

  5. 豪兔 于 2010-09-27 22:12:27发表:

    看了也在想该如何达到楼主的境界!努力再努力!{:2_103:}

  6. fsdzdbm 于 2010-09-26 20:35:50发表:

    拜读达人作品