怎么利用layer7来进行应用层拦截 By sullybear
怎么利用layer7来进行应用层拦截 By sullybearPanabit提供了一个绝佳的应用层流控工具,由于编写了私有的应用层描述算法,因此识别和流控效果远远好于目前所应用的各类开源方案,同时由于采用了端点ip记录并跟踪的技术,使得流控性能提升非常大。本人非常赞同在P2P流控控制领域使用免费的panabit。
但是在非流控领域,所谓的流控想达到的效果其实也就是拦截想达到的效果,举例来讲,对股票软件进行流控的本质目的是想对股票软件进行控制、拦截。相信没人会给根本不占带宽的股票软件分配一个流控通道,因此想达到拦截的效果,使用ROS自带的L7来执行可以起到节省设备的效果。
言归正传,利用layer7也许已经无法正确识别网络中的各种复杂流量,但是layer7还是可以正常并准确地对某种应用起到DROP的效果。关键是在于DPI算法的其他应用,关键连接特征识别。
Layer7只利用了DPI算法的其中一种算法,而ipp2p则用到了两种。但是灵活运用DPI则要看对于网络连接的理解,例如,下载工具可以进行应用层加密,但是下载工具在连接服务器的过程中总有初始的连接是固定的,要么传输的是明文,要么传输的是对称密钥。
前一篇文章我讲述了如何正确理解连接过程,那么接下来我将对这个关键连接特征的识别进行详细说明。
首先说明下什么是关键特征连接,打个好比方那就是没有A连接,那么就不会有B连接,接着整个通讯过程不会被建立起来,这样达到了想要的DROP效果。比如:网际快车(flashget)的多资源请求过程(对于P4S的POST过程),OK,只要拦截这个过程,快车就变成了ie另存为。
同理,很多协议存在握手过程,只要拦截了初始握手过程,接下来基本都无法进行通讯,协议加密的原理是在握手过程中交换密钥,那么其实握手过程也成了layer7拦截应用的唯一途径。
于是来看看迅雷,同理于快车,不用在做任何解释,抓过迅雷包的人就明白迅雷是怎么做到多线程请求不同资源的,限制这个过程,迅雷就变成了ie另存为,至于迅雷私有的peer2peer协议,layer7官方给出了高人的表达式,至今还可以利用。说道迅雷,则一定要理解迅雷的工作原理,先不理迅雷的bt和电驴下载,迅雷可以利用ftp、http和迅雷私有协议进行通讯。其中http下载在请求后,迅雷客户端能利用多线程对不同的大量资源同时进行请求,这也是迅雷为什么拖带宽的原因。
再来看带宽浪费的大户网络电视,pplive、ppstream,这些个最狠的其实还不算下载,更是浪费了宝贵的上行带宽,抓包就能看到不断对外发送数据。Pplive是目前我测试过的唯一无法做到关键特征拦截的客户端,因为协议复杂,我测试了一段时间后不愿意在继续分析各种频道的资源来源。但正如我前面所说,无论怎么样的连接,加密也好,伪装也罢,总有一个过程是会暴露layer7特征的,pplive的特征来自于peer和peer之间通讯控制消息,请亲自去抓包分析。
有人说抓包出来一堆数据我怎么分析,头都乱了。好,俺就在这里以协议相当复杂的pplive作为代表,来讲述下怎么分析应用层数据包。首先,请理解pplive 的通讯过程,具体可以参考本人上一篇文章。其次,请用wireshark抓包,时间可以长点,会得到很长的一大堆数据包。在数据交换的那一部分(98%的包都是数据交换部分,注意是UDP),随便选择一条,并追踪该节点(不好意思请panabit原谅)。于是你就能得到本地和该ip的通讯包了,自然也包括我前面所说的关键特征包(握手包)了,呵呵,接下来识做了吧,再随便选择节点ip再次进行追踪,几个ip分析下来,关键特征就被你抓住了,恭喜你,你已经抓出了能DROP这个pplive的特征连接了,剩下的工作就不用我交代。当然也有可能,本地和该peer的通讯是没有传输控制消息(握手包)的,不要紧,这个时候就检查这个peer的ip来源,也就是本地和谁通讯而得到了这个节点peer的ip的。方法非常简单,在第一个握手包以前找,不出以外,你就能找到本地和某一节点peer的通讯,传输内容为一堆加密后的数据,我敢在这里说那堆加密的数据就是这么多节点的ip。(想理解这个过程,请查看网上牛人破解迅雷加密程序的那篇文章)。于是,照旧,找出本地与这个通讯节点的关键特征,其实就是本地与服务器或者中心节点的连接。也许你会说,如果这个过程也没有关键传输特征呢,那么我只能说恭喜,你抓的是emule客户端和ED2K超级节点之间的通讯过程。
讲完了抓包分析的方法,接下来说下怎么利用分析得出的数据编写正则表达式,正则表达式的教程就不说了,网上有的是教程,请各位随便看。我在这里再强调,假如不能确定某个非常像关键连接的连接是否就是能起到DROP效果的关键连接,则需要进行测试才能通过。测试方法介绍:1、从短到长。表达式特征要一个一个确定,假如你确定了第一个字符,那么你已经完成了一半了,接下来会顺风顺水。2、debug。比如某个位置的特征为多个字符的随机表现(),那么就需要进行debug来确定所有的可能性。3、灵活的用字符符号(.?+),debug过程发现正则表达式很难确定,这时则需要灵活随机使用符号来填充替代,举个例子就是qq.pat,请自己去参考。
洋洋洒洒一堆文字,只是把自己的经验给写了出来,希望能对大家起到一点帮助。我始终认为,多抓包、多理解连接过程才是编写layer7表达式的关键。
Liyong2009-12-16 不知道为什么添加附件不成功 顶楼主,强烈建议楼主多发些L7 造福大众!!! 顶楼主.写的不错. 恩恩 路过 阅了 大家一起研究l7限速 偶有些地方还是不懂。还要多学习。 枪手 滚! 楼上叫 什么 枪手 滚的 。你用这些词前,请了解这篇文章的重量,并对PA有所了解。
做到知己知彼,方能显示你的本事。
在这里,相信没人敢这样做,人贵有自知之明,知己知彼方为上,要不就是傻鸟一个。
我尊重PA的人。 楼主加油! 写得不错! 写了一堆没用的东西 太难得了,这个工作好辛苦哟。 不懂 楼主写的东西,要看懂估计是要些基础的。我没看懂。