Snort检测原理与应用课件_第1页
Snort检测原理与应用课件_第2页
Snort检测原理与应用课件_第3页
Snort检测原理与应用课件_第4页
Snort检测原理与应用课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Snort检测原理与应用1、概述2、Snort规则3、Snort配置4、Snort检测5、snort安装1、概述

Snort是一个基于Libpcap的数据包嗅探器并可以作为一个轻量级的网络入侵检测系统(NIDS。所谓的轻量级是指在检测时尽可能低地影响网络的正常操作,一个优秀的轻量级的NIDS应该具备跨系统平台操作,对系统影响最小等特征并且管理员能够在短时间内通过修改配置进行实时的安全响应,更为重要的是能够成为整体安全结构的重要成员。Snort作为其典型范例,首先可以运行在多种操作系统平台,例如UNIX系列和Win2K(需要LibpcapforWin32的支持),与很多商业产品相比,它对操作系统的依赖性比较低:其次用户可以根据自己的需要在短时间内调整检测策略。就检测攻击的种类来说,据最新数据表明Snort共有2I类共1271条检测规则,其中包括对缓冲区溢出,端口扫描和CGI攻击等等。Snort集成了多种告警机制来提供实时告警功能,包括:syslog、用户指定文件、LTNIXSocket、通过SMBClient使用WinPopup对Window客户端告警。Snort的现实意义是作为开源软件填补了只有商业入侵检测系统的空白,可以帮助中小网络的系统管理员有效地监视网络流量和检测入侵行为。2、Snort规则(1)规则描述语言规则是特征模式匹配的依据,描述语言易于扩展,功能也比较强大

每条规则必须在一行中,其规则解释器无法对跨行的规则进行解析逻辑上由规则头和规则选项组成。规则头包括:规则行为、协议、源/目的IP地址、子网掩码、方向以及源/目的端口。规则选项包含报警信息和异常包的信息(特征码),使用这些特征码来决定是否采取规则规定的行动。

2、Snort规则(2)规则描述语言举例alerttcpanyany->/24111(content:"|000186a5|";msg:"mountdaccess";)

从开头到最左边的括号属于规则头部分,括号内的部分属于规则选项。规则选项中冒号前面的词叫做选项关键词。注意对于每条规则来说规则选项不是必需的,它们是为了更加详细地定义应该收集或者报警的数据包。只有匹配所有选项的数据包,Snort才会执行其规则行为。如果许多选项组合在一起,它们之间是逻辑与的关系。让我们从规则头开始。

2、Snort规则(3)规则头:哪些数据包、数据包的来源、什么类型的数据包,以及对匹配的数据包如何处理。规则行为(ruleaction):Alert:使用选定的报警方法产生报警信息,并且记录数据包;Log:记录数据包;Pass:忽略数据包;Activate:报警,接着打开其它的dynamic规则;Dynamic:保持空闲状态,直到被activate规则激活,作为一条log规则

2、Snort规则(4)协议(protocol):每条规则的第二项就是协议项。当前,snort能够分析的协议是:TCP、UDP和ICMP。将来,可能提供对ARP、ICRP、GRE、OSPF、RIP、IPX等协议的支持。

IP地址:规则头下面的部分就是IP地址和端口信息。关键词any可以用来定义任意的IP地址。snort不支持对主机名的解析,所以地址只能使用数字/CIDR的形式,CIDR(无级别域内路由)指明应用于IP地址的掩码。/24表示一个C类网络;/16表示一个B类网络;而/32表示一台特定的主机地址。在规则中,可以使用否定操作符(negationoperator)对IP地址进行操作。它告诉snort除了列出的IP地址外,匹配所有的IP地址。否定操作符使用!表示。例如,使用否定操作符可以很轻松地对上面的规则进行改写,使其对从外部网络向内的数据报警。

2、Snort规则(5)端口号:有几种方式来指定端口号,包括:any、静态端口号(staticport)定义、端口范围以及使用非操作定义。any表示任意合法的端口号。静态端口号表示单个的端口号,例如:111(portmapper)、23(telnet)、80(http)等。使用范围操作符:可以指定端口号范围。有几种方式来使用范围操作符:达到不同的目的,例如:logudpanyany->/241:1024记录来自任何端口,其目的端口号在1到1024之间的UDP数据包

2、Snort规则(6)方向操作符(directionoperator):方向操作符->表示数据包的流向。它左边是数据包的源地址和源端口,右边是目的地址和端口。此外,还有一个双向操作符<>,它使snort对这条规则中,两个IP地址/端口之间双向的数据传输进行记录/分析,例如telnet或者POP3对话。下面的规则表示对一个telnet对话的双向数据传输进行记录:log!/24any<>/2423

2、Snort规则(7)规则选项:规则选项构成了snort入侵检测引擎的核心,它们非常容易使用,同时又很强大和容易扩展。在每条snort规则中,选项之间使用分号进行分割。规则选项关键词和其参数之间使用冒号分割。下面是一些常用的规则选项关键词,其中对部分重要关键词进行详细解释:

2、Snort规则(8)

msg:在报警和日志中打印的消息;

logto:把日志记录到一个用户指定的文件,而不是输出到标准的输出文件;

ttl:测试IP包头的TTL域的值;

tos:测试IP包头的TOS域的值; id:测试IP分组标志符(fragmentID)域是否是一个特定的值

ipoption/fragbits/dsize/flags/seq/……3、Snort配置(1)Snort本身的一些配置,例如变量、预处理插件、输出插件、规则集文件等,也是通过解析规则进行的。在snort2.0版本中,有一个总体规则文件snort.conf,大部分配置规则都在此文件中。3、Snort配置(2)Include

varriables

在snort规则文件中可以定义变量。格式为:var<name><value>,例如:varMY_NET_x0013_/24,/24]<alerttcpanyany->$MY_NETany(flags:S;msg:"SYNMETApacket";)。最重要的默认变量是HOME_NET、EXTERNAL_NET、HTTP_PORTS、RULE_PATH等,分别表示本地网络的IP地址范围、外部网络的IP地址范围、web服务的端口、规则集文件的路径。

3、Snort配置(3)预处理器:从snort-1.5开始加入了对预处理器(也叫预处理插件)的支持。有了这种支持,用户和程序员能够比较容易地编写模块化的插件,扩展snort的功能。预处理器在调用检测引擎之前,在数据包被解码之后运行。通过这种机制,snort可以以一种outofband的方式对数据包进行修改或者分析。预处理器可以使用preprocessor关键词来加载和配置,格式如下:preprocessor<name>:<options>。例如:preprocessorminfrag:128。以下是一个预处理器的例子:

3、Snort配置(4)l

HTTPdecode预处理插件:HTTP解码预处理模块用来处理HTTPURI字符串,把它们转换为清晰的ASCII字符串。这样就可以对抗evasicewebURL扫描程序和能够避开字符串内容分析的恶意攻击者。这个预处理模块使用WEB端口号作为其参数,每个端口号使用空格分开。格式:http_decode:<端口号列表>,例如:preprocessorhttp_decode:8080803、Snort配置(5)输出插件:snort输出模块是从1.6版加入的新特征,使snort的输出更为灵活。snort调用其报警或者日志子系统时,就会调用指定的输出模块。设置输出模块的规则和设置预处理模块的非常相似。在snort配置文件中可以指定多个输出插件。如果对同一种类型(报警、日志)指定了几个输出插件,那么当事件发生时,snort就会顺序调用这些插件。使用标准日志和报警系统,默认情况下,输出模块就会将数据发送到/var/log/snort目录,或者用户使用-l命令行开关指定的目录。在规则文件中,输出模块使用output关键词指定:格式:outputname:<选项>,例如:outputalert_syslog:LOG_AUTHLOG_ALERT。下面是几个常用的输出插件:

4、Snort检测(1)协议匹配。通过协议分析模块,将数据包按照协议分析的结果对协议相应的部分进行检测。比如对TCP包的标志位的匹配。

alerttcp$EXTERNAL_NETany->$HOME_NETany(msg:"SCANNULL";flags:0;seq:0;ack:0;reference:arachnids,4;classtype:attempted-recon;sid:623;rev:1;)其中就对TCP的flags、seq、ack进行了协议位置的匹配。协议匹配需要对特定协议进行分析,Snort对IP/TCP/UDP/ICMP进行了分析,但是没有对应用协议分析。其它一些商用的IDS进行了高层的应用协议分析,可以显著地提高匹配的效率。4、Snort检测(2)字符串匹配。目前这是大多数IDS最主要的匹配方式,事件定义者根据某个攻击的数据包或者攻击的原因,提取其中的数据包字符串特征。通常IDS经过协议分析后,进行字符串的匹配。

比如:Snort中的一条事件定义,alerttcp$EXTERNAL_NETany->$HTTP_SERVERS$HTTP_PORTS(msg:"WEB-ATTACKSpscommandattempt";flow:to_server,established;uricontent:"/bin/ps";nocase;sid:1328;classtype:web-application-attack;rev:4;)该事件中要进行匹配的字符串就是"/bin/ps"。字符串匹配主要就是算法问题,因为IDS的规则多数属于字符串匹配,因此优秀的字符串匹配算法也能够显著提高IDS的效率,比如Boyer-Moore、Aho-Corasick、Set-wiseBoyer-Moore算法。

4、Snort检测(3)大小匹配,或者长度匹配。多数情况下,这也应该属于字符串匹配的一种,不过,这种匹配方式对数据包中某段数据的长度而不是对具体的字符串进行匹配。

比如,通过数据长度限制来对缓冲区溢出攻击进行检测。比如:alerttcp$EXTERNAL_NETany->$HTTP_SERVERS$HTTP_PORTS(msg:"WEB-IISISAPI.idaattempt";uricontent:".ida?";nocase;dsize:>239;flow:to_server,established;classtype:web-application-attack;reference:bugtraq,1065;sid:1243;rev:6;)其中的关键字dsize

就是对数据包的负载进行匹配,如果请求的命令总长度大于239,那么就检测出一条.ida溢出企图的事件。

4、Snort检测(4)累积匹配,或者量匹配。通过对某些事件出现的量(次数或者单位时间次数)来产生新的事件,比如,某个IP在1分钟内统计出了100条CGI事件,那么就属于一次CGI扫描事件。Snort的一些预处理插件可以进行此类匹配,例如portscan。

4、Snort检测(5)逻辑匹配,或者是集合匹配。一些有更强事件检测能力的IDS,通过对不同类型的事件组合来进行判断,从而获得新的事件。少数IDS对多种事件的组合来构成逻辑推理,增强检测的智能。Snort对此类匹配支持的功能较弱,仅在stream等预处理插件中有一些。

4、Snort检测(6)4、Snort检测(7)4、Snort检测(8)4、Snort检测(9)对规则头解析的结果填入RTN,对规则选项解析的结果填入OTN。抓取数据包后Snort要先进行一定程度的协议解析工作,主要是用相应的指针指向数据的各个域,这可以加快以后检测的匹配速度。然后数据包需要经过各个预处理器进行预处理,例如IP碎片重组、HTTP解码等。接下来就进入Snort的模式匹配过程,主要是遍历规则树试图匹配各个规则节点。如前所述,Snort主要进行的是协议匹配、字符串匹配和长度匹配,而检测引擎中没有两次或者多次匹配的过程,也就是累计匹配和逻辑匹配,因此它不能检测分布事件,也不能检测流量异常,而只能通过端口协议字符串等来检测那些具有字符串数据特征的特定拒绝服务攻击工具的事件,这可以从snort的DDOS规则集看得出来。当然Portscan和Stream4等预处理器的增加使snort在累计匹配和逻辑匹配上有一些表现,比如,Portscan预处理器可以跟踪端口扫描事件的速率。4、Snort检测(9)从Snort提供的规则也可以得到上面的结果,因为规则中所体现的基本都是对IP、ICMP、TCP、UDP这样的三、四层上的协议进行了解析,而对更上面的协议,比如第七层的应用协议等基本没有作协议分析,这些规则中主要进行的也是前三种方式的单包匹配。当然这里的重点不是在匹配算法上,而更看重整个检测的结构和过程。首先能够看到的问题就是snort的规则树形结构过于简单,也就造成可能某些RTN下的OTN链比较庞大;没有对高层协议分析也是一个大问题,因为,协议分析可以更有效地定位匹配位置,加快匹配速率。因此,现在很多IDS将规则树更平坦,尽量让深度和宽度不失调,同时进行高层协议分析,这一代的IDS结构也就基本如此了。同时,有些IDS采用多层引擎的方式,来实现和加强累计匹配和逻辑匹配的检测能力。其实现在Snort的结构发展也基本是对这些问题的解决。Snort获取免费下载地址:Snort-1.8.tar.gz:源代码包,适用于linux/solaris环境Snort-1.8-sol-2.7-sparc-local:二进制包,适用于solaris环境Snort-1.8-win32-source.zip:源代码包,适用于win32/9x/nt/2000环境底层库的安装与配置(一)Libpcap:提供的接口函数主要实现和封装了与数据包截获有关的过程,下载网址:/libpcap.tar.zLibnet:提供的接口函数主要实现和封装了数据包的构造和发送的过程,下载网址:/projects/libnet/dist/libnet-1.0.2a.tar.gz底层库的安装与配置(一)NDISpacketcaptureDriver:win32/9x/net/2000环境下抓包和处理数据包而提供的驱动程序,下载地址:/~mike/netgroup-serv.poloto.it/winpcap/install/default.htmLibcap的安装检查libcap检查在/usr/local/lib/目录下是否有libpcap.a在/usr/include/pcap/目录下是否有pcap.h,pacp-namedb.h以及net子目录,在/usr/include/pcap/net/目录下是否有bpf.h文件。如果有,说明libcap已安装成功,否则#tar–zxvf

libpcap.tar.z

解开压缩包#cd

libpcap#./configure#make#makecheck#makeinstallLibnet的安装#tar–zxvflibnet-1.0.2a.tar.gz#cdlibnet-1.0.2a#./configure#make#makeinstallNDISpacketcaptuerDriver安装1、win9x执行下载的自解压文件packet95.exe,并把解压后的文件放到某一临时目录下打开控制面板->网络->添加协议->选择“磁盘安装”->选择“BPFPacketcaptureDriverforwin95/98vx.xx”->确定->重起计算机2、winnt执行下载的自解压文件packetnt.exe,以后同上3、win2000执行下载的自解压文件packet2k.exe,以后同上Snort安装1.linux环境下安装#tar–zxvfsnort-1.8.tar.gz#cdsnort-1.8#./configure#make#makeinstall至此,/usr/local/bin/目录下已经存在snort文件,说明安装已成功。Snort安装2.win32环境下的安装解开snort-1.8-win32-source.zip用vc++6.0打开位于snort-1.8-win32-source\snort-1.7\win32-prj\snort.dsw文件选择“win32Release”编译选项进行编译。在Release目录下会生成所需的snort.exe可知性文件。Snort使用Libpcap命令行Snort命令行Snort-?可以列出相应参数及其解释Snort存在三种运行方式—嗅探器、抓包器、NIDS。使用祥解参见USAGE和SnortUserManual.pdf过滤器用来限制主机、网络和协议的范围,可以使用逻辑运算符把若干个过滤器联合起来。整个过滤器由一个或多个元语组成,而每个元语则由一个或多个关键字加上一个相关值(字符串或数字)组成。关键字分为以下几类:属性类关键字:说明后面所根值得意义,这类关键

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论