免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: phiazat
打印 上一主题 下一主题

基于Snort的入侵检测系统 [复制链接]

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
21 [报告]
发表于 2006-10-09 23:00 |显示全部楼层
第三章 使用Snort规则\r\n如同病毒,大多数入侵行为都具有某种特征,Snort的规则就是用这些特征的有关信息构建的。在第1章中我们提到,你可以用蜜罐来取得入侵者所用的工具和技术的信息,以及他们都做了什么。此外,还有入侵者会利用的已知的系统弱点数据库,如果入侵者试图利用这些弱点来实施攻击,也可以作为一些特征。这些特征可能出现在包的头部,也可能在数据载荷中。Snort的检测系统是基于规则的,而规则是基于入侵特征的。Snort规则可以用来检测数据包的不同部分。Snort 1.x可以分析第3层和第4层的信息,但是不能分析应用层协议。Snort v 2.x增加了对应用层头部分析的支持。所有的数据包根据类型的不同按顺序与规则比对。\r\n规则可以用来产生告警信息、记录日志,或使包通过(pass):对Snort来说,也就是悄悄丢弃(drop),通过在这里的意义与防火墙或路由器上的意义是不同的,在防火墙和路由其中,通过和丢弃是两个相反的概念。Snort规则用简明易懂的语法书写,大多数规则写在一个单行中。当然你也可以行末用反斜线将一条规则划分为多个行。规则文件通常放在配置文件snort.conf文件中,你也可以用其他规则文件,然后用主配置文件引用它们。\r\n本章将提供给你不同类型规则的信息以及规则的基本结构。在本章的最后,你可以找到一些用来检测入侵活动的规则的例子。读完本章以及后面两章后,你所获得的信息就可以使你建立一个基本的Snort入侵检测系统了

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
22 [报告]
发表于 2006-10-09 23:02 |显示全部楼层
3.1 TCP/IP 网络分层\r\n在你开始书写规则之前,我们先来简要讨论一下TCP/IP的网络层次结构nort规则是常重要的,因为Snort规则依赖于这些层中的协议。\r\nTCP/IP协议族分为5层,这些层之间相互作用来完成通讯处理工作,它们是:\r\n物理层\r\n数据链路层,某些文章中也把它们叫做网络接口层。物理层和数据链路层由物理介质、网络接口适配器和网络适配器驱动所构成。以太网地址在数据链路层定义。\r\n网络层,也就是IP层。这一层负责点到点的数据通信并提供数据完整性。在这一层,所有的主机以IP地址来区分彼此。除了IP协议之外,这一层的主要协议还有ICMP。关于IP协议的更多信息参见RFC791,关于ICMP协议的更多信息查看RFC792。\r\n传输层,也就是TCP/UDP层。TCP(传输控制协议)用来建立从源到目的的可靠的、面向连接的数据传输。而UDP(用户数据报协议)提供无连接的数据传输,UDP在进行数据传输的时候,并不提供数据送达的保证,常用在可以容忍数据丢失的情况下。参见RFC 768获取UDP的更多信息。参见RFC 793来获得更多的关于TCP的信息。\r\n应用层,包含提供用户与网络接口的应用程序,例如Telnet、Web浏览器、ftp客户端等。这些应用程序常有自己用来进行数据通信的应用层协议。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
23 [报告]
发表于 2006-10-09 23:04 |显示全部楼层
Snort规则可以在网络层和传输层进行操作,另外也有一些方法来探测数据链路层和应用层的异常。Snort规则的第二个部分显示了对应的协议,你很快将了解如何书写这些规则。\r\n3.2 第一个不可用的规则\r\n这里有个非常不好用的规则,事实上,也许是最差的规则,但是它可以很好的检测Snort是否正常工作,并可以产生告警:\r\nalert ip any any -> any any (msg: \"IP Packet detected\"\r\n你可以在你第一次安装Snort的时候在snort.conf的末尾加上这条规则,这个规则可以使每当捕获一个IP包都产生告警信息,如果你就这样离开的话,你的硬盘空间很快就会被填满。这个规则之所以不可用,是因为它不信任任何信息。难道你用一个永久规则的目的就是为了检测Snort是否在工作吗?它应该是用来在你安装完Snort后做测试,以确定其工作正常,然后就去掉这条规则。下面的部分你可以了解Snort规则的不同部分,但为完整性起见,下面将简要解释一下刚才的那条规则所用的语句:\r\n“alert”表示如果包与条件匹配,就产生一个告警信息。条件由下面的语句定义。\r\n“ip”表示规则将被用在所有的IP包上。\r\n第一个“any”是对IP包源地址部分的条件定义,表示来自任何一个IP地址的IP包都符合条件,任何IP包都符合本条件。\r\n第二个“any”用来定义端口号,因为端口号与IP层无关,任何IP包都符合条件。\r\n“->”符号表示数据包传送的方向。\r\n第3个“any”用来定义目的地址的条件,any表示这条规则并不关心所有包的目的地址。\r\n第4个“any”用来定义目的端口条件,再说明一次,因为IP层与端口无关。\r\n最后一部分是规则的选项,,并包含一条将被纪录的告警消息。\r\n下一条规则不想前面那个那么糟糕,它将对所有捕获的ICMP包产生告警。重申一次,这条规则也是来检测Snort是否正常工作的。\r\n如果你想测试Snort,就发送一个ping(在UNIX机器中,基本上是发送ECHO请求)包。再次重复,它应该是用来在你安装完Snort后做测试,以确定其工作正常,然后就去掉这条规则。以下面的命令为例,你可以向你的网关或其他什么主机发送ICMP包。\r\nping 192.168.2.1\r\n注意,192.168.2.1是与Snort机器在同一网络的网关、路由器或其他机器。你可以在你安装Snort的机器上运行这个命令,这个命令在UNIX和Windows机器上都可以运行。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
24 [报告]
发表于 2006-10-09 23:05 |显示全部楼层
3.3 CIDR\r\n        RFC 1519定义了无类域间路由或称CIDR。目前有将不同的地址类(比如A和B)做更好的利用的趋势。在CIDR的支持下,你可以用任意长度的掩码,这在基于地址类的网络中是不行的,因为基于类的网络中,掩码的长度是固定的。使用CIDR的时候,网络地址的后面附加上掩码所用的位数,例如192.168.1.0/24表示一个网络的网络地址是192.168.1.0,掩码是24位。24位掩码相当于255.255.255.0。表示一个主机可以用到所有的掩码位,也就是32位。下面的规则表示:只有发送到IP地址为192.168.2.113的主机的ICMP包才会触发告警:\r\nalert icmp any any -> 192.168.1.113/32 any \\\r\n(msg: \"ing with TTL=100\"; ttl:100

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
25 [报告]
发表于 2006-10-09 23:05 |显示全部楼层
3.4 规则的结构\r\n        你已经看到了一些规则,尽管它们不那么好,但在某种意义上还是有用的。现在让我们来看一下Snort规则的结构。所有的Snort规则都可以分为两个逻辑组成部分:规则头部和规则选项。参见图3-1\r\n\r\n \r\n规则头部        规则选项         \r\n图3-1 Snort 规则的基本结构。\r\n规则的头部包含规则所做的动作的信息,也包含与包所比对的一些条件。选项部分通常包含一个告警消息以及包的那个部分被用来产生这个消息。一条规则可以用来探测一个或多个类型的入侵活动,一个好的规则可以来探测多种入侵特征。\r\nSnort规则头部的主要结构如图3-2所示:\r\n \r\n动作        协议        地址        端口        方向        地址        端口         \r\n图3-2 Snort规则头部结构\r\n动作部分表示,当规则与包比对并符合条件是,会采取什么类型的动作。通常的动作时产生告警或记录日志或向其他规则发出请求。你可以来本章的后面了解关于动作的更多信息。\r\n协议部分用来在一个特定协议的包上应用规则。这是规则所涉及的第一个条件。一些可以用到的协议如:IP,ICMP,UDP等等。\r\n地址部分定义源或目的地址。地址可以是一个主机,一些主机的地址或者网络地址。你也可以用这些部分将某些地址从网络中排除。后面将详细讨论。注意,在规则中有两个地址段,依赖于方向段决定地址是源或者是目的,例如,方向段的值是“->”那么左边的地址就是源地址,右边的地址是目的地址。\r\n如果协议是TCP或UDP,端口部分用来确定规则所对应的包的源及目的端口。如果是网络层协议,如IP或ICMP,端口号就没有意义了。\r\n方向部分用来确定那一边的地址和端口是源,哪一边是目的。\r\n例如,我们来看一下第2章曾经用到过的这样一个规则,当它探测到TTL为100的ICMP ping包的时候,就会产生告警:\r\nalert icmp any any -> any any (msg: \"ing with TTL=100\"; \\\r\nttl: 100

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
26 [报告]
发表于 2006-10-09 23:05 |显示全部楼层
括号之前的部分叫做规则头部,括号中的部分叫做规则选项。头部依次包括下面部分:\r\n规则的动作:在这个规则中,动作是alert(告警),就是如果符合下面的条件,就会产生一个告警。记住如果产生告警,默认的情况下是会记录日志的。\r\n协议:在这个规则中,协议是ICMP,也就是说这条规则仅仅对ICMP包有效,如果一个包的协议不是ICMP, Snort探测引擎就不理会这个包以节省CPU时间。协议部分在你对某种协议的包应用Snort规则的时候是非常重要的。\r\n源地址和源端口。在这个例子中,它们都被设置成了any,也就是这条规则将被应用在来自任何地方的ICMP包上,当然,端口号与ICMP是没有什么关系的,仅仅和TCP和UDP有关系。\r\n方向。在这个例子中,方向用->表示从左向右的方向,表示在这个符号的左面部分是源,右面是目的,也表示规则应用在从源到目的的包上。如果是<-,那么就相反。注意,也可以用<>来表示规则将应用在所有方向上。\r\n目的地址和端口。这个例子中,它们也都是“any”,表示规则并不关心它们的目的地址。在这个规则中,由于any的作用,方向段并没有实际的作用,因为它将被应用在所有方向的ICMP包上。\r\n在括号中的选项部分表示:如果包符合TTL=100的条件就产生一条包含文字:“Ping with TTL=100”的告警。TTL是IP包头部字段。参见RFC 791或者附录C。\r\n3.5规则头部\r\n        如前面提到的,规则的头部包括括号前面的一些部分,现在让我们从动作开始来详细的看一下规则头部的每个部分。\r\n3.5.1 规则动作\r\n动作是Snort规则中的第一个部分,它表示规则的条件符合的时候,将会有什么样的动作产生。Snort有5个预定义的动作,你也可以定义自己的动作,需要注意的是,Snort 1.x和2.x对规则的应用是不同的,在1.x中,只要包符合第一个条件,它就会做出动作,然后就不再管它,尽管它可能符合多个条件;在2.x中,只有包和所有相应规则比对后,才根据最严重的情况发出告警。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
27 [报告]
发表于 2006-10-09 23:08 |显示全部楼层
3.5.1.1 pass\r\n这个动作告诉Snort不理会这个包,这个动作在你不想检查特定的包的时候可以加快Snort的操作速度。例如,如果你在网络中有一台包含一些弱点的主机,用来检测网络安全漏洞,可能会希望不理会对这台机器的攻击,pass规则这时就可以用到了。\r\n3.5.1.2 Log\r\nLog动作用来记录包,记录包有不同的方式,例如,可以记录到文件或者数据库,这将在以后讨论。根据命令行参数和配置文件,包可以被记录为不同的详细程度。你可以用“snort - ?”命令来查看你所用版本Snort的命令行可用参数。\r\n3.5.1.3 Alert\r\nAlert动作用来在一个包符合规则条件时发送告警消息。告警的发送有多种方式,例如可以发送到文件或者控制台。Log动作与Alert动作的不同在于:Alert动作是发送告警然后记录包,Log动作仅仅记录包。\r\n3.5.1.4  Activate\r\nActivate动作用来产生告警然后激活其它规则来进行进一步的检验。如下面所说的,动态规则就是用于这个目的。当你需要对捕获的包进行进一步检验的时候,就可以用activate动作。\r\n        3.5.1.5 Dynamic\r\nDynamic规则动作由其它用activate动作的规则调用,在正常情况下,他们不会被用来检测包。一个动态规则仅能被一个“activate”动作激活。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
28 [报告]
发表于 2006-10-09 23:08 |显示全部楼层
3.5.1.6 自定义动作\r\n除了以上动作外,你也可以定义自己的动作,以用于不同的目的,例如:\r\n向Syslog发送消息。Syslog是系统日志守护进程,它在/var/log中创建日志文件,这些文件的位置可以通过修改/etc/syslog.conf来改变。你可以在UNIX系统中用命令“man syslog”或者“man syslog.conf”来获得更多信息。Syslog相当于Windows中的事件查看器。\r\n向如HP OpenView或Open NMS(http://www.opennms.org)等网管系统发送SNMP trap。\r\n在一个包上应用多个动作。如你前面所看到的,一个规则仅仅规定了一个动作,自定义动作可以用来产生多个动作。例如,你可以在发送SNMP trap的同时记录Syslog。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
29 [报告]
发表于 2006-10-09 23:09 |显示全部楼层
将数据记录到XML文件中。\r\n将信息记录到数据库中,Snort可以将数据记录到MySQL, Postgress SQL, Oracle 和 Microsoft SQL server中。\r\n这些新的动作类型在配置文件snort.conf中定义。一个新动作用下面的通用结构来定义:\r\nruletype action_name\r\n{\r\naction definition\r\n}\r\n        关键字ruletype后面跟随动作的名称,两个大括号中是实际的动作定义,类似于C语言中的函数。例如,我们定义一个叫做smb_db_alert的动作,用来向workstation.list中的主机发送SMB告警,同时在MySQL中的“Snort”数据库记录,如下所示:\r\nruletype smb_db_alert\r\n{\r\ntype alert\r\noutput alert_smb: workstation.list\r\noutput database: log, mysql, user=rr password=rr \\\r\ndbname=snort host=localhost\r\n}\r\n\r\n这些规则的类型我们会在下一章详细讨论,通常它们与配置和输出插件有关。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
30 [报告]
发表于 2006-10-09 23:09 |显示全部楼层
3.5.2 协议\r\n协议是Snort规则中的第二部分,这一部分将显示那种类型的包将与该规则比对。到目前为止,Snort可以支持以下协议:\r\nIP\r\nICMP\r\nTCP\r\nUDP\r\n如果协议是IP,Snort检测包中的数据链路层头部来确定包的类型,如果协议类型是其他任何一种,Snort检测IP头部来确定协议类型。不同的包头部将在附录C中讨论。\r\n协议部分仅仅在规则头部的条件中起作用。规则中的选项部分可以附加与协议无关的条件。如下面协议为ICMP的规则:\r\nalert icmp any any -> any any (msg: \"ing with TTL=100\"; \\\r\nttl: 100\r\n选项部分检测TTL值,它并不是ICMP头部的内容,而是IP头部内容。这就是说选项部分可以检测属于其它协议的一些参数。常用协议的头部和相关分析见附录C。\r\n3.5.3 地址\r\n在Snort规则中,有两个地址部分,用来检测包的来源和目的地。地址可以是一个主机地址或者网络地址。你可以用关键字any来指定所有的地址。地址后面用斜线来附加一个数字,表示掩码的位数。比如192.168.2.0/24代表一个C类网络192.168.2.0,其子网掩码是255.255.255.0。记住下面的一些子网掩码:\r\n如果子网掩码是24位,它是一个C类网络。\r\n如果子网掩码是16位,它是一个B类网络。\r\n如果子网掩码是24位,它是一个A类网络。\r\n表示一个主机用32位掩码。\r\n根据CIDR的支持,你可以用任何位数的掩码。参考RFC 791取得关于IP地址和子网掩码的信息。CIDR的更多信息参考RFC 1519。\r\n前面我们提到,Snort规则中有两个地址段,其中一个是源地址,另外一个是目的地址。方向段指明那个是源地址,哪个是目的地址。参考方向段部分的叙述来了解更多信息。\r\n下面是一个在Snort规则中地址部分的例子:\r\n192.168.1.3/32定义一个地址为192.168.1.3的主机。\r\n192.168.1.0/24定义从192.168.1.0到192.168.1.255的C类网络地址,子网掩码是24位,相当于255.255.255.0。\r\n152.168.0.0/24定义从152.168.0.0到192.168.255.255的B类网络地址,子网掩码是16位,相当于255.255.0.0。\r\n10.0.0.0/8定义从10.0.0.0到10.255.255.255的A类网络地址,子网掩码是8位,相当于255.0.0.0。\r\n192.168.1.16/28定义从192.168.1.16到192.168.1.31的网络地址,子网掩码是28位,相当于255.255.255.240。在这16个地址中有14个可以用作主机地址,因为还有一个网络地址和一个广播地址,注意,在任何网络中的一个地址总是网络地址,最后一个是广播地址。在这个例子中192.168.1.16是网络地址,192.168.1.31是广播地址。\r\n\r\n例,你可以用下面的规则,使到web服务器192.168.1.10/32的80端口的TTL为100的数据包触发告警:\r\nalert tcp any any -> 192.168.1.10/32 80 (msg: \"TTL=100\"; \\\r\nttl: 100\r\n这个规则仅仅用来示例IP地址是如何在Snort规则中应用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP