【vc++精品源码栏目提醒】:本文主要为网学会员提供“snort源代码分析帮助手册(概要版本)V1.0版本 - 其它资料”,希望对需要snort源代码分析帮助手册(概要版本)V1.0版本 - 其它资料网友有所帮助,学习一下!
1 前言 Snort 是一个优秀的轻量级,以开放源代码形式发行的网络入侵检测系统(NIDS) ,由Martin Roesch 编写,由全世界的众多程序员共同维护和升级。
Snort 运行在 Libpcap 库函数基础之上,具有实时数据流量分析和记录 IP 网络数据包的能力,能够进行协议分析,对内容匹配/搜索;它能检测不同的攻击方式,对检测到的攻击进行实时的警报; 并且现在的 Snort已经能支持多种系统。
。
尽管 snort 在实现上没有 从检测模式而言,snort 基本上是误用检测(misuse detection)什么高深的检测策略,但是它给我们提供了一个非常优秀的公开源代码的入侵检测系统范例。
我们可以通过对其代码的分析,搞清 IDS 究竟是如何工作的,并在此基础上添加自己的想法。
snort 的编程风格非常优秀,代码阅读起来并不困难,整个程序结构清晰,函数调用关系也不算复杂。
但是,snort 的源文件不少,函数总数也很多。
阅读它的规范代码是我们迅速学习了解入侵检测系统机制的一种方式, 阅读它的冗长代码需要坚定的信念。
因为小组成员是第一次阅读这样大量的代码, 为了方便小组成员的分析阅读,我书写了这个文档,进行源代码的概要分析,让阅读者能通过这份文档,大致了解系统的结构和代码的层次结构。
在阅读代码之前,小组成员应该有一定的基础知识: C 语言基础知识 Socket 网络编程 LibPcap 库函数 并且,应该有一定的动手能力: 搭建混杂模式和分布式模式的 Snort 了解 snort 的配置方法2 Snort 系统框架 系统框架图 日志输出 数据包规则匹配 循环 数据包预处理 截获数据包 构建规则快速匹配引擎 规则链表初始化 插件初始化 打开数据包截获接口 系统初始化3 Snort 流程分析 主体流程图 开始 解释命令行 初始化 pcap 库 设置解码函数 预处理、检测引擎、输出模块(插件)的初始化 解释规则文件生成所需的规则链 设置警告/日志输出函数 对数据报文解码 如有需要,打印报文 调用所有的预处理器对报文进行处理 对报文匹配所有 不是入侵行为 的规则,检测入侵 检测到入侵 调用所有的输出插件 继续 是 否 终止4 Snort 模块分析4.1 总体模块图 预处理模块(插件) 检测引擎模块(插件) 输出模块(插件) 规则处理模块 日志模块 Snort 包解码模块 使用/调用 总体 辅助模块 模块 主控模块 图4.2 各模块功能分析4.2.1 主控模块 实现的功能包括所有模块的初始化、 命令行解释、配置文件解释、数据包捕获库 libpcap的初始化,然后调用 libpcap 开始捕获数据包,并进行解码检测入侵; 主控模块中的插件管理功能实现对所有插件的管理,包括所有插件的初始化和启动等。
4.2.2 包解码模块 包一被收集到,Snort 必须对每一个具体的协议元素进行解码。
把从网络上抓取的原始数据包,从下向上沿各个协议栈(从较低的数据连接协议开始,逐层上移)进行解码,解码后的包数据将填充满相应的数据结构,以便规则处理模块处理。
解码传 预处理程序检查包 输协议 解码网 络协议 包解 码模 块流 解码数据 Libpcap 捕包 程 连接协议4.2.3 规则处理模块 实现对这些报文进行基于规则的模式匹配工作,检测出入侵行为;在初始化阶段同时负责完成规则文件的解释和规则语法树的构建工作。
规则处理模块在执行检测工作时使用了三种形式的插件,分别为预处理插件模块、检测引擎插件模块和输出插件模块,他们在源代码中处于绝对的文件数量优势。
4.2.4 预处理模块(插件) 在模式匹配之前进行,对报文进行分片重组、流重组和异常检查等预处理操作。
Snort 的预处理分为两类。
他们可以用来针对可疑行为检查包或者修改包以便检测引擎能对其正确解释。
有很多攻击通过特征匹配都不能被检测引擎检测出来。
因此, “检查”预处理走进了这一领域, 来监测可疑行为。
这类预处理对发现非基于特征的攻击是不可缺少的。
另一类预处理负责对流量标准化以便监测引擎能准确匹配特征。
这类预处理通过