SNORT FAQ v1.7.5
如果你对完善本文有自己的建议,请email给Dragos Ruiu 。
以下是为本文提供资料的人员:
Marty Roesch
Fyodor Yarochkin
Dragos Ruiu
Jed Pickel
Max Vision
Michael Davis
Joe McAlerney
Joe Stewart
Erek Adams
Roman Danyliw
Christopher Cramer
问:为snort工作的伙计们的名字怎么念?
答:Roesch念起来象fresh,不过没有f的音。Ruiu象screw you,没有sc的音。Jed的姓读起来象pick-el,不是pickle。
问:Fyodor Yarochkin和nmap的作者是同一个人吗?
答:不是的。Fyodor是nmap的作者。
问:应该如何运行snort?
答:可以以嗅探器模式运行(snort -dvi),让snort观察网络报文。还可以使用snort来保护你的网络,在snort的发布中有一个默认的规则集文件snort.conf,可以使用这个文件中的规则集,使用以下命令行运行snort:
snort -Afull -c snort.conf
一旦正确运行,你就可以使用ifconfig -a命令看到snort监视的网络接口出于混杂(promiscuous)模式。如果没有正确运行,就只好手工设置了。
问:snort的日志文件放在哪里?是什么名字?
答:你可以使用-l命令选项设置保存日志文件的路径。如果你没有设置日志目录,snort将把日志保存到/var/log/snort目录。
过去,如果以精灵模式(-D)运行snort,它会产生一个文件叫作snort.alert。现在出于一致性的考虑,这个文件的名字已经被改为alert,而无论是标准模式还是精灵模式。
snort传感器的物理位置
答:这取决于你的组织的安全策略和你的检测目的。传感器可以放在防火墙外也可以放在防火墙内。把IDS放在防火墙之外,可以检测到更多的直接攻击,而无论报文sake是否被防火墙拒绝。这会比把IDS放在防火墙内部发生更多的报警,也会产生更多的日志信息。把传感器放在防火墙之内,IDS将只能监视防火墙允许通过的网络报文。如果资源有限,可以把IDS放在防火墙内部。
问:我的网络是交换网,能够使用snort吗?
答:这取决于交换网的类型。如果在这个网络上,可以镜像网络报文,你就可以直接把报文送到snort运行的端口。
问:我得到了大量某种报警类型的信息。我该怎么办?可以从哪个地方得到更详细的信息?
有些规则比较容易使snort产生误报警。这主要是网络之间的差异造成的。遇到这种情况,你首先要确定这些报警是否真的是误报警。有些规则有自己的ID号作为标记。下面是一些常用于snort规则的标记,从这里可以找到有关报警更为详细的信息。
系统 示例 URL
IDS IDS182 http://www.whitehats.com/info/IDS182
CVE CVE-2000-0138 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-0138
Bugtraq BugtraqID 1 http://www.securityfocus.com/vdb/bottom.html?vid=1
McAfee Mcafee 10225 http://vil.nai.com/vil/dispVirus.asp?virus_k=10225
有必要检验包负载来确定报警信息是否是误报警。使用-d选项运行snort就可以记录报文的内容。如果你确认报警信息是误报警,就可以把这条规则的规则行为改为pass。如果从不同的机器上这条规则都会使snort产生大量的误报警,那么你需要把所有机器上的规则行为都改为pass。
问:对误报警你怎么看?
答:大多数人会认为一大堆的误报警很烦人,所以他们就会关闭这些规则。但是,从相反的方面来考虑的话,如果检测规则很少,则很容易使人懈怠,认为snort正在工作,我无须担心。
问:在/var/log/snort的子目录下的这些ICMP文件是些什么东西?
答:大多数是一些目的地址不可达和端口不可达的信息,当一个会话企图失败会被snort检测到。
问:我的网络被分成几个子网。我应该如何定义HOME_NET?
答:snort1.7支持IP地址列表。你可以为单个变量指定一组IP地址。例如:
var HOME_NET [10.1.1.0/24,192.168.1.0/24]
注意:现在,不是所有的预处理模块都支持IP列表。除非特别设置,否则所有不支持IP地址列表的预处理模块都会使用IP地址列表的第一个作为HOME_NET。portscan预处理模块就是一个例子。为了捕获所有能够检测到的端口扫描,需要把0.0.0.0/0设置为它的第一个参数。
preprocessor portscan: 0.0.0.0/0 5 3 portscan.log
然后,使用portscan-ignorhosts预处理模块对端口扫描检测功能进行调整,忽略噪音信息,设置信任主机。
问:我有一个网卡和两个地址,怎样才能让snort在两个地址上监听?
答:如果你使用1.7以上的版本,你可以指定一个IP地址列表:
var HOME_NET [192.168./24,/32]
如果你使用以前的版本,你可以重复定义HOME_NET变量来达到这个目的:
var HOME_NET 10.1.1.0/24
include scan-lib
etc.
var HOME_NET 192.168.1.0/24
include scan-lib
etc.
问:我如何才能忽略对来自一个或者几个主机报文的检查?
答:使用pass规则行为,或者把这些主机加入到portscan-ignorehosts的列表中。使用-o选项启动snort来激活pass规则。可以从如何编写snort规则获得更多的信息。
问:为什么即使是来自portscan-ignorehosts列表的主机的秘密扫描数据包也会被portscan插件记录?
答:这种TCP报文行为可疑,不论是来自哪个主机。portscan检测插件是建立在应该记录秘密扫描报文的假设之上的,而不管是否应该对来源主机进行监视。将来会加入忽略秘密扫描报文的功能选项。
答:提取没有IP地址的接口。Url: http://www.geocrawler.com/archives/3/4890/2000/9/0/4399696/
答:使用一个以太网卡tap,或者建立你自己只接收的以太线缆。Url:http://www.robertgraham.com/pubs/sniffing-faq.html#receive-only
问:为什么在/var/log/snort目录下,没有以IP地址命名的子目录?
答:这取决于你的配置,如果日志是以二进制格式保存的,你就只好处理单个的二进制文件了。
问:我怎样才能在一个没有IP地址的网络接口上运行snort?
答:ifconfig ethN up
问:libpcap显示权限问题的信息,怎样解决?
答:这是因为snort没有以root权限运行,或者你的内核配置错误。
问:为什么snort会显示关于/var/log/snort的错误信息?
答:它需要这个目录保存报警信息。
mkdir /var/log/snort
问:如何让snort忽略某些报文?
答1:在命令行上设置BPF过滤器,tcpdump手册页有关于BPF过滤器的描述。
答2:使用pass规则行为
答3:portscan-ignorehosts.rules文件保存portscan预处理模块忽略的IP地址列表。
问:为什么许多snort规则中有P(TCP PuSH)和A(TCP ACK)标志的设置?
答:原因之一是可以减少误报警,只对成功的连接进行报警。如果想看到所有的恶意企图,你可以修改特征码或者查看防火墙的日志。
问:我想我发现了一个snort的BUG,我该怎么办?
答:得到调试的信息并寄到http://www.sourceforge.net的snort-users。
为了获得有用的信息,可以使用如下方式编译snort:
make clean; make CFLAGS=-ggdb
或者
make clean; make "CFLAGS=-ggdb -DDEBUG"
使用如下命令跟踪coredump:
gdb /path/to/snort /path/to/snort/core
gdb where
gdb bt
gdb print $varname, varname, $$varname etc..
如果没有core文件,可以使用如下命令:
gdb snort
gdb run
问:snort处理IP碎片吗?
答:是的,使用preprocessor defrag
snort还有一个minfrag规则选项,可以检查碎片报文的大小,对单个碎片的大小进行报警。这是一个有效的策略,因为在实际的商业网络设备上是没有小于256个字节的报文的,而大多数的用于hack目的的报文被做的尽量小。你可以使用minfrag选项指定产生报警的碎片大小。
问:snort显示"Garbage Packet with Null Pointer discarded!"的错误信息,为什么?
答:在旧版本的defragmentation预处理模块中有个BUG会触发内部调试信息。把snort升级到最新版本就可以了。
问:I've got RedHat and ....
答:检查libpcap库的版本,如果
问:我怎样才能在一个秘密的接口上安装snort呢?
答:这种TCP报文行为可疑,不论是来自哪个主机。portscan检