1. 简介
2. 安装(linux)及配置
3. 使用Snort
4. 入侵检测
5. Snort Addons
6. 参考资料
1. 简介
Snort是一个开放源码的网络入侵检测系统。Snort的功能包括
1) 采用Libpcap捕获数据链路层的分组并进行协议栈分析(TCP/IP协议)。
2) 在内部Snort使用Misused检测模型进行入侵检测,即通过一个完整的入侵规则库来实时匹配并探测入侵行为。这个规则库非常全面,包含了探测缓冲区溢出,端口扫描,CGI攻击等等,并处于不断更新当中。如果你使用nmap或Trin00等进行攻击,可能你就会被snort轻易的发现。Snort也允许用户方便的编写并加入自己的规则。
3) 日志可以存储成Tcpdump二进制格式,或ASCII格式,或数据库格式(包括MySQL,PostgreSQL),甚至包括XML格式。
2. 安装(linux)及配置
以linux平台为例,安装很简单,
¥tar xzvf snort-1.7.tar.gz
¥cd snort-1.7
¥./configure
¥make
Make之后,在当前目录下会产生一个snort可执行文件。
snort的配置文件使snort.conf,配置包含四步
1)设置网络相关变量,
IDS需要区分“内网”和外网,比如我所在子网IP是202.197.40.91,则配置为
var HOME_NET 202.197.40.0/24 #内网
var EXTERNAL_NET any #外网,关键字any这里表示HOME_NET之外的所有地址
var DNS_SERVERS 202.197.32.12 #DNS 服务器
2)配置预处理器
预处理器是snort在捕获分组时对分组作的一些"预处理"动作,比如探测过小的IP碎片,重组 IP分组,重组TCP报文等,snort预处理程序为spp_*.c形式,比如spp_defrag.c实现重组IP包。用户可以预处理配置参数,如
preprocessor minfrag: 128
设置碎片小于128字节为非法。
3) 配置输出插件(output plugins)
Snort的插件结构允许开发者扩展snort的功能。输出插件负责信息的输出,你可以选择ASCII文本文件存储日志,也可以选择存储到MySQL数据库中,也可以使用IAP协议将信息传给管理器Manager(参见snortnet)。
这是一个MySQL的例子
output database: log, mysql, user=westfox dbname=detector host=localhost password=t123 port=1234
上面例子表示使用MYSQL RDBMS,数据库名为detector,用户名westfox,密码t123,本地存储,MySQL Server端口号为1234。
Snort源代码中contrib目录下有一个create_mysql文件,可以用来方便的构造snort所需的MySQL库表结构,假设你已新建了一个名为detector,并将足够的权限交给westfox,则
¥mysql detector -u westfox -p <./contrib/create_mysql
上面的命令就可以建好detector库的表结构。
4) 定制Snort 规则集(Rule Set)
Snort的规则集是一般的文本文件,命名为*-lib,如backdoor-lib处理backdoor类型的入侵。所有这些*-lib文件都用“include”包含进snort.conf(1.6.3版本中名为snort-lib)中,如果用户对某种攻击类型的探测不感兴趣,可以简单将相应的一行注释掉。如
-------Cut from snort.conf---------
include webcgi-lib
#include webcf-lib 你对ColdFusion并不感兴趣
include webiis-lib
include webfp-lib
include webmisc-lib
include overflow-lib
include finger-lib
include ftp-lib
include smtp-lib
include my-lib #用户自己编写的规则文件
-------------------------------------
用户也可以自己编写规则文件,如My-lib,,Snort规则编写语法以有人译出,这里不再叙述。
3.使用Snort
Snort可以工作在三种模式下:
1) 嗅探器sniffer:
命令:snort -v [-d][-X]
Snort使用Libpcap包捕获库,即TCPDUMP使用的库。在这种模式下,Snort使用网络接口的混杂模式读取并解析共享信道中的网络分组。BPF表达式可用来过滤流量。
-v verbose
-d 转储应用层数据
-X 转储从链路层开始的原始包
2) 分组日志模式
命令:snort -l dir [-h hn][-b]
这种模式下以ASCII格式记录解析出的分组。
-l directory snort将把日志放在这个目录下
-h X.X.X.X 设置本地子网号
-b 日志使用TCPDUMP二进制格式
3) 入侵检测模式
命令: snort -c snort.conf [-l dir]
必须载入规则库才能进入入侵检测模式。即
#./snort -c snort.conf
snort将报警信息放入/var/log/snort目录下,可以用-l选项来改变目录
4. 入侵检测
Snort是一个轻量级的网络入侵检测系统(NIDS),采用Misused 模式进行检测。在1.7里,新增加的Spade插件使得Snort支持Anormal模式检测。Snort的检测规则是二维的,即包含规则头和规则选项两部分,这比较其他IDS定义的规则来说简单的多。Snort新的插件reference可以将确定的攻击行为同Bugtraq, CVE , arachNIDS, McAfee virus这些标准的攻击标识库结合,给出在线的有关此攻击的URL参考资料。snort的探测规则库也是时时更新反映上面这些库的变化,用户可以到www.snort.org上下载新的规则库文件。
Snort本身具有良好的扩展性,包含预处理插件,插件和输出插件三类plugins,snort运行的一个流程如下
------------------------------------------------------------------------
Libpcap捕获分组---->TCP/IP协议栈分析---->规则探测---->日志和报警
│ │ │
│ │ │
│预处理插件│ │插件│ │输出插件│
------------------------------------------------------------------------
从上面可以知道,在Snort处理流程的三个重要环节,开发者都可以编写自己的plugins来扩展功能。
当然,一般用户仅用snort自带的探测库也可以探测绝大多数的攻击。以端口扫描攻击为例标准的snort.conf文件有一行配置portscan预处理器(源程序spp_portscan.c):
preprocessor portscan: ¥HOME_NET 4 3 portscan.log
上一行表示对于目标地址属于本地子网的IP流,如果在少于三秒内发现连续四次TCP SYN包或UDP的"SYN"包,指示有portscan攻击,并记录到portscan.log文件中。
Snort除了统计指定时间内的连接次数外,还根据各种扫描模式的特征来探测,这些规则在scan-lib中,如
alert tcp any any -> ¥HOME_NET any (msg:"Possible NMAP Fingerprint attempt"; flags: SFPU;)
探测NAMP的Fingerprint扫描,标志是SYN,FIN,PSH,URG全置位。
5. Snort Addons
Snort1.7的contrib目录下包含了几个有用的snort工具。
5.1 snort-net
Snort-net是一个建立在snort上的分布式入侵检测系统(DIDS)。在snort-net里,多个snort作为感应器(sensor)分布在各网段捕获信息,snort-net提供一个管理器Manager,Manager负责和这些sensor联络,并提供一个管理者界面。Snort-net的Sensor和Manager之间采用IAP协议通信。
Snort-net远非完善缺陷包括
1) Snort-net所依赖的libiap库(IAP协议的实现库)现有的实现没有达到IAP0.3协议所规定的功能,包括最重要的TLS1.0协议支持。
2) Manager只能做简单的信息收集和显示工作,而没有分析综合的能力
3) 显示界面过于简陋
4)传递的消息格式缺乏灵活性
虽然有这些缺点,snort-net给出了snort向DIDS发展的框架。
5.2 Spade
Spade即Statistical Packet Anomaly Detection Engine(统计分组异常检测引擎),它作为一个预处理插件存在,对Snort捕获到的包做异常检测(Anomaly Detection)。Spade仅仅是实验性质的,并不实用。
5.3 IDMEF-XML
因特网工程任务组织(IETF)设立了一个入侵检测工作小组(IDWG),他们制定了一个入侵检测消息交换格式(IDMEF),IDMEF用XML语言描述。Idmef-xml输出插件将snort报警消息转换成IDMEF-xml格式。Snort通过这种消息格式可以将报警消息传递给别的软件做进一步,只要对方遵循IDMEF-XML格式即可。
6. 参考资料
Snort Home http://www.snort.org
Bugtrap http://www.securityfocus.com
CVE http://www.cve.mitre.org
arachNIDS http://www.whitehats.com/ids/
IDMEF http://www.silicondefense.com/idwg/idmef/