杨海峰,陈明锐
(海南大学信息科学技术学院,海南海口570228)
互联网中存在大量的安全威胁,因此,建立一个安全的网络环境,以保证数据信息的安全性和隐私性,阻止黑客等不法分子通过非法入侵方式窃取和破坏数据,这是互联网发展的必然要求.最初通过防火墙来防御入侵行为[1],但这种静态安全技术已经不能满足当下互联网的安全需求.入侵检测系统是以硬件和软件为基础,监控从网络流入主机的数据,同时检测非法入侵活动,它能对企图入侵或正在进行或发生过的入侵行为进行识别,并及时发出报警,能提供实时入侵检测,因而它是一种有效的安全措施.当前攻击活动的数量和破坏性日益剧增,入侵检测系统已经成为政府机构和企业公共安全设施的主要构成.Snort是一种轻量网络入侵检测系统[2],它基于特征比对方式建立了异常特征数据库,可实时地进行数据分析,并检测入侵行为.鉴此,笔者在Snort的基础上设计出一种新的方案,从而进一步提高了Snort系统的检测效率.
Snort是一个开源的入侵检测系统[5],它采用特征比对方式,通过预先定义好的异常特征规则来识别入侵行为.Snort的工作原理是对流入的数据包进行分析,根据预先定义好的规则进行模式匹配.它使用二进制的格式化tcpdump文件或纯文本文件来记录捕获网络数据包,tcpdump是一个捕获网络数据包的软件程序,能把捕获的包保存在格式化的tcpdump文件中.Snort是基于规则的入侵检测系统,用户可以将自己定义的规则加入到特征库中.由于Snort具有良好的扩展性和可移植性,因此,这也是选择Snort进行扩展研究的原因之一.Snort入侵检测系统由以下几部分组成:
1)数据包捕获和解析引擎 网络入侵检测系统首先要捕获所有传输到监控网卡的网络数据,Snort包捕捉引擎利用Libpcap/Winpcap函数库对数据进行捕获,该函数库是由Berkeley大学的Lawrence Berkeley国家实验室研制开发的.捕获后的数据首先被传输到解析引擎进行处理,然后解析引擎对各个协议的数据进行解析处理,以便进一步提交给检测引擎进行规则匹配.
2)预处理器 数据包要经过一系列的预处理之后才能传输到检测模块进行监测.每一个预处理插件都是根据数据包的不同属性对数据包进行处理,在对不符合规范的数据包进行加工修改之后传输给检测模块,或者直接丢弃该数据包,发出报警.
3)检测引擎 检测引擎是Snort系统的核心,Snort将检测规则存储在一张二维链表中,当网络数据和二维规则链表发生匹配时则产生报警,报警信号传输到输出插件做进一步处理.Snort还可以根据用户的需求向规则链表添加匹配规则,从而提高了Snort检测机制的灵活性.
4)输出插件 输出插件接收来自检测引擎,预处理器和解析引擎产生的报警信息,对报警信息进行进一步的处理,并以日志的形式存储数据记录.
Snort是基于规则的网络入侵系统,它有一套灵活的规则定义语言[6],用户可以根据实际需求改变现有的规则或是添加新的规则.每一条规则包括2个部分:规则头和规则选项.规则头中包括规则动作(检测到入侵时触发的动作)、协议(TCP,UDP,ICMP)、源和目标的IP地址以及端口信息.规则选项部分由各种判断是否引发报警的条件组成,这些条件用来帮助检测引擎对相应入侵活动产生报警.一条Snort规则如图1所示.
图1 Snort规则
图1中括号前的内容为规则头,规则头的第1部分表示规则动作,它的值可以是 log,alert,pass,activate,dynamic,当输入数据跟规则发生匹配时,则响应指定动作,例子中规则动作的值为alert,表示如果发生匹配,则产生一个警报;第2部分是协议类型,包括TCP,UDP,ICMP;第3部分表示源地址的IP地址;第4部分是端口号,例子中any any表示检测来自任意IP地址和TCP端口的数据包,如果协议部分是ICMP,则不定义端口号部分;第5部分表示数据流的流向;第6部分表示目的地址,例子中该部分值为10.1.1.0/24,表示一个C类网的所有IP地址,80是目的端口,指HTTP(超文本传输协议)的端口号.
图1中括号内的内容为规则选项,由一个或多个选项组成,每一个选项包括关键字部分和值部分,选项之间用分号分割开.选项内容包括数据包相关特征说明、规则的相关说明、规则匹配后的动作和对选项的附加说明.例子中包含2个选项content和msg,表示当发现数据包中有“cgi-bin/phf”内容时,Snort会发送报警信息“CGI-PHF access”.
针对图1中的规则,网络数据如果符合以下要求,则与该规则发生匹配并产生一条警报信息:
1)该数据是一个TCP数据包;
2)该数据来自任意IP地址和任意TCP端口;
3)该数据的目标地址属于10.1.1.0/24的C类网络,端口号为80;
4)该数据包含“cgi-bin/phf”字符串.
传统的基于Snort的入侵检测[7-9]系统虽然能够有效地处理小规模的网络流量,但是随着互联网的快速发展,不断涌现出新的问题.传统检测系统是被动检测入侵活动,不能即时地主动发现安全隐患,且存在丢包漏报的现象.为了改善入侵检测系统的检测能力,笔者提出了一种新的基于Snort的设计方案,在Snort的基础上加入了对未知入侵活动的检测,把不符合一定规范的数据特征动态加入到了Snort异常特征库中,实现了对未知入侵行为的检测和阻止.
2.1 方案设计 笔者在Snort系统原有功能模块的基础上新增了规则数据库、优化处理模块以及流出数据处理模块.规则数据库存储经Snort过滤掉正常数据的特征,优化处理模块负责对规则数据库按照一定规则进行优化,并把可疑行为的特征从特征数据库提取出来,加入到Snort的异常特征数据库.流出数据处理模块负责把经Snort过滤掉的正常数据格式化,然后存储到特征数据库中.输出模块实现对入侵活动结果的响应,笔者在原有输出模块功能的基础上加入了可视化输出接口,以可视化形式显示数据信息.基本结构如图2所示.
图2 改进优化方案的基本结构
下面重点介绍新增的几个模块:
1)输出模块和流出数据处理模块 输出模块的工作是对检测引擎发出的报警信号产生响应处理,并反馈信息到显示终端供用户及时浏览.笔者设定Snort工作在入侵检测模式,它把流入网卡的数据包与异常特征规则库进行一一匹配,若发生匹配则通知输出模块,由输出模块产生警报事件或写入日志文件.
流出数据处理把经检测引擎过滤掉的正常数据按照一定格式导入到预先定义好的特征数据库中,输出模块可以调用特征数据库向用户显示数据信息.
2)优化处理模块 优化处理模块是该系统的核心模块,它的作用是对特征数据库里的记录进行优化处理.数据库每个记录的属性除了包含源地址、目的地址信息和数据特征之外,还包含该数据特征出现的频率.优化处理模块从数据库中提取特征名称和频率2个字段,基于频率字段对数据流进行监测.
笔者预先对每一个特征的频率设定一个阀值,阀值的大小由网络的大小和该特征被触发的几率决定,例如将某一条特征的频率阀值设为325,如果该特征频率字段的值大于325,则表明该数据存在异常,这时候触发处理模块从特征数据库中提取该特征的完整信息并进行格式化处理,然后加入到Snort的异常特征数据库中,当出现未知的异常入侵行为时,某一特征在特定时间段内频繁访问主机,采用以上方法可以有效地把此类入侵行为及时反馈给系统,并将该入侵行为的特征动态插入到Snort异常特征库中,Snort可以及时拦截该入侵行为并发出警报.频率字段需要每隔一特定时间段进行归零处理,即每小时进行一次归零,表示计算某特征数据每小时出现的频率.该模块处理流程如图3所示.
图3 优化处理模块流程图
此外,规则数据库还包括以下几方面的优化:
1)根据协议对规则进行分类;
2)源地址和目的地址以及端口的惟一性;
3)频率高的规则移到数据表顶端;
4)定期删除过期规则.
以上对规则数据库的优化一方面缩短了检索时间,另一方面便于用户观察入侵检测系统的活动信息.每隔一个特定时期,笔者将未被激发过或频率较小的规则从数据库中移除,避免规则数据过于庞大,即把这个时间值设定为1周,每隔1周对数据库中的规则进行1次清理.
2.2 改进设计方案的优势 互联网对数据安全的要求不断提高,本文分析了Snort基于规则库入侵检测系统的优点和不足,在此基础上提出了改进方案,实现了对未知入侵数据的有效监控,提升了互联网的安全指数.以下是改进后的系统的几点优势:
1)该系统根据特征的出现频率检测未知入侵,并及时把存在异常的数据特征动态加入Snort异常特征库,实现了对未知入侵数据的阻拦.
2)特征数据库按照协议进行分类,便于用户统计和观察流入数据的分布,用户可以通过可视化工具直观地观察数据相关信息.
3)该结构是基于Snort系统的改进优化,继承了Snort良好的适应性和扩展性.因此,可以通过增加检索引擎来适应更大规模的网络,也可以通过可视化信息显示接口连接不同终端来显示信息.这种可扩展性有利于今后做进一步的研究,以不断增强软件的功能.
笔者在百兆局域网中搭建实验所需的环境,基于Windows操作系统,采用Snort 2.8.5.3 for Window版本,数据库为SQL Server2000.
用主机1负责发送数据包,主机2进行入侵检测,主机3负责规则数据库的优化处理以及Snort规则库的管理.主机2包括Snort规则库和检测引擎模块,负责对流入数据进行检测.未被检测为入侵行为的数据从主机2流出并流入主机3,主机3包含笔者定义的特征数据库和优化处理模块,将流入主机3的数据按照一定格式提取特征,并将该特征存入特征数据库.优化处理模块负责对该主机上的特征数据库进行分类以及各规则的频率检测.把系统的检测部分和规则数据库的优化管理部分分别配置在2个主机上,这使得各部分的任务分配更加明确,也为以后规模更大的网络提供了良好的配置结构.
3.1 试验1 试验对改进后的入侵检测系统和原Snort系统进行了整体性能的比较(见图4).从图4中可以看出,在网络流量较小的情况下,Snort改进后的系统所截获的攻击数量都很高,能够保证网络传输数据的安全性.但当网络流量不断增大时,Snort检测到的攻击数目不断下降,丢包现象不断加剧,而采用改进后的检测系统,在网络流量未达到300 Mbps时,所检测到的攻击数目都保持在稳定的数量等级;但随着网络流量的继续增大,开始出现丢包现象,检测到的攻击数量有所减少.与Snort原检测系统相比,改进后的系统的检测能力有较大提高.
3.2 实验2 本实验对改进后的系统进行了独立测试,检测了系统对不同攻击类型入侵行为的捕获能力以及对未知入侵行为的捕获能力.由于实验数据量相对较小,因此只将各个规则的频率阀值设定为小于10的静态值,这个值为多次试验而得到的经验值.由主机1发送4种类型的入侵行为,每种类型分别包含已知特征的入侵和未知特征的入侵,其数量如表1所示.
图4 入侵数据拦截量对比
表2和表3是针对入侵数据的检测结果,总检测率=总的拦截数量/(已知特征入侵数量+未知特征入侵数量)×100%,未知特征入侵检测率=未知特征入侵拦截量/未知特征入侵数量×100%.系统总的检测率=拦截总量/入侵总量=88.7%.未知特征入侵的检测率=未知特征入侵行为拦截总量/未知特征入侵总量=72.9%.
表1 各类型入侵行为数量
表2 对各类型入侵的检测率
表3 对各类型未知入侵的检测率
通过以上实验可以看出,改进后的入侵检测系统优于原Snort系统,对于未知特征的入侵行为具备了有效的识别检测能力.
Snort是基于特征的入侵检测系统,它对于不包含在特征库中的入侵行为不能有效地进行监测.为此,笔者在Snort的基础上建立了新的特征数据库,存储被Snort过滤掉的数据,当某一行为的频率超过一定阀值时,则检测为入侵行为,并将其动态加入到Snort异常特征库中,从而实现了对该行为的拦截.为了得到性能更好的入侵检测系统,需要对阀值的设定提供更好的方案,以降低误检率.此外,系统还提供了可视化信息反馈接口,将流入数据和入侵行为的信息显示给用户.对于动态地设定特征频率字段的阀值以及为用户提供更友好的信息显示平台,将是下一步的研究重点.
[1]刘洋.计算机网络安全与防范浅析[J].科技创业家,2012(2):105.
[2]GO'MEZ J,GIL C,PADILLA N,et al.Design of a Snort-Based Hybrid intrusion detection system[J].Lecture Notes in Computer Science,2009,5518:515-522.
[3]史志才,夏永祥.高速网络环境下的入侵检测技术研究综述[J].计算机应用研究,2010,27(5):1606-1610.
[4]王冬霞,张玉辉.基于Snort入侵检测系统的研究与设计[J].科技广场,2011(9):117-119.
[5]齐建东,陶兰,孙总参,等.入侵检测工具—Snort剖析[J].计算机工程与设计,2004,25(1):36-38,48.
[6]赵志伟,陈宝.Snort规则的分析与研究[J].黑龙江科技信息,2008(14):87.
[7]商可旻,武小年,杨丽,等.基于Snort的入侵检测分层结构的设计与实现[J].桂林电子科技大学报,2011,31(5):369-372.
[8]AYDIN M Ali,ZAIM A Halim ,CEYLAN K Gökhan.A hybrid intrusion detection system design for computer network security[J].Computers& Electrical Engineering,2009,35(3):517-526.
[9]韩国峰.基于Snort的入侵检测系统分析及应用[J].内蒙古科技与经济,2011(20):56-58.