Snort.docx
《Snort.docx》由会员分享,可在线阅读,更多相关《Snort.docx(24页珍藏版)》请在冰豆网上搜索。
Snort
Snort(入侵检测系统)中文手册
【简介】
Snort是一个轻便的网络入侵检测系统,可以完成实时流量分析和对网络上的IP包登录进行测试等功能,能完成协议分析,内容查找/匹配,能用来探测多种攻击和嗅探(如缓冲区溢出、秘密断口扫描、CGI攻击、SMB嗅探、拇纹采集尝试等)。
snort有三种工作模式:
嗅探器、数据包记录器、网络入侵检测系统。
嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。
数据包记录器模式把数据包记录到硬盘上。
网路入侵检测模式是最复杂的,而且是可配置的。
我们可以让snort分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动作。
嗅探器
所谓的嗅探器模式就是snort从网络上读出数据包然后显示在你的控制台上。
首先,我们从最基本的用法入手。
如果你只要把TCP/IP包头信息打印在屏幕上,只需要输入下面的命令:
./snort-v
使用这个命令将使snort只输出IP和TCP/UDP/ICMP的包头信息。
如果你要看到应用层的数据,可以使用:
./snort-vd
这条命令使snort在输出包头信息的同时显示包的数据信息。
如果你还要显示数据链路层的信息,就使用下面的命令:
./snort-vde
注意这些选项开关还可以分开写或者任意结合在一块。
例如:
下面的命令就和上面最后的一条命令等价:
./snort-d-vCe
数据包记录器
如果要把所有的包记录到硬盘上,你需要指定一个日志目录,snort就会自动记录数据包:
./snort-dev-l./log
当然,./log目录必须存在,否则snort就会报告错误信息并退出。
当snort在这种模式下运行,它会记录所有看到的包将其放到一个目录中,这个目录以数据包目的主机的IP地址命名,例如:
192.168.10.1
如果你只指定了-l命令开关,而没有设置目录名,snort有时会使用远程主机的IP地址作为目录,有时会使用本地主机IP地址作为目录名。
为了只对本地网络进行日志,你需要给出本地网络:
./snort-dev-l./log-h192.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-rpacket.log
在日志包和入侵检测模式下,通过BPF(BSDPacketFilter)接口,你可以使用许多方式维护日志文件中的数据。
例如,你只想从日志文件中提取ICMP包,只需要输入下面的命令行:
./snort-dvrpacket.logicmp
网络入侵检测系统
snort最重要的用途还是作为网络入侵检测系统(NIDS),使用下面命令行可以启动这种模式:
./snort-dev-l./log-h192.168.1.0/24-csnort.conf
snort.conf是规则集文件。
snort会对每个包和规则集进行匹配,发现这样的包就采取相应的行动。
如果你不指定输出目录,snort就输出到/var/log/snort目录。
注意:
如果你想长期使用snort作为自己的入侵检测系统,最好不要使用-v选项。
因为使用这个选项,使snort向屏幕上输出一些信息,会大大降低snort的处理速度,从而在向显示器输出的过程中丢弃一些包。
此外,在绝大多数情况下,也没有必要记录数据链路层的包头,所以-e选项也可以不用:
./snort-d-h192.168.1.0/24-l./log-csnort.conf
这是使用snort作为网络入侵检测系统最基本的形式,日志符合规则的包,以ASCII形式保存在有层次的目录结构中。
网络入侵检测模式下的输出选项
在NIDS模式下,有很多的方式来配置snort的输出。
在默认情况下,snort以ASCII格式记录日志,使用full报警机制。
如果使用full报警机制,snort会在包头之后打印报警消息。
如果你不需
要日志包,可以使用-N选项。
snort有6种报警机制:
full、fast、socket、syslog、smb(winpopup)和none。
其中有4个可以在命令行状态下使用-A选项设置。
这4个是:
-Afast:
报警信息包括:
一个时间戳(timestamp)、报警消息、源/目的IP地址和端口。
-Afull:
是默认的报警模式。
-Aunsock:
把报警发送到一个UNIX套接字,需要有一个程序进行监听,这样可以实现实时报警。
-Anone:
关闭报警机制。
使用-s选项可以使snort把报警消息发送到syslog,默认的设备是LOG_AUTHPRIV和LOG_ALERT。
可以修改snort.conf文件修改其配置。
snort还可以使用SMB报警机制,通过SAMBA把报警消息发送到Windows主机。
为了使用这个报警机制,在运行./configure脚本时,必须使用--enable-smbalerts选项。
下面是一些输出配置的例子:
使用默认的日志方式(以解码的ASCII格式)并且把报警发给syslog:
./snort-csnort.conf-l./log-s-h192.168.1.0/24
使用二进制日志格式和SMB报警机制:
./snort-csnort.conf-b-MWORKSTATIONS
snort有三种工作模式:
嗅探器、数据包记录器、网络入侵检测系统。
嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。
数据包记录器模式把数据包记录到硬盘上。
网路入侵检测模式是最复杂的,而且是可配置的。
我们可以让snort分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动作。
嗅探器
所谓的嗅探器模式就是snort从网络上读出数据包然后显示在你的控制台上。
首先,我们从最基本的用法入手。
如果你只要把TCP/IP包头信息打印在屏幕上,只需要输入下面的命令:
./snort-v
使用这个命令将使snort只输出IP和TCP/UDP/ICMP的包头信息。
如果你要看到应用层的数据,可以使用:
./snort-vd
这条命令使snort在输出包头信息的同时显示包的数据信息。
如果你还要显示数据链路层的信息,就使用下面的命令:
./snort-vde
注意这些选项开关还可以分开写或者任意结合在一块。
例如:
下面的命令就和上面最后的一条命令等价:
./snort-d-vCe
数据包记录器
如果要把所有的包记录到硬盘上,你需要指定一个日志目录,snort就会自动记录数据包:
./snort-dev-l./log
当然,./log目录必须存在,否则snort就会报告错误信息并退出。
当snort在这种模式下运行,它会记录所有看到的包将其放到一个目录中,这个目录以数据包目的主机的IP地址命名,例如:
192.168.10.1
如果你只指定了-l命令开关,而没有设置目录名,snort有时会使用远程主机的IP地址作为目录,有时会使用本地主机IP地址作为目录名。
为了只对本地网络进行日志,你需要给出本地网络:
./snort-dev-l./log-h192.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-rpacket.log
在日志包和入侵检测模式下,通过BPF(BSDPacketFilter)接口,你可以使用许多方式维护日志文件中的数据。
例如,你只想从日志文件中提取ICMP包,只需要输入下面的命令行:
./snort-dvrpacket.logicmp
网络入侵检测系统
snort最重要的用途还是作为网络入侵检测系统(NIDS),使用下面命令行可以启动这种模式:
./snort-dev-l./log-h192.168.1.0/24-csnort.conf
snort.conf是规则集文件。
snort会对每个包和规则集进行匹配,发现这样的包就采取相应的行动。
如果你不指定输出目录,snort就输出到/var/log/snort目录。
注意:
如果你想长期使用snort作为自己的入侵检测系统,最好不要使用-v选项。
因为使用这个选项,使snort向屏幕上输出一些信息,会大大降低snort的处理速度,从而在向显示器输出的过程中丢弃一些包。
此外,在绝大多数情况下,也没有必要记录数据链路层的包头,所以-e选项也可以不用:
./snort-d-h192.168.1.0/24-l./log-csnort.conf
这是使用snort作为网络入侵检测系统最基本的形式,日志符合规则的包,以ASCII形式保存在有层次的目录结构中。
网络入侵检测模式下的输出选项
在NIDS模式下,有很多的方式来配置snort的输出。
在默认情况下,snort以ASCII格式记录日志,使用full报警机制。
如果使用full报警机制,snort会在包头之后打印报警消息。
如果你不需
要日志包,可以使用-N选项。
snort有6种报警机制:
full、fast、socket、syslog、smb(winpopup)和none。
其中有4个可以在命令行状态下使用-A选项设置。
这4个是:
-Afast:
报警信息包括:
一个时间戳(timestamp)、报警消息、源/目的IP地址和端口。
-Afull:
是默认的报警模式。
-Aunsock:
把报警发送到一个UNIX套接字,需要有一个程序进行监听,这样可以实现实时报警。
-Anone:
关闭报警机制。
使用-s选项可以使snort把报警消息发送到syslog,默认的设备是LOG_AUTHPRIV和LOG_ALERT。
可以修改snort.conf文件修改其配置。
snort还可以使用SMB报警机制,通过SAMBA把报警消息发送到Windows主机。
为了使用这个报警机制,在运行./configure脚本时,必须使用--enable-smbalerts选项。
下面是一些输出配置的例子:
使用默认的日志方式(以解码的ASCII格式)并且把报警发给syslog:
./snort-csnort.conf-l./log-s-h192.168.1.0/24
使用二进制日志格式和SMB报警机制:
./snort-csnort.conf-b-MWORKSTATIONS
格式:
flags:
[,maskvalue];
例子:
alertanyany->192.168.1.0/24any(flags:
SF,12;msg:
"PossibleSYNFINscan";)
seq
这个规则选项引用tcp顺序号(sequencenumber)。
基本上,它探测一个包是否有一个静态的顺序号集,因此很少用。
它是为了完整性而包含进来的。
格式:
seq:
;
ack
ack规则选项关键字引用tcp头的确认(acknowledge)部分。
这个规则的一个实用的目的是:
检查nmaptcpping,nmaptcpping把这个域设置为0,然后发送一个tcpackflag置位的包来确定一个网络主机是否活着。
格式:
ack:
;
例子:
alertanyany->192.168.1.0/24any(flags:
A;ack:
0;msg:
"NMAPTCPping";)
Window
这条规则选项指向TCP窗口大小。
这个选项检查静态窗口大小,此外别无他用。
包括它只是为了完整性。
格式:
window:
[!
];
Itype
这条规则测试ICMP的type字段的值。
它被设置为使用这个字段的数字值。
要得到所有可能取值的列表,可以参见Snort包中自带的decode.h文件,任何ICMP的参考资料中也可以得到。
应该注意的是,type字段的取值可以超过正常范围,这样可以检查用于拒绝服务或flooding攻击的非法type值的ICMP包。
格式:
itype:
;
Icode
Icode规则选项关键字和itype规则非常接近,在这里指定一个数值,Snort会探测使用该值作为code值的ICMP包。
超出正常范围的数值可用于探测可疑的流量。
格式:
icode:
;
Session
Session关键字用于从TCP会话中抽取用户数据。
要检查用户在telnet,rlogin,ftp或websessions中的用户输入,这个规则选项特别有用。
Session规则选项有两个可用的关键字作为参数:
printable或all。
Printable关键字仅仅打印用户可以理解或者可以键入的数据。
All关键字使用16进制值来表示不可打印的字符。
该功能会显著地降低Snort的性能,所以不能用于重负载环境。
它适合于对二进制(tcpdump格式)log文件进行事后处理。
格式:
session:
[printable all];
例子
logtcpanyany<>192.168.1.0/2423(session:
printable;)
Icmp_id
Icmp_id选项检查ICMPECHO数据包中ICMPID数值是否是指定值。
许多秘密通道(covertchannel)程序使用静态ICMP字段通讯,所以该选项在检查这种流量时非常有用。
这个特别的插件用于增强由MaxVision编写的stacheldraht探测规则,但是在探测一些潜在攻击时确实有效。
格式:
icmp_id:
;
Icmp_seq
Icmp_seq选项检查ICMPECHO数据包中ICMPsequence字段数值是否是指定值。
许多秘密通道(covertchannel)程序使用静态ICMP字段通讯,所以该选项在检查这种流量时非常有用。
这个特别的插件用于增强由MaxVision编写的stacheldraht探测规则,但是在探测一些潜在攻击时确实有效。
(我知道该字段的信息和icmp_id的描述几乎完全相同,实际上它们就是同样的东西!
)
格式:
icmp_seq:
;
Rpc
这个选项查看RPC请求,并自动将应用(Application)、过程(procedure)和程序版本(programversion)译码,如果所有三个值都匹配的话,该规则就显示成功。
这个选项的格式为"应用、过程、版本"。
在过程和版本域中可以使用通配符"*"。
格式:
rpc:
;
例子
alerttcpanyany->192.168.1.0/24111(rpc:
100000,*,3;msg:
"RPCgetport(TCP)";)
alertudpanyany->192.168.1.0/24111(rpc:
100000,*,3;msg:
"RPCgetport(UDP)";)
alertudpanyany->192.168.1.0/24111(rpc:
100083,*,*;msg:
"RPCttdb";)
Resp
Resp关键字可以对匹配一条Snort规则的流量进行灵活的反应(flexiblereponse-FlexResp)。
FlexResp代码允许Snort主动地关闭恶意的连接。
该插件合法的参数如下:
rst_snd-向发送方发送TCP-RST数据包
rst_rcv-向接受方发送TCP-RST数据包
rst_all-向收发双方发送TCP_RST数据包
icmp_net-向发送方发送ICMP_NET_UNREACH
icmp_host-向发送方发送ICMP_HOST_UNREACH
icmp_port-向发送方发送ICMP_PORT_UNREACH
icmp_all-向发送方发送上述所有的ICMP数据包
在向目标主机发送多种响应数据包时,这些选项组合使用。
多个参数之间使用逗号分隔。
格式:
resp:
使用resp选项时要小心,因为很容易就会使snort陷入无限循环中,例如如下规则:
alerttcpanyany->192.168.1.1/24any(msg:
"aiee!
";resp:
rst_all;)
content_list
content_list关键字允许多内容字符串被放在一个单独的内容匹配选项中,被匹配的字符串被存放在指定的文件中,而且每个字符串要单独占用一行。
否则他们就等同于一个content字符串。
这个选项是react关键字的基础。
格式;
content-list:
;
下面是一个文件的内容:
#adultsites
"porn"
"porn"
"adults"
"hardcore"
""
React
注意,使用这个功能很容易使网络流量陷入回路。
React关键字以匹配一个规则时所作出的灵活的反应为基础。
基本的反应是阻塞一些引人注意的站点的用户的访问。
响应代码允许snort积极的关掉有冒犯行为的访问和/或发送一个通知给浏览者。
这个通知可以包含你自己的注释。
这个选项包括如下的基本修饰词:
block——关闭连接并且发送一个通知
warm——发送明显的警告信息
基本修饰词可以和如下的附加修饰词组合使用:
msg——把msg选项的内容包含进阻塞通知信息中
proxy——使用代理端口发送通知信息
大量的附加修饰词由逗号隔开,react关键字将被放在选项的最后一项。
格式:
react:
;
例子:
alerttcpanyany<>192.168.1.0/2480(content:
"bad.htm";msg:
"Notforchildren!
";react:
block,msg;)
reference
这个关键字允许规则包含一个外面的攻击识别系统。
这个插件目前支持几种特定的系统,它和支持唯一的URL一样好。
这些插件被输出插件用来提供一个关于产生报警的额外信息的连接。
确信先看一看如下地方:
http:
//www.snort.org/snort-db
格式:
reference:
;
例子:
alerttcpanyany->any7070(msg:
"IDS411/dos-realaudio";flags:
AP;content:
" fff4fffd06 ";reference:
arachNIDS,IDS411;)
alerttcpanyany->any21(msg:
"IDS287/ftp-wuftp260-venglin-linux";flags:
AP;content:
" 31c031db31c9b046cd8031c031db ";reference:
arachNIDS,IDS287;reference:
bugtraq,1387;reference:
cve,CAN-2000-1574;)
Sid
这个关键字被用来识别snort规则的唯一性。
这个信息允许输出插件很容易的识别规则的ID号。
sid的范围是如下分配的:
<100保留做将来使用
100-1000,000包含在snort发布包中
>1000,000作为本地规则使用
文件sid-msg.map包含一个从msg标签到snort规则ID的映射。
这将被post-processing输出模块用来映射一个ID到一个报警信息。
格式:
sid:
;
rev
这个关键字是被用来识别规则修改的。
修改,随同snort规则ID,允许签名和描述被较新的信息替换。
格式:
rev:
Classtype
这个关键字把报警分成不同的攻击类。
通过使用这个关键字和使用优先级,用户可以指定规则类中每个类型所具有的优先级。
具有classification的规则有一个缺省的优先级。
格式:
classtype:
在文件classification.config中定义规则类。
这个配置文件使用如下的语法:
configclassification:
Priority
这个关键字给每条规则赋予一个优先级。
一个classtype规则具有一个缺省的优先级,但这个优先级是可以被一条priority规则重载的。
格式:
priority:
;
Uriconte