snort代码修改记录

由于工作关系,需要修改snort中代码验证漏洞分析逻辑.把snort代码分析如下:

代码的核心使用pattern匹配packet中的内容.把snort规则提供的关键字分类后发现.最关键的是payload detection关键字类.而gereral类的关键字的作用是日志输出.non-payload类来自解析模块的结果。post-detection类的关键字可以和action合并.snort规则和防火墙规则一样.有多个match操作,但只能有一个action操作.但有时候我们需要多个action.如我们在某个关键字匹配后我们要log也要alert还要有replace.而replace由于action只能有一个.那么只能放在规则关键字里了

快速匹配问题:假如我们现在把8条规则分成两个类.HTTP/SMTP.那么我们需要添加代码识别当前包是什么协议从而进入相应的匹配树但这不是快速匹配问题.再比如这8条规则中有6条HTTP.而每条规则全有pattern关键字.如果按照遍历原则的话.pattern匹配工作要做6遍.我们可以把这6个关键字从规则选项中分离出来.使用AC算法只匹配一次.

代码的核心可以分为抓包/协议解析/规则匹配/结果输出.首先规则分析模块把用户提供的规则文件分析整理成一个规则树.也可以这样分析分类.把规则分类.当前snort使用端口分类.而我们可以使用协议分类.但这样做后我们需要增加协议识别代码.而用户规则除了pattern匹配外,还有协议解析规则和统计规则(流量统计和端口扫描).在触发这些规则后加入事件队列

事件队列是规则和输出关键字模块的接口,我们还可以在这里进行事件压缩的,事件合并等操作.

规则统计(PPM)和动态模块功能是项目可分析/可扩展需要的,但对于我的验证工作关系不大

你可能感兴趣的:(snort代码修改记录)