2.5 入侵检测Snort系统
Snort IDS是目前基于规则领域的异常检测系统中最经典的产品,主要应用于网络入侵检测过程中,它能够实时地分析流量数据的情况,并记录检测详情。通过完备的规则库可对待测数据内容进行规则匹配处理,并能够对攻击异常做出实时告警。Snort作为开源轻量级IDS,拥有优良的扩展能力,可移植到各类大数据平台中。
Snort主要使用流量的特征来检测异常,使用人工定义的规则来检测异常的网络数据包。当规则被触发时,会产生警报信息[75]。Snort系统的工作原理如下。
(1)解码引擎:数据嗅探工具捕获网络底层数据包之后,通过解码引擎将数据包转化为符合链路层协议的包结构体,方便Snort系统对更高层次的数据进行解码,如TCP和UDP端口。
(2)预处理器:当数据被解码后,再被传输到相应的预处理器中进行数据预处理。
(3)检测引擎:通过规则匹配数据的特征,进行简单的检测。
(4)日志与报警:当检测引擎检测完毕时,系统会根据检测情况输出正常日志或报警信息。
Snort系统的异常检测框架主要由4个子模块构成,分别为数据包嗅探模块、预处理模块、检测引擎模块、报警/日志模块。首先,数据包嗅探模块在线获取网络数据包,并将数据包传入预处理模块,从而对当前数据包进行相应的规则特征提取,再将上述数据包传到检测引擎模块,检测引擎模块根据事先预设的规则对数据包进行匹配任务,若符合规则库中存在的Snort规则的动作描述,则响应报警/日志模块,通过用户设定的方式产生对应的报警行为。
Snort IDS体系结构图如图2.3所示。
图2.3 Snort IDS体系结构图
在图2.3中,最重要的功能是检测引擎,它依赖于规则库,利用模式匹配算法将数据包解析后的数据与规则进行匹配。规则库的规则结构如图2.4所示。
图2.4 规则库的规则结构
Snort规则的构建方法包括三种:第一种,在已有规则的基础上修改或添加,可以结合流量分析技术,该方法主要用来调整检测规则以提高其有效性;第二种,根据掌握的相关网络知识建立检测规则,不需要分析网络流量,创建此种类型的规则首先要编写规则头;第三种,通过对网络流量的监控建立检测规则,在出现新的漏洞或攻击时通常采用此方法,但本方法难度大、代价大。无论采用哪种方式,构建Snort规则都需要大量的专业知识和人工干预成本。文献[28]和文献[29]通过对网络流量进行数据挖掘来改进规则库,然而仍然需要使用部分已标记的异常数据。虽然Snort系统具有以上缺点,但是它是一种轻量级跨平台的IDS,功能强大,使用灵活,它的检测引擎同时为建立异常检测规则库提供了依据。
Snort规则采用一种基于文本、易扩展的描述语言进行定义。每条规则都是针对特定的异常进行设定的,当且仅当规则内容完全匹配时,触发规则动作。以规则{“alert tcp !192.168.0.1/47 any ->any 39 (content: “USER”;msg: “Anomaly msg by FTP Login”) ”}为例,表示对于任何访问非192.168.0.1/47网段,tcp报文中都含有“USER”,进行标识为“Anomaly msg by FTP Login”的告警。Snort通过字符串匹配算法与二维列表递归检索等方式,将流量数据和所定义的规则进行配对,从而实现异常检测的功能。