xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
添加文章 English Version

怎样使用Snort!


创建时间:2001-03-02
文章属性:原创
文章提交:xundi (xundi_at_xfocus.org)

怎样使用Snort!

BY XUNDI

--------------------------------------------------------------------
安装方法:
如果你安装好了libpcap后,对snort安装将是很简单,关于libpcap的安装说明,
你可以看看blackfire(http://go.163.com/~bobdai/的一些文章,关于WINDOWS
下的winpcap你可以看我站上的SNIFFER FOR NT上的安装说明。装好libpcap后,
你可以使用通常的命令:
1.) ./configure
2.) make
3.) make install
装好后你可以使用make clean清除一些安装时候产生的文件。
(有些系统如freebsd已经支持了libpcap,所以很轻松,不用再装了)。

而WINDOWS更简单,只要解包出来就可以了;

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


参数介绍:

命令行是snort -[options] <filters>

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

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

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

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

./snort -v

这个命令会运行Snort和显示IP和TCP/UDP/ICMP头信息。
我使用了ping 192.168.0.1就显示了如下信息:
06/10-10:21:13.884925 192.168.0.2 -> 192.168.0.1
ICMP TTL:64 TOS:0x0 ID:4068
ID:20507   Seq:0  ECHO

06/10-10:21:13.885081 192.168.0.1 -> 192.168.0.2
ICMP TTL:128 TOS:0x0 ID:15941
ID:20507   Seq:0  ECHO REPLY

06/10-10:21:14.884874 192.168.0.2 -> 192.168.0.1
ICMP TTL:64 TOS:0x0 ID:4069
ID:20507   Seq:256  ECHO

06/10-10:21:14.885027 192.168.0.1 -> 192.168.0.2
ICMP TTL:128 TOS:0x0 ID:15942
ID:20507   Seq:256  ECHO REPLY

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

snort -vd
再次使用ping 192.168.0.1就显示了如下信息:

06/10-10:26:39.894493 192.168.0.2 -> 192.168.0.1
ICMP TTL:64 TOS:0x0 ID:4076
ID:20763   Seq:0  ECHO
58 13 42 39 E0 BB 05 00 08 09 0A 0B 0C 0D 0E 0F  X.B9............
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
30 31 32 33 34 35 36 37                          01234567

06/10-10:26:39.894637 192.168.0.1 -> 192.168.0.2
ICMP TTL:128 TOS:0x0 ID:15966
ID:20763   Seq:0  ECHO REPLY
58 13 42 39 E0 BB 05 00 08 09 0A 0B 0C 0D 0E 0F  X.B9............
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
30 31 32 33 34 35 36 37                          01234567

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

snort -vde

使用ping 192.168.0.1就显示了如下信息:
-*> Snort! <*-
Version 1.6-WIN32
By Martin Roesch (roesch@clark.net, www.clark.net/~roesch)
WIN32 Port By Michael Davis (Mike@eEye.com, www.datasurge.net/~mike)
06/10-10:32:01.345962 0:60:94:F9:5E:17 -> 0:50:BA:BB:4A:54 type:0x800 len:0x62
192.168.0.2 -> 192.168.0.1 ICMP TTL:64 TOS:0x0 ID:4079
ID:21787   Seq:0  ECHO
99 14 42 39 47 4C 0C 00 08 09 0A 0B 0C 0D 0E 0F  ..B9GL..........
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
30 31 32 33 34 35 36 37                          01234567

06/10-10:32:01.346164 0:50:BA:BB:4A:54 -> 0:60:94:F9:5E:17 type:0x800 len:0x62
192.168.0.1 -> 192.168.0.2 ICMP TTL:128 TOS:0x0 ID:16090
ID:21787   Seq:0  ECHO REPLY
99 14 42 39 47 4C 0C 00 08 09 0A 0B 0C 0D 0E 0F  ..B9GL..........
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
30 31 32 33 34 35 36 37                          01234567

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

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

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

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

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

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

./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib 可以不记录一些ethernet头信息
如,我用./nmap -sS 192.168.0.1 -p 21就在/log/alert.ids中记录如下信息:

[**] IDS246 - MISC - Large ICMP Packet [**]
06/12-13:48:31.992395 192.168.0.1 -> 192.168.0.2
ICMP TTL:128 TOS:0x0 ID:36579
ID:46802   Seq:0  ECHO REPLY

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

[**] IDS232 - WEB-CGI-PHP CGI access attempt [**]
06/12-13:53:35.106323 192.168.0.2:1789 -> 192.168.0.1:80
TCP TTL:64 TOS:0x0 ID:8945  DF
*****PA* Seq: 0xA070C880   Ack: 0xF113872   Win: 0x7D78

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


./snort -d -h 192.168.1.0/24 -l ./log -c snort-lib -o此命令是读规则文件的顺序,
有些人很奇怪,需要先读允许的规则文件,再读alert规则文件,然后来LOG记录,那就
按照上面的命令来操作。

如果你的网络请求相当多,你可以使用:

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

./snort -d -c snort-lib -l ./log -h 192.168.1.0/24 -r snort.log

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

最后讲将规则文件中的选项的意义,这些就不翻译了,因为偶比较愚钝,有些东西翻不正确:
#   msg => message to output in the alert/log files
#   flags => TCP flags, use 0 for no flags at all
#   ttl => the TTL value you want to key on (nice for catching traceroutes)
#   content => the packet application layer, look for buffer overflows here
#   itype => the NUMBER of the ICMP type
#   icode => the NUMBER of the ICMP code
#   minfrag => minimum fragment payload size
#   seq => tcp sequence number
#   ack => tcp ack number
#   id => IP header fragment ID number
#   logto => file to log specific alerts to
#   dsize => match on the packet payload size
#   offset => start a content search <offset> bytes into the payload
#   depth => only search <depth> bytes into the payload for a pattern match
#   session => record the session traffic from clear text protocols like
#              ftp or telnet
#   ipopts => check for a specific IP option

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

参考:
主要站点:www.snort.org

rules 文件参考:http://www.clark.net/~roesch/snort_rules.html

winpcap: http://netgroup-serv.polito.it/winpcap/install/Default.htm

怎样安装winpcap: http://focus.silversand.net/newsite/skill/sniffitfornt.txt

部分利用snort来查找攻击后的信息介绍:
http://focus.silversand.net/newsite/skill/foresic.txt

xundi@xfocus.org 2000-06-12

http://focus.silversand.net