资源描述
毕业设计(论文) 第 35 页
Snort规则分析与规则增加
摘 要
近年来,互联网得到了长足的发展,所以网络本身的安全性问题也就显得更为重要。网络安全的主要威胁是通过网络对信息系统的入侵,因此,如何通过网络安全系统对其进行检测,已成为众多网络安全手段的核心技术。
入侵检测系统作为防火墙的合理补充,能够帮助系统对付网络攻击,扩展了系统管理员的安全管理能力,提高了信息安全基础结构的完整性。入侵检测系统能够识别攻击并通过产生警告或者阻塞可疑活动的方式进行反应。Snort 是一个轻量级网络入侵检测系统(NIDS),通过误用检测来检测入侵。Snort规则是它的核心,是其检测入侵行为的知识库,并随着入侵方式的增多而不断的增大。在软件漏洞频繁出现,新型网络攻击和原有攻击的变种不断对计算机网络造成威胁和破坏的情况下,必需及时的增加新的规则来有效的检测入侵行为,提高Snort的检测能力。
Snort规则就是能检测网络上有入侵行为数据包的“一种简单的、轻量级的描述语言”,它提供了简单,灵活的方法描述入侵行为。而且它也在不断扩展,以更精确的描述网络攻击特征。本文给出了由入侵特征得出NIDS规则的方法,介绍了Snort的结构和处理流程,分析了Snort规则的语法结构以及如何优化规则来减少误报何漏报,提出了三种扩展Snort规则的方法并给出了实例。另外,针对两种网络攻击特征实例,增加了新的规则,把设计的新规则加入到Snort规则库中,然后模拟蠕虫病毒进行入侵攻击,通过查看Snort的警告信息测试新设计的规则是有效的。
关键词:攻击特征,入侵检测,规则
Snort Rules Analysis and Increase
Abstract
As the necessary complement to Firewall, Intrusion Detection System can help the compute system to deal with network attack, which expands the security manage ability of system administrator and enhance the integrity of information security system architecture. IDS are installed to identify attacks and to react by usually generating an alert or blocking suspicious activity. Snort is a lightweight Network Intrusion Detection System(NIDS), and it detects intrusion with misuse detecting technology. Snort rules, acting as a knowledge base when it detect invade activity, is its heart, and will argument as kinds of intrusions increase. Software leak appears frequently, new network intrusion and varieties of old attacks continually bring threat and damage to computer network, in such condition, we should add new Snort rules in time to detect intrusion effectively, and increase the detect ability of Snort.
Snort rule is a simple and lightweight description language which can detect the data package for intrusion in the network. It provides a simple and flexible method to describe intrusion activity. What’s more, it is developing, in order to describe the attack signature more exactly. In this paper, it presents the way to get NIDS rules from attack signature, and introduces the components of Snort and how it works; it analyzes the grammar structure of Snort rules and how to optimize rules to decrease false alarm and alarm failure; also, it propose three methods to expand Snort rules and give examples. Anymore, it adds new rules based on tow attack signatures to rule house, and simulate the attack of worm with a program, then check whether it is effective by examine alert information.
Key Words:Attack Signature, Intrusion detection, Rule
目 录
第一章 绪论 1
1.1课题背景 1
1.2 国内外研究现状 1
1.3 课题研究内容 3
1.4 论文结构 4
第二章 入侵检测基础 5
2.1入侵检测概述 5
2.1.1入侵检测技术 5
2.1.2入侵检测系统 6
2.2 入侵分析与NIDS规则 7
2.2.1网络入侵分析 7
2.1.2入侵特征与NIDS规则 8
2.3轻量级入侵检测系统SNORT 9
2.3.1 SNORT基本组成 10
2.3.2规则处理 11
第三章 SNORT规则分析 14
3.1SNORT规则简介 14
3.2 规则头 14
3.2.1规则行为 14
3.2.2协议 15
3.2.3源和目的IP 15
3.2.4源和目的端口 16
3.2.5方向 16
3.3规则选项 17
3.3.1content 选项 17
3.3.2uricontent选项 18
3.4优化规则 19
3.4.1合理定义规则头和规则选项 19
3.4.2自定义规则 20
第四章 扩展SNORT规则 21
4.1量身打造规则库 21
4.1.1规则库介绍 21
4.1.2修改规则库 22
4.2规则作为网络控制工具 22
4.2.1根据需要编写适当规则 22
4.2.1简单的防控规则举例 23
4.3根据网络分析数据添加规则 23
4.3.1网络流量分析 23
4.3.1针对某种攻击数据包编写规则 24
第五章 规则加入SNORT系统 26
5.1运行snort入侵检测系统 26
5.1.1以嗅探器模式运行 26
5.1.2以入侵检测模式运行 27
5.2把新规则加到SNORT系统中 28
5.3实验与结果分析 29
5.3.1模拟网络攻击 29
5.3.2验证规则有效性 30
第六章 总结与展望 32
6.1总结 32
6.2后续工作 32
致 谢 33
参考文献 34
1. 绪论
1.1 课题背景
近年来,互联网得到了长足的发展,所以网络本身的安全性问题也就显得更为重要。网络安全的主要威胁是通过网络对信息系统的入侵,因此,如何通过网络安全系统对其进行检测,已成为众多网络安全手段的核心技术。
随着互联网应用的扩展,网络攻击技术也不断提高。发现安全漏洞越来越快,覆盖面越来越广。过去只要安装微软系统漏洞补丁、及时升级杀毒软件病毒库,便可有效防范网页木马,但这种方法已被病毒突破。现在,很多网页木马绕开微软系统漏洞,转而利用播放器、聊天工具、网络电视、下载工具等国产应用软件的漏洞传播,涉及联众游戏、迅雷、暴风影音等多款软件。新发现的安全漏洞每年都要增加一倍之多,管理人员要不断用最新的补丁修补这些漏洞,而且每年都会发现安全漏洞的许多新类型。入侵者经常能够在厂商修补这些漏洞前发现攻击目标。警惕各种最新病毒和病毒变种的新闻不断出现,人们为病毒侵扰而恐慌,越来越多的企业为恶意攻击或病毒入侵付出了沉重的代价。
对于日益猖獗的入侵攻击,入侵检测系统在发现入侵行为和记录攻击指纹等发挥着重要的作用但是由于网络部署和NIDS产品的缺陷等问题,尤其是不断来袭的新型攻击,使得漏报和误报问题成为入侵检测系统的一个难点。
虽然入侵检测系统已经得到了广泛的应用,并在发现和防止入侵攻击的工作中立下汗马功劳,但是由于编程人员的不慎等各种原因造成软件漏洞很多,给入侵者提供了很多的途径破坏系统或盗取信息,更让人难以控制的是病毒的变种层出不穷,使得基于特征的入侵检测系统在对变种病毒的主动防御攻击方面漏报率较高。
本论文选题源自导师的一个湖南省科技攻关项目――基于告警相关和协议异常检测技术的入侵检测系统(2006FJ4110),规则分析与增加是该项目的一个重要内容。
1.2 国内外研究现状
对入侵检测的研究最早可追溯到20世纪80年代。1980年4月,James P Anderson第一次详细阐述了入侵检测的概念[1]。1987年,乔治敦大学的Dorothy Denning 和SRI/SL的Peter Neumann研究出了第一个入侵检测系统模型[2]。在20年的发展中,入侵技术方法上的综合化和复杂化,入侵规模不断扩大、入侵者呈现分布特性、入侵对象也有所转移和变化的特点,入侵检测系统(Intrusion Detection System,记作IDS)适应安全形势的需要,取得了很大的进展,正日益成为安全技术领域中一个重要的安全措施。特别是近几年,入侵检测系统不断采用新的技术和方法,在检测效率和性能上有了很大提高;所检测的数据对象不断扩大,而且逐步进行各种资源的关联分析;系统结构与功能不断延伸,逐渐与其他安全技术进行联动[3]。
入侵攻击技术与检测技术在一定程度上是相互促进的,为了准确、有效地识别出已知和未知的攻击,在入侵检测系统中不断采用优越的算法和技术,主要是人工智能技术、移动代理技术、数据融合和信息关联技术。同时,由于攻击呈现的分布式特点和犯罪特性,入侵检测系统在结构与功能方面也在不断地发展、变化,与其他安全技术逐渐进行联动与融合。
目前大多数IDS由以下三个基本的功能模块构成[4]。
事件提取:事件提取模块从信息源获取数据。数据的来源可以取自系统的不同层次,
可以是主机上的日志信息、系统状态变化信息,也可以网络上的数据信息,甚至是流量
变化等。通常以对网络、主机和应用层的监视最为普遍。
入侵分析:入侵检测系统的这一部分的作用在于对来自信息源的数据进行深入分析,判断是否正有入侵或已有入侵发生,并传递结果给处理模块。数据分析的方式多种
多样,最常见的分析方法是误用检测和异常检测。该模块是一个入侵检测系统的核心。
入侵响应 :入侵响应即处理。该模块的作用在于对系统所检测的入侵做出一组警报或警告。
Snort作为一个基于网络的入侵检测系统(NIDS),其工作原理为在基于共享网络上检测原始的网络传输数据,通过分析捕获的数据包,匹配入侵行为的特征或者从网络活动的角度检测异常行为,进而采取入侵的预警或记录。从检测模式而言,Snort属于是误用检测(Misuse detection),即对已知攻击的特征模式进行匹配。从本质上来说,Snort是基于规则检测的入侵检测工具,即针对每一种入侵行为,都提炼出它的特征值并按照规范写成检验规则,从而形成一个规则数据库。其次将捕获得数据包按照规则库逐一匹配,若匹配成功,则认为该入侵行为成立。
Snort采用基于规则的网络信息搜索机制,对数据包进行内容的模式匹配,从中发现入侵和探测行为。例如:buffer overflows ,stealth port scans ,CGI attacks 等。Snort 具有实时报警的能力,它的报警信息可以发往syslog ,Server Message Block (SMB) ,WinPopup message 或者单独的alert 文件[5]。Snort 支持多种记录数据包形式,包括tcpdump 的二进制形式和数据包解码后的文本形式。Snort 运用插件机制,能够非常容易地增加功能,使程序具有很强的可扩展性。
由于遍布世界各地的众多程序员共同维护和升级,目前Snort系统的更新是很快的,目前版本2.0.8,其系统结构日趋合理,功能不断增强,检测规则也不断增新和完善,但系统的基本架构没有变。而且,自由软件开发人员陆续开发了众多辅助性的软件。这些软件包括图形化的管理系统、日志分析工具、检测插件、图形化的规则编写软件,以及规则自动升级软件等。对这些软件进行合理地选择、集成,可以形成一套比较完善的网络入侵检测系统。
目前网络入侵检测(NIDS)在网络建设中大量使用,对网络的安全防范工作起到了一定的作用。然而,目前已有的IDS还远远不能满足入侵检测的需要。绝大多数入侵检测系统的处理效率低下,不能满足大规模和高带宽网络的安全防护要求。目前使用的主要检测方法是将审计事件同特征库中的特征匹配 ,但现在的特征库组织简单,导致的漏报率和误报率较高,很难实现对分布式、协同式攻击等复杂攻击手段的准确检测。此外,预警能力严重受限于攻击特征库,缺乏对未知入侵的预警能力。
入侵检测系统还有很大的改进空间,它不可能做到检测出所有的入侵事件。对目前不断增加的网络入侵,要尽可能多的增加相应的规则,以检测出更多的入侵行为。因此,如何进一步提高系统的检测能力,是继续研究的目标以及方向。本课题将针对入侵检测系统Snort的规则进行研究,并为Snort系统增加新的规则,进而能够更加准确的检测入侵信息。
1.3 课题研究内容
本课题主要研究Snort规则,通过对Snort各个模块的了解,研究规则的运行机制,并在对规则语法深入学习和研究的基础上,针对计算机网络和入侵攻击的特点,添加一些新的规则,在Linux实验环境下检测规则的正确性和有效性。
本课题的研究内容如下:
1.研究Snort规则,分析Snort规则的结构,了解Snort规则的组成以及组成元素的意义,分析Snort规则集的二维链表结构;
2.分析Snort的组成结构和处理流程,检测引擎通过规则解析和规则匹配实现入侵检测的方式。了解计算机网络的结构和特点、常见的入侵攻击特征和Snort规则匹配数据报文的机制,进而针对某种攻击特征增加新的规则,使Snort系统能够检测出相应的攻击;
3.在Linux系统中搭建Snort平台,安装Snort系统及相关软件。运行Snort系统,进一步理解Snort的工作流程;使用ACID分析和管理警告日志。
4.把设计的新规则加入到Snort规则库中,然后模拟蠕虫病毒进行入侵攻击,通过查看Snort的警告信息和日志测试新设计的规则是否有效.
1.4 论文结构
论文全文包括以下几点:
(1) 分析当前网络入侵攻击以及入侵检测的背景和国内外的情况
(2) 对入侵检测技术做了介绍,分析当前的入侵检测系统,介绍了SNORT的体系结构和处理过程,讲述了SNORT规则树的结构和规则树中规则检测匹配过程。分析了如何有特征分析到snort规则。
(3) 分析了SNORT的规则结构,介绍了SNORT规则的优化。
(4) 介绍了几种规则增加方式,并在原来规则的基础上对规则进行了扩展,并把自己书写的规则在SNORT中进行配置,添加到SNORT系统中。
(5) 对新增加的规则进行正确性和有效性测试的结果。
2.入侵检测基础
2.1 入侵检测概述
入侵行为是指对系统资源的非法授权使用,它可以造成系统数据的丢失和破坏、可以造成系统对合法用户的拒绝服务等危害,给集体和个人造成损失。入侵检测技术就是针对这种破坏采取的主动保护自己免受攻击的一种网络安全技术。它试图监视和尽可能阻止有害信息的入侵,或者其他能够对用户的系统和网络资源产生危害的行为。
2.1.1入侵检测技术
入侵检测技术是网络安全防御体系的关键技术[6],它通过对网络和主机上某些关键信息进行收集分析,检测其中是否有违反安全策略的事件或攻击事件发生,并对检测到的事件发出警报.
入侵检测技术可以分为两大类:异常入侵检测技术和误用入侵检测技术[7]。
异常检测是通过建立主体的正常行为模型来发现异常行为,从而达到发现未知攻击的目的。异常检测根据使用者的行为或者资源使用状况来判断是否入侵,属于一种基于行为的检测,它可以检测出以前从未出现过的攻击方法。异常检测的关键问题在于正常使用模式的建立,以及如何利用该模式对当前系统或用户行为进行比较,从而判断出与正常模式的偏离程度。而异常检测技术最大的优点是可以检测出以前从未出现过的入侵攻击[8],异常检测不依赖于对已知攻击的识别,只要能检查出攻击者与正常调用有较大的不同就能检测出攻击。它的主要缺陷是误检率很高。
误用检测运用已知的攻击方法得到入侵模式或特征,通过判断这些入侵模式是否出现来进行检测。它假定所有入侵行为和手段(及其变种)都能够表达成一种模式或特征,并对已知的入侵行为提取检测特征,构建攻击模式或攻击签名,通过系统当前状态与攻击模式或攻击签名的匹配来判断入侵行为,属于基于知识的检测。误用检测技术可以有针对性地建立高效的入侵检测系统,检测准确率高[8];缺点是对未知的入侵活动或已知入侵活动的变异无能为力,攻击特征提取困难,并且需要不断更新特征库。
2.1.2 入侵检测系统
进行入侵检测的软件和硬件的组合就是入侵检测系统[9]。入侵检测系统作为防火墙的合理补充,能够帮助系统对付网络攻击,扩展了系统管理员的安全管理能力(包括安全审计、监视、攻击识别和响应)。根据不同的分类标准,入侵检测系统可分划为不同的类别。入侵检测系统分类主要依据有:数据源、检测原理等。
按照原始数据的来源,可以将入侵检测系统分为基于主机的入侵检测系统HIDS(Host Intrusion Detection System)、基于网络的入侵检测系统NIDS (Network Intrusion Detection System) [10].
基于主机的IDS(HIDS)在操作系统、应用程序或者内核层次上对攻击进行监控。HIDS有权检查日志、错误消息、服务和应用程序权限、以及受监控主机的任何可用资源。另外,HIDS应该了解应用程序。它应该知道如何区分正常的应用程序数据和异常数据,并且能够监控进行解码和操作的应用程序数据。基于主机的入侵检测系统主要用于保护运行关键应用的服务器。它通过监视与分析主机的审计记录和日志文件来检测入侵。日志中包含发生在系统上的不寻常和不期望活动的证据。通过这些证据可以指出有人正在入侵或已成功入侵了系统,并很快地启动相应的应急响应程序。
HIDS能更好地确定攻击是否成功。由于恶意的流量看起来与正常的流量非常相似,所以网络型IDS(NIDS)常常会产生错误报警。由于HIDS产生误报量比NIDS少,因此HIDS在检测真正的入侵上更为准确。
基于网络的入侵检测系统(NIDS)放置在网络基础设施的关键区域,监控流向其他主机的流量。NIDS的成本比HIDS更低,因为它通过一个装置就能保护一大片网段。通过NIDS,分析员可以相对网络内部和其它周围发生的情况有个全方位的认识。对特殊主机或攻击者的监控力度可以相对容易地加强或者减弱。NIDS主要用于实时监控网络关键路径的信息,侦听网络上的所有分组;并把从网络上截获的原始网络包作为数据源来分析和检测入侵或入侵企图。
只要正确地配置和维护,上述两种入侵检测模型都能成为深度防御的有效组件。值得注意的一点是,你不必只选择其中一种而排斥另一种。NIDS能有效地保护一大片网络基础设施,HIDS能为承担重要任务的主机提供协助保护。基于网络的入侵检测系统与基于主机的入侵检测系统各有优缺点,应该互相取长补短;因此把两者的优势结合起来就能更好地进行检测。实际的入侵检测系统大多是这两种系统的混合体。
从对数据源的分析策略上,又可以分为基于异常发现(Anomaly based)的入侵检测系统和基于模式匹配(Signature based)的入侵检测系统两种[11]。
在异常检测中,观察到的不是已知的入侵行为,而是所研究的通信过程中的异常现象,它通过检测系统的行为或使用情况的变化来完成。在建立该模型之前,首先必须建立统计概率模型,明确所观察对象的正常情况,然后决定在何种程度上将一个行为标为“异常”,并如何做出具体决策。
异常检测只能识别出那些与正常过程有较大偏差的行为,而无法知道具体的入侵情况。由于对各种网络环境的适应性不强,且缺乏精确的判定准则,异常检测经常会出现虚警情况。
在误用检测中,入侵过程模型及它在被观察系统中留下的踪迹是决策的基础。所以,可事先定义某些特征的行为是非法的,然后将观察对象与之进行比较以做出判别。
误用检测基于已知的系统缺陷和入侵模式,故又称特征检测。它能够准确地检测到某些特征的攻击,但却过度依赖事先定义好的安全策略,所以无法检测系统未知的攻击行为,从而产生漏警。
2.2 入侵分析与NIDS规则
2.2.1 网络入侵分析
对网络的攻击方式是多种多样的,一般来讲,攻击总是利用“系统配置的缺陷”,“操作系统的安全漏洞”或“通信协议的安全漏洞”来进行的。这些攻击大概可以划分为以下六类:
拒绝服务攻击:一般情况下,拒绝服务攻击是通过使被攻击对象(通常是工作站或重要服务器)的系统关键资源过载,从而使被攻击对象停止部分或全部服务。目前已知的拒绝服务攻击就有几百种,它是最基本的入侵攻击手段,也是最难对付的入侵攻击之一,典型示例有SYN Flood攻击、Ping Flood攻击、Land攻击、WinNuke攻击等。
非授权访问尝试:是攻击者对被保护文件进行读、写或执行的尝试,也包括为获得被保护访问权限所做的尝试。
预探测攻击:在连续的非授权访问尝试过程中,攻击者为了获得网络内部的信息及网络周围的信息,通常使用这种攻击尝试,典型示例包括SATAN扫描、端口扫描和IP半途扫描等。
可疑活动:是通常定义的“标准”网络通信范畴之外的活动,也可以指网络上不希望有的活动,如IP Unknown Protocol和Duplicate IP Address事件等。
协议解码:协议解码可用于以上任何一种非期望的方法中,网络或安全管理员需要进行解码工作,并获得相应的结果,解码后的协议信息可能表明期望的活动,如FTU User和Portmapper Proxy等解码方式。
系统代理攻击:这种攻击通常是针对单个主机发起的,而并非整个网络,通过RealSecure系统代理可以对它们进行监视。
2.1.2 入侵特征与NIDS规则
IDS 要有效地捕捉入侵行为, 必须拥有一个强大的入侵特征数据库。IDS 中的特征就是指用于判别通讯信息种类的样板数据
网络攻击的本质就是利用目标系统设计或实现上的问题,从被攻击进程的角度看,攻击报文或在内容结构上,或在出现的时序上,或在流量的大小上,攻击报文一定是处于服务程序无法正确处理的畸形状态。要使攻击得以成功完成,网络攻击的报文的内容和结构必须满足某些必要的条件,这些必要的报文特征用于驱使受攻击进程的处理流程走到触发漏洞的操作。这些攻击报文所具有的特征标志了这个攻击,并为入侵检测系统构建规则库提供了原始的依据。针对已知的网络攻击,当前主流网络入侵检测检测及防护系统主要还是基于规则的,这是因为特定的攻击,特别是基于特定攻击代码的报文比较容易抽取其报文特征进行匹配,使用规则可以快速方便地实现检测能力的扩展。
攻击者通过编写攻击代码来实现对安全漏洞的利用,特定的攻击代码发出的报文除了必定包含的一般特征外还可能会包含一些本攻击代码特有的特征,比如特定的shellcode、特定的填充数据等,称之为特殊特征。入侵检测引擎实现一个基本检测框架,它提供给用户各种规则选项和操作符作为应用接口,用户可以通过组合选项和操作符来描述关心的网络报文特征,对满足匹配条件的报文进行告警。理想的攻击检测规则描述的特征集应该包含且仅包含一般特征,由于一般特征描述了所有攻击代码攻击报文所共有的特征,因而与特定的攻击代码无关,这样就避免了漏报。如果对于检测对象的协议类型所做假设正确,由于一般特征中的每个特征是造成攻击所必要的,缺一不可,这些特征中的只要有一个不满足都无法触发漏洞而完成攻击,所以也不存在误报的可能[8]。轻量级入侵检测系统的关键技术是特征选择,去除冗余特征,保留能够反映系统状态的重要特征是提高检测速度的一种有效方法。
事实上由于规则描述能力的限制,大多数情况下规则无法完全描述出攻击报文内容和结构上的完成攻击所必需的特征,也就是说,规则所描述的特征和一般特征并不完全相同,而是存在各种可能的关系。当规则描述的特征是一般特征的子集时就会发生漏报,而不会有误报;当一般特征是规则所描述的特征的子集时就会发生误报,而不会有漏报;当两者互不包含,只是存在一个交集的时候就既可能误报有可能漏报;而当两者没有交集的时候,规则本身只是在检测特定的攻击代码发出的报文,而与攻击本身无关,通过简单修改攻击代码可以非常轻易地绕过这类规则的检测,要NIDS发生漏报还是误报完成掌握在攻击者手中。
因此,要编写有效、无误的检测规则必须把握好两个方面:一是透彻地分析漏洞的成因和利用条件,归纳出准确的一般特征;二是提高NIDS规则的描述能力,使之描述出的特征可以尽可能地接近一般特征。由此可见,漏洞及攻击分析在NIDS规则设计过程中具有极端重要性,它是规则设计的起点和基础,只有清楚地定义了攻击的一般特征,才有可能有针对性的设计出准确高效的NIDS检测规则。
2.3 轻量级入侵检测系统SNORT
Snort 是一个免费的基于Libpcap 的轻量级网络入侵检测系统。[3]它能够跨系统平台操作,自带轻量级的入侵检测工具可以用于监视小型的TCP/IP网络。所谓的轻量级是指在检测时尽可能低地影响网络的正常操作,一个优秀的轻量级的入侵检测系统应具备跨系统平台操作、最小的系统要求以及易于部署和配置等特征,并且管理员能够在短时间内通过修改配置实现实时的安全响应,更为重要的是能够成为整体安全结构的重要成员。另外,这个软件遵循通用公共许可证GPL,所以只要遵守GPL任何组织和个人都可以自由使用。
2.3.1 SNORT基本组成
Snort具有实时数据流量分析和日志IP网络数据包的能力,能够进行协议分析,对内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警[12]。同时它也能作为网络数据包嗅探器和日志记录工具。它由四个基本模块组成:包捕获/解码引擎,预处理插件,检测引擎,输出插件[13]。Snort的处理如图2.1。
包捕获/解码引擎:首先,利用libpcap从网卡捕获网络上的数据包,然后数据包经过解码引擎填入到链路层协议的包结构体中,以便对高层次的协议进行解码,如TCP和UDP端口。
预处理插件:接着,数据包被送到各种各样的预处理器中,在检测引擎处理之前进行检查和操作。每个预处理器检查数据包是否应该注意、报警或者修改某些东西。
检测引擎:然后,包被送到检测引擎。检测引擎通过各种规则文件中的不同选项来对每个包的特征和包信息进行单一、简单的检测。检测引擎插件对包提供额外的检测功能。规则中的每个关键字选项对应于检测引擎插件,能够提供不同的检测功能。
包解码引擎
预处理插件
检测引擎
检测插件
输出插件
嗅探
数据流
报警/日志
输出插件:Snort通过检测引擎、预处理器和解码引擎输出报警。
图2.1 Snort的检测数据包的处理流程
2.3.2 规则处理
检测引擎是Snort的核心,准确和快速是衡量其性能的重要指标[14]。前者主要取决于对入侵行为特征码的提取的精确性和规则撰写的简洁实用性。后者主要取决于引擎的组织结构,是否能够快速地进行规则匹配。规则处理模块是Snort检测引擎的关键模块。Snort 规则处理模块完成与规则有关的各种功能,可以分为2 个部分:Snort 规则解析和Snort 规则检测。规则解析在程序初始化的时候完成,作用是分析规则文件内容,把规则加载到内存中形成规则链。规则检测的作用是发现数据包是否符合某条规则。
Snort 将所有已知的攻击以规则的形式存放在规则库中,为了能够快速准确地进行检测,Snort将检测规则利用三维链表的形式进行组织。Snort把规则和它们的选项存储在链表中,并且在匹配规则头的时候对该链表进行查找。然后,在头匹配的情况下,查找模式匹配或者利用一个检测插件来匹配。规则头对应于规则树结点RTN (rule treenode),包含源(目的) 地址、源(目的) 端口号等;规则选项对应于规则选项结点OTN (optional treenode),包含报警信息(msg)、匹配内容(content)、TCP 标志位(flags) 等选项。规则树的层次结构图2.2所示。
RuleListNode
RuleListNode
RuleListNode
ListHead
ListHead
ListHead
RuleTree
Node
RuleTree
Node
RuleTree
Node
RuleTree
Node
OptTree
Node
OptTree
Node
OptTree
Node
OptTree
Node
图2.2 规则树的层次结构
Snort 初始化并解析规则时,首先根据Snort 规则头部中的5 种操作规则(alert、log、pass、activate、dynamic) 生成了5 条规则链表,每条链表节点又通过ListHead 结构类型的RuleList 指针指向下面的各子规则链表,子规则链表为根据Snort 规则头部中的协议划分的TCP、UDP、ICMP、和IP 子规则链表。每一条子规则链表中包含独立的三维链表:规则头(RTN)、规则选项(OTN) 和指向匹配函数的指针。Snort 捕获一个数据包时,首先根据数据包使用的协议决定与某条规则链表进行匹配;然后与RTN 结点依次进行匹配,当数据包与一个头结点相匹配时,则进入相应的OTN 规则链进行匹配。每一个OTN 结点包含一条规则所对应的全部选项,同时还包含一组函数指针,当数据包与所有函数都匹配成功时,即判断此数据包为攻击数据包,进入告警模块。
规则检测就是用被捕获且已被解码的数据包同已定义的规则进行匹配的过程,也就是遍历规则树的过程[15]。首先匹配链表头,如果链表头匹配成功再匹配相应链表选项,当链表选项也匹配成功时,就表明已经发现入侵或探测行为。
Snort 采用“二维空间函数指针链表递归机制”进行规则匹配,主要是根据规则树对数据进行递归匹配。其基本过程图2.3所示。
Snort规则匹配完成以后,会选择优先级最高的规则进行触发动作[16]。通常,当规则数量很少时,上述检测方法是比较高效的,可是当规则集中有很多条规则时,上述检测方法就会变得低效。可以根据协议类型和特点把规则集分得更细,每个数据包只要经过几次判断就可以进入一个较小的规则集中进行匹配,从而减少很多不必要的匹配过程以提高检测效率。
开始
获取RuleLists头
链表中还有记录
根据协议类型选择规则链表头
顺序查找规则链表头直到找到匹配的项
找到匹配项
调用相应处理函数
根据Tag信息进行记录
结束
开始RuleListNode下一个节点
匹配剩余规则头
查找规则链表选项直到找到项匹配的项
找到匹配项
Y
N
Y
Y
N
N
图2.3 规则检测匹配流程图
3. SNORT规则分析
3.1 SNORT规则简介
Snort 规则是Snort入侵检测系统的关键,只有装载了规则文件后,Snort才能真正具有入侵检测功能。 Snort将所有已知的攻击以规则的形式放在规则库中,每一条规则由规则头和规则选项两部分组成[17]。规则头定义了规则的行为、所匹配网络报文的协议、源地址、目标地址、网络掩码、源端口和目标端口信息;规则选项部分包含了所要显示给用户的警告信息以及用于确定是否触发规则响应行为而需检查的数据包区域位置信息。
Snort规则的基本格式为:<order><rule action> <protocol> <src_ip> < src_port> <dstip> <dst_ port><(rule _options)> ,分别表示规则的顺序、行为、协议、源地址、源端口、目的地址、目的端口和规则选项,其中规则选项是可选的[18]。
例:alert tcp any any –> 210.43.104.0/24 21 (msg:”FTP serv-u directory transversal”;content:”.%20.”;nocase;sid:360;rev:9;)
在这个例子当中,左括号前面是规则头,圆括号内的内容是规则选项,在规则选项中,位于“:”之前的称为选项关键字。规则选项不是对每个规则而言都是必须的部分,它们只是用来更好地定义所要进行某种处理的数据包类型。只有当规则中的每一个元素都为真时,才能触发相应的规则。
3.2 规则头
3.2.1 规则行为
规则头中的第一项是规则行为[19]。规则行为是当发现一个数据包满足规则中的指定属性时,Snort将做什么。当前版本的Snort提供五种默认的动作行为:报警(alert)、写入日志(log)、忽略(pass)、启动(activate)、动态(dynamic)。另外,当Snort运行在inline模式的时候还可以选择动作:丢弃(drop)、拒绝(reject)、简单丢弃(sdrop)。
Alert:根据选定方法产生一个报警,然后把数据包记入日志
Log:把数据包记入日志
Pas
展开阅读全文