Snort使用方法简介 - 安全工具 - 服务器之家

服务器之家

专注于服务器技术!
当前位置:首页 > 服务器安全 > 安全工具

Snort使用方法简介

发布时间:2014-04-23 来源:服务器之家

安装方法:
如果你安装好了libpcap后,对snort安装将是很简单,关于libpcap的安装说明,你可以看看blackfire(http://go.163.com/~bobdai/的一些文章,关于WINDOWS下的winpcap你可以看我站上的SNIFFERFORNT上的安装说明。装好libpcap后,你可以使用通常的命令:

1.)./configure
2.)make
3.)makeinstall
装好后你可以使用makeclean清除一些安装时候产生的文件。(有些系统如freebsd已经支持了libpcap,所以很轻松,不用再装了)。
而WINDOWS更简单,只要解包出来就可以了;

参数介绍:
命令行是snort-[options]
选项:

-A设置的模式是full,fast,还是none;full模式是记录标准的alert模式到alert文件中;Fast模式只写入时间戳,messages,IPs,ports到文件中,None模式关闭报警。
-a是显示ARP包;
-b是把LOG的信息包记录为TCPDUMP格式,所有信息包都被记录为两进制形式,名字如snort-0612@1385.log,这个选项对于FAST记录模式比较好,因为它不需要花费包的信息转化为文本的时间。 Snort在100Mbps网络中使用"-b"比较好。
-c使用配置文件,这个规则文件是告诉系统什么样的信息要LOG,或者要报警,或者通过。
-C在信息包信息使用ASCII码来显示,而不是hexdump,
-d解码应用层。
-D把snort以守护进程的方法来运行,默认情况下ALERT记录发送到/var/log/snort.alert文件中去。-e显示并记录2个信息包头的数据。
-F从文件中读BPF过滤器(filters),这里的filters是标准的BPF格式过滤器,你可以在TCPDump里看到,你可以查看TCPDump的man页怎样使用这个过滤器。
-h设置网络地址,如一个C类IP地址192.168.0.1或者其他的,使用这个选项,会使用箭头的方式数据进出的方向。-I使用网络接口参数 -lLOG信息包记录到目录中去。
-M发送WinPopup信息到包含文件中存在的工作站列表中去,这选项需要Samba的支持,wkstn文件很简单,每一行只要添加包含 在SMB中的主机名即可。(注意不需要\两个斜杠)。
-n是指定在处理个数据包后退出。
-N关闭LOG记录,但ALERT功能仍旧正常。
-o改变所采用的记录文件,如正常情况下采用Alert->Pass->Logorder,而采用此选项是这样的顺序:Pass->Alert->Logorder,其中Pass是那些允许通过的规则而不记录和报警,ALERT是不允许通过的规则, 指LOG记录,因为有些人就喜欢奇奇怪怪,象CASPER,QUACK就喜欢反过来操作。
-p关闭杂乱模式嗅探方式,一般用来更安全的调试网络。
-r读取tcpdump方式产生的文件,这个方法用来处理如得到一个Shadow(ShadowIDS产生)文件,因为这些文件不能用一般的EDIT来编辑查看。
-sLOG报警的记录到syslog中去,在LINUX机器上,这些警告信息会出现在/var/log/secure,在其他平台上将出现在/var/log/message中去。
-S这个是设置变量值,这可以用来在命令行定义Snortrules文件中的变量,如你要在Snortrules文件中定义变量HOME_NET,你可以在命令行中给它预定义值。
-v使用为verbose模式,把信息包打印在console中,这个选项使用后会使速度很慢,这样结果在记录多的是时候会出现丢包现象。
-V显示SNORT版本并退出;
-?显示使用列表并退出;

下面是一些命令的组合介绍,当然更多的组合你可以自己去测试:

Snort存在比较多的命令选项和参数,先来介绍一些基本的一些命令,如果你想要把信息包的头显示在屏幕上,你可以使用:

./snort-v

这个命令会运行Snort和显示IP和TCP/UDP/ICMP头信息。我使用了ping192.168.0.1就显示了如下信息:
06/10-10:21:13.884925192.168.0.2-$#@62;192.168.0.1
ICMPTTL:64TOS:0x0ID:4068
ID:20507Seq:0ECHO

06/10-10:21:13.885081192.168.0.1-$#@62;192.168.0.2
ICMPTTL:128TOS:0x0ID:15941
ID:20507Seq:0ECHOREPLY

06/10-10:21:14.884874192.168.0.2-$#@62;192.168.0.1
ICMPTTL:64TOS:0x0ID:4069
ID:20507Seq:256ECHO

06/10-10:21:14.885027192.168.0.1-$#@62;192.168.0.2
ICMPTTL:128TOS:0x0ID:15942
ID:20507Seq:256ECHOREPLY

如果你想要解码应用层,就使用:

snort-vd
再次使用ping192.168.0.1就显示了如下信息:

06/10-10:26:39.894493192.168.0.2-$#@62;192.168.0.1
ICMPTTL:64TOS:0x0ID:4076
ID:20763Seq:0ECHO
58134239E0BB050008090A0B0C0D0E0FX.B9............
101112131415161718191A1B1C1D1E1F................
202122232425262728292A2B2C2D2E2F!"#$%&()*+,-./
303132333435363701234567

06/10-10:26:39.894637192.168.0.1-$#@62;192.168.0.2
ICMPTTL:128TOS:0x0ID:15966
ID:20763Seq:0ECHOREPLY
58134239E0BB050008090A0B0C0D0E0FX.B9............
101112131415161718191A1B1C1D1E1F................
202122232425262728292A2B2C2D2E2F!"#$%&()*+,-./
303132333435363701234567

如果要看到更详细的关于有关ethernet头的信息,就要使用:

snort-vde

使用ping192.168.0.1就显示了如下信息:
-*$#@62;Snort!$#@60;*-
Version1.6-WIN32
ByMartinRoesch(roesch@clark.net,www.clark.net/~roesch)
WIN32PortByMichaelDavis(Mike@eEye.com,www.datasurge.net/~mike)
06/10-10:32:01.3459620:60:94:F9:5E:17-$#@62;0:50:BA:BB:4A:54type:0x800len:0x62
192.168.0.2-$#@62;192.168.0.1ICMPTTL:64TOS:0x0ID:4079
ID:21787Seq:0ECHO
99144239474C0C0008090A0B0C0D0E0F..B9GL..........
101112131415161718191A1B1C1D1E1F................
202122232425262728292A2B2C2D2E2F!"#$%&()*+,-./
303132333435363701234567

06/10-10:32:01.3461640:50:BA:BB:4A:54-$#@62;0:60:94:F9:5E:17type:0x800len:0x62
192.168.0.1-$#@62;192.168.0.2ICMPTTL:128TOS:0x0ID:16090
ID:21787Seq:0ECHOREPLY
99144239474C0C0008090A0B0C0D0E0F..B9GL..........
101112131415161718191A1B1C1D1E1F................
202122232425262728292A2B2C2D2E2F!"#$%&()*+,-./
303132333435363701234567

当然上面的一些命令你只是在屏幕上看到,如果要记录在LOG文件上,你可以先建立一个log目录,在使用下面的命令:

./snort-dev-l./log-h192.168.0.1/24

这个命令就使Snort把ethernet头信息和应用层数据记录到./log目录总去了,并记录的是关于192.168.0.1CLASSC的信息,

如果你想利用一些规则文件(一些记录特定数据的规则文件,如SYNATTACK等记录)就使用:

./snort-dev-l./log-h192.168.1.0/24-csnort-lib

这里的Snort-lib是你的规则文件的文件名,这将采用snort-lib文件中设置的规则来决定是否记录某个信息包。而

./snort-d-h192.168.1.0/24-l./log-csnort-lib可以不记录一些ethernet头信息如,我用./nmap -sS192.168.0.1-p21就在/log/alert.ids中记录如下信息:

[**]IDS246-MISC-LargeICMPPacket[**]
06/12-13:48:31.992395192.168.0.1-$#@62;192.168.0.2
ICMPTTL:128TOS:0x0ID:36579
ID:46802Seq:0ECHOREPLY

我故意使用了rules出现的规则php.cgi/?,如192.168.0.1/cgi-bin/php.cgi/?,就显示:

[**]IDS232-WEB-CGI-PHPCGIaccessattempt[**]
06/12-13:53:35.106323192.168.0.2:1789-$#@62;192.168.0.1:80
TCPTTL:64TOS:0x0ID:8945DF
*****PA*Seq:0xA070C880Ack:0xF113872Win:0x7D78

./snort-d-h192.168.1.0/24-l./log-csnort-lib-s就会把日志记录在你规则文件中所定义的LOG文件中,而不是默认的alert.ids中。

./snort-d-h192.168.1.0/24-l./log-csnort-lib-o
  此命令是读规则文件的顺序,有些人很奇怪,需要先读允许的规则文件,再读alert规则文件,然后来LOG记录,那就按照上面的命令来操作。如果你的网络请求相当多,你可以使用:

./snort-b-Afast-csnort-lib
  这样,每一条规则内的警告消息就分开记录,对于多点同步探测和攻击的记录可以不容易丢包。当然这样记录的LOG文件是两进制的,类似与tcpdump的格式,你可以使用这样的方法来查看 这些LOG:

./snort-d-csnort-lib-l./log-h192.168.1.0/24-rsnort.log

最后讲将规则文件中的选项的意义,这些就不翻译了,因为偶比较愚钝,有些东西翻不正确:
#msg=$#@62;messagetooutputinthealert/logfiles
#flags=$#@62;TCPflags,use0fornoflagsatall
#ttl=$#@62;theTTLvalueyouwanttokeyon(niceforcatchingtraceroutes)
#content=$#@62;thepacketapplicationlayer,lookforbufferoverflowshere
#itype=$#@62;theNUMBERoftheICMPtype
#icode=$#@62;theNUMBERoftheICMPcode
#minfrag=$#@62;minimumfragmentpayloadsize
#seq=$#@62;tcpsequencenumber
#ack=$#@62;tcpacknumber
#id=$#@62;IPheaderfragmentIDnumber
#logto=$#@62;filetologspecificalertsto
#dsize=$#@62;matchonthepacketpayloadsize
#offset=$#@62;startacontentsearch$#@60;offset$#@62;bytesintothepayload
#depth=$#@62;onlysearch$#@60;depth$#@62;bytesintothepayloadforapatternmatch
#session=$#@62;recordthesessiontrafficfromcleartextprotocolslike
#ftportelnet
#ipopts=$#@62;checkforaspecificIPoption

---------------------------------------------------------------------------

参考:www.snort.org