一种基于Linux的无线数据包过滤系统的实现
2010-02-23史永哲
史永哲, 张 健, 刘 静
(1.西安广播电视大学理工教学部, 陕西 西安 710002; 2.咸阳市特种设备检验所, 陕西 咸阳 712000)
0 引 言
在无线网络环境中,为了测试网络协议的安全性、一致性以及性能的优劣,通常需要捕获网络中传递的帧来分析当前网络协议的运作情况.而为了便于测试人员从网络帧中找到能正确反应协议性质的关键的帧,需要对帧进行过滤.为了测试无线局域网环境中IEE802.11协议族工作的情况,作者设计了无线数据包过滤系统,该系统通过设计一个高效的过滤器可对无线网络环境中的帧进行过滤,以便于测试人员对当前网络的运行状态进行分析.本文结合IEE802.11帧的结构,对CGF(控制流程图)的构造和工作原理进行了分析,研究了基于802.11协议族的无线过滤系统的框架以及在Linux无线网络驱动程序中的实现,并给出了系统实现中的关键部分CFG的自动化建立算法,该算法可以自动地建立CFG,动态设置过滤条件,具有较大的灵活性.本文最后对系统的可用性和可靠性进行了测试,并对测试数据进行了分析.
1 无线包过滤机制描述
下面利用CFG的特点,对无线局域网中的无线帧过滤机制进行分析.
1.1 CFG过滤模型的描述
无环控制流图CFG是一种过滤模型,在通信领域有着重要的应用价值.基于数据流分析的通信优化是以控制流图为基础的,回归测试中Rothermel算法和Harrold算法在测试集选择上使用的是CFG.本文使用CFG过滤模型的优点在于把对数据包的分析信息直接建立在图中,从而不需要重复计算,将过滤条件以最小冗余建立起来.CFG可以表示为一个有向图G=(V,E).V是控制流图的节点集合,节点v∈V代表一个谓词判断,E中的元素e∈E代表控制转换,如果谓词判断为true则转向右分支,如果为false则转向左分支.无环控制流图中有且仅有两个终节点,这两个节点一个代表数据通过,一个代表数据被丢弃.
1.2 802.11数据过滤
802.11协议提供了3种类型的帧:一类是控制帧,一类是管理帧,一类是数据帧.其中每一类帧包含多个子类型帧.在WALAN中,过滤机制对用户指定规则中需要的字段进行分析判断,以决定过滤结果,把需要的帧保留,而把其它的帧丢弃.本文设计的系统可以对802.11协议定义帧中的Type字段、Subtype字段以及Address1和Address2字段进行过滤.
图1 无线数据过滤中CFG示意图
本文设计的数据包过滤系统,CFG的入口有一个,出口有两个.图1所示的CFG,A点为入口,B和C点为出口.每一个节点代表一个判断,根据判断的结果选择一条分支,数据包从A点进入,经过每个节点的判断最终到达False节点B或者True节点C,此时数据过滤完成,到达False节点的数据包最终被丢弃.
路径a→b→c所表示的是一个信标帧在进入CFG后的数据流向,信标帧由A点进入,首先进行类型字段的判断,(判断依据由节点所给出的条件提供),如果判断结果为真,数据包则转向右分支,此时数据包进入子类型判断节点,经过再次判断,如果判断结果为真,则转向右分支,到达CFG的终节点True节点.
2 无线包过滤机制在Hostap驱动中的系统设计
2.1 无线包过滤系统的设计方法
本文设计的无线数据包过滤系统涉及用户态进程以及内核驱动,该系统由5部分组成:过滤器生成引擎、规则解释器、协议分析器、过滤调度器和过滤器.过滤器是系统的核心,无线网络中所有能到达无线网卡的数据经过过滤器处理,交由TCP/IP协议栈进行进一步的处理.规则解释器负责将用户规则转化为以数据结构形式描述的规则,协议分析器将802.11帧格式中本系统支持过滤的字段转化为“偏移,长度”形式的C语言描述.过滤调度器负责加载和卸载驱动过滤器.
2.2 无线网络数据在Linux系统中的处理过程分析
无线网卡将接收到的帧缓存于网卡的缓冲区中,之后产生硬件中断,系统的硬件中断处理例程将调用该中断注册时声明的回调函数进行中断处理,中断处理例程调用中断下半部来进行主要的事务处理.在中断的下半部处理中,处理程序将从网卡的硬件缓冲区得到数据并写入类似sk_buffer这样的结构中,再将数据加入到skb队列中,然后再次调用软中断进行下一步处理.MAC帧在驱动程序中经过一系列处理之后,由系统提供的IP层与MAC层的接口函数netif_rx()将其送入TCP/IP协议栈做进一步处理.
2.3 过滤传递方式介绍
Linux程序分为内核态和用户态,驱动程序运行在Linux系统的内核态,本文通过利用系统调用ioctl函数将用户态进程生成的过滤器安装于内核态驱动程序,在驱动程序中实现对数据的过滤.Linux对于无线扩展定义了一套新的ioctl函数,允许程序员定义自己的ioctl命令和相应的处理函数,我们可以使用Hostap驱动程序为程序员二次开发保留的指令集(SI-OCDEVPRIVATE+15)来扩展自己的ioctl.本文利用内核函数copy_from_user()将用户态的数据拷贝到内核空间,并在内核中安装过滤器.
图2 无线包过滤机制实现框架
2.4 系统框架
图2说明了无线网络环境下数据包过滤机制实现的框架,系统得到用户输入的过滤规则,调用规则解释器和协议分析器对数据包进行处理,并将结果输入过滤器生成引擎,过滤器生成引擎负责进行过滤器的自动化构造,之后过滤器调度模块调用ioctl将过滤器传入内核驱动,内核驱动接收到ioctl请求进行响应并安装过滤器,此时系统进入了数据过滤状态,用户可以随时发出卸载过滤器命令将底层的过滤器进行卸载.
3 无线包过滤系统的实现及测试结果分析
本节描述了在Linux系统下包过滤器自动生成的算法以及包过滤系统的测试方法,并对测试结果进行了分析.
3.1 CFG生成算法
算法约定:CFG包含4类谓词判断节点和两个终节点、类型判断节点、子类型判断切点、源地址判断节点、目的地址判断节点、True终节点和False终节点,所有的数据帧都看作数据流.
算法是将CFG从逻辑上分为两部分:一部分是二叉树,一部分是两个终节点,这样设计的优点在于可以使用递归思想生成二叉树,便于算法优化,算法将过滤规则对应到判断节点并最终构造出CGF.系统将所有的过滤规则一一对应生成判断节点,然后对二叉树中所有的叶子节点进行设置,将叶子节点的左右指针分别指向两个终节点,此时CFG生成算法完成.判断节点提供两种信息,一种信息是判断所依据的标准值,一种信息是偏移和长度,系统根据这个偏移和长度从数据流中提取相应的值与判断的标准值比较,根据判断结果确定下一步的数据流向.
CFG的算法描述:如果过滤规则为空,则空操作;否则
(1)根据过滤规则及当前的过滤状态确定过滤节点类型及节点的标准值,生成当前节点,判断当前节点,如果当前节点没有左右子树,则返回,否则进行下面的操作;
(2)生成当前节点的左子树;
(3)生成当前节点的右子树;
(4)将所有叶子节点的左指针指向false节点,右指针指向True节点.
3.2 测试及数据说明
本系统的测试过程为选择3台装有Zcom XI-626PCI无线网卡的终端与无线路由器AP(华硕WL500GD)使用802.11协议进行通信,在STA2(标识为2的无线网卡终端)上运行数据捕获程序(其中利用了libpcap库提供的接口)和文本设计的包过滤系统,捕获当前实验环境下的无线网络帧,并对这些帧进行过滤.
首先使无线AP与3个终端正常工作,然后激活STA2中的包过滤系统捕获数据,持续时间1分钟,将捕获得到的网络帧存放于文件中,之后对文件中的帧进行统计分析.在文本设计的测试中使用的过滤规则是保留MAC地址为00-11-D8-22-AC-EE的无线AP和地址为00-60-B3-2A-B9-29的终端STA1之间通信过程中所交互的管理帧.
测试结果输出:
Total_frame num:14
MAC: 00-60-B3-2A-B9-29-MAX: 00-11-D8-22-AC-EE frame_num 14
测试捕获的数据包总数为14,且全部都是STA1和AP之间交互的管理帧,测试结果正常,该系统可以将数据包有效过滤,满足了设计要求.
4 结束语
本文描述了无线数据包过滤系统在Linux驱动Hostap中的设计与实现,系统可以根据用户自己定义的规则自动生成CFG并对数据进行过滤.本文描述的基于4种过滤规则的无线数据包过滤系统,CFG中包含了4种过滤节点对应4种类型过滤,在更高级的应用中可以通过添加更多的过滤节点来满足对数据更精确的过滤需求.
参考文献
[1] 刘 渊,乐红兵.因特网防火墙技术[M].北京:机械工业出版社,2003:157-163.
[2] Stevens W R.TCP/IP详解[M].北京:机械工业出版社,2003:112-124.
[3] Terry William Ogletree.Practical Firewall[M].李之棠等译.北京:电子工业出版社,2004:89-94.
[4] 唐正军,刘代志.网络嗅探器Sniffer软件源代码浅析(1)[J].计算机工程,2006,28(1):11-13.
[5] 谢 斌,罗 勃.Linux网站建设高级编程[M].北京:机械工业出版社,2000:132-138.
[6] 杨 诚.网络安全基础教程与实训[M].北京:北京大学出版社,2005:79-81.
[7] SteveSuehring.Linux防火墙[M].北京:机械工业出版社,2006:211-216.
[8] 吴功宜.计算机网络高级软件编程技术[M].北京:清华大学出版社,2008:69-73.