Snort日志输出插件详解html
Snort是一款老×××的开源***检测工具,本文主要讨论他做为日志分析时的各类插件的应用。Snort的日志通常位于:/var/log/snort/目录下。能够经过修改配置文件来设置Snort的报警形式。基于文本的格式、Libpcap格式和数据库是Snort最重要的三种报警形式。本文主要对每种报警形式及其配置进行介绍。mysql
1 工做模式及输出插件sql
Snort拥有3种工做模式,分别为嗅探器模式、分组日志模式与网络***检测模式。数据库
(1)嗅探器模式服务器
Snort使用Libpcap包捕获库,即TCPDUMP使用的库。在这种模式下,Snort使用网络接口的混杂模式读取并解析共享信道中的网络分组。网络
该模式使用命令以下:tcp
#snort -vide
注意:这里的参数是小写字母v,而大写V则是显示snort版本。以上只显示TCP/IP网络数据包头信息,若是想查看详细的应用层数据信息,则须要输入如下命令:工具
#snort –vd性能
若是但愿查看数据链路层的包头信息,使用以下信息:
#snort –vde
还有一个相似“-d”参数的,“-X”它会从数据链路层开始输出原始数据包。
若是想将Snort做为IDS使用,不建议在命令行下使用“-vd”尤为是“-ved”参数,由于详细模式将数据包信息打印到控制台,这样严重影响了Snort的性能很容易引发丢包,这样分析数据不许确。
2 数据包记录模式
若是想将数据信息记录到磁盘上某个文件,那就须要使用Packet logger模式。
命令以下:
#snort –ved –l ./log
这时Snort会把数据链路层、Tcp/IP报头及应用层信息写入当前目录log(log目录已创建)目录下的snort.log.140493321文件中,并且这是二进制文件。你也许会问,ASCII格式的日志文件格式很是好识别,为何不直接记录成ASCII格式呢?由于系统本生记录的格式就是二进制的,若是再转换成咱们能识别的ASCII格式无疑会加剧系统负荷,因此Snort在作IDS使用时理应采用二进制格式记录,另外还要注意:“-l”参数是小写字母l
若是想查看所记录的日志就得使用“r”参数。
操做实例以下:
#snort –dvr snort.log.140493321
还能够提取部分感兴趣的数据,例如只读取ICMP包,输入以下命令:
#snort –dvr snort.log.140493321 icmp
只读取tcp包,输入以下命令:
#snort –dvr snort.log.140493321 tcp
若是想记录某个网段的数据呢,操做命令以下:
alienvault:~# snort -vde -l ./log -h 10.3.14.0/24
下面作个比较复杂的实验,环境是OSSIM 3.1 32位 平台
首先在控制台上启动:
#snort –l /var/log/snort/ -c /etc/snort/snort.eth0.conf
当结束命令^c时显示。
Alerts数量就是在日志里看到的记录数量,这二者一致。
在另外一个控制台查看日志状况。
#tail –f /var/log/auth.log
这时,咱们能够在SIEM控制台,中看到如图1所示。
图1 SIEM控制台
3 网络***检测模式HIDS
HIDS模式是你们须要掌握的重点,这种模式集成了嗅探模式和日志模式,而且须要载入规则库才能正常工做。操做方式以下:
#snort –vde –l ./log –h 10.32.14.0/24 –c /etc/snort/snort.eth0.conf
注意,当前目录下有log目录,若是制定-l ./log 参数系统会默认将日志存在/var/log/snort/目录下。你们在作实验时,要确保当前目录下有./log目录哦,不然没法正确执行以上指令。
snort.conf文件中包含了指定检测规则的具体路径。
4 输出插件
输出插件的做用是将报警数据输出到显示器或转储到文件。因此对于Snort而言输出插件就是系统的主要瓶颈,Snort自己能对封包进行快速读取和分析处理,可是试图将其显示输出,或者存储到数据库中时却有些力不从心。如何将Snort日志记录到一个指定文件呢?咱们经过执行命令(假设/var/log/snort/yourfile文件存在)来记录。
#snort –L yourfile
那么,这时系统自动将snort日志保存到/var/log/snort/yourfile文件中。有关日志输出的方法还有几个,咱们稍后详细讲解。后续文章我会给你们一个方法,配置Snort统一格式输出而且有Snort的标准日志应用Barnyard负责输出。这里咱们先看看Snort的输出插件。
1). -A alert-mode
在***检测模式中alert-mode有fast、full、unsock和none四种模式。
(1)fast
fast是一种快速简单的输出插件,之因此快是由于它只记录timestamp(时间戳)、signature(特征)、source IP、destinationIP、source port、destination port、TCP flags和Protocol。使用方法以下:
#snort –A fast
注意,上面的命令是不保存的,若是但愿保存到文件(当不适用-l参数默认保存位置是/var/log/snort/),命令以下:
#snort –A fast –h 10.32.14.0/24 –c /etc/snort/snort.eth0.conf
(2)full
Full对每一个产生警报的IP将其解码后的包记录下来。与fast不一样的是,它记录地更全面。这也是它的预设告警模式。
(3)unsock
这个插件的做用是创建一个UNIX域管道并向它发送警报。固然其它进程也可对该管道进行监听,目的是实时接收Snort警报数据。注意一点这个功能和Windows系统没法配合使用。
#snort –A unsock
(4)none
这个插件做用是关闭警报。
你们只需掌握-A参数后面跟的四个参数的含义,了解这四个参数只是让Snort能已不一样的方式报警。
2). tcpdump格式输出
有时候须要将Snort日志输出成tcpdump文件格式的记录包,由于这样可让多种应用程序和工具读取tcpdump,这时咱们以下操做(以OSSIM 3.1系统为例):
(1) 编辑snort.conf
#vi /etc/snort/snort.eth0.conf
找到 389行,启用output log_tcpdump: tcpdump.log。
(2)保存退出,并重启Snort服务使其配置生效。
(3)查看tcpdump.log。
alienvault:/var/log/snort# ls -l
-rw------- 1 root adm 504 Jul 14 22:02 tcpdump.log.1405389707
-rw------- 1 root adm 3410 Jul 14 22:45 tcpdump.log.1405392066
(3)CSV格式输出
CSV(Comma Separated Value)是用逗号分隔值的,是文本文件。采用CSV格式的目的主要考虑向其它数据库或电子表格软件输入。CSV格式能够记录24个字段如表1所示。
表1 规则选项关键字含义
序号 |
关键字 |
做用 |
1 |
Timestamp |
时间戳 |
2 |
Msg |
特征码名称 |
3 |
Proto |
协议 |
4 |
Src |
源地址 |
5 |
Srcport |
源端口 |
6 |
dst |
目标地址 |
7 |
dstport |
目标端口 |
8 |
ethsrc |
源MAC |
9 |
ethdst |
目标MAC |
10 |
ethlen |
以太网帧长度 |
11 |
tcpflags |
TCP标志位 |
12 |
tcpseq |
TCP序列号 |
13 |
tcpack |
TCP ack号 |
14 |
tcplen |
TCP长度 |
15 |
tcpwindow |
tcp窗口值 |
16 |
ttl |
ip头的ttl的值 |
17 |
tos |
IP头中TOS字段的值 |
18 |
id |
ip头的分片id值 |
19 |
dgmlen |
数据报的总长度,包括数据报头和数据报文 |
20 |
iplen |
IP包长度 |
21 |
icmptype |
ICMP类型 |
22 |
icmpcode |
ICMP代号,缺省为0 |
23 |
icmpid |
ICMP报文IP头的ID,缺省是随机的 |
24 |
icmpseq |
ICMP ECHO顺序号的值 |
实现csv格式输出方法:
编辑snort_eth0.conf。
添加:output alert_csv: csv.out 后面缺省有24个关键字,咱们也可按上图的参数输入
查看csv输出
alienvault:/var/log/snort# tail -f csv.out
07/15-00:29:51.254425 ,"GPL SHELLCODE x86 inc ebx NOOP",,,,,,,
07/15-00:29:51.357178 ,"GPL SHELLCODE x86 inc ebx NOOP",,,,,,,
07/15-00:29:54.541833 ,"ET P2P eMule Kademlia Hello Request",,,,,,,
07/15-00:29:54.541846 ,"ET P2P eMule Kademlia Hello Request",,,,,,,
07/15-00:31:55.606599 ,"ET DNS Non-DNS or Non-Compliant DNS traffic on DNS port Opcode 6 or 7 set - Likely Kazy",,,,,,,
如下是24个参数所有启用的效果。默认为所有启用除非指定具体参数。
在snort_eth0.conf加入:
output alert_csv: csv.out
一行便可。
查看SIEM控制台输出。
当设置成功csv输出后,能够查看OSSIM系统下SIEM控制台的日志输出,以下图3所示。
图3 SIEM控制台日志输出
咱们发现两种不一样警报方式的结果都是一行,很显然OSSIM系统的SIEM控制台显示出的警报更人性化。
(4)syslog输出
Syslog服务器能从各类服务和设备(网络设备,Web服务器等)收集日志信息。将Snort警报数据写入syslog服务器对于分析网络***事件有帮助。它能够与其它工具谢工执行实时报警和通知,因此这也是Snort一个比较重要的插件之一。
最简单方法是打开snort_eth0.conf将384行的output alert_syslog: LOG_AUTH LOG_ALERT这行启用,并重启Snort便可生效。咱们使用以下命令观察Snort发出的警报:
#tail –f /var/log/auth.log
Syslog配置选项
Syslog三个重要配置选项:
l Facility
l Priority
l Options
启用选项的命令以下:
方法很简单,在上面的技术上加上这三个参数便可。
output alert_syslog: LOG_AUTH LOG_ALERT facility priority options
保存退出并重启Snort便可。
这时,若是启用了csv输出,能够将syslog,csv输出作个对比,如图4所示(上部分为csv输出,下部分为auth.log输出)。
图4 输出结果比较
咱们发现一样一个***事件的报警,在它们的输出中除了各式不统一之外,其它都相同。
(5)数据库输出
数据库输出插件能够将日志记录到关系型数据库中,它支持MySQL等。当数据库插件被关联到数据库后,就能够实现对Snort报警进行分类、查询和按优先级组织排序,甚至利用应用程序对数据库中的告警数据经过GUI界面展示给用户。
在千兆网络环境下须要考虑性能问题,数据库插件有可能影响到Snort性能,插件自身并非瓶颈,当大量数据写入数据库时,必须等待磁盘I/O相应,这时就会受到影响。若是经过网络将日志存储到另外一台主机的数据库中那么延迟会比较大。后面咱们会采用Barnyard+Unified的方式解决这种性能问题。
主要思路是让Snort采用Unified的格式存储,以它的最大速度处理输出数据,而不是像传统的要等到写盘完成后,再继续操做,这样浪费了大量的时间。Barnyard能将二进制数解析成与它可以识别的各类格式,而且是彻底独立于Snort运行。警报被马上写入数据库而且不影响Snort的抓包能力。因此说这种组合适合于高带宽环境。
咱们仍是查看/etc/snort/snort.eth0.conf配置文件,大约392行。
这里有2个重要的选项alert和log。
393行能够选择奖警报数据写入数据库,394行能够同时将日志数据也写入数据库。
下面咱们看看如何使用数据库插件:
对照上面参数配置以下选项:
<db_type>为mysql
User=<username>为snortdb_username或者为Snort传感器建立的MySQL用户名。
Password=<password> 为snortdb_password或为Snort传感器建立snortdb_username的MySQL口令。
Dbname=<name>为snortdb或者本身指定的***数据库名称。
Host=<hostname>为本机环路地址127.0.0.1
(6)输出unixsock
经过Alert_unixsock打开UNIX套接字,而且把报警信息发送到那里。外部的程序/进程会在这个套接字上侦听并实时接收这些报警数据。
例子:
output alert_unixsock
加入到snort.eth0.conf配置文件后,重启Snort服务即生效。还能够经过如下命令手动启动:
# snort -c /etc/snort/snort.eth0.conf
此时会在/var/log/snort/下产生snort_alert文件
为了演示这一功能咱们经过一小段程序(本地进程间的通信),来看看效果如何。如下Perl程序,其主要功能是将Snort传送的数据报文的报警名称经过读取unixsock信息实现打印到屏幕。
执行此Perl程序,结果以下。
咱们看到显示在屏幕的5条警报名称。
(7)Unified格式输出
前面介绍了多种输出插件各异利弊,下面介绍OSSIM系统中经常使用的unified插件。这种插件的最大特色就是速度快,它能最快的输出Snort报警信息和日志信息,它输出两类文件:警报文件和数据包日志文件,警报文件仅记录摘要信息,内容包括源IP、目的IP、协议、源端口、目的端口、报警消息ID、日志文件包含完整的包信息,用户能够本身下载。
设置方法是启用如下配置语句:
Output unified2: filename snort_eth0, limit 128
Filename后设置输出警报文件名称为snort_eth0。
Limit表明输出文件容许的最大长度,默认值为128MB
以上几种插件为snort经常使用方式尤为在日志分析中用的比较多,若是你刚接触snort能够OSSIM3的环境中进行练习。