您的位置:首页 > 产品设计 > 产品经理

FPM (Flexible Packet Matching)技术介绍及应用[原创]

2009-02-25 22:56 316 查看
摘要:FPM是思科推出的下一代ACL技术,可以实现精确到bit的包抓取能力,其方便,快速的布署,及对其他防护技术的支持,使其在SDN中占据了一席之地。FPM在安全IOS 12.4(4)T以后版本的路由器系列(800到7200)中都得到了支持

FPM是什么?


FPM就是一组class-map和policy-map。它们提供2-7层的深层包检测能力,并且提供在包头或负载内任意位置的offset.

FPM的工作原理

FPM就是使用class-map 和 policy-map的语句组合,来定义协议栈,比对项和要执行的动作。FPM加载PHDF 来定义协议头特征,并允许对包负载中的字符和字节做offset,size,keywords,和正则表达式的操作.
FPM只支持包负载开始256个字节深度的检测能力,你可以通过CLI和XML(TCDF)进行FPM的配置。

优势:

1.当现行的过滤工具像(ACL)不能阻止进化过的攻击手段时,可使用FPM应对
2.快速响应:当客户马上就要中止攻击流量时,厂商来不及提供还要开发的signature(IPS)
3.更精确:指定到位的抓取,最小化误丢包

限制:

1. FPM是无状态化的,也是就是说,它不支持追踪通过协议动态协商的端口
2. FPM 不能执行IP 分片和重组
3. PHDF 描述的协议只支持静态的字段和长度
4. 在12.4(15)T以后的版本中,FPM可以支持256个字节的深度检测
5.FPM 也不能追踪“连接状态”

FPM存在的意义:

FPM对ACLs ,IPS,NBAR等技术起到了补充作用,它给予用户bit级的过滤能力。FPM很有用,在一个需要单包过滤的环境下面,FPM完成了这个需求。你是不是还在等待IPS开发出对付Thwart worms,病毒和其他一些攻击流量的signature? 或者你可以自己建立几个FPM的策略和动作来阻止它们!

FPM的应用:

FPM推出的原因就是用为网络中安全应用的补充,作为一种很好的防病毒和各种攻击的工具,它还可以对现行的一些应用软件起到很好的限制作用。这样企业节省了一笔购买相关软件甚至硬件设备的费用。笔者就使用FPM成功限制了阿里旺旺,QQ,PPlive等流行软件
 FPM推荐的一般布署指导:

1. 首先你要先搞清过滤包的特征,包括是否使用特定协议,特定端口,特定长度,是否在包中的特定位置有着特定的匹配位
2. 你是否有所需的相关的PHDF文件,如果没有,你需要去下载或者自定义这样的文件,并加载
3. 配置class-map , policy-map , 和 services-policy来识别流量和定义相关动作
4. 应用在指定接口上

下面,我就大概讲讲限制QQ的思路:
在限制IM软件时,QQ的限制显然要比其他IM软件要复杂些,我们先来讲讲QQ的工作机制----

在没有任何限制的情况下,QQ使用UDP包进行数据通信,并且端口固定为4000和8000;然而受到限制以后,QQ会使用80和443发TCP包进行通信。所以我们的封锁也要从UDP到TCP,进行跟踪的限制。
首先,我们从QQ UDP通信包的特征开始。我们可以用抓包软件,抓取QQ的UDP通信包进行查看比对。我们可以发现此时QQ UDP包的特征是从payload开始,都是以0x02开始,0x03结尾。我们可以写一条access-control的class-map来抓出以0x02开头的UDP包负载。
class-map type access-control match-any udp
match start UDP payload-start offset 0 size 1 eq 0x2
抓出来以后,我们就可以设置策略和动作了,并且应用在相关接口上。(当然,配置这条命令之前,你还必须定义一个UDP的stack)
这时,UDP的通信包就被干掉了。我们接着要想办法找出QQ TCP的通信包的特征码。这里应该是整个程序最难的一个地方,因为你抓包可以发现,QQ的TCP包端口和特征码都是一直变化的,你无法就指定的值进行包的过滤。
所以,我的思路变成了,对QQ的登录包进行过滤。如果能够封锁它发送登录的请求,那么,我们就能限制QQ的使用了!
问题是,我们怎么找到它发送登录请求的那个包呢?
这里使用了自己的QQ号码来找登录的请求包,即如果QQ要验证我的登录,必需要知道我的QQ号和密码吧,比如说我的QQ号是11223344,转化成16进制,就是0xAB4130,我在抓包软件中搜索此值,进行比对研究,就可以找到登录包的特征信息了。
class-map type access-control match-any tcp
match start TCP payload-start offset 5 size 2 eq 0x62
把它们应用之后,QQ就被彻底干掉了,嘿



路由器上没配什么,就配了个NAT,对QQ满屏deny几分钟后,发现其对路由器CPU损耗一直控制在1%以下



PS: 此方法有不完善的地方,即在抓UDP的时候,我没有实行对末尾为0x03的这个特征抓取,可能造成误丢包。希望感兴趣的人可以把它完善,也可以来和我一起交流,呵

由于是在实验环境下做的测试,根据FPM的无状态化逐包检测特性,在用户比较多的环境中,对常用应用过滤是很费资源的,思科也不是为了这样做的,呵
但是对于小些的企业,可能会有些用处的吧
对于特征码来说,应该不会改变的太频繁吧,至少QQ的好像是这样,因为这样会很大影响兼容性吧

配置FPM的命令和步骤可以查阅思科文档:
http://www.cisco.com/en/US/prod/coll...d80633b0a.html
本文出自 “My Way” 博客,请务必保留此出处http://zp2577.blog.51cto.com/208018/133116
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: