源码分析snort.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:12 大小:125KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

源码分析snort.pdf

源码分析snort.pdf

预览

免费试读已结束,剩余 2 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Snort作为一个轻量级的网络入侵检测系统,在实际中应用可能会有些力不从心,但如果想了解研究IDS的工作原理,仔细研究一下它的源码到是非常不错.首先对snort做一个概括的评论。从工作原理而言,snort是一个NIDS。[注:基于网络的入侵检测系统(NIDS)在网络的一点被动地检查原始的网络传输数据。通过分析检查的数据包,NIDS匹配入侵行为的特征或者从网络活动的角度检测异常行为。]网络传输数据的采集利用了工具包libpcap。snort对libpcap采集来的数据进行分析,从而判断是否存在可疑的网络活动。从检测模式而言,snort基本上是误用检测(misusedetection)。[注:该方法对已知攻击的特征模式进行匹配,包括利用工作在网卡混杂模式下的嗅探器被动地进行协议分析,以及对一系列数据包解释分析特征。顺便说一句,另一种检测是异常检测(anomalydetection)。]具体实现上,仅仅是对数据进行最直接最简单的搜索匹配,并没有涉及更复杂的入侵检测办法。尽管snort在实现上没有什么高深的检测策略,但是它给我们提供了一个非常优秀的公开源代码的入侵检测系统范例。我们可以通过对其代码的分析,搞清IDS究竟是如何工作的,并在此基础上添加自己的想法。snort的编程风格非常优秀,代码阅读起来并不困难,整个程序结构清晰,函数调用关系也不算复杂。但是,snort的源文件不少,函数总数也很多,所以不太容易讲清楚。因此,最好把代码完整看一两遍,能更清楚点。**********************************************************************************************************下面看看snort的整体结构。展开snort压缩包,有约50个c程序和头文件,另有约30个其它文件(工程、数据或者说明文件)。[注:这里用的是snort-1.6-beta7。snort-1.6.3不在手边,就用老一点的版本了,差别不大。]下面对源代码文件分组说明。snort.c(.h)是主程序所在的文件,实现了main函数和一系列辅助函数。decode.c(.h)把数据包层层剥开,确定该包属于何种协议,有什么特征。并标记到全局结构变量pv中。log.c(.h)实现日志和报警功能。snort有多种日志格式,一种是按tcpdump二进制的格式存储,另一种按snort编码的ascii格式存储在日志目录下,日志目录的名字根据"外"主机的ip地址命名。报警有不同的级别和方式,可以记录到syslog中,或者记录到用户指定的文件,另外还可以通过unixsocket发送报警消息,以及利用SMB向Windows系统发送winpopup消息。mstring.c(.h)实现字符串匹配算法。在snort中,采用的是Boyer-Moore算法。算法书上一般都有。plugbase.c(.h)实现了初始化检测以及登记检测规则的一组函数。snort中的检测规则以链表的形式存储,每条规则通过登记(Register)过程添加到链表中。response.c(.h)进行响应,即向攻击方主动发送数据包。这里实现了两种响应。一种是发送ICMP的主机不可到达的假信息,另一种针对TCP,发送RST包,断开连接。rule.c(.h)实现了规则设置和入侵检测所需要的函数。规则设置主要的作用是把一个规则文件转化为实际运作中的规则链表。检测函数根据规则实施攻击特征的检测。sp_*_check.c(.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字符代替,避免忽略了恶意的请求)、最小片断检查(避免恶意利用tcp协议中重组的功能)和端口扫描检测。**********************************************************************************************************下面描述main函数的工作流程。先来