块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx

上传人:b****7 文档编号:10632069 上传时间:2023-02-22 格式:DOCX 页数:16 大小:23.43KB
下载 相关 举报
块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx_第1页
第1页 / 共16页
块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx_第2页
第2页 / 共16页
块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx_第3页
第3页 / 共16页
块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx_第4页
第4页 / 共16页
块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx

《块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx》由会员分享,可在线阅读,更多相关《块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx(16页珍藏版)》请在冰豆网上搜索。

块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理.docx

块是Snort体系中两个重要的部分预处理器在Snort应用规则前处理

与处理器和输出模块是Snort体系中两个重要的部分,预处理器在Snort应用规则前处理接收到的数据。

输出模块输出Snort探测机制所产生的数据。

数据包通过Snort的流程图如图4-1所示。

被捕获的数据包首先经过预处理器,然后,经过探测引擎根据规则处理。

根据规则处理的结果,输出处理器处理日志或者告警。

Snort允许你对预处理器和输出模块进行配置,这些工作可以通过修改snort.conf来完成。

在本书中,输入插件和预处理器是同一概念,输出插件和输出模块也是同一概念。

本章将对这些组件进行讨论。

4.1预处理器

当Snort接收到数据包的时候,主探测引擎并不能对它们进行处理和应用规则,比如,数据包有可能是分片的,需要重新组装,预处理器就是做这样的工作,使数据能够被探测引擎处理,另外,一些预处理器还可以做一些其它工作,比如探测包中的一些明显错误。

下面给你介绍预处理器如何工作。

在安装过程中,你可以在编译的时候选择对各种预处理器的支持。

各种预处理器的配置参数在snort.conf中调整,你可以在通过这个文件打开或者关闭某个预处理器。

捕获的包要经过所有已经打开的预处理器,不能跳过,因此如果你如果打开了大量的预处理器,就会降低Snort的运行速度。

在snort.conf中,你可以用preprocessor关键字打开预处理器,格式如下:

preprocessor[:

parameters]

后面的参数通常是可选项。

你也可以编写自己的预处理器,察看Snort源代码doc目录中的README.PLUGIN文件,你可以获得相关的资料,也可以在templates目录中查看源代码示例。

4.1.1HTTP解码

Snort可以对HTTP协议各种形式的编码进行解码,并从中找出已知的攻击特征。

你可以将HTTP服务器的端口列表作为HTTP解码预处理器的参数。

例如下面的命令可以对在80,8080和443端口的HTTP相关数据包进行解码,以便探测引擎处理:

preprocessorhttp_decode:

808080443

尤其重要的是,如我们前面所提到的,关于HTTP的攻击也常用各种变换形式,如果应用HTTP解码预处理器,就可以更有效的探测到这些企图。

4.1.2端口扫描

端口扫描是用来发现网络上主机开放的端口的方法。

任何入侵者的第一个行动通常都是找出网络上在运行一些什么样的服务。

一旦入侵者找到了这样的信息,就可以尝试针对相关服务弱点的攻击了。

端口扫描预处理器的作用是监测端口扫描的活动,这种预处理器可以将端口扫描行为记录到指定的位置或者标准的日志。

黑客们使用很多种扫描方式,你也可以查看nmap的文档来获得更多的信息。

下面是在snort.conf中应用端口扫描预处理器的大体格式:

preprocessorportscan:

这个预处理器有4个相关的参数

所监控的地址范围,采用CIDR规格。

在一个时间段内访问的端口数目,例如这个参数取5表示在一个时间段内,如果超过5个端口被扫描,则产生告警。

时间段,用来配合上个参数的门限时间范围,用秒表示。

记录日志的文件路径。

下面是个配置实例,用来监测针对网络192.168.1.0/24的端口扫描,并将日志记录到/var/log/snort/portscan.log文件中。

preprocessorportscan:

192.168.1.0/24510\

/var/log/snort/portscan.log

端口扫描活动是针对TCP和UDP端口的。

端口扫描预处理器可以监测正常端口和隐秘端口的扫描。

针对隐秘端口的扫描,可以查看nmap的相关文档或网站。

端口扫描的主要方法如下:

TCP端口连接扫描。

这种方式试图对某个端口进行标准的TCP连接,如果连接建立,则表示这个端口是打开的。

SYN扫描。

入侵者发送一个带有SYN标志的TCP包到某个端口,如果收到了带有SYN和ACK标志的回应,那么这个端口是打开的,如果收到了带有RST标志的包,这个端口就是关闭的。

NULL端口扫描,FIN端口扫描,XMAS端口扫描,这是几个比较类似的扫描方式。

入侵者发送一个TCP包出去,如果收到带有RST标志的包,表示端口是关闭的,如果什么包也没有收到,就有端口打开的可能性。

还有一种预处理器,可以和这种预处理器一同工作,它叫做端口扫描忽略预处理器,用来忽略针对某些主机的扫描行为,用法如下例所示:

preprocessorportscan-ignorehosts:

192.168.1.10/32\

192.168.1.13/32

4.1.3frag2模块

这个预处理器用来组装包的分片,老版本的Snort用defrag。

应用frag2的时候,你可以配置组装分片的超时和内存上限。

默认情况下是4M的内存和60秒的超时界限。

如果在这个时间段内没有完成,就把包丢弃。

下面的命令用默认参数打开frag2:

preprocessorfrag2

下面的命令将frag2配置为2M的内存上限和30秒的超时。

在一个高速的网络中,你应该用更多的内存上限。

4.1.4stream4模块

这个模块用来代替老版本的Stream模块,它有两个基本功能:

Tcp数据流的组装

状态监测

为了使Stream4正常工作,你必须在snort.conf中配置两个预处理器,分别是“stream4”和“stream4_reassemble.”它们都有很多的参数,如果你不配置这些参数,系统就会采用默认值。

Stream4预处理器的大体格式如下:

preprocessorstream4:

[noinspect],[keepstats],\

[timeout],[memcap],[detect_scan],\

[detect_state]

下面是关于各个参数的描述和默认值

参数

表述

默认值

Noinspect

关闭状态监测

ACTIVE

Keepstats

将会话概要记录到session.log文件中

INACTIVE

Timeout

保持一个活动会话的超时

30秒

Memcap

这个模块利用的最大内存

8MB

Detect_scan

监测端口扫描活动

INACTIVE

Detect_state_problems

监测TCP流相关的各种问题

INACTIVE

下面是stream4_reassemble预处理器的主要格式:

preprocessorstream4_reassemble:

[clientonly],

[serveronly],[noalerts],[ports]

下面是这个预处理器的主要参数的描述

参数

表述

Clientonly

仅仅组装客户端的数据流

Severonly

仅仅组装服务器端的数据流

Noalerts

在遇到逃避和嵌入式攻击时不告警

Ports

组装关于特定端口的数据流的端口列表,用空格分隔,all表示端口21,23,25,53,80,110,111,143和513。

指定少数的端口可以节省CPU时间。

4.1.5spade模块

SPADE是统计包异常探测引擎的缩写,你可以在

要记住SPADE对系统的要求比较高,尤其是在高负荷的网络上,因此要小心使用。

4.1.6ARP欺骗

ARP用来获得某个IP地址相关的MAC地址。

ARP协议也被很多人用来攻击,探测和欺骗。

ARP欺骗可以将到某个主机的通信重定向到别的地方。

Arpspoof预处理器用来探测ARP包中的异常,它可以做以下的事情:

对于所有的ARP请求,如果源MAC地址与发送者的MAC地址不同,就产生告警。

对于APR回应包,如果源MAC地址与发送者的MAC地址不同,或目的MAC地址与接收者的MAC地址不同,就会产生告警。

对于单播ARP请求,若目的MAC不是广播地址(FF:

FF:

FF:

FF:

FF:

FF),就产生告警。

为了实现这个功能,你需要在snort.conf中加入这样一行:

as“preprocessorarpspoof:

-unicast”。

你可以在Snort内部缓存中预先存放MAC-IP映射对,如果遇到不匹配,系统就会产生告警。

下面的一行添加一个IP-MAC对,可以用来探测ARP欺骗的企图。

preprocessorarpspoof_detect_host:

192.168.1.13\

34:

45:

fd:

3e:

a2:

01

4.2输出模块

输出模块用来控制Snort探测引擎的输出,你可以将输出的信息送到各种目标。

比如:

数据库

SMB弹出窗口

系统日志

XML或者CSV文件。

在snort.conf中配置输出模块的命令大体如下所示:

output[:

arguments]

比如你希望将信息记录到名为snort的MySQL数据库,可以采用如下的配置:

outputdatabase:

log,mysql,user=rrpassword=rr\

dbname=snorthost=localhost

一旦你在配置输出模块加入上面着一行,所有的告警都送到MySQL数据库中,在日志文件中就不会出现了,也有一些方法可以将告警送到不同的目标。

下面的例子是将SMB弹出窗口送到workstation.list文件中列举的主机上:

outputalert_smb:

workstation.list

有时候你可能需要将告警发到多种目标,那么用ruletype关键字自定义动作时一个好主意。

例如,下面豫剧定义了一个动作,将告警同时发送到数据库和SMB弹出窗口。

ruletypesmb_db_alert

{

typealert

outputalert_smb:

workstation.list

outputdatabase:

log,mysql,user=rrpassword=rr\

dbname=snorthost=localhost

}

下面的规则应用了上面的自定义动作。

smb_db_alerticmpanyany->192.168.1.0/24any\

(fragbits:

D;msg:

"DontFragmentbitset";)

4.2.1alert_syslog输出模块

几乎所有的UNIX系统中都有系统日志守护进程syslog,它的配置文件是/etc/syslog.conf。

你可以查看syslogd和syslog.conf的手册来获得更多信息。

Alert_syslog模块使你能够将告警发送到系统日志钟。

如果你需要的话,系统日志守护进程也可以将告警发送到其他的主机。

下面是这个模块的配置格式:

outputalert_syslog:

其中,facility可以取得值包括:

•LOG_AUTH

•LOG_AUTHPRIV

•LOG_DAEMON

•LOG_LOCAL0

•LOG_LOCAL1

•LOG_LOCAL2

•LOG_LOCAL3

•LOG_LOCAL4

•LOG_LOCAL5

•LOG_LOCAL6

•LOG_LOCAL7

•LOG_USER

priority的取值包括:

•LOG_EMERG

•LOG_ALERT

•LOG_CRIT

•LOG_ERR

•LOG_WARNING

•LOG_NOTICE

•LOG_INFO

•LOG_DEBUG

这里LOG_EMERG是最高优先级的,而LOG_DEBUG是最低优先级的。

Options的取值可以是:

•LOG_CONS

•LOG_NDELAY

•LOG_PERROR

•LOG_PID

4.2.2alert_full输出模块

这个模块用来想文件记录详尽的告警信息。

下面的配置让系统把日志记录到Snort日志目录的alert_detailed文件中:

outputalert_full:

alert_detailed

尽管这个模块可以使你得到详细的信息,但是也会导致系统资源的大量消耗,在一个高负载的网络环境中,可能导致系统来不及响应而使探测引擎忽略一些数据包。

4.2.3alert_fast输出模块

如前面所提到的,记录详细的信息可能导致系统资源的过度消耗,因此Snort提供快速记录简要信息的输出模块,每个信息只有一行,这个模块的配置如下所示:

outputalert_fast:

alert_quick

4.2.4alert_smb模块

这个模块用linux的SAMBA客户端smbclient程序向Windows工作站发送SMB告警,使用之前确定smbclient程序的路程在PATH环境变量中。

下面是一个示例:

outputalert_smb:

workstation.list

每个工作站的SMB名称都要分行列在workstation.list文件中。

SMB名称就是Windows机器的计算机名称。

客户端程序会自己解析这个名称。

4.2.5log_tcpdump模块

这个模块用来将告警数据存放为tcpdump格式,这种方法便于高负荷网络中提高分析数据的速度。

下面是配置格式:

outputlog_tcpdump:

下面是一个示例:

outputlog_tcpdump:

/var/log/snort/snort_tcpdump.log

4.2.6XML输出模块

Snort可以用SNML(SimpleNetworkModelingLanguage)来输出告警以便基于XML的解释器或浏览器阅读。

通过这个插件,你可以将XML数据存放在本地机器上或者通过HTTP及HTTP协议传送到Web服务器上。

XML输出模块的基本用法如下:

outputxml:

[log|alert],[parameterlist]

你可以选择用XML记录告警或者日志,其他的参数如下表所示:

参数

描述

File

将数据储存到XML文件中

Protocol

将信息记录到其他机器上用的协议如HTTP,HTTPS。

Host

记录信息的远程主机

Port

记录信息的远程主机的端口

Cert

Https用到的证书

Key

客户端私钥

Ca

认证证书的服务器

Server

X.509证书的CN

4.2.6.1例子

将日志记录到本地主机上的文件“xmlout”:

outputxml:

log,file=xmlout

文件名字会添加时间和日期作为后缀,这样的目的是为多个Snort进程服务。

将日志记录用HTTP协议到的xmlout文件上:

outputxml:

alert,protocol=http\

host=file=xmlout

将日志记录用HTTPS协议到的xmlout文件上:

outputxml:

alert,protocol=https\

host=file=xmloutcert=conformix.crt\

key=conformix.pemca=ca.crtserver=Conformix_server

将日志记录到监听5555端口的TCP服务器上:

outputxml:

alert,protocol=tcp\

host=port=5555

典型的输出XML文件如下:

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEsnort-message-version-0.2>

eth0

192.168.1.2

ICMPPacketwithTTL=100

2002-07-2317:

48:

31-04

hlen="5"len="60"id="37123"ttl="100"csum="519">

6162636465666768696A6B6C6D6E6F7071727374757677616263646566676869

 

4.2.7记录到数据库

Snort可以用数据库来记录日志和告警,你可以用Oracle或MySQL等多种类型的数据库,如下面的例子:

outputdatabase:

log,mysql,user=rrpassword=rr\

dbname=snorthost=localhost

下一章将详细讨论如何应用数据库,下面是数据库数据模块的格式:

outputdatabase:

,,\

这里database_type指的是数据库类型,如mysql,parameter_list是一些相关参数,用空格分隔。

其中很多参数是可选的。

下面是参数的列表:

参数

描述

Host

运行数据库服务器的主机

Port

数据库服务器的端口号

Dbname

数据库的名称

User

数据库的用户名

Password

用户口令

Sensor_name

Snort探测器的名称

Detail

Full或者fast模式,默认是full

Encoding

记录数据的ASCII,hex或者base64的编码

 

4.2.8CSV数据模块

利用CSV模块,可以将输出数据保存为CSV文件,可以将数据导入到其他的软件中,如Excel等等。

启动CSV模块的语句模式如下:

outputcsv:

文件默认被创建到/var/log/snort路径下面,选项用来定义文件中储存什么样的信息以及以什么样的顺序储存。

例如,你用default作为格式选想那么告警的所有参数将被存储在文件中:

outputcsv:

csv_logdefault

输出文件的格式如下:

07/23-18:

24:

03.388106,ICMPPacketwith

TTL=100,ICMP,192.168.1.100,,192.168.1.2,,0:

2:

3F:

33:

C6:

98,0:

E0:

29:

89:

28:

59,0x4A,,,,,,100,0,51367,60,20,8,0,,

07/23-18:

25:

51.608106,GET

matched,TCP,192.168.1.2,1060,192.168.10.193,,0:

E0:

29:

89:

28:

59,0:

6:

25

:

5B:

29:

ED,0x189,***AP***,0x55BCF404,0x8CBF42DD,,0x16D0,64,0,35580,37

9,20,,,,

07/23-18:

25:

52.008106,GET

matched,TCP,192.168.1.2,1061,192.168.10.193,,0:

E0:

29:

89:

28:

59,0:

6:

25

:

5B:

29:

ED,0x1D0,***AP***,0x55628967,0x8D33FB74,,0x16D0,64,0,63049,45

0,20,,,,

07/23-18:

25:

52.478106,GET

matched,TCP,192.168.1.2,1061,192.168.10.193,,0:

E0:

29:

89:

28:

59,0:

6:

25

:

5B:

29:

ED,0x1D0,***AP***,0x55628B01,0x8D33FC1B,,0x1920,64,0,63051,45

0,20,,,,

07/23-18:

25:

52.708106,GET

matched,TCP,192.168.1.2,1061,192.168.10.193,,0:

E0:

29:

89:

28:

59,0:

6:

25

:

5B:

29:

ED,0x1EF,***AP***,0x55628C9B,0x8D33FCC1,,0x1D50,64,0,63053,48

1,20,,,,

每一行包括下面的字段:

名称

描述

Timestamp

时间戳包含时间和日期

Msg

规则中msg字段中的信息

Porto

协议

Src

源IP地址

Dst

目的IP地址

Dstport

目的端口

Ethsrc

源MAC地址

Ethdst

目的MAC地址

Ethlen

以太网帧长度

Tcpflags

如果协议为TCP的话,这里就记录标志位

Tcpseq

Tcp包的序列号

Tcpack

Tcp的应答号

Tcplen

TCP包的长度

Tcpwindow

TCP窗口的大小

Ttl

IP头部的TTL值

Tos

IP头部的服务类型值

Id

包的ID值

Dgmlen

数据报的长度

Iplen

IP头部长度

Icmptype

ICMP头部的类型段

Icmpid

ICMP头部的ID

Icmpseq

ICMP序列号

 

你可以用少量的选项,例如:

outputcsv:

csv_logtimestamp,msg,src,dst

纪录的日志如下:

07/23-19:

31:

27.128106,GETmatched,192.168.1.2,192.168.10.193

07/23-19:

31:

27.278106,GETmatched,192.168.1.2,192.168.10.193

4.2.9统一纪录输出模块

同意输出适合告诉纪录,你可以将日志和告警存放不同的文件中,下面是配置格式:

outputalert_unified:

filename,\

limit

output

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1