Snort日志输出插件详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Snort日志输出插件详解相关的知识,希望对你有一定的参考价值。

Snort日志输出插件详解

  Snort是一款老牌的开源入侵检测工具,本文主要讨论他作为日志分析时的各种插件的应用。Snort的日志一般位于:/var/log/snort/目录下。可以通过修改配置文件来设置Snort的报警形式。基于文本的格式、Libpcap格式和数据库是Snort最重要的三种报警形式。本文主要对每种报警形式及其配置进行介绍。


1    工作模式及输出插件


Snort拥有3种工作模式,分别为嗅探器模式、分组日志模式与网络入侵检测模式。

1嗅探器模式

Snort使用Libpcap包捕获库,即TCPDUMP使用的库。在这种模式下,Snort使用网络接口的混杂模式读取并解析共享信道中的网络分组。

该模式使用命令如下:

#snort -v

技术分享图片技术分享图片注意:这里的参数是小写字母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.32.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/目录下。

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-modefastfullunsocknone四种模式。

1fast

fast是一种快速简单的输出插件,之所以快是因为它只记录timestamp时间戳)、signature(特征)source IPdestinationIPsource portdestination portTCP flagsProtocol。使用方法如下:

#snort –A fast

技术分享图片

注意,上面的命令是不保存的,如果希望保存到文件(当不适用-l参数默认保存位置是/var/log/snort/),命令如下:


#snort –A fast –h 10.32.14.0/24 –c /etc/snort/snort.eth0.conf


2full

Full对每个产生警报的IP将其解码后的包记录下来。与fast不同的是,它记录地更全面。这也是它的预设告警模式。


3unsock

这个插件的作用是建立一个UNIX域管道并向它发送警报。当然其它进程也可对该管道进行监听,目的是实时接收Snort警报数据。注意一点这个功能和Windows系统无法配合使用。

#snort –A unsock


4none

这个插件作用是关闭警报。

大家只需掌握-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

3CSV格式输出

CSVComma 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控制台显示出的警报更人性化。


4syslog输出

Syslog服务器能从各种服务和设备(网络设备,Web服务器等)收集日志信息。将Snort警报数据写入syslog服务器对于分析网络入侵事件有帮助。它可以与其它工具谢工执行实时报警和通知,所以这也是Snort一个比较重要的插件之一。

最简单方法是打开snort_eth0.conf384行的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输出,可以将syslogcsv输出做个对比,如图4所示(上部分为csv输出,下部分为auth.log输出)。

技术分享图片

输出结果比较


我们发现同样一个攻击事件的报警,在它们的输出中除了各式不统一以外,其它都相同。

5)数据库输出

数据库输出插件可以将日志记录到关系型数据库中,它支持mysql等。当数据库插件被关联到数据库后,就可以实现对Snort报警进行分类、查询和按优先级组织排序,甚至利用应用程序对数据库中的告警数据通过GUI界面展现给用户。

在千兆网络环境下需要考虑性能问题,数据库插件有可能影响到Snort性能,插件自身并不是瓶颈,当大量数据写入数据库时,必须等待磁盘I/O相应,这时就会受到影响。如果通过网络将日志存储到另一台主机的数据库中那么延迟会比较大。后面我们会采用Barnyard+Unified的方式解决这种性能问题。

主要思路是让Snort采用Unified的格式存储,以它的最大速度处理输出数据,而不是像传统的要等到写盘完成后,再继续操作,这样浪费了大量的时间。Barnyard能将二进制数解析成与它能够识别的各种格式,并且是完全独立于Snort运行。警报被立刻写入数据库并且不影响Snort的抓包能力。所以说这种组合适合于高带宽环境。

我们还是查看/etc/snort/snort.eth0.conf配置文件,大约392行。

技术分享图片

这里有2个重要的选项alertlog

393行可以选择奖警报数据写入数据库,394行可以同时将日志数据也写入数据库。

下面我们看看如何使用数据库插件:

对照上面参数配置如下选项:

<db_type>mysql

User=<username>snortdb_username或者为Snort传感器创建的MySQL用户名。

Password=<password> snortdb_password或为Snort传感器创建snortdb_usernameMySQL口令

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条警报名称。


7Unified格式输出

前面介绍了多种输出插件各异利弊,下面介绍OSSIM系统中常用的unified插件。这种插件的最大特点就是速度快,它能最快的输出Snort报警信息和日志信息,它输出两类文件:警报文件和数据包日志文件,警报文件仅记录摘要信息,内容包括源IP、目的IP、协议、源端口、目的端口、报警消息ID、日志文件包含完整的包信息,用户可以自己下载。

设置方法是启用以下配置语句:

Output unified2: filename snort_eth0, limit 128

Filename后设置输出警报文件名称为snort_eth0

Limit代表输出文件允许的最大长度,默认值为128MB

以上几种插件为snort常用方式尤其在日志分析中用的比较多,如果你刚接触snort可以OSSIM3的环境中进行练习。


开源IDS系统安装一点通视频课程请参考 https://edu.51cto.com/course/7896.html 


以上是关于Snort日志输出插件详解的主要内容,如果未能解决你的问题,请参考以下文章

Logstash数据处理服务的输出插件Output配置参数详解

使用 Python 读取/解析 Snort 警报文件

Logback日志使用详解

Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法

Linux sudo 详解

日志插件