1 / 12
文档名称:

源码分析snort.pdf

格式:pdf   页数:12页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

源码分析snort.pdf

上传人:yixingmaoj 2014/11/26 文件大小:0 KB

下载得到文件列表

源码分析snort.pdf

文档介绍

文档介绍:Snort 作为一个轻量级的网络入侵检测系统,在实际中应用可能会有些力不从心,但如果想了
解研究 IDS 的工作原理, snort 做一个概括的评
论。
从工作原理而言,snort 是一个 NIDS。[注:基于网络的入侵检测系统(NIDS)在网络的一
点被动地检查原始的网络传输数据。通过分析检查的数据包,NIDS 匹配入侵行为的特征或
者从网络活动的角度检测异常行为。] 网络传输数据的采集利用了工具包 libpcap。snort 对
libpcap 采集来的数据进行分析,从而判断是否存在可疑的网络活动。

从检测模式而言,snort 基本上是误用检测(misuse detection)。[注:该方法对已知攻击的特
征模式进行匹配,包括利用工作在网卡混杂模式下的嗅探器被动地进行协议分析,以及对一
系列数据包解释分析特征。顺便说一句,另一种检测是异常检测(anomaly detection)。]具
体实现上,仅仅是对数据进行最直接最简单的搜索匹配,并没有涉及更复杂的入侵检测办法。

尽管 snort 在实现上没有什么高深的检测策略,但是它给我们提供了一个非常
优秀的公开源代码的入侵检测系统范例。我们可以通过对其代码的分析,搞清 IDS 究竟是
如何工作的,并在此基础上添加自己的想法。

snort 的编程风格非常优秀,代码阅读起来并不困难,整个程序结构清晰,函
数调用关系也不算复杂。但是,snort 的源文件不少,函数总数也很多,所以不太
容易讲清楚。因此,最好把代码完整看一两遍,能更清楚点。

*****************************************************
*****************************************************
下面看看 snort 的整体结构。展开 snort 压缩包,有约 50 个 c 程序和头文件,另有约 30 个其
它文件(工程、数据或者说明文件)。[注:这里用的是 snort--beta7。snort- 不在手边,
就用老一点的版本了,差别不大。]下面对源代码文件分组说明。

(.h)是主程序所在的文件,实现了 main 函数和一系列辅助函数。

(.h)把数据包层层剥开,确定该包属于何种协议,有什么特征。并
标记到全局结构变量 pv 中。

(.h)实现日志和报警功能。snort 有多种日志格式,一种是按 tcpdump 二进制的格式存
储,另一种按 snort 编码的 ascii 格式存储在日志目录下,日志目录的名字根据"外"主机的 ip
地址命名。报警有不同的级别和方式,可以记录到 syslog 中,或者记录到用户指定的文件,
另外还可以通过 unix socket 发送报警消息,以及利用 SMB 向 Windows 系统发送 winpopup
消息。

(.h)实现字符串匹配算法。在 snort 中,采用的是 Boyer-Moore 算法。算法书上一般
都有。

(.h)实现了初始化检测以及登记检测规则的一组函数。snort 中的检测规则以链表的
形式存储,每条规则通过登记(Register)过程添加到链表中。
(.h)进行响应,即向攻击方主动发送数据包。这里实现了两种响应。一种是发送
ICMP 的主机不可到达的假信息,另一种针对 TCP,发送 RST 包,断开连接。

(.h)实现了规则设置和入侵检测所需要的函数。规则设置主要的作用是
把一个规则文件转化为实际运作中的规则链表。检测函数根据规则实施攻击特征的检测。

sp_*(.h)是不同类型的检测规则的具体实现。很容易就可以从文件名得知所实现的规
则。例如,sp_dsize_check 针对的是包的数据大小,sp_icmp_type_check 针对 icmp 包的类型,
sp_tcp_flag_check 针对 tcp 包的标志位。不再详述。

spo_*.c(.h)实现输出(output)规则。spo_alert_syslog 把事件记录到 syslog 中;spo_log_tcpdump
利用 libpcap 中的日志函数,进行日志记录。

spp_*.c(.h)实现预处理(preprocess)规则。包括 http 解码(即把 http 请求中的%XX 这样的
字符用对应的 ascii 字符代替,避免忽略了恶意的请求)、最小片断检查(避