link: http://hi.baidu.com/telpublic/blog/item/d40fddd3c1a6a7dca8ec9a01.html
前提:
snort的官方网站:www.snort.org
snort的安装方法请参阅官方网站或在网络上搜索一下
snort详细参考请参阅官方网站的用户手册或《snort中文手册》
这篇文章仅讲解snort入侵检测的使用方法和处理过程
本文基于RHCE5、libpcap-0.9.4-8.1、snort-2.8.0
运行模式:
1、抓包模式:从网络上抓取数据包,显示其摘要信息或记录数据包到硬盘
2、入侵检测:从网络上抓取数据包,分析判断是否为网络入侵,再发送报警信息给管理员或记录问题数据包
3、内嵌防火墙:与入侵检测模式相同,但功能更强大,能够根据入侵行为控制IPTABLES防火墙的规则
本文只讲解第二种模式的“入侵检测”。
运行过程:
数据包解码-》预处理-》入侵探测-》报警与日志-》输出
数据包解码:从网络接口获取数据包并交给预处理
预处理:对接收到的数据包根据需要作出修改,目的是方便入侵检测模块的进一步处理,也用于部分入侵行为的检测(主要是入侵检测模块检测不到的部分)。例如URL重组,某条入侵规则用来发现HTTP包中是否包含“scripts/iisadmin”字符(这是一个入侵特征),如果黑客做了一些细小的变通,例如:“scripts/./iisadmin” ,在web服务器看来这两个字符串是一样的,但是入侵规则会认为他们不一样,这时候就需要预处理。预处理器将“scripts/./iisadmin”修改成“scripts/iisadmin”。
入侵探测:将数据包的各种信息与预先定义的入侵规则一一比较,判断是否为入侵
报警与日志:与入侵规则匹配的数据包,该如何处理?主要有三种:报警、记录数据包、不作处理。
输出:报警和记录的数据包应该存放到哪里?可以是文件、数据库、系统日志、SNMP trap等
snort的文件组成:
/etc/snort/snort.conf 入侵检测的主配置文件
/etc/snort/classification.config 入侵类型分类
/etc/snort/gen-msg.map gid对应的报警文本
/etc/snort/sid-msg.map sid对应的报警文本
/var/snort/rules/ 入侵规则存放目录
/var/log/snort/ 警告和日志的默认存放目录
运行入侵检测:snort -c /etc/snort/snort.conf -e eth0
snort.conf详解:
snort.conf主要有5个部分构成,变量定义、插件、预处理、入侵规则、输出
变量定义
用来定义各种变量,这些变量可以在配置文件和规则文件中引用,例如:
var RULE_PATH /etc/snort/rules <=定义规则文件的存放目录
include $RULE_PATH/xxx.rules <=引用这个变量
三种变量:var ipvar <=定义IP地址 portvar <=定义端口 这里的IP地址和端口可以是列表、非内容,如!35 表示除了35号端口
定义:var 变量名 变量值
使用:$变量名
插件
编译后的snort,可以加载插件,扩展功能。除非自己编写插件,否则这部分功能用处不大。
预处理
配置各种预处理器的参数。这些预处理器是内置在snort中的。基本上无需改变默认配置。
入侵规则
具体的入侵规则在其他文件中定义,此处只需指明这些规则文件。
include $RULE_PATH/xxx.rules <=启用$RULE_PATH目录下的xxx.rules规则
输出
指出报警和记录的数据包应该保存到哪里。默认作为文件保存到/var/log/snort目录下。
output alert_syslog:LOG_AUTH LOG_ALERT <=将报警保存到系统日志,级别为LOG_AUTH LOG_ALERT
output log_tcpdump: tcpdump.log <=将数据包记录到指定文件tcpdump.log
规则定义:
规则文件默认存放在/etc/snort/rules目录
一个规则文件中可以存放多条规则
每条规则由两部分构成:规则头和规则内容
每条规则有唯一的编号;符合多条规则的数据包,按照优先级次序匹配规则,只要有一条规则为PASS,则不匹配其他规则。
规则头:处理方法 协议 IP地址 端口 传播方向 IP地址 端口
处理方法包括:pass alert log activate dynamic
pass表示不作任何处理;alert 表示报警;log表示记录这个数据包;activate表示如果符合这条规则,就进入下一条规则比较。
可以自定义处理方法,自定义处理方法的有点是能够为一条规则单独指定报警和数据包记录的存放方法。
协议包括:IP、ICMP、TCP、UDP 目前仅支持这些协议。对于不支持的协议,可以通过数据包偏移计算处理。
端口:如果协议没有端口(如IP、ICMP),则为any
传播方向:-> <- <>
规则内容:
sid:规则的唯一性编号,必须。1000000以上的标号供用户使用。以下的编号snort系统自用。
classtype:入侵类型。具体的入侵类型在classification.config文件中定义。此处只需引用入侵类型的名称。
priority:优先级。优先级高的规则先处理。如果定义了入侵类型,每个类型有一个默认的优先级。此处配置会覆盖入侵类型的优先级。
gid:一个数字标号。产生这条规则的snort部件编号。没什么用。根据报警信息中的gid定位snort部件。
msg:一个文本字符串。如果是报警规则,这个就是报警内容。
以上是通用的配置内容,针对各种协议的配置内容,请参考官方文档。
举例:从192.168.0.106发送到192.168.0.6的ICMP响应包,发出警告信息xxx。
alert icmp 192.168.0.106 any -> 192.168.0.6 any (sid:2000000005;itype:0;icode:0;msg:"xxx";priority:5;)
报警内容:
[**] [1:2000000005:0] xxx [**] <=中间方括号中的内容为 gid:sid:rev
[Priority: 5]
11/21-10:01:23.326186 192.168.0.106 -> 192.168.0.6
ICMP TTL:128 TOS:0x0 ID:16414 IpLen:20 DgmLen:84 DF
Type:0 Code:0 ID:8975 Seq:1 ECHO REPLY
其他内容:
读出记录的数据包:snort -q -r /var/log/xxx.log -r 读出TCPDUMP格式的数据包;-q 安静模式不显示无关信息
被iptables防火墙阻隔的数据包,仍然能够被snort读取。
不检测指定IP地址的数据包:定义一条pass规则
检测多个网卡的输入数据包:-i any 指定网络接口
保护IDS自身
1、不要在运行IDS探测器的机器上运行任何服务。网络服务是用来探寻系统最普遍的方式
2、IDS应该安装从厂商那里得到的最新的补丁。包括IDS本身的补丁和操作系统的补丁
3、配置你的IDS机器,使其不会对ping(ICMP echo)做出回应
4、如果你在Linux机器上运行IDS,请用netfileter/iptables阻止任何不必要的数据,Snort仍然可以看到所有的数据包。
5、一些特殊的方法:
在隐秘接口(Stealth Interface)上运行Snort。IDS的网线的1针和2针短路,3针和6针连到对端。
在没有IP地址的接口上运行IDS。在LINUX上激活一个没有配置IP地址的接口;在windows接口上不绑定TCP/IP协议或配置接口为DHCP但没有DHCP服务器。