基于Snort的边界数据包安全性检测
2011-03-14池水明孙斌
池水明 孙斌
金华利诚信息技术有限公司 浙江 321000
0 前言
监控网络数据包安全性的网络监听技术在网络安全领域是一把双刃剑,除了提供黑客截获网络数据的功能外,还可以帮助网管人员监视网络状态和数据流动、分析网络的流量以及排除网络故障。边界数据包的安全一般而言,是利用网络监听技术对从外部网络进入内部网络的所有数据包进行安全性的检查,匹配已建立的恶意数据包规则库,分析数据包的异常情况,对特征匹配和有异常的数据包进行特殊处理,以杜绝恶意数据包的入侵,保证内网的安全。
网络入侵检测系统是提供对网络传输进行实时监控,在发现可疑传输时即时发出警报或采取实际措施解决的设备。网管人员可以利用入侵检测系统主动、实时的发现、防范网络上各种攻击行为,维系网络的正常使用。
在入侵检测系统中,根据分析方法可分为误用检测和异常检测,Snort属于基于网络的误用IDS。它是基于规则的网络搜索机制,对数据包进行基于内容的模式匹配,以发现入侵和攻击行为。目前Snort能够检测出诸如缓冲区溢出、端口扫描、CGI攻击、拒绝服务攻击等多种常见攻击类型。
1 Snort
Snort是一款功能强大的轻量级IDS自由软件,提供实时数据流量分析和检测IP网络数据包的能力,能够进行协议分析,对数据包内容进行搜索/匹配,还可以检测各种不同的攻击方式,对攻击进行实时报警等强大功能。此外,Snort可以使用简单、可扩展的规则描述语言进行软件的移植和功能的扩展。
从Snort官网上可以进行规则库的升级或更改,也可以根据实际网络环境自定义检测规则,通过测试成功后,加入到规则库中使用。当出现新的入侵行为或蠕虫病毒时,Snort官网没有及时提供新规则,这时管理员就可以自行提取新入侵行为或蠕虫病毒的特征码,建立自己的新规则加入本地规则库。
Snort的工作原理是对已知各类攻击的特征模式进行不同方式的匹配,包括利用将网卡设置在混杂模式下的嗅探器被动地进行协议分析,以及对数据报文进行解释分析其特征。Snort是基于规则检测的入侵检测工具,它针对每一种攻击行为,都提取出它的特征值并利用规则描述语言按照规范写成检测规则,从而形成一个规则库。另外还将捕获的数据包按照一定的算法在规则库中进行逐一匹配,若匹配成功,则认为该数据包具有与之匹配规则的攻击行为,应对其进行特殊处理。
整个Snort系统架构的着眼于性能、简洁和灵活性3个方面。Snort系统结构由以下模块构成:数据包解析器、预处理器、检测引擎、日志/报警模块、输出模块。Snort的体系结构如图1所示。
图1 Snort体系结构
2 网络部署
对于IDS的部署可以根据内部网络的拓扑结构和实际需要而定。可以根据需要监控的具体需求在一个或多个位置部署,根据攻击的来源(内部入侵、外部入侵、或者两个都要检测)和所要监控的网段等多方面因素来决定IDS放置的位置。为了低成本而又高效的对进入内部网络的数据包进行检测,并利用Snort入侵检测系统作为边界数据包安全性检测工具,需要将Snort部署在网络的边界位置。
结合我公司的实际网络情况,将Snort IDS部署在网通线路的边界位置,以检测所有来自网通主干网络的数据包安全性,达到保护内部网络免受外来恶意数据包的攻击。如图2是我公司网通线路下的含有DMZ区域的简单局域拓扑结构,为了实现对所有进入内部网络的数据包进行检查,而无论数据包是访问DMZ区域的服务器,或者是企业内部网络,可以将Snort IDS部署在防火墙内部的核心交换机上,通过核心交换机的镜像功能将DMZ端口和内部网络端口的数据镜像给Snort IDS所在的端口,这样即可实现对来自网络线路的数据包的监控。
图2 Snort IDS边界网络部署
另外对于交换网络需要监控一些特殊的网段时,还可以将Snort IDS部署在该网段所在的网段中心交换机的某个端口上,通过交换机的镜像功能将需要监控的网段镜像到Snort监控的端口,可以实现对内部特定网段的监控,以保证重要网段的安全运行。当然,也可以接入特定的部门中心交换机,以对重要的部门网段进行监控。
3 数据包检测方案
数据包安全性的检测归根到底就是对现已知的攻击行为、蠕虫病毒、木马等网络入侵行为的特征进行提取,按照特定的IDS描述语言,建立基于本地IDS的特征规则库,再对进入内部网络的数据包进行给定算法进行匹配,当有进入数据包满足规则库中的某一特征时,需要对其进行特殊处理,如删除、发出警告等。
3.1 规则库结构
构建一个符合Snort IDS 应用、包含当前公开的所有攻击行为、满足本地实际用途的规则库是一项艰巨的任务。当前国际上公开的网络入侵行为以 CVE列表中列出的漏洞在安全领域普遍认为是最为全面的,在CVE漏洞库的基础上,建立IDS规则库,需要对CVE漏洞特征、体系结构等有一定的了解,建立以 CVE标准为系统规则库的漏洞数据源,采用Snort 的规则描述语言对漏洞规则加以描述,构建具有CVE 特征的Snort入侵检测规则库。
基于CVE 的Snort IDS规则库可以采用模块化的规则库结构加以构建。通过对 CVE 列表中的漏洞按照系统分类,对其级别加以划分,再根据不同的 CVE 漏洞类别建立子规则库模块。本地对边界网络数据包进行监控,需要对网络上流行的漏洞进行分类以建立各类子模块的规则库,子规则库将不同类型的 CVE漏洞特征编写成规则放入到各个子模块中。分类的规则库如:Denial of service、Shellcode detect、Misc activity、Web-IIS、Web-cgi 等,对子规则库的分类越详细,系统对恶意数据的处理能力越强。对规则库的分类不仅可以分类CVE漏洞的类别,方便研究及规则库的建立管理,同时大大减少了数据包在规则库中的匹配时间。
结合企业实际运营情况,对部署在边界的Snort IDS进行规则库建立,首先对规则库进行分类,分成的若干子特征规则库如图3所示。
图3 规则库结构
3.2 Snort规则语法
Snort 的工作过程就是通过解析规则集形成规则树,再利用 libpcap 对采集到的数据进行模式匹配,若匹配成功,则认为是有攻击行为发生,做出相应的处理动作。因此,Snort规则是它的核心,为了实现对网络数据包的安全性检测,必须拥有一个强大的入侵特征规则库。规则库中的每条规则都需要严格按照Snort 规则语法进行编辑、测试方可投入使用。
Snort使用一种简单的、轻量级的规则描述语言,这种语言灵活而强大。在开发snort规则时要遵循在大多数Snort 规则都写在一个单行上,或者在多行之间的行尾用“/”分隔。Snort 的每条规则由两部分组成,即规则头和规则选项,其形式是“规则头(选项)”模式。
规则头包含规则动作、协议、源IP 地址、目的IP 地址、网络掩码、源端口、目的端口、方向操作符、CVE ID 号等信息。规则头定义了数据包“来自哪里,去哪里,去做什么”以及发现满足这个规则所有条件的数据包时Snort应该采取什么措施等信息都可以从规则头中得知。
规则选项包括报警信息以及用于确定是否触发规则响应动作而需要检查的数据包区域位置等诸多信息。规则选项中可能有一个或多个选项,不同选项之间使用“;”分隔开,它们之间为逻辑“与”的关系;选项由关键字和参数组成,每个关键字和它的参数间使用“:”加以分隔。
Snort规则功能强大灵活,得益于它的选项关键字内容很丰富。例如:
Msg ——在警报和记录的数据中打印消息;
Flags ——检查tcp flags的值;
Content ——在数据包的有效荷载中搜索特定的模式串;
Offset ——content选项的修饰符,设定开始搜索的位置。
3.3 规则库建立
作为IDS系统中的出色者——Snort自身也提供了强大的规则库,注册用户可以从 snort的官方网站上免费下载最新的规则库。但往往企业从业务需求、安全等多方面考虑,保密内部网络使用的一些安全防护设备和采取的策略措施等一些机密信息,参考Snort官方的规则库,分析CVE 列表中漏洞特征,自行构建内部网络的规则库。
在设计检测数据包安全性的Snort 规则库方案时,不仅要尽可能减小检测的范围,还要考虑快速地结束一个无效的检测过程(即证明该数据包是安全的,在特征库中没有找到匹配项)。那么为了实现范围小、时间短的目标,就需要从众多的规则选项参数中选出最适合的、最容易达到匹配目的的参数先进行匹配。
例如TCP报文,就TCP数据包本身来说,它的特征就是源端口和目的端口。对于一般的连接,可以从保留端口和非保留端口来判断通信双方是服务器端和客户端,因此保留端口可以作为独特的参数使用在Snort 的规则选项中。Snort可以检测出保留端口的位置,根据保留端口是源或者目的端口,判断数据包在服务器和客户端之间的流向。对 TCP 规则定义可以以端口、标志位、协议字段为特征,或者以某个数据段为字符串特征。
如果对TCP 9876端口发送“GetInfo | 5b |”触发事件,那么就定义规则为“alert tcp $ EXTERNAL_NET any - >$ HOME_NET 9876 (msg:“BACKDOOR tools getinfo”; flow: to _ server, established; content:“GetInfo | 5b | ”; )”。该规则对端口和字符特征同时进行了匹配,但如果将端口修改了,可能改规则就无效了。
因此,在定义规则时,将漏洞的特征进行组合使用,才会更加有效的提高IDS的工作效率。利用Snort规则检测数据包的安全性,同时也通过嗅探获取数据包来分析提取特征来创建规则。当出现新的漏洞或攻击时,通常都是采用流量分析来创建新规则。对于任何一个新的攻击,首先要知道其数据包的类型、数据流流向等基本信息用于编写规则头部,再从安全报告或者数据抓包中找到威胁数据包的特征,以便更新规则库,阻止攻击行为的再次发生影响内部网络的正常运营。
3.4 环境测试
在内网边界的核心交换机上,通过镜像将进出DMZ和内网的所有数据包镜像给Snort IDS,以检测数据包安全。这里将Snort IDS 安装在Centos 5.5 环境下,结合Apache作为Web服务器、Mysql 数据库以及第三方分析管理工具BASE(Basic Analysis and Security Engine)和Barnyard 建立基于边界的 IDS snort检测数据包安全性的实施方案的环境平台。借助SVC 漏洞库提取各种攻击行为的特征,参考Snort本身的规则库和Snort 规则描述语言进行规则数据库建立。该Snort IDS投入使用后,对进出网络数据包的安全性检测的结果进行报警或作其他处理。
4 结束语
Snort的扩展性和可移植性,可以很方便用户定身量做自己的规则库。随着现在网络攻击的日益频繁,来自网络的数据包安全性日益让人担忧,Snort 的免费、跨平台等特性,使得不管是企业还是个人,都有机会搭建自己的IDS系统进行网络数据包的检测、学习、研究等。利用国际公开的CVE漏洞数据库和开源的Snort系统,搭建网络边界的安全检测系统无论是研究人员还是企业都是乐见其成的事。同时,目前软件漏洞日渐频繁,网络攻击日新月异,企业在面对这些日益严重的网络威胁时,必须不断及时添加新规则以有效的检测攻击行为,提高Snort的检测能力,阻止恶意数据包进入网络,保护内部网络免遭破坏。
[1]孙立媛,朱亦宁,孙悦轩.Snort规则的分析与实现[J].计算机安全.2009.
[2]赵苏骅.Snort规则的分析与制定[J].四川教育学院学报.2008.
[3]黄昆.Snort规则语法在基于 CVE 特征的入侵检测系统中的应用[J].应用科技.2004.