主动/被动分析接口模块由Tcl扩展命令来构建。被动分析接口模块和主动分析接口模块实现WLAN数据包的发送和定制捕获,以及对安全分析系统中的被动分析和主动分析予以支持。
3.2 网络操作命令支撑库
安全分析终端提供以下两类低层网络操作命令:
(1) 网络通信支撑命令。包括有线口和无线口的网络通信。
有线口网络操作命令:它提供了一组访问数据链路层socket的命令,包括socket的创建以及通过socket进行数据包发送和接收。
无线口网络操作命令:实现WLAN数据包的定制发送或捕获以及设置网卡的工作模式和工作信道等。
(2)协议报文编、解码命令。在被动分析模块和主动分析模块中,需要对相关头部域进行解析或重组,以实现过滤报文或定制头部域的功能,这就需要编写报文编、解码命令。
3.3 被动分析接口模块
被动分析是基于捕获的数据包,因此捕获WLAN数据包是该模块实现的基础。从协议分析的角度来检测非法入侵和攻击,需要将捕获的数据包发往主控节点。每个安全分析终端都将大量的报文发送主控节点,为了减轻主控节点处理报文的压力,安全分析终端将根据主控节点的需要过滤掉部分报文。终端的被动分析接口模块就是实现这一功能的。
3.3.1 捕获WLAN数据包的实现
无线网卡有两种工作模式:正常模式和监听模式。在正常模式下,网卡工作在非侦听状态,只会接收到发给自己的数据包和广播包,而丢弃其他包。如果把网卡设置为监听模式,则可使网卡工作在侦听状态时,就可以接收某一信道上的所有数据包。为了实现程序的可移植性,本文使用Libpcap函数库捕获数据包。
用Libpcap捕获的数据包中,包含Prism头或者Radiotap头部。这是网卡添加在802.11MAC头部前的数据,它记录了信号强度、噪声强度和传输速率等物理层信息。由于Radiotap头部比Prism头部更能灵活地表达捕获帧的物理层信息,所以本文选择Radiotap头部来表达。
3.3.2 被动分析接口模块的实现
程序设计的难点是防止出现丢包现象。当某一信道上的负载很大时,受到处理速度的限制,将不能捕获到该信道上的每一个报文,即出现丢包现象。
为了解决该问题,本文使用多线程并发执行,主线程用来处理捕获到的数据包;子线程1用来不间断地捕获无线数据包;子线程2与主控机交互,实现过滤规则的改变。同时,还引入了先入先出的队列来缓存接收到的数据报文。在笔者搭建的环境中,当某一信道上的负载达到24 Mb/s、将队列长度设为500时,就能很好地解决这一问题。
为了实现队列操作的同步,本文使用信号量hAccess和hRecive,当子线程1接收到报文,并将报文存放到队列之后,将释放信号量hRecive,通知主线程从队列中提取报文来处理。主线程提取出报文后,释放信号量hAccess,通知子线程1继续接收数据包。
子线程2接收主控节点发送来的配置文件,并且执行该文件。配置文件的主要作用就是设置全局变量。在过滤前,主线程都重新获取全局变量的值,从而设定主线程的包过滤规则。采用的过滤规则主要有源和目的MAC地址过滤以及序列号过滤等。主线程、子线程1、子线程2的流程图分别如图4、图5、图6所示。
3.4 主动分析接口模块