snort源码分析 一 (总体说明)

亡梦爱人 提交于 2019-12-01 16:38:34

简介

       snort 有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。 数据包记录器模式把数据包记录到硬盘上。网路入侵检测模式是最复杂的,而且是可配置的。我们可以让 snort 分析网络数据流以匹配用户定义的一些规则, 并根据检测结果采取一定的动作。


功能介绍

       snort 有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。 数据包记录器模式把数据包记录到硬盘上。 网路入侵检测模式是最复杂的, 而且是可配置的。 我们可以让 snort 分析网络数据流以匹配用户定义的一些规则, 并根据检测结果采取一定的动作。


嗅探器

      所谓的嗅探器模式就是 snort 从网络上读出数据包然后显示在你的控制台上。首先,我们从最本的用法入手。如果你只要把 TCP/IP 包头信息打印在屏

幕上,只需要输入下面的命令:

./snort -v

      使用这个命令将使 snort 只输出 IP 和 TCP/UDP/ICMP 的包头信息。 如果你要看到应用层的数据,可以使用:

./snort -vd

       这条命令使 snort 在输出包头信息的同时显示包的数据信息。 如果你还要显示数据链路层的信息,就使用下面的命令:

./snort -vde

       注意这些选项开关还可以分开写或者任意结合在一块。 例如: 下面的命令就和上面最后的一条命令等价:

./snort -d -v –e


数据包记录器 

       如果要把所有的包记录到硬盘上,你需要指定一个日志目录,snort 就会自动记录数据包:

./snort -dev -l ./log

      当然, ./log 目录必须存在, 否则 snort 就会报告错误信息并退出。 当 snort在这种模式下运行, 它会记录所有看到的包将其放到一个目录中, 这个目录以数据包目的主机的 IP 地址命名,例如:192.168.10.1 如果你只指定了-l 命令开关,而没有设置目录名, snort 有时会使用远程主

机的 IP 地址作为目录,有时会使用本地主机 IP 地址作为目录名。为了只对本地网络进行日志,你需要给出本地网络:

./snort -dev -l ./log -h 192.168.1.0/24

        这个命令告诉 snort 把进入 C 类网络 192.168.1 的所有包的数据链路、TCP/IP 以及应用层的数据记录到目录./log 中。

       如果你的网络速度很快, 或者你想使日志更加紧凑以便以后的分析, 那么应该使用二进制的日志文件格式。 所谓的二进制日志文件格式就是 tcpdump 程序使用的格式。使用下面的命令可以把所有的包记录到一个单一的二进制文件中:

./snort -l ./log -b

       注意此处的命令行和上面的有很大的不同。 我们勿需指定本地网络, 因为所有的东西都被记录到一个单一的文件。你也不必冗余模式或者使用-d、-e 功能选项,因为数据包中的所有内容都会被记录到日志文件中。你可以使用任何支持 tcpdump 二进制格式的嗅探器程序从这个文件中读出

数据包,例如:tcpdump 或者 Ethereal。使用-r 功能开关,也能使 snort 读出包的数据。snort 在所有运行模式下都能够处理 tcpdump 格式的文件。例如:如果你想在嗅探器模式下把一个 tcpdump 格式的二进制文件中的包打印到屏幕上,

可以输入下面的命令:

./snort -dv -r packet.log

      在日志包和入侵检测模式下,通过 BPF(BSD Packet Filter)接口,你可以使用许多方式维护日志文件中的数据。 例如,你只想从日志文件中提取 ICMP 包,

只需要输入下面的命令行:

./snort -dvr packet.log icmp


网络入侵检测系统 

      snort 最重要的用途还是作为网络入侵检测系统(NIDS), 使用下面命令行可

以启动这种模式:

./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf

      snort.conf 是规则集文件。 snort 会对每个包和规则集进行匹配, 发现这样的包就采取相应的行动。如果你不指定输出目录,snort 就输出到

/var/log/snort 目录。

注意: 如果你想长期使用 snort 作为自己的入侵检测系统,最好不要使用-v选项。因为使用这个选项,使 snort 向屏幕上输出一些信息,会大大降低 snort的处理速度,从而在向显示器输出的过程中丢弃一些包。此外,在绝大多数情况下,也没有必要记录数据链路层的包头,所以-e 选项也可以不用:

./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf

这是使用 snort 作为网络入侵检测系统最本的形式,日志符合规则的包,

以 ASCII 形式保存在有层次的目录结构中。

    

结构说明

    如下图所示,snort符合基于模式的匹配的入侵检测系统的基本结构。

即:

  1. 嗅探网络中的数据包

  2. 拆包

  3. 筛选匹配

  4. 执行匹配上的对应动作 


流程说明

        结合上面的结构说明可以明确的理解snort运行的以下流程。

  1. 因为要嗅探所以要做好数据获取的准备工作。

  2. 插件是使snort更加灵活,譬如输出插件使snort可以选取多种日志输出方式。

  3. 规则链表则是用于匹配的规则的储存。

  4. 初始化快速匹配引擎则是为了使对配匹配的规则进行预处理,减少查找时间。

  5. 以上初始化完成后,就进入      获取包->拆包->匹配->动作->获取包...的持续处理过程中。




总结

   综上所述,snort的关键在于两点:

  1. 灵活性-因为作为入侵检测系统需要与网络的发展同步跟进才能保证代码的功能,因此整体结构必需拥有较高的稳定性和健壮性。

  2. 算法-程序运行中匹配是很频繁的操作,因此良好的匹配筛选算法是该程序性能保证的必要条件。



参考文章

  1. 《snort中文手册》

  2. 《snort入侵检测系统源码分析》


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!