荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: georgehill (清风浮云 人生), 信区: Linux
标  题: snort源码分析(2)(转寄)
发信站: BBS 荔园晨风站 (Tue Oct 10 08:38:51 2000), 站内信件

【 以下文字转载自 georgehill 的信箱 】
【 原文由 georgehill.bbs@smth.org 所发表 】
发信人: shuke (莫失莫忘), 信区: Security
标  题: snort源码分析(2)(转寄)
发信站: BBS 水木清华站 (Sun Oct  8 11:40:44 2000)


    下面看看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中,或者记录到用户指定的文件,另外还可以通过unix socket发送报警
消息,以及利用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协议中重组的功能)和端口扫描检测。

--

      垆边人似月,皓腕凝霜雪


※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.69.59]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.115]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店