基于Snort的入侵检测系统的设计

2014-05-15 01:24吴体辉
运城学院学报 2014年2期
关键词:插件数据包预处理

吴体辉

(运城学院物理与电子工程系,山西运城044000)

0.引言

随着计算机网络的迅猛发展,网络安全问题日益凸显。随着攻击水平与攻击手段的不断提高,防火墙单一的只能屏蔽外部攻击不能有效阻止内部入侵的防护方式已经不能满足网络安全的需要。为了加强对内部入侵的防护能力,我们引入了入侵检测系统。入侵检测系统的检测方式是:首先从网络中提取信息,然后将提取的信息与库中的信息进行比较来判断是否存在入侵的迹象。[1]入侵检测系统能够主动的、实时的、动态的阻止和拦截网络中的内、外攻击行为,有效的弥补了静态的防御工具防御能力不足的问题。入侵检测系统的核心是规则库,对于规则库中不存在的入侵行为检测能力较低。为了进一步提高入侵检测系统的检测能力,我们将神经网络引入入侵检测系统。引入神经网络的入侵检测系统能够通过自学习检测出新的攻击方式,[2]检测系统的漏报率会明显降低。因此,将人工神经网络技术应用于入侵检测系统已经成为入侵检测系统发展的方向。

1.入侵检测系统总体框架设计

本系统主要包含两个部:一是,神经网络的训练部分。采用BP算法对神经网络进行训练,训练数据用KDD CUP 1999数据集。二是,Snort检测部分。通过预处理插件将神经网络模块接入Snort系统用以实现对数据的异常检测。异常检测完成后,正常数据流再由Snort系统中的误用检测模块再次进行检测。检测完毕后,通常报警输出模块对检测到的异常进行报警。Snort检测部分是实时的,神经网络的训练部分是离线的。系统总体构架,如图1所示。

图1 系统总体构架Fig.1 Overall system architecture

2.入侵检测系统功能模块设计

2.1 数据包捕获模块

数据包捕获模块是入侵检测的基础,为整个入侵检测系统提供数据来源,是Snort系统的重要组成部分。数据捕获的效率、可靠性与准确性决定了入侵检测系统的整体性能。[3]

Snort系统数据包捕获是基于Libpcap开发的,Libpcap通过调用库函数来捕获数据包,它是一个跨平台的报文捕获程序。本文设计的Snort系统是在Windows系统下运行的,因此选择WinPcap(Libpcap在Windows平台下的版本)来捕获数据包。Win-Pcap包含三个相对独立的部分:网络组包过滤器(NPF)、低级动态链接库(Packet.dll)与高级动态链接库Wpcap.dll。网络组包过滤器(NPF)是一个虚拟设备驱动器,它从将从网卡驱动程序收集到的数据包转发给过滤器进行过滤。低级动态链接库(Packet.dll)是一个内核级的包过滤动态链接库,通过它可以直接访问网络组包过滤器(NPF)驱动程序的API来接收或发送数据包。高级动态链接库Wpcap.dll是一个与系统无关的、高级的动态链接库,用于为应用程序提供抽闲函数和监听接口。

Winpcap捕包与过滤的步骤设计,流程如图2所示。

(1)打开网卡,并将其设为混杂模式让网卡接收所有流过网卡的帧。

(2)Network Tap(回调函数)在获取监听命令后,从网络设备驱动程序处收集数据包并将监听到的数据包送给过滤程序。

(3)在Packet filter监听到有数据包送达时,中间驱动程序调用分组驱动程序将数据传递给所有参与进程的分组过滤程序。

(4)再由Packet filter的过滤程序决定数据包的接收、丢弃与拷贝。

(5)分组过滤后,将未过滤掉的数据包送入核心缓冲区。在缓冲区满了后,再将数据包拷贝到户缓冲区。

(6)关闭网卡

图2 Winpcap捕包与过滤流程Fig.2 Winpcap packet capture and filtering process

2.2 协议解析模块

协议解析模块是入侵检测系统的基础,直接影响到入侵检测系统的性能。该模块通过对捕获到的数据包进行协议分析来检测每个数据包的类型与特征。

在Snort内定义了一个核心数据结构——Packet数据结构。Packet结构通过将不同的指针指向捕获包的各个协议层来完成对协议的解析。Snort的协议解析过程类似于Windows中协议栈的处理过程,即从数据链路层到网络层再到传输层逐层地进行解析。具体而言,当捕获到数据包后,首先由解析函数ProcessPackte()函数根据数据帧的类型调用相应的链路层解析函数(DecodesilpPkt()),如由串行线上数据包解析函数(DecodesilpPkt())来对串行线上的数据包进行解析。在DecodesilpPkt()解析函数中,进一步调用IP协议解析函数(DecodeIP())对网络层的IP协议进行解析,最后调用传输层TCP解析函数对TCP数据包进行解析,并将其解析结果存储到相应的数据结构中。协议解析流程如图3所示。

图3 协议解析流程Fig.3 Protocol Analysis Process

2.3 数据预处理模块

经过协议分析后的数据包在进入检测模块之前,需被送入预处理模块进行预处理。预处理模块利用协议解析能将数据包分流到不同的规则库中,使所需匹配的规则大大减少,从而进一步提高检测的准确性与效率。具体处理过程如下:先调用输出插件的初始化函数(InitOutputPlugins())对所有输出插件进行注册。接着调用预处理插件初始化函数(InitPreprocessors())与插件初始化函数(InitPlugins())对检测引擎插件与预处理插件进行注册与初始化。需初始化的插件与相对应的功能如表1所示。

表1 需初始化的插件与相对应的功能Table 1 Output plug-ins features

2.4 采用神经网络的异常检测模块

(1)神经网络参数

训练数据采用KDD CUP 1999数据集,输出层神经元数与输入层神经元数分别定为4个与10个,隐含层神经元由实验确定。神经网络训练后,将偏置与连接权值存储到相应的文件中,由异常检测模块读取并且对这些参数进行计算,最后根据输出值与(0,1)的接近程度判断是否存在异常。

(2)神经网络的插入

Snort系统内含三种类型的插件:一是,以“spp_”开头的预处理插件。该插件运行在误用检测之前。二是,以“sp_”开头的处理插件。该插件运行在误用检测阶段。三是,以“spo_”开头的输出插件。[4]该插件运行在误用检测阶段与检测后。本设计将神经网络的异常检测模块设计成预处理插件。在误用检测之前的预处理模块完成对数据的异常检测。

2.5 误用检测模块

Snort是基于特征的入侵检测系统,以链表的形式将数据包与规则进行匹配来判断数据是否存在异常,匹配工作由检测引擎完成。检测引擎将数据包与规则库进行分析、比较、匹配,若数据包数据与规则库中的规则匹配成功,则表明该数据存在异常,此时由报警输出模块按指定的输出格式报警,同时丢弃掉该数据包。检测引擎具有两个功能:一是,规则的建立与翻译。Snort系统启动时,系统先由ParseRulesFile()函数读取规则文件,并且建立一个由指向检测插件的指针、规则树节点与选择树节点组成。二是,基于规则的检测引擎。当捕获的数据包到达误用检测模块时,Snort系统首先将检测规则头部与 Activation、Dynamic、Alert、Pass、log 这 5 中规则类型依次进行匹配。规则头匹配完成后,再依次进行规则树节点与选项树节点的匹配,若匹配成功,则按指定输出格式报警。匹配过程如图4所示。

图4 匹配过程Fig.4 matching?process

2.6 输出与报警模块

该模块的功能由输出插件来实现,输出插件负责显示与记录所需要的信息,并对检测到的异常数据包进行报警。Snort系统中输出插件与其他插件不同,进去它的入口不止一个,在不同的阶段会有不同的部件使用输出插件。Snort中输出插件主要有:Alert_fast、Alert_unixsock、Alert- syslog、Alert_full、Log_tcpdump、数据库输出插件。[5]

表2 输出插件功能介绍Table 2 Output plug-ins features

3.性能分析

3.1 试验设置

主机:CPU 为 Core(TM)2 T6600 2.20GHz,硬盘:500 G,内存:4GB。

运行平台:Windows XP Professional,l0兆自适应局域网。

测试数据:训练数据用KDD CUP 1999数据集。随机选取正常样本54669条。各种攻击类型一次攻击中选取攻击数据8341条。检测样本分布如表3所示。

表3 样本分布Table 3 Distribution of samples

参数设定:

(1)训练速率设定为0.13

(2)允许误差设定为0.002

(3)初始权值为一组非零随机数

(4)初始阈值为一组非零随机数

(5)输入层神经元个数为10

(6)输出层神经元个数为4

(7)隐含层神经元个数由实验获得

3.2 结果分析

表4 引入神经网络前后系统对各种攻击的检测率Table 4 Detection rate of system for various attack of before and after the introduction of neural network

实验结果表明,在入侵检测系统中引入神经网络作为异常检测模块后,系统的漏报率低,并且对各种攻击的检测能力较强。同时,随着神经网络隐含神经元的提高,系统的对各种攻击的检测能力明显提高。

4.结论

本文是在Snort系统的基础上设计的一款应用于IPv6协议的入侵检测系统。为了提高整个系统的检测率,在Snort系统引入了神经网络模块来对网络中的数据进行异常检测。异常检测后,将正常数据送到误用检测模块再次进行检测,这样在提高检测率的同时降低了系统的漏报率,使整个系统的性能得到显著提高。实验结果表明,该系统对真实网络环境具有较强的检测监控能力,能够给用户提供更强、更可靠的网络安全防护。

[1]张勇,张德运.基于分布协作式代理的网络入侵检测技术的研究与实现[J].计算机学报,2001(7).

[2]杨瑞伟,闫怀志,李雨飞.从入侵检测到入侵防护[J].计算机安全,2005(1).

[3]李鸿培,王新梅.基于神经网络的入侵检测系统模型[J].西安电子科技大学学报,1999(5).

[4]戴英侠,连一峰,王航.系统安全与入侵检测[M].北京:清华大学出版社,2002.

[5]张楠.新一代入侵检测技术及应用——基于协议分析技术的入侵检测系统模型研究[J].计算机安全,2004(12).

猜你喜欢
插件数据包预处理
求解奇异线性系统的右预处理MINRES 方法
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
高COD二噻烷生产废水预处理研究
自编插件完善App Inventor与乐高机器人通信
SmartSniff
基于预处理MUSIC算法的分布式阵列DOA估计
基于jQUerY的自定义插件开发
基于Revit MEP的插件制作探讨
基于膜过滤的反渗透海水淡化预处理