入侵检测工具Snort的剖析及其在社区局域网中的应用

2013-08-20 01:54薛李滨潘瑜
网络安全技术与应用 2013年7期
关键词:局域网数据包规则

薛李滨 潘瑜

(1青海师范大学计算机学院 青海 810000;2江苏理工学院计算机工程学院 江苏 213001)

0 引言

随着网络的普及和互联网技术的飞速发展,网络安全问题日益突出,针对网络的攻击行为,在互联网中也变得越来越严重。防火墙技术,数据加密技术,安全路由技术等作为传统的网络安全保护的第一道防线已经阻挡不了越来越高科技的犯罪,这时迫切需要一种更加安全的机制,来对重要部门的网络进行实时的入侵跟踪和检测,而不是像防火墙那样仅在静态范围内对网络资源提供保护。因此,承担网络安全第二道防线任务的入侵检测系统[1](Intrusion Detection System,IDS)就应运而生。IDS能够实现对网络信息的收集、分析、攻击识别并及时做出反应, IDS能够检测出最常见的因特网攻击,这些攻击类型主要有三种:第一是拒绝服务攻击[2](Denial of service attacks),即IDS能够检测出通过使系统瘫痪的方式来拒绝向用户提供服务的攻击,第二种是分布式拒绝服务攻击(Distributed Denial of service attacks),即IDS能够检测出从多个分散的主机发动攻击,从而使一个系统的远程资源耗尽的攻击,第三种是特洛伊木马,即IDS能够对包含恶意软件并以合法形式出现的软件进行监控和检测。按照收集信息的类型不同,IDS分为基于网络和基于分布式的两种主要类型。因为目前国内外的IDS都是商用软件,价格昂贵,大多数的小型企业都希望能使用一些开源的IDS,Snort是一种开源的IDS,并且它是免费的,因此受到很多用户的欢迎。

1 Snort简介

Snort是一种免费、跨平台、用C编写的开放源码的IDS,它符合GPL[3],经过多次版本更新,已经发展成为高效稳定的IDS。

Snort支持扩充定制以及各种形式的插件,同时能够跟踪IP网络数据包的日志记录,探测异常的入侵轨迹,Snort兼具在功能强大的同时实现可移植性和代码简洁的优点,在Linux这些开源工具中,Snort数百万的下载量,使得其成为名符其实的行业标准。

Snort的特点:(1)Snort压缩后只有1.8M的简洁代码,却能够实现相对强大的功能,充分体现了它轻量级的优点。(2)除了Windows,Linux, Solaris, Snort还能够支持Irix,HP-ux等操作系统,跨平台的可移植性能极佳。(3)Snort能够分析TCP、UDP、ICMP和对端口扫描、缓冲区溢出攻击、CGI攻击等多种攻击方式进行探测,并能够探测可能存在的系统指纹特征。(4)Snort具有良好的可扩展性,能迅速探测到新的攻击。 (5)Snort符合GPL,使得所有个人或企业均可根据自身需求自由使用。

2 安全性分析

2.1 Snort的结构模型及工作流程

首先,数据包进入目标系统进行访问,接着数据包、审计数据等通过rub转数据copy给Snort,Snort就开始通过数据收集器进行数据收集了,收集完成后,通过其内部机制传递给Snort的检测器,检测器通过配置信息里的配置进行检测,然后通过数据库或规则知识库进行规则匹配,匹配完成后,若发现此行为是定义的入侵攻击方式,即开始报警,将报警信息传递给内在的控制器,这个控制器开始内在的控制操作,从而对目标系统进行安全性的防范,体系架构如图1所示。

其中检测器和知识库的检测流程分为两大步:第一步是规则解析流程,它首先读取规则文件,从规则文件中读取每一条规则并对其进行解析, 用对应的语法表示出来,然后在内存中建立规则语法树,规则语法树其实就是一个二维链表,规则由规则头和若干规则选项组成, 规则头存放源IP及端口、目的IP及端口、指向下一规则头的指针和指向归属于它的规则选项的指针。规则选项存放规则信息、关联规则头和下一规则选项的指针。所有的规则头组成规则头链(主链),规则选项以规则头为链首组成规则选项链(从链)。

第二步规则匹配流程,它对捕获到的每条数据报文同第一步所建立的规则树进行匹配, 根据数据报的IP和端口在主链中搜索对应的规则头,找到后在此规则头为链首的从链中匹配规则选项,如果发现存在规则匹配该报文,就表示检测到一个入侵行为,则根据规则指定的行为进行处理,如果搜索完所有规则都没有匹配到报文,就表示该报文是正常行为。

图1 Snort体系架构图

2.2 Snort程序源码分析

研究Snort源程序,应由几个主要的源文件入手:

snort.c(h)文件,实现main函数和一系列辅助函数,是snort的主程序文件。

decode.c(h)层层解码数据包后,分析其包的协议和特征,是snort的包解码文件。

Mstring.c(h)采用Boyer_More[4]算法,实现字符串的匹配。

rules.c(h)通过检测入侵所需要的函数和设置规则,检测攻击的特征。

log.c(h)利用多种编码格式记录日志和实时报警。

(1)Snort主程序及main函数分析

分析之前,首先来介绍一下在snort.c(h)的主程序文件中的两个重要数据结构,主程序中是通过PV来记录命令行参数,以便于Snort根据参数来确定怎样工作;主程序同时通过PacketCount这一起到计数器作用的变量来统计处理数据包过程中增加的全局变量pc的阈值。

有了这两个数据结构,就便于main函数展开工作了,在主函数中首先调用snortMain函数对一些主程序的缺省值进行初始化,然后对命令行的参数进行解析,最后将变量值和参数的解析结果存入pv结构中,得到pv的值,此解析结果便能确定具体的工作方式了;注意在Daemon的运行方式下,则是通过GoDaemon函数创建的重定向IO守护进程来实现的。

Snort采用文件读取和实时采集数据两种形式不同,实质相同的方式获取数据,在Unix中,网卡依然被当作文件作为openPcap的参数,打开采集过程,而其他系统中openPcap的参数即是网卡的接口。接着,根据不同的数据结构网络,定义不同拆分数据包的函数,具体实现过程是将全局变量datalink的值传入setPktProcessor函数中,设定出不同的解析拆包函数,存入指针变量中,不同的拆包解析函数都已Decode为首字母,存在于decode.c中。

拆分并解析数据包后,便可进行插件函数的初始化,需要初始化的插件包括预处理器(Preprocessor),定义日志和报警的规则插件(outputplugin)和检测插件(plugin)三种插件进行初始化后接着解析规则文件,最后根据报警和日志的模式,设置对应的函数,进行需要时的响应,若不需响应,则直接关闭采集的过程。

(2)数据包处理流程

图2 InterfaceThread函数实现流程图

对数据包的处理主要在InterfaceThread函数中实现,Interface Thread函数的处理流程如图2所示,在调用pcap_loop函数不断抓包后,存入重要的处理函数ProcessPacket函数中,该函数调用DecodeEthPkt函数,DecodeEthPkt顾名思义就是拆解数据包,首先按照以太网包头的协议层次类型,调用DecodeTCP,DecodeUDP等函数对下层协议类型进行判断并解码,系统进而调用Preprocess函数,进行预处理,最后调用Detect函数检测数据包,并对符合检测指定情况的规则,按照已定义的响应方式,进行报警和日志记录。

(3)Snort链表的建立

Snort首先按照对数据包的警报,记录,丢弃,激活,来保持空间的五种状态,分成五种规则类型,按照规则类型建立链表,用以存储所有的规则文件。Snort从Snort.conf中读取配置信息后,便利用ParseRulesFile()函数读取规则文件,接着利用Customize your rules(c)链接文件,最终建立链表。

3 Snort在社区局域网中的应用

3.1 社区局域网

社区局域网定义[5]:解释社区型局域网之前,首先要说一下社区的涵义。社区实际上是个小社会。社区是社会学的一个基本概念,是指聚居在一定地域中的人们所组成的社会生活共同体。目前我国城市社区的范围。一般是指经过社区体制改革后作了规模调整的居民委员会辖区。

随着计算机技术、网络技术的高速发展,社区建设也步入了数字时代,出现了社区局域网。社区局域网是指在社区中组建计算机局域网,通过计算机网络平台实现社区成员之间以及本社区与其他社区之间的信息交流与共享。社区局域网结构由接入网、信息服务中心和小区内部网络三部分构成。接入网指局域网与Internet的联接方式。信息服务中心是社区局域网的心脏,由路由器、防火墙等硬件设备和网络操作系统、Internet应用服务等软件组成。其内部网络是用户通过社区警务室连接到信息服务中心的高速公路和运载工具。社区局域网的主干网采用全连接的网络拓扑结构,接入网的用户端采用星型拓扑结构,可以使用有线网络、无线网络,以及有线无线混合网络。

3.2 社区局域网面临的主要安全问题

社区局域网除在技术层面有很多无法解决的问题外,网络安全而导致的病毒入侵等问题也给数据的安全带来很多隐患,常见的社区局域网面临的安全威胁主要有:

第一:软件的欺诈性降低了数据的安全性。

社区局域网中的大部分共享资源都具有“开放性”的特点,随着局域网开放性共享资源的增多,导致数据易被公开篡改或删除,安全性下降。

第二:局域网内部的安全防御脆弱。

局域网内部传输数据的速率极快,而防火墙虽然阻隔了外来的攻击,然而却无法阻挡来自局域网内部的攻击,例如内部其中某台感染病毒的电脑与服务器通信后,这台服务器便感染了病毒,进而在高速传输的局域网内部将病毒传染给所有与它通信的电脑。

第三:用户对安全软件的更新滞后而导致的病毒威胁。

社区局域网中的用户由于未在网络中及时更新防毒软件或系统补丁,从而造成安全软件的更新滞后,进而极易造成病毒的入侵并迅速传播至整个社区的局域网络。

第四:用户信息的泄密和IP冲突导致的数据丢失。

社区局域网用户使用U盘等移动存储设备及将外网电脑接入内网网线而造成的病毒入侵内网并在内网中快速传递。此外,随着用户的不断增多,IP地址会不时地出现冲突,也会导致数据的丢失。

与此同时,社区局域网大多因资金投入不足而架构简单,安全措施较少,而商用IDS价格昂贵,不宜应用到社区,这种安全防护上的真空为为病毒的传播提供了通道,埋下了信息的安全的诸多隐患。因此,迫切需要一种安全、高效、经济适用的安全防护与检测软件对其进行防护,Snort做为一种开源而免费的IDS就是一个不错的选择。

3.3 Snort在社区局域网中的应用

Snort是一种开源的轻量级IDS,应用于社区局域网除了可以简化网络结构,提高性价比,易于扩展网络等多种优点外,还有以下特点:

并行处理[6]:在不同的网络分支中分别安装IDS进行检测,从而避免在共享传输信道上因主干道流量过大而阻塞。

(2)特征库[7]的完备性:由于社区局域网具有复杂而庞大的系统特性,因而特征检测的数据库中是否包含足够的入侵方式和攻击种类,显得尤为重要。

(3)定义特定主机之间的特定协议:不属于已定义行为列表的操作被视为潜在的入侵,而特定系统之间使用特定协议通信,则被视为可接受的策略。

(4)攻击源追踪:针对假冒源地址的DDoS攻击,需要能有效地确定攻击者的来源,特别是对于局域网内部发起的攻击,应该能确定其大致物理位置。本系统要设计成一个网络IDS,可以实现以规则匹配为主的误用检测技术,同时也提供可选的基于异常检测的工作方式。

IDS系统的结构由检测核心和人机界面两部分组成,如图3所示。

其中,Snort内核包括数据包嗅探器,预处理器及检测引擎等功能。Snort内核通过嗅探器取得网络中的数据后,经检测引擎过滤所有的规则链表后,按照自定义的规则进行匹配,若相符合,则将检测出的数据整合报警信息输出到UI模块。

图3 社区局域网检测核心

由此可见,Snort成熟的内核在局域网的构建上具有动态灵活等多种优点,系统除根据需要自定义的规则外,还可利用Snort已有的大量规则,减少了原生代码量。

4 结束语

本文从IDS及 Snort两方面入手,对Snort系统架构和源码进行了详细的分析,在讨论社区局域网体系结构和网络安全面临的问题的基础上,以Snort为基础设计了一个轻型的、适合于社区局域网络的入侵检测系统原型,能够实现对社区局域网保护,为和谐社区的建设做出应有的贡献。

[1] 谷小刚.Snort的高效规则匹配算法[J].计算机工程, 2006,25(1):36—38.

[2] Steven J.Tepdump.Scott Lawrence Berkeley National Laboratory,2003.

[3] 陈际红.GUN GPL的规则与Linux在中国的发展.信息网络与高新技术法律前沿.北京:法律出版社,2003.

[4]SNorthcutt S.网络入侵检测分析员手册[M].北京:人民邮电出版社, 2000.

[5]张年年.利用社区局域网构建数字化学习型社区.临沂大学教育学院, 2011.

[6] 姚兰,王新梅.防火墙与入侵检测系统的联动分析[J].信息安全与通信保密,2002,(18).

[7] 钟诚,赵跃华.信息安全概论[M].武汉:武汉理工大学出版社,2003.

猜你喜欢
局域网数据包规则
二维隐蔽时间信道构建的研究*
撑竿跳规则的制定
数独的规则和演变
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
轨道交通车-地通信无线局域网技术应用
基于VPN的机房局域网远程控制系统
SmartSniff
让规则不规则
基于802.1Q协议的虚拟局域网技术研究与实现
局域网性能的优化