论文部分内容阅读
摘要:剖析了开源入侵检测工具Snort的体系结构及其工作配置模式,为中小型网络配置入侵检测系统提供了可行的解决方案。
关键词:入侵检测系统;通用入侵检测框架;Snort
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31585-02
Research and Analysis the System Framework of Snort
YU Kun, WU Xiao-jin
(Network Center, Jingchu University of Technology, Jingmen 448000, China)
Abstract:the System framework and work configuration model of free Intrusion Detection tools: Snort is Researched and analyzed, offer a practicable solve way for Intrusion Detection System configuration in both middle and small networks.
Key words:IDS; CIDF; Snort
1 引言
随着网络攻击的日趋复杂化,单纯依靠防火墙已经不能满足网络安全的需要。防火墙只能配置在网络边界上,对于来自网络内部的大量攻击无能为力,而事实上有80%的经济损失都来自于内部的攻击。这种背景下,入侵检测系统(Intrusion Detection System,IDS)应运而生。
入侵检测是指对计算机和网络资源上的恶意使用行为进行识别和相应处理的过程。它不仅可以检测来自外部的入侵行为,同时也可以监控内部用户的非授权行为。IDS是一个动态的防御系统,它可以识别防火墙不能识别的攻击。
IDS技术经过这些年的发展已经出现了不少商业IDS产品,但这些产品大多比较昂贵,无法满足更大层面上的用户需要。而本文所介绍的Snort是一个开放源码的IDS,且高效稳定,在全世界范围内被广泛安装和使用(据统计已超过100000例)。
2 CIDF模型
CIDF(Common Intrusion Detection Framework)模型是1999年美国国防高级研究项目局(DARPA)提出的通用入侵检测框架模型。该模型旨在提高 IDS 产品、组件及其他安全产品之间的互操作性。如图1所示是CIDF的体系结构。
图1 CIDF体系结构
CIDF将一个入侵检测系统分为事件产生器、事件分析器、响应单元和事件数据库四个组件。CIDF将IDS需要分析的数据统称为事件(Event),它可以是基于网络的入侵检测系统从网络中提取的数据包,也可以是基于主机的入侵检测系统从系统日志等其他途径得到的数据信息。CIDF 组件之间是以通用入侵检测对象(GIDO)的形式交换数据的。
事件产生器的任务是从入侵检测系统之外的计算环境中收集事件,并将这些事件转换成CIDF的GIDO格式传送给其他组件。事件分析器负责分析从其他组件收到的GIDO,并将产生的分析结果传送给其他组件。事件数据库用来存储GIDO,以备系统需要的时候使用。响应单元负责处理接收到的GIDO,并据此采取相应的措施。
3 Snort体系结构
Snort是一个典型的遵循CIDF模型的入侵检测系统。如图2所示是Snort的体系结构。
图2 Snort体系结构
(1)Sniffer即嗅探器,这是Snort最初的开发目的。Snort没有自己的捕包工具,它使用一个外部的捕包程序库Libpcap从物理链路上进行捕包。Libpcap可以运行在任何一种流行的硬件和操作系统的组合中,这使得Snort成为一个真正的与平台无关的应用程序。
Snort按照TCP/IP协议的不同层次对收集来的包进行解码,解码后的包数据将堆满一个数据结构。包数据一被存入数据结构中,就会迅速被送到预处理程序和检测引擎进行分析。
(2)预处理器是以可插入模块的形式存在于Sniffer和检测引擎之间。这种插件机制使程序具有很强的扩展性,模块性强,程序易读。
Snort的预处理可以分为两类。一类预处理对发现非基于特征的攻击是不可缺少的;另一类预处理负责对流量标准化以便检测引擎能准确匹配特征。预处理的参数可以通过Snort.conf配置文件调整,还可以根据需要添加或删除预处理程序。
(3)检测引擎,是Snort的核心部件,主要功能是规则分析和特征检测。当数据包从预处理器送过来后,检测引擎依据预先设置的规则检查数据包,一旦发现数据包中的内容和某条规则相匹配,就通知报警模块。如图3所示描述了检测引擎的工作流程。
启动的时候,Snort根据具体的用户需求读取相应的规则文件,并且建立一个三维的链表。当进行规则的匹配时,在链表的两个方向同时进行,检测引擎只检测那些一开始在规则解析器中设置好了的规则选项。当检测引擎检测到第一个与被解码的包相匹配的规则时,检测引擎触发相应的动作并返回。
Snort的规则在逻辑上分为两部分:规则头((Rule Header)和规则选项((Rule Option)。 规则头中包含的是所有规则所共有的一些属性,规则选项则是包含修改检测的一些选项。例如,在已经给出的snort库文件中45条CGI-BIN探测检测规则,它们有共同的目的IP地址和端口。为了加快检测进程,这些共同的资源将被放在同一个规则头中,而它们各自独立的检测信号则保存在规则选项结构中。
下面是一个简单的规则:
Alert tcp any any -> 10.1.1.0/24 80(content: "/cgi-bin/phf";msg:"PHF probe!";)
在这个规则中,括号左面为规则头,括号中间的部分为规则选项,规则选项中冒号前的部分为选项关键字(Option Keyword)。
规则头由规则行为、协议字段、地址和端口信息3部分组成。
Snort定义了五种可选的行为:alert,log,pass,activate,dynamic。其语义如下:
alert:使用设定的警告方法生成警告信息,并记录这个报文。
log:使用设定的记录方法一记录这个报文。
pass:忽略这个报文。
activate:进行alert,然后激活另一个dynamic规则。
dynamic:等待被一个activate规则激活,然后进行logo。
协议字段,当前Snort支持IP,TCP,UDP和ICMP将来可能会支持更多的协议。
地址和端口信息,格式为:IP/CIDR Port,其中CIDR块表示网络掩码。
规则选项由选项关键字组成,中间用冒号分隔。常用的选项关键字有:msg,打印一条警告信息到警告或日志中;content,在报文负载中搜索某个模式,这个字段是Snort的一个重要特征,进行比较的数据可以包含二进制数据;offset,调整content选项,设置模式匹配开始的偏移量;depth,调整content选项,设置模式匹配的最大搜索长度;nocase,进行内容匹配时,字符串的大小写不敏感。
(4)日志/报警。检测引擎检查后的Snort数据需要以某种方式输出。snort对每个被检测的数据包都定义了如h的三种处理方式:alert(发送报警信息),log(记录该数据包)和pass(忽略该数据句)。这其实是具体定义在检测规则中的。其具体的完成是在日志/报警子系统中完成的,日志子系统允许你将包解码收集到的信息以可读的格式或以tcpdump格式记录卜来。报警子系统使其将报警信息发送到syslog,用户指定的文件、Unix套接字或数据库中。
4 配置Snort工作模式
Snort可以在支持libpcap运行的任何系统上运行,对于大量的数据不可能全部存储在Snort运行的机器上,这样将会导致处理上的瓶颈问题。配置Snort最典型的是采用分布式三层体系,如图4所示。
第一层传感器层,对经过的流量进行监控以发现入侵。将Snort应用程序运行在传感器上,负责对抓来的包进行解释并传递警报。考虑到安全原因,运行Snort的主机只能有支撑Snort的应用程序。对于主机传感器,应尽量减少打开的服务和与网络联系的应用程序并时时打安全补丁以全面提高安全级别。另外,在操作系统方面,支撑网络传感器的平台尽量都是Linux,一方面安全性能够较好的得到保证,另外一方面对Snort的支持力度也会更好。
图4 snort分布式体系
传感器上有两块网卡:一块用作嗅探抓包接口,一块用作管理接口。这种思想就是让捕获的包都从一个接口进入,所有的警报都从另一个接口送出。用作抓包的网卡需要设成混杂模式来接收所有包,同时不给该网卡设置IP地址,这样做一方面可以让网卡获得网络公共区域的信息,另外也可加强安全,因为如果攻击者查明了传感器的IP地址,他就能像对网络中的其他主机一样攻击传感器。另一块网卡用作管理接口,连接到一个与抓包接口分开的网段。因为要与第二层通信,报警信息通过这个接口传给第二层。对传感器的全部操作都要通过管理网卡进行。在这种设计中,管理网络应该用防火墙和外部世界隔开。
第二层是服务器层,它从传感器收集报警数据并且将其转换成用户可读的形式。报警数据将被导入一个关系数据库。Snort并不需要关系数据库,它可以用其他方法记录警报,比如系统日志syslog。利用关系数据库对数量相当大的报警数据进行组织管理是最实用的办法。报警存入数据库能进行复杂的查询,以便可以更好地管理报警信息。这样也可以用其他应用程序可以用各种格式来记录警报,便于操作的GUI用户图形界面方式显示数据。Snort支持许多不同的数据库,比如Oracle,Postgreql和MySQL。
服务器保存大量敏感和机密信息,所以要优先保护。应该遵循尽可能分配最少的特权和安装最少的必要服务的原则。
第三层是分析控制台层,数据在这一层显示。控制台的唯一要求就是一台专用的机器,该机器需要安装支持SSL的网页浏览器。
5 结束语
Snort可实现一个轻量级网络入侵检测系统的所有要求。它小巧灵活,能力强,在一些不需要花费高额费用来组建一个完整的商业系统的地方,它完全可以取代商业入侵检测系统,尤其适合于校园网这样非赢利性质的系统。
参考文献:
[1] Jack Koziol. 吴溥峰,孙默,许诚,译. Snort入侵检测实用解决方案[M]. 北京:机械工业出版社,2005.
[2] BrianCaswell,JayBeale,JamesCF.宋劲松 译. 2.0入侵检测[M].北京:国防工业出版社,2004.
[3]snort_install_guide.http//www.snort.org[EB/OL].
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:入侵检测系统;通用入侵检测框架;Snort
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31585-02
Research and Analysis the System Framework of Snort
YU Kun, WU Xiao-jin
(Network Center, Jingchu University of Technology, Jingmen 448000, China)
Abstract:the System framework and work configuration model of free Intrusion Detection tools: Snort is Researched and analyzed, offer a practicable solve way for Intrusion Detection System configuration in both middle and small networks.
Key words:IDS; CIDF; Snort
1 引言
随着网络攻击的日趋复杂化,单纯依靠防火墙已经不能满足网络安全的需要。防火墙只能配置在网络边界上,对于来自网络内部的大量攻击无能为力,而事实上有80%的经济损失都来自于内部的攻击。这种背景下,入侵检测系统(Intrusion Detection System,IDS)应运而生。
入侵检测是指对计算机和网络资源上的恶意使用行为进行识别和相应处理的过程。它不仅可以检测来自外部的入侵行为,同时也可以监控内部用户的非授权行为。IDS是一个动态的防御系统,它可以识别防火墙不能识别的攻击。
IDS技术经过这些年的发展已经出现了不少商业IDS产品,但这些产品大多比较昂贵,无法满足更大层面上的用户需要。而本文所介绍的Snort是一个开放源码的IDS,且高效稳定,在全世界范围内被广泛安装和使用(据统计已超过100000例)。
2 CIDF模型
CIDF(Common Intrusion Detection Framework)模型是1999年美国国防高级研究项目局(DARPA)提出的通用入侵检测框架模型。该模型旨在提高 IDS 产品、组件及其他安全产品之间的互操作性。如图1所示是CIDF的体系结构。
图1 CIDF体系结构
CIDF将一个入侵检测系统分为事件产生器、事件分析器、响应单元和事件数据库四个组件。CIDF将IDS需要分析的数据统称为事件(Event),它可以是基于网络的入侵检测系统从网络中提取的数据包,也可以是基于主机的入侵检测系统从系统日志等其他途径得到的数据信息。CIDF 组件之间是以通用入侵检测对象(GIDO)的形式交换数据的。
事件产生器的任务是从入侵检测系统之外的计算环境中收集事件,并将这些事件转换成CIDF的GIDO格式传送给其他组件。事件分析器负责分析从其他组件收到的GIDO,并将产生的分析结果传送给其他组件。事件数据库用来存储GIDO,以备系统需要的时候使用。响应单元负责处理接收到的GIDO,并据此采取相应的措施。
3 Snort体系结构
Snort是一个典型的遵循CIDF模型的入侵检测系统。如图2所示是Snort的体系结构。
图2 Snort体系结构
(1)Sniffer即嗅探器,这是Snort最初的开发目的。Snort没有自己的捕包工具,它使用一个外部的捕包程序库Libpcap从物理链路上进行捕包。Libpcap可以运行在任何一种流行的硬件和操作系统的组合中,这使得Snort成为一个真正的与平台无关的应用程序。
Snort按照TCP/IP协议的不同层次对收集来的包进行解码,解码后的包数据将堆满一个数据结构。包数据一被存入数据结构中,就会迅速被送到预处理程序和检测引擎进行分析。
(2)预处理器是以可插入模块的形式存在于Sniffer和检测引擎之间。这种插件机制使程序具有很强的扩展性,模块性强,程序易读。
Snort的预处理可以分为两类。一类预处理对发现非基于特征的攻击是不可缺少的;另一类预处理负责对流量标准化以便检测引擎能准确匹配特征。预处理的参数可以通过Snort.conf配置文件调整,还可以根据需要添加或删除预处理程序。
(3)检测引擎,是Snort的核心部件,主要功能是规则分析和特征检测。当数据包从预处理器送过来后,检测引擎依据预先设置的规则检查数据包,一旦发现数据包中的内容和某条规则相匹配,就通知报警模块。如图3所示描述了检测引擎的工作流程。
启动的时候,Snort根据具体的用户需求读取相应的规则文件,并且建立一个三维的链表。当进行规则的匹配时,在链表的两个方向同时进行,检测引擎只检测那些一开始在规则解析器中设置好了的规则选项。当检测引擎检测到第一个与被解码的包相匹配的规则时,检测引擎触发相应的动作并返回。
Snort的规则在逻辑上分为两部分:规则头((Rule Header)和规则选项((Rule Option)。 规则头中包含的是所有规则所共有的一些属性,规则选项则是包含修改检测的一些选项。例如,在已经给出的snort库文件中45条CGI-BIN探测检测规则,它们有共同的目的IP地址和端口。为了加快检测进程,这些共同的资源将被放在同一个规则头中,而它们各自独立的检测信号则保存在规则选项结构中。
下面是一个简单的规则:
Alert tcp any any -> 10.1.1.0/24 80(content: "/cgi-bin/phf";msg:"PHF probe!";)
在这个规则中,括号左面为规则头,括号中间的部分为规则选项,规则选项中冒号前的部分为选项关键字(Option Keyword)。
规则头由规则行为、协议字段、地址和端口信息3部分组成。
Snort定义了五种可选的行为:alert,log,pass,activate,dynamic。其语义如下:
alert:使用设定的警告方法生成警告信息,并记录这个报文。
log:使用设定的记录方法一记录这个报文。
pass:忽略这个报文。
activate:进行alert,然后激活另一个dynamic规则。
dynamic:等待被一个activate规则激活,然后进行logo。
协议字段,当前Snort支持IP,TCP,UDP和ICMP将来可能会支持更多的协议。
地址和端口信息,格式为:IP/CIDR Port,其中CIDR块表示网络掩码。
规则选项由选项关键字组成,中间用冒号分隔。常用的选项关键字有:msg,打印一条警告信息到警告或日志中;content,在报文负载中搜索某个模式,这个字段是Snort的一个重要特征,进行比较的数据可以包含二进制数据;offset,调整content选项,设置模式匹配开始的偏移量;depth,调整content选项,设置模式匹配的最大搜索长度;nocase,进行内容匹配时,字符串的大小写不敏感。
(4)日志/报警。检测引擎检查后的Snort数据需要以某种方式输出。snort对每个被检测的数据包都定义了如h的三种处理方式:alert(发送报警信息),log(记录该数据包)和pass(忽略该数据句)。这其实是具体定义在检测规则中的。其具体的完成是在日志/报警子系统中完成的,日志子系统允许你将包解码收集到的信息以可读的格式或以tcpdump格式记录卜来。报警子系统使其将报警信息发送到syslog,用户指定的文件、Unix套接字或数据库中。
4 配置Snort工作模式
Snort可以在支持libpcap运行的任何系统上运行,对于大量的数据不可能全部存储在Snort运行的机器上,这样将会导致处理上的瓶颈问题。配置Snort最典型的是采用分布式三层体系,如图4所示。
第一层传感器层,对经过的流量进行监控以发现入侵。将Snort应用程序运行在传感器上,负责对抓来的包进行解释并传递警报。考虑到安全原因,运行Snort的主机只能有支撑Snort的应用程序。对于主机传感器,应尽量减少打开的服务和与网络联系的应用程序并时时打安全补丁以全面提高安全级别。另外,在操作系统方面,支撑网络传感器的平台尽量都是Linux,一方面安全性能够较好的得到保证,另外一方面对Snort的支持力度也会更好。
图4 snort分布式体系
传感器上有两块网卡:一块用作嗅探抓包接口,一块用作管理接口。这种思想就是让捕获的包都从一个接口进入,所有的警报都从另一个接口送出。用作抓包的网卡需要设成混杂模式来接收所有包,同时不给该网卡设置IP地址,这样做一方面可以让网卡获得网络公共区域的信息,另外也可加强安全,因为如果攻击者查明了传感器的IP地址,他就能像对网络中的其他主机一样攻击传感器。另一块网卡用作管理接口,连接到一个与抓包接口分开的网段。因为要与第二层通信,报警信息通过这个接口传给第二层。对传感器的全部操作都要通过管理网卡进行。在这种设计中,管理网络应该用防火墙和外部世界隔开。
第二层是服务器层,它从传感器收集报警数据并且将其转换成用户可读的形式。报警数据将被导入一个关系数据库。Snort并不需要关系数据库,它可以用其他方法记录警报,比如系统日志syslog。利用关系数据库对数量相当大的报警数据进行组织管理是最实用的办法。报警存入数据库能进行复杂的查询,以便可以更好地管理报警信息。这样也可以用其他应用程序可以用各种格式来记录警报,便于操作的GUI用户图形界面方式显示数据。Snort支持许多不同的数据库,比如Oracle,Postgreql和MySQL。
服务器保存大量敏感和机密信息,所以要优先保护。应该遵循尽可能分配最少的特权和安装最少的必要服务的原则。
第三层是分析控制台层,数据在这一层显示。控制台的唯一要求就是一台专用的机器,该机器需要安装支持SSL的网页浏览器。
5 结束语
Snort可实现一个轻量级网络入侵检测系统的所有要求。它小巧灵活,能力强,在一些不需要花费高额费用来组建一个完整的商业系统的地方,它完全可以取代商业入侵检测系统,尤其适合于校园网这样非赢利性质的系统。
参考文献:
[1] Jack Koziol. 吴溥峰,孙默,许诚,译. Snort入侵检测实用解决方案[M]. 北京:机械工业出版社,2005.
[2] BrianCaswell,JayBeale,JamesCF.宋劲松 译. 2.0入侵检测[M].北京:国防工业出版社,2004.
[3]snort_install_guide.http//www.snort.org[EB/OL].
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。