1.6 读取pcap文件
可以让Snort捕获数据包之后去分析,对测试和调试snort很有帮助
1.6.1 命令行参数
可以一次或者多次指定以下命令,--pcap-reset
and --pcap-show
用一次和多次的效果是一样的
1.6.2 Example
读取单个的pcap
snort -r foo.pcap
snort --pcap-single=foo.pcap
从文件中读取pcaps
cat foo.txt
foo1.pcap
foo2.pcap
/home/foo/pcaps
snort --pcap-file=foo.txt
这将读取目录/home/foo/pcaps
下的所有文件foo1.pcap foo2.pcap
,请注意,Snort不会尝试确定该目录下的文件是否真的是pcap文件。
从命令行列表里读取pcaps
snort --pcap-list="foo1.pcap foo2.pcap f003.pcap"
在目录下读取pcaps
snort --pcap-dir="/home/foo/pcaps"
使用过滤器
cat foo.txt
foo1.pcap
foo2.pcap
/home/foo/pcaps
snort --pcap-filter="*.pcap" --pcap-file=foo.txt
snort --pcap-filter="*.pcap" --pcap-dir=/home/foo/pcaps
以上的pcap文件必须要以.pcap
结尾
snort --pcap-filter="*.pcap" --pcap-file=foo.txt \
> --pcap-filter="*.cap" --pcap-dir=/home/foo/pcaps
以上,第一个** *.pcap**只对文件foo.txt
中的pcaps有效,第二个过滤器*.cap
会覆盖第一个,应用在目录/home/foo/pcaps
上,里面所有的.cap
文件都会被处理。
snort --pcap-filter="*.pcap" --pcap-file=foo.txt \
> --pcap-no-filter --pcap-dir=/home/foo/pcaps
这个梨子中,第一个filter将会应用在foo.txt上,而在目录/home/foo/pcaps
下的文件将不会使用任何过滤器,所有在这个目录下的文件都会包含进去
$ snort --pcap-filter="*.pcap" --pcap-file=foo.txt \
> --pcap-no-filter --pcap-dir=/home/foo/pcaps \
> --pcap-filter="*.cap" --pcap-dir=/home/foo/pcaps2
上面梨子中,第一个过滤器将会用在foo.txt上,目录/home/foo/pcaps
下将不会使用任何过滤器,目录/foo/pcaps2
将找到*.cap
的所有文件。
Reseting state 复位状态
snort --pcap-dir=/home/foo/pcaps --pcap-reset
在读取每个pcap之后,Snort将被重置为配置后状态,这意味着将刷新所有缓冲区,重置统计信息,等等
打印pcap
snort --pcap-dir=/home/foo/pcaps --pcap-show
1.7 基本输出
1.7.1 Timing statistics 时间统计
介绍基本的时间统计信息。它包括总秒数和数据包以及数据包处理速率。速率是基于整秒、分等,并且只在非零时显示。梨子:
1.7.2 Packet I/O Totals 总的流入流出包
显示基本的从DAQ获取和注入的数据包,如果你在读取pcap,那总数就是pcap的和,除非你使用了-pcap-reset
- Outstanding 会显示有多少包被缓冲等待处理
- pcap DAQs不显示过滤包
- injected数据包是主动响应的结果,可以配置为inline或者passive模式
Packet I/O Totals:
Received: 3716022
Analyzed: 3716022 (100.000%)
Dropped: 0 ( 0.000%)
Filtered: 0 ( 0.000%)
Outstanding: 0 ( 0.000%)
Injected: 0
1.7.3 Protocol Statistics 协议数据包
breakdown部分总结了所有协议的通信,如果开启了frag3
和stream5
这样的预处理程序,那么这个流量会有内部的“伪包”,总流量可能会大于I/O部分分析包的数量。
- 由于基本的编码完整性缺陷,磁盘计数被丢弃,这阻止了Snort解码数据包。
- Other include包包含Snort无法解码的封装。
- S5 G 1/2是客户端/服务器会话流5由于缓存限制刷新,会话超时,会话重置。
例子:
Breakdown by protocol (includes rebuilt packets):
Eth: 3722347 (100.000%)
VLAN: 0 ( 0.000%)
IP4: 1782394 ( 47.884%)
Frag: 3839 ( 0.103%)
ICMP: 38860 ( 1.044%)
UDP: 137162 ( 3.685%)
TCP: 1619621 ( 43.511%)
IP6: 1781159 ( 47.850%)
IP6 Ext: 1787327 ( 48.016%)
IP6 Opts: 6168 ( 0.166%)
Frag6: 3839 ( 0.103%)
ICMP6: 1650 ( 0.044%)
UDP6: 140446 ( 3.773%)
TCP6: 1619633 ( 43.511%)
Teredo: 18 ( 0.000%)
ICMP-IP: 0 ( 0.000%)
EAPOL: 0 ( 0.000%)
IP4/IP4: 0 ( 0.000%)
IP4/IP6: 0 ( 0.000%)
IP6/IP4: 0 ( 0.000%)
IP6/IP6: 0 ( 0.000%)
GRE: 202 ( 0.005%)
GRE Eth: 0 ( 0.000%)
GRE VLAN: 0 ( 0.000%)
GRE IP4: 0 ( 0.000%)
GRE IP6: 0 ( 0.000%)
GRE IP6 Ext: 0 ( 0.000%)
GRE PPTP: 202 ( 0.005%)
GRE ARP: 0 ( 0.000%)
GRE IPX: 0 ( 0.000%)
GRE Loop: 0 ( 0.000%)
MPLS: 0 ( 0.000%)
ARP: 104840 ( 2.817%)
IPX: 60 ( 0.002%)
Eth Loop: 0 ( 0.000%)
Eth Disc: 0 ( 0.000%)
IP4 Disc: 0 ( 0.000%)
IP6 Disc: 0 ( 0.000%)
TCP Disc: 0 ( 0.000%)
UDP Disc: 1385 ( 0.037%)
ICMP Disc: 0 ( 0.000%)
All Discard: 1385 ( 0.037%)
Other: 57876 ( 1.555%)
Bad Chk Sum: 32135 ( 0.863%)
Bad TTL: 0 ( 0.000%)
S5 G 1: 1494 ( 0.040%)
S5 G 2: 1654 ( 0.044%)
Total: 3722347
1.7.4 snort memory数据
在使用**mallinfo(3)**的系统上,将看到额外的统计信息。有关详细信息,请查看mallinfo的手册页
Example:
Memory usage summary:
Total non-mmapped bytes (arena): 415481856
Bytes in mapped regions (hblkhd): 409612288
Total allocated space (uordblks): 92130384
Total free space (fordblks): 323351472
Topmost releasable block (keepcost): 3200
1.7.5 Actions, Limits, Verdicts
操作(Actions)和判决(Verdict)计数显示了Snort对所分析的包所做的操作。此信息仅在IDS模式下输出(当使用-c <conf>
选项运行snort时)。
- Alerts是由规则操作确定的警报和已处理的块操作的数量。这里的block包括block、drop和reject操作。
Limits是由于现实世界对处理时间和可用内存的限制而产生的。这些指示没有发生的潜在行动:
- 由于配置检测:最大队列事件设置,规则匹配没有被处理。缺省值是5。
- 由于配置事件队列:max队列设置,事件无法存储在事件队列中。默认值为8。
- 由于配置事件队列:日志设置,事件没有被警告。缺省值是3。
- 事件limit:由于事件过滤器限制而未发出警报的事件。
- 警告limit:事件没有被警告,因为它们已经在会话中被触发了。
Snort会在每个数据包上做判决:
- Allow = Snort分析了数据包,但没有对其采取行动。
- Block = Snort没有转发数据包,因为block规则;需要区别block和Drop,Drop(Snort根本看都没看),Block(看了之后根据规则不让过)
- Replace = Snort修改过的包
- Whitelist = 任何分析程序都允许通过的数据包
- Blacklist = snort阻止通过的数据包
- Ignore = Snort允许流通过此Snort实例的w/o检查的数据包。
- Int Blklst = 被阻塞的GTP、Teredo、6in4或4in6封装的数据包。如果对给定协议设置了config tunnel_verdicts,则这些数据包将得到黑名单判决。
- Int Whtlst = 允许GTP、Teredo、6in4或4in6封装的数据包。如果为给定协议设置了config tunnel_verdicts,这些数据包可以获得白名单裁决。
Example:
Action Stats:
Alerts: 0 ( 0.000%)
Logged: 0 ( 0.000%)
Passed: 0 ( 0.000%)
Limits:
Match: 0
Queue: 0
Log: 0
Event: 0
Alert: 0
Verdicts:
Allow: 3716022 (100.000%)
Block: 0 ( 0.000%)
Replace: 0 ( 0.000%)
Whitelist: 0 ( 0.000%)
Blacklist: 0 ( 0.000%)
Ignore: 0 ( 0.000%)
1.8 Tunneling 协议支持
Snort可以支持很多tunnelling协议解码,比如:GRE,GRE上的PPTP,MPLS,…这些默认都是开启的
如果想关掉,
./configure --disable-gre
./configure --disable--mpls
1.8.1 多个封装
Snort不会解码多个封装。 诸如:
Eth IPv4 GRE IPv4 GRE IPv4 TCP Payload
or Eth IPv4 IPv6 IPv4 TCP Payload
这种不会被处理,并将返回一个告警
1.8.2 Logging
当前,仅记录数据包的封装部分,
Eth IP1 GRE IP2 TCP Payload
记录成,
Eth IP2 TCP Payload
和
Eth IP1 IP2 TCP Payload
记录成,
Eth IP2 TCP Payload
(??不大懂)
Note:目前,在需要字对齐的架构(例如SPARC)上不支持利用GRE和PPP的PPTP解码。
1.9 Miscellaneous 杂项
1.9.1 作为后台程序运行snort
如果要将Snort作为后台程序运行,则可以将-D
选项添加到前面几节中描述的任何组合。 请注意,如果您希望能够通过将SIGHUP
信号发送到后台程序来重启Snort,则在启动时必须指定Snort二进制文件的完整路径,例如:
/usr/local/bin/snort -d -h 192.168.1.0/24 \
-l /var/log/snortlogs -c /usr/local/etc/snort.conf -s -D
(出于安全考虑,不支持相对路径)
Snort PID 文件
当Snort作为后台程序运行时,该后台程序在日志目录中创建一个PID文件。 在Snort 2.6中,-pid-path
命令行选项使Snort将PID文件写入指定的目录中。
此外,即使未在后台程序模式下运行,--create-pidfile
选项也可用于强制创建PID文件。
PID文件将被锁定,以便其他snort进程无法启动。 使用--nolock-pidfile
选项将不锁定 PID文件。
如果您不希望在PID文件中包含接口名称,请使用--no-interface-pidfile
选项。
1.9.2 在规则存根创建模式下运行
如果需要将共享库规则存根转储到目录中,则必须使用–dump-dynamic-rules
命令行选项。 这些规则存根文件与共享对象规则一起使用。 (路径可以是相对的或绝对的)。
/usr/local/bin/snort -c /usr/local/etc/snort.conf \
--dump-dynamic-rules=/tmp
也可以使用配置选项dump-dynamic-rules-path
在snort.conf
中配置此路径,如下所示:
config dump-dynamic-rules-path: /tmp/sorules
命令行配置的路径优先于使用dump-dynamic-rules-path
配置的路径。
/usr/local/bin/snort -c /usr/local/etc/snort.conf \
--dump-dynamic-rules
snort.conf:
config dump-dynamic-rules-path: /tmp/sorules
在上述情况下,转储路径设置为
/tmp/sorules
1.9.3 混淆IP地址打印输出
如果需要将数据包日志发布到公共邮件列表,则可能需要使用-O
选项。 此选项在数据包打印输出中混淆了您的IP地址。 如果您不希望邮件列表中的人知道所涉及的IP地址,这将非常方便。 您也可以将-O
选项与-h
选项组合使用,仅模糊家庭网络上主机的IP地址。 如果您不在乎谁看到攻击主机的地址,这将很有用。 例如,您可以使用以下命令从日志文件中读取数据包并将其转储到屏幕,仅混淆来自192.168.1.0/24
C类网络的地址:
./snort -d -v -r snort.log -O -h 192.168.1.0/24
1.9.4 指定多实例标识符
在Snort v2.4中,添加了-G
命令行选项,该选项指定事件日志的实例标识符。 在不同的CPU上或在同一CPU但接口不同的情况下运行多个snort实例时,可以使用此选项。 每个Snort实例将使用指定的值来生成唯一的事件ID。 用户可以指定十进制值**(-G 1)或十六进制值,后跟0x(-G 0x11)**。 长选项--logid
也支持此功能。
1.9.5 Snort 模式
Snort可以在三种不同的模式下运行,即tap(passive),内联和内联测试。 Snort策略也可以在这三种模式下配置。
模式的解释
- Inline
Snort充当IPS允许触发丢弃规则。 可以使用命令行参数-Q
将Snort配置为以内联模式运行,配置snort config选项policy_mode
如下:
snort -Q
config policy_mode:inline
- Passive
当Snort处于Passive模式时,它充当IDS。Drop未加载的规则(没有–treat-drop-as-alert
)。 配置为Passive模式:
config policy_mode:tap
- Inline-Test
Inline-Test模式模拟snort的内联模式,允许评估内联行为而不影响流量。 Drop规则将被加载,并作为Wdrop(Would Drop)警报触发。 可以使用命令行选项**(–enable-inline-test)**或使用snort config选项将Snort配置为以内联测试模式运行,如下所示:
snort --enable-inline-test
config policy_mode:inline_test
(注意:–enable-inline-test
不能和-Q
连着用)
Table:不同模式下规则选项的行为
具有规则动作的不同模式的行为
1.10 控制套接字
可以将Snort配置为提供Unix套接字,该套接字可用于向正在运行的进程发出命令。 您必须使用--enable-control-socket
选项构建snort。 控制套接字功能仅在Linux上受支持。
可以使用命令行参数--cs-dir <path>
和snort config选项cs_dir
将Snort配置为使用控制套接字,如下所示:
snort --cs-dir <path>
config cs_dir:<path>
<path>
指定用来创建套接字的目录,
使用--enable-control-socket
选项配置时,将在同一bin目录中创建并安装命令snort控件,并将其与snort一起安装。
1.11 配置信号值
在某些系统上,snort使用的信号可能会被其他功能使用。 为避免冲突,对于非Windows系统,用户可以通过./configure
选项更改默认信号值。
- SIGNAL_SNORT_RELOAD
- SIGNAL_SNORT_DUMP_STATS
- SIGNAL_SNORT_ROTATE_STATS
- SIGNAL_SNORT_READ_ATTR_TBL
语法:
./configure SIGNAL_SNORT_RELOAD=<value/name> SIGNAL_SNORT_DUMP_STATS=<value/name>\
SIGNAL_SNORT_READ_ATTR_TBL=<value/name> SIGNAL_SNORT_ROTATE_STATS=<value/name>
您可以将这些信号设置为系统中用户定义的值或已知的信号名称。 以下示例将轮换状态信号更改为31并将重载属性表更改为信号SIGUSR2:
./configure SIGNAL_SNORT_ROTATE_STATS=31 SIGNAL_SNORT_READ_ATTR_TBL=SIGUSR2
如果多次分配同一信号,则在snort初始化期间将记录一条警告。 如果无法安装信号处理程序,则会记录一条警告,并且必须予以修复,否则该功能将丢失。
Snort中使用的信号:
1.12 更多信息
第2章包含有关配置文件中可用的许多配置选项的大量信息。 Snort手册页和snort -? 或snort --help包含可帮助您使Snort在几种不同模式下运行的信息。