ISSN1009-3044
E-mail:info@cccc.net.cn电脑知识与技术ComputerKnowledgeandTechnologyhttp://www.dnzs.net.cn
Tel:+86-551-569096356909
入侵检测系统Snort工作原理简析
晏金,苗放(成都理工大学信息工程学院,四川成都610059)
摘要:Snort是基于特征检测的IDS(IntrusionDetectionSystem),使用规则的定义来检查网络中有问题的数据包。Snort主要由四个软件模块组成,这些模块使用插件模式和Snort结合,扩展起来非常方便。这四个主要部件包括包捕获/解码引擎、预处理器、检测引擎、输出插件。主要介绍了Snort的处理过程以及Snort的四个主要部件的工作原理。关键词:Snort;括包捕获/解码引擎;预处理器;检测引擎;输出插件中图分类号:TP393
文献标识码:A
文章编号:1009-3044(2009)25-7105-03
AnalysetheWorkingPrincipleofIntrusionDetectionSystemwithSnortYANJin,MIAOFang
(CollegeofInformationEngineering,ChengduUniversityofTechnology,Chengdu610059,China)
Abstract:Snortisasignature-basedIDS(IntrusionDetectionSystem),usesrulestocheckforerrantpacketsinnetwork.Snorthasfourcomponents,mostofwhichtakeplug-instocustomizeSnortimplementation.Thesecomponentsincludepacketcapture/decoderengine,preprocessor,detectionengine,outputplug-ins.ThispaperporvidesadetailintroductionofSnortprocessandthefourmaincomponentsofSnort.
Keywords:Snort;packetcapture/decoderengine;preprocessor;detectionengine;outputplug-ins
随着计算机及网络的飞速发展,当越来越多的公司及个人成为Internet用户后,计算机网络安全作为一个无法回避的问题呈现在人们面前。企业和普通用户传统上采用防火墙作为网络安全第一道防线,但是随着攻击者知识的日趋成熟,攻击工具与手法的日趋复杂,单纯的防火墙已经无法保护网络安全。在这样的背景下,自九十年代以来,入侵检测一直是一个非常活跃的研究领域,并产生了很多相应的入侵检测系统,Snort就是其中最为知名的一个。
1Snort简介
Snort是当前最流行的开放源代码的NIDS(网络入侵检测系统),能够运行在多种操作系统和硬件平台上,包括很多不同版本的UNIX和Linux系统,以及Windows系统,硬件平台包括基于intel、PA-RISC、PowerPC和Sparc的平台。Snort是基于特征检测的网络入侵检测系统,使用规则的定义来检查网络中有问题的数据包。一个规则被触发后会产生一条告警信息。Snort有很多有用的功能,包括数据包嗅探和数据包记录,以及入侵检测。数据包嗅探是Snort最基本的功能,也是Snort工作的开始,Snort取得数据包后先用
预处理插件处理,然后经过检测引擎中的所有规则链,如果有符合规则链的数据包,就会被检测出来。
Snort是一个可扩展的入侵检测框架,Snort的预处理器、检测引擎和报警模块都是插件结构,插件程序按照Snort提供的插件函数接口完成,使用时动态加载,在不用修改核心代码的前提下让Snort的功能和复杂性扩展更容易。既保障了插件程序和Snort的核心代码的紧密相关性,又保障了核心代码的良好扩展性。
2Snort的工作原理
1)包捕获/解码引擎:首先,利用libpcap从网卡捕获网络上的数据包,然后数据包经过解码引擎填入到链路层协议的包结构体中,以便对高层次的协议进行解码,如TCP和UDP端口。
2)预处理器插件:接着,数据包被送到各种各样的预处理器中,在检测引擎处理之前进行检查和操作。每个预处理器检查数据
包是否应该注意、报警或者修改某些东西。
3)规则解析和检测引擎:然后,包被送到检测引擎。检测引擎通过各种规则文件中的不同选项来对每个包的特征和包信息进行单一、简单的检测。检测引擎插件对包提供额外的检测功能。规则中的每个关键字选项对应于检测引擎插件,能够提供不同的检测功能。
4)输出插件:Snort通过检测引擎、预处理器和解码引擎输出报警。
2.1包捕获/解码引擎
2.1.1数据包捕获
Snort通过两种机制来满足网络流量的需要:将网卡设置为混杂模式;利用libpcap从网卡捕获网络数据包。
网卡的默认工作方式是忽略所有不是自己的MAC地址为目的地址的流量。通过将网卡设置成混杂模式,可以监听网络中的所
收稿日期:2009-05-07
作者简介:晏金(1984-),男,湖北黄冈人,硕士研究生,主要研究方向为计算机网络安全;苗放(1958-),男,北京人,博士,教授,博
士生导师,成都理工大学信息工程学院院长,遥感与地理信息系统研究所副所长,并兼任成都市信息系统与软件评测中心技术总监,四川省图书馆信息化建设顾问,是四川省学术和技术带头人后备人选。
本栏目责任编辑:冯蕾网络通讯及安全7105
ComputerKnowledgeandTechnology电脑知识与技术第5卷第25期(2009年9月)
有流量。
数据包捕获函数库是一个的软件工具,数据包捕获库函数能直接从网卡获取数据包。Snort就是通过调用该库函数从网络设备上捕获数据包。它工作在OSI模型的数据链路层。在不同的平台上使用Snort系统,需要安装不同版本的Libpcap,比如在Linux和Unix系统下需要安装Libpcap,而在Windows系列系统下,就需要安装Winpcap。2.1.2包解码
对已经到达网卡并且被lipcap库函数捕获的数据包,Snort需调用解码引擎对数据链路层的原始数据包进行解码。Snort能够识别以太网、802.11(无线局域网协议)、令牌环以及诸如IP、TCP和UDP等高层协议。Snort将捕获的数据包解析后,存储在内存中指针指向的数据结构中。
2.2预处理器
Snort卓越的速度源于简单的规则匹配,如果只对每个包进行数字和字符串的匹配,处理性能就能适应快速的高负载网络。这种
检测系统的缺点是,如果攻击模式很常见,就会产生很多误报。如果模式过于特殊,又会产生漏报。造成这些缺陷的原因是特征语言的表达能力有限或IDS对协议的分析不够,一些IDS通过复杂的方法解决这一问题。它们有些使用协议异常检测来对不符合协议规范的包报警,有些则保持连接状态,并只对处于以连接TCP会话中的包报警。Snort则通过预处理器来实现这些功能,Snort有多个预处理器,包括frag2,stream4,http_decode,Telnet_negotiation,portscan,rpc_decode等常用的预处理器。这些预处理器的主要功能为:
1)包重组2)协议解码3)异常检测2.2.1包重组
基于特征的检测将包数据和定义良好的模式进行匹配。但是不能对跨包的数据进行检测。通过frag2插件将分片重组到一个完整包中,可以确保攻击者不能用IP分片来躲避检测。通过stream4插件进行流重组,我们可以用单包特征机制在TCP会话中跨越多个包进行模式匹配。最后,通过stream4的状态维护功能,特征匹配可以具备一些智能,来判断哪些包应该丢弃,哪些包处于链接中。用一句话总结,包重组预处理器帮助Snort检测匹配数据分布在多个包中的攻击。2.2.2协议解码
基于规则的检测提供简单的串/位匹配的功能,但无法检测HTTP协议中不同形式的URL,除非使用无限大的规则集。http_de-code预处理器帮助Snort在规则匹配前规范化URL。简单的规则匹配还可能因为数据中间插入的协议信息而失败。Telnet_negoti-ation和rpc_decode预处理器去除数据中不应该进行模式匹配的部分,rpc_decode预处理合并RPC消息分片,Telnet_negotiation预处理器去除Telnet的协议协商过程。用一句话总结,协议解码预处理对协议数据进行处理,使串匹配功能在更明确的数据上工作。2.2.3异常检测
基于规则的检测由于其简单性而工作可靠。它的过程精确,可以很容易地调整配置减少误报,也容易进行优化。但是,有些攻击无法通过这种模式来检测。Snort发展了协议异常检测:portscan预处理器允许Snort跟踪在一个时间段内接收的扫描类型的包,对超过阈值的情况进行报警;BackOrifice预处理器使Snort不用巨大的规则集就可以检测加密的BackOrifice流量。
2.3规则解析和检测引擎
Snort规则是基于文本的,它通常存在于Snort程序目录中或者子目录中。在启动的时候,Snort读取所有的规则文件,并且建立一个三维的链表。Snort使用列表匹配包和检测。2.3.1规则解析
Snort规则是Snort入侵检测系统的重要组成部分。规则集是snort的攻击特库,每条规则都对应一条攻击特征,snort通过它来识别攻击行为。每一条规包括两个部分:规则头部(RuleHeader)和规则选项(RuleOption)。规则头包含规则的行为、协议、源地址、
目的地址、子网掩码、源和目的端口信息。规则选项包含报警信息以及规则触发时提供给管理员的参考信息。例如:
alerttcpanyany->202.203.112.0/24any(content:“proxy-connection”;msg:“proxyuse”;)
这条规则述信息是:对任何访问202.203.112网段,tcp报文中含有proxy-connection的流量报警。在这个例子中,左括号前面是规则头。圆括号内的内容是规则选项,在规则选项中,content后面的内容为关键字,及需要匹配的字符串,msg后面的内容为规则触发时将显示的信息。Snort的规则定义中可以没有规则体,它们只是用来更好地定义所要进行的某种处理(记录、报警、忽略等)的数据包类型。只有当规则中的每一个元素都为真时,才能触发对应的规则动作。2.3.2检测引擎
Snort把具有相同条件的规则链接到一个集合中,用RTN结构来描述;规则选项对应于规则选项结点OTN(OptionalTreeNode),包含一些特定的检测标志、报警信息、匹配内容等条件,每个选项的匹配子函数(插件)放到FUNC链表中。只有当规则的各个条件都为真时才触发相应的操作。Snort解析规则时,分别生成TCP、UDP、ICMP和IP这4个不同的规则树,每一个规则树包含的三维链表:RTN(规则头),OTN(规则选项)和FUNC(指向匹配子函数的指针)。
当Snort捕获一个数据报时,首先对其解码,然后进行预处理,再利用规则树对数据报进行匹配。在规则树匹配过程中:根据该数据报的IP协议决定与哪个规则树进行匹配;然后与RTN结点依次进行匹配,当与某个规则头相匹配时,接着向下与OTN结点进行匹配。每个OTN结点都包含了一条规则的全部选项,它包含的一组函数指针就是用来实现对这些条件的匹配操作。当检测得知数据报与某个OTN结点的所有条件相符合时,即判断此数据报为攻击报文。
为提高规则匹配的速度,Snort采用了Boyer-Moore字符串匹配算法、二维列表递归检索(RTN和OTN)以及函数指针列表(称为“三维列表”)等方法。
3输出插件
抓包引擎从网络获取数据包并发送给分析模块,如果包触发了报警或日志事件,那么数据就发送给相应的输出插件。输出插件
7106网络通讯及安全本栏目责任编辑:冯蕾
第5卷第25期(2009年9月)ComputerKnowledgeandTechnology电脑知识与技术
在预处理器和抓包引擎执行完之后调用Snort报警和日志子系统时执行。
Snort输出插件的功能可以分为7个部分:版权和头信息;头文件、依赖关系和全局变量;关键字注册;参数分析和函数列表链;数据处理,格式化和存储;处理预处理器参数;清理和退出。下面详细描述插件的各功能。
1)版权和头信息现存的每一个输出插件都含有鲜明的版权信息,版权信息可以由插件开发者自主添加。插件的头详细描述了插件的用途,需要的参数、结果以及其他注释。
2)头文件,依赖关系和全局变量就绝大部分应用而言,文件以及它们之间的依赖关系对程序至关重要,而且要自释其意。全局变量在整个插件的任何部分都可以使用。
3)关键字注册输出插件通过配置文件和命令行引用和调用。用户必须为插件定义关键字并把该关键字连接到Snort,以便分析该关键字时作相应的特殊处理。
4)参数分析和函数列表链大部分插件在声明时需要传递参数,因此有必要写一些代码来处理这些数据。例如,当使用日志功能时,可能需要指定一个用于存储日志的日志文件名。除了分析参数,插件还必须链接Snort主引擎内的函数。
5)数据处理、格式化和存储数据处理、格式化和存储是插件最主要的功能,可以这么说,如果没有数据处理、格式化和存储这些功能,输出插件就不完整,没有用。
6)处理预处理器参数在有预处理器参数存在时,必须写数据处理代码来处理这些参数,这样在分析开始之前,Snort和输出插件就能区分预处理器单元。
7)清理和退出,在绝大多数情况下,需要在插件中包含清理内存、应用连接以及打开套接字的退出处理代码,这样可以提高Snort的执行效率。
Snort能够使用输出插件来汇报和表示数据,Snort支持多种日志格式,包括直接的文本头、PCAP、UNIXsyslog、XML文本数据库和多种关系数据库,这些输出插件使得报警和日志以更加灵活的格式和表现形式呈现给管理员。如果没有输出插件来处理、存储和格式化数据,包分析和流量分析是没有任何意义的。
4结论
因为Snort是基于特征/规则匹配的NIDS,所以Snort的检测速度非常卓越。同时,基于特征/规则匹配的检测技术不可避免的伴随着许多漏报和误报,但是,Snort的设计者具有前瞻性的将所有的Snort模块都设计成插件模式,扩展非常灵活,各式各样的插件可以最大限度的避减少漏报和避免误报。总的来说,对于专业的IDS管理员,根据当前网络环境合理的配置Snort,并及时更新规则库,基本上能够抵御所有已知的攻击,和大多数企业级的NIDS一样,对于新的攻击手段,Snort“反应”也不够迅速,Snort需要在异常检测和主动防御方面继续加强。
参考文献:
[1][2][3][4][5]
BrianCaswell,等.Snort2.0入侵检测[M].宋劲松,译.北京:国防工业出版社,2004:148-149.李洪宇.基于Snort系统特殊字符串匹配算法的研究[D].哈尔滨:哈尔滨理工大学,2005.何欣.基于Snort的入侵检测系统的研究与实现[D].武汉:华中科技大学,2004.
谷晓钢,江荣安,赵铭伟.Snort的高校规则匹配算法[J].计算机工程,2006,32(18):155-156.李晓芳,姚远.入侵检测工具Snort的研究与使用[J].计算机应用与软件,2006,23(3):123-124.
(上接第7095页)
参考文献:
[1]陈康,郑纬民.云计算:系统实例与研究现状[J].软件学报,2009,5:1337-1348..[2]唐敏.基于自然云的云计算模型[J].中国科技论文在线,2007.
[3]张渝江,岳伟.云计算叩开学校大门[J].中国信息技术教育,2008(12):93-94.[4]乐天.云计算还须迈过安全关[N].计算机世界报,2008-7-28(28).[5]陈谷.BIM云计算和云平台[J].程序员,2008(11):56-57
—云计算.eNet硅谷动力,2008.收稿日期:2009-03-12.[6]完全解读“IT明日之星”——
[7]中国云计算.http://www.chinacloud.cn/show.aspx?id=515&cid=17.[8]中国云计算.http://www.chinacloud.cn/show.aspx?id=5&cid=14.[9]Baidu.http://baike.baidu.com/view/1316082.html?tp=0_11.
[10]BarrosoLA,DeanJ,HolzleU.Websearchforaplanet:TheGoogleclusterarchitecture.IEEEMicro,2003,23(2):22-28.
[11]GhemawatS,GobioffH,LeungST.TheGooglefilesystem.In:Proc.ofthe19thACMSymp.onOperatingSystemsPrinciples.New
York:ACMPress,2003.29-43.
[12]DeanJ,GhemawatS.MapReduce:Simplifieddataprocessingonlargeclusters.In:Proc.ofthe6thSymp.onOperatingSystem[13]DeanJ,GhemawatS.DistributedprogrammingwithMapreduce.In:OramA,WilsonG,eds.BeautifulCode.Sebastopol:O’Reilly[14]ChangF,DeanJ,GhemawatS,HsiehWC,WallachDA,,BurrowsM,ChandraT,FikesA,GruberRE.Bigtable:Adistributedstoragesys-temforstructureddata.In:Proc.ofthe7thUSENIXSymp.onOperatingSystemsDesignandImplementation.
本栏目责任编辑:冯蕾网络通讯及安全7107
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务