阅读:1895回复:9
IP分片攻破关键字过滤和监测防火墙
关键字过滤和监测防火墙通常检测TCP数据中的关键字,并根据关键字记录和阻止你对某些站点的访问,但是这个技术有一个致命弱点- 无法对IP分片重组。WINDOWS系统或路由器都有一个MTU设置,并根据MTU对IP包分片。WINDOWS的MTU为1400,RFC规定的MTU是576。如果你将WINDOWS的MTU改为最小值88比特,你的所有TCP数据都会分成88比特的IP包,减去40比特的IP和TCP包头,数据内容只有44比特。对于关键字过滤和监测防火墙来说很难根据44比特的数据过滤。因为44比特甚至不能放下一个完整的HTTP请求, 但分片的IP数据包会在对端的主机由TCP层重组后在送到服务器的应用程序,所以对你的通信没有影响。监测防火墙不可能对IP分片重组,因为开销太大,而且分片的IP包可能通过不同的路由到达目的主机。缺点是44比特也可能有点大, 但这是WINDOWS支持的最小值,如果需要再小,就需要自己编一个软件对HTTP请求IP分片,不过很好编。用这种办法你可以通过公司的防火墙访问它禁止你访问的站点,不用去找二级代理或SSL代理,只不过浪费一些带宽,技术上很容易实现。如果你能发MTU为46比特的包,那么关键字过滤和监测防火墙就像垃圾一样在中间。只不过有效数据只是总数据的1/23, 不过现有的技术只对HTTP请求中的数据检测,并不检测你接受的数据,因为HTTP请求包只有100 个比特左右,检测开销小,接受的数据可能成千上万比特,检测开销太大,所以这种IP分片方法对你的接收速度没影响。
各位防火墙专家不知有何高见,如果谁能作一个软件在WINDOWS的TDI层对TCP中的HTTP请求分成小IP包片,这些防火墙应该失效了吧。 |
|
最新喜欢:jzyhum... |
沙发#
发布于:2002-11-08 14:43
有意思
|
|
|
板凳#
发布于:2002-11-08 15:24
有点搞头!!
|
|
地板#
发布于:2002-11-08 15:35
好,有谁试通过了说一声。
|
|
|
地下室#
发布于:2002-11-08 16:05
比较有意思,对了,trent,你是做什么的啊?方便告诉我吗?PM也行啊。
|
|
5楼#
发布于:2002-11-08 16:44
关注
|
|
|
6楼#
发布于:2002-11-08 18:01
关注!
|
|
7楼#
发布于:2002-11-08 23:38
已有类似工具,它们是用来对付本机IDS(Intrusion dectection system)的,但对于Internet Filtering引擎,因该原理是一样的。
http://packages.debian.org/unstable/net/fragrouter.html for WIndows 2000,Solaris Linux, BSD: http://naughty.monkey.org/~dugsong/fragroute/ http://rr.sans.org/encryption/IP_frag.php 中文说明 http://oldsite.linuxaid.com.cn/solution/showsol.jsp?i=413#ipfrag http://www.linuxaid.com.cn/articles/1/8/18252087.shtml 不过用于Redirect类似Google HTTP请求到N2H2检测机器的CISCO CSS 4-7层content switch可以最多缓存20个IP包以找到HTTP HEADER的尾部,DEFAULT是6个包,如果找不到以前版本的软件有一个Bug会RESET连接,现在好像不会。所以最好加一些乱序IP fragment和delay。 TCP协议中没有地方指示高层的应用协议,CSICO CSS必须从TCP数据的明码中找到HTTP header,找不到就认为非HTTP请求。所以实际要骗的是CISCO CSS contnet switch,只要它从IP分片中找不到HTTP请求,你的请求就不会送到N2H2去检测,但如果找到HTTP HEADER 找不到HTTP HEADER的尾部,不知道它找会不会丢弃这个包。新版本软件似乎不会,不知升级没有。所以最好在TCP刚开始的数据字段加一些空格或乱码。如果CISCO CSS 在你的IP包中找到它要Rediect的HTTP请求,它会将你的IP包的目的地址改为N2H2服务器的地址,就像你直接对 N2H2做PROXY请求,但你并不知道,这种工作方式叫透明PROXY(TRANSPARENT PROXY)。 N2H2的作用类似于PROXY,事实上它是和PROXY一起用的。N2H2会对你的IP在TCP层上重组,然后检查你的请求中的HTTP Header是否有禁止访问的内容,如有它会记录你的IP,并阻止你访问,如果没有它就将请求FORWARD到本机的PROXY服务器,由PROXY服务器完成剩下的工作。CISCO CSS 或其他公司的Content Switch毕竟只能对IP分片缓存,在其中找HTTP Header,没有TCP层重组的功能,它最多缓存20个IP包以找到HTTP HEADER的尾部。 http://www.securecomputing.com/index.cfm?sKey=753 有这种产品的详细工作说明,可以看出只对HTTP请求过滤 [编辑 - 11/9/02 by cyy1234] |
|
8楼#
发布于:2002-11-09 21:51
只要它是用Layer 4 交换机或类似的东西从一大堆TCP数据中找出HTTP数据方法就很多(反正它总要有一个方法找出HTTP,不可能对所有TCP数据包都双向过滤)。还有一个方法也是fragRoute给我的启示,就是找一个有源代码的Proxy服务器(很多)改一下,在它转发你的请求到类似Google的国外网站之前先发一些TTL值恰好等于你到中国电信网关跳数+1的乱码包(用Traceroute或NeoTrace找出跳数),然后才是正常的TTL的HTTP包,这样你的乱码包在到达目的主机前就被丢弃了,但中国电信的网关却会接受这些乱码,从而干扰它对TCP数据类型的判断,它总不能缓存所有的包吧?这种方法应该比Fragroute用起来更简单方便,可惜没有现成的软件可以试验,但是改包的TTL很简单不论是在Windows下还是在Unix下,找一个会网络编程的人半天就搞定了,这样都不用对IP分片了,对这种情况它就很难对付了。
这好像是对付HTTP过滤的一个好方法,任何技术总会有漏洞,有时技术本身没问题,但网络结构上有漏洞。HTTP或IDS过滤机制只要不和目的主机在一个网段,总路由跳数的差别,好像就可以被利用。HTTP或IDS过滤也需要靠防火墙或Layer 4的交换机将特定的协议请求转发到自己检查,如果破坏防火墙或Layer 4 交换机对应用层协议的判断,HTTP或IDS过滤就无法检查了。但对TCP以上的协议因为TCP中没有高层协议字段,只能靠检查TCP的数据判断。但任何防火墙和Layer 4交换机对每个TCP Session 只能缓存最初的几个或几十个IP包以发现高层协议,它们的缓存毕竟有限。 另外说一点,这种程序不能用普通的Sock编,要把Proxy的普通Sock改成RawSock,因为普通的Sock根据对方的TCP 滑动窗口的尺寸会等待乱码包的确认才会继续的,而且可能对乱码包发一些不必要的从发请求最后超时。用Rawsock自己生成TCP序列号绕过TCP层就不会有问题。另一个方法是用一个程序在你TCP连接建立后在普通Sock发包之前先用Rawsock发乱码包,在你的普通Sock发包的程序前加一段用RawSock发TTL值小的乱码包的程序,这种方法比较简单,而且由于你和对方主机已经先建立TCP连接(完成TCP握手,只不过还没有数据传送),你只要将得到的到对方的TTL数减去1或2(如果担心路由会改变可以多减一点)这样的程序通用型更好,也不用去找中国电信的网关了。 [编辑 - 11/9/02 by cyy1234] |
|
9楼#
发布于:2002-11-11 10:39
好东西,可以一试
|
|
|