Snort作为一款轻量级的入侵检测系统,其广受追捧的原因不仅是免费的特性,并且Snort插件机制也是十分完善的。本篇文章简单的通过分模块来概述Snort插件机制
1. 预处理插件
以spp_开头的文件。预处理插件在规则匹配误用检测之前运行,完成的功能主要为
①模拟TCP/IP堆栈功能的插件,如TIP碎片重组、TCP流重组插件
②各种解码插件:http解码插件、unicode解码插件、rpc解码插件、telnet解码插件等
③规则匹配无法进行攻击检测时所用的插件:端口扫描插件、spade异常入侵检测插件、bo检测插件、arp欺骗检测插件等。从各预处理插件文件名可对此插件功能做出推断。
2. 处理插件
以sp_开头的文件。处理插件在规则匹配阶段的ParseRuleOption中被调用,辅助完成基于规则的匹配过程。每个规则处理函数通常对应规则的选项中的一个关键字,实现对这个关键字的解释。其主要功能为:
①检查协议各字段,如TCPFlag、IcmpType、IpId、FragBits、Rpc、Dsize等;
②辅助功能,例如关闭连接、会话记录、攻击响应、严重级别等。
3. 输出插件
以spo_开头的文件,又分为日志和警告两种类型在两个列表中,在规则匹配过程中和匹配结束后调用,以便记录日志和警告。如同其它插件,它们也对应一个关键字,规则中相应关键字将激活这些插件的运行。输出插件和预处理插件除了注册到不同的列表中之外,其它的过程很相似处理插件的过程其实也是大同小异,只是在初始化过程中有所不同而己。输出和预处理插件的初始化通常只有一次,在内存中只有一个实例,所以被注册到一个列表中处理插件则完成每个匹配规则的一部分功能,所以处理插件为每个匹配规则初始化一次,然后插入到规则树。
4. Snort的总体流程
Snort的入侵检测流程分成两大步第I步是规则的解析流程,包括从规则文件中读取规则和在内存中组织规则,其过程为
①读取规则文件
②依次读取每条规则
③解析规则,用相应的规则语法表示
④在内存中对规则进行组织,建立规则语法树。
第II步是使用这些规则进行匹配的入侵流程。其过程为对从网络上捕获的每一条数据报文和在第I步建立的规则树进行匹配,若发现存在一条规则匹配该报文,就表示检测到一个攻击,然后按照规则规定的行为进行处理若搜索完所有的规则都没有找到匹配的规则,则视此报文正常。以上即是对总体架构的梗概分析。
【编辑推荐】