ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:31.13KB ,
资源ID:6024423      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6024423.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(如何编写snort的检测规则.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

如何编写snort的检测规则.docx

1、如何编写snort的检测规则摘要snort是一个强大的轻量级的网络入侵检测系统。它具有实时数据流量分析和日志IP网络数据包的能力,能够进行协议分析,对内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,snort具有很好的扩展性和可移植性。本文将讲述如何开发snort规则。(2002-07-09 13:13:25) -By 书生前言snort是一个强大的轻量级的网络入侵检测系统。它具有实时数据流量分析和日志IP网络数据包的能力,能够进行协议分析,对内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,snort具有很好的扩展性和可移植性。本文将讲述

2、如何开发snort规则。1.基础snort使用一种简单的规则描述语言,这种描述语言易于扩展,功能也比较强大。下面是一些最基本的东西:snort的每条规则必须在一行中,它的规则解释器无法对跨行的规则进行解析。注意:由于排版的原因本文的例子有的分为两行。 snort的每条规则都可以分成逻辑上的两个部分:规则头和规则选项。规则头包括:规则行为(rules action)、协议(protocol)、源/目的IP地址、子网掩码以及源/目的端口。规则选项包含报警信息和异常包的信息(特征码,signature),使用这些特征码来决定是否采取规则规定的行动。 这是一个例子:alert tcp any any

3、- 192.168.1.0/24 111(content:|00 01 86 a5|;msg:mountd access;)表1.一条简单的snort规则从开头到最左边的括号属于规则头部分,括号内的部分属于规则选项。规则选项中冒号前面的词叫做选项关键词(option keywords)。注意对于每条规则来说规则选项不是必需的,它们是为了更加详细地定义应该收集或者报警的数据包。只有匹配所有选项的数据包,snort才会执行其规则行为。如果许多选项组合在一起,它们之间是逻辑与的关系。让我们从规则头开始。 1.1 includesnort使用的规则文件在命令行中指定,include关键词使这个规则文件

4、可以包含其它规则文件中的规则,非常类似与C语言中的#include。snort会从被包含的文件读出其内容,取代include关键词。格式:include 注意:行尾没有分号。1.2 varriables在snort规则文件中可以定义变量。格式:var 例子:var MY_NET 192.168.1.0/24,10.1.1.0/24 $MY_NET any (flags:S;msg:SYNMETA packet;)表2.变量的定义和使用规则变量名可以使用多种方式来修改,你可以使用$操作符来定义元变量(meta-variables)。这些修改方式可以结合变量修改操作符:?和-来使用。$var:定义

5、元变量 $(var):以变量var的内容作为变量名 $(var:-default):以变量var的内容作为变量名,如果var没有定义就使用default作为变量名 $(var:?message):使用变量var的内容作为变量名,如果不成功就打印错误信息message并退出。 例如:var MY_NET $(MYU_NET:-192.168.1.0/24) tcp any any - $(MY_NET:?MY_NET is undefined!) 23表3.高级变量应用2.规则头(Rule Headers)2.1 Rule Action规则头包含一些信息,这些信息包括:哪些数据包、数据包的来源、

6、什么类型的数据包,以及对匹配的数据包如何处理。每条规则的第一项就是规则行为(rule action)。规则行为告诉snort当发现匹配的数据包时,应该如何处理。在snort中,有五种默认的处理方式:alert、log、pass、activate和dynamic。alert:使用选定的报警方法产生报警信息,并且记录数据包 log:记录数据包 pass:忽略数据包 activate:报警,接着打开其它的dynamic规则 dynamic:保持空闲状态,直到被activete规则激活,作为一条log规则 你也可以定义自己的规则类型,把它们和一个或者几个输出插件联系在一起。然后你就可以在snort规则

7、中使用这些规则类型了。这个例子将建立一个类型,它将只以tcpdump格式输出日志:ruletype suspicioustype logoutput log_tcpdump: suspocious.log下面这个例子将建立一个类型,把日志发送到syslog和MySql数据库:ruletype redalerttype alertoutput alert_syslog:LOG_AUTH LOG_ALERToutput database:log,user=snort dbname=snort host=localhost2.2 协议每条规则的第二项就是协议项。当前,snort能够分析的协议是:TC

8、P、UDP和ICMP。将来,可能提供对ARP、ICRP、GRE、OSPF、RIP、IPX等协议的支持。2.3 IP地址规则头下面的部分就是IP地址和端口信息。关键词any可以用来定义任意的IP地址。snort不支持对主机名的解析。所以地址只能使用数字/CIDR的形式。/24表示一个C类网络;/16表示一个B类网络;而/32表示一台特定的主机地址。例如:192.168.1.0/24表示从192.168.1.1到192.168.1.255的地址。在规则中,可以使用使用否定操作符(negation operator)对IP地址进行操作。它告诉snort除了列出的IP地址外,匹配所有的IP地址。否定操

9、作符使用!表示。例如,使用否定操作符可以很轻松地对表1的规则进行改写,使其对从外部网络向内的数据报警。alert tcp !192.168.1.0/24 any - 192.168.1.0/24 111(content:|00 01 86 a5|;msg:external mountd access;)表4.使用IP地址否定操作符的规则上面这条规则中的IP地址表示:所有IP源地址不是内部网络的地址,而目的地址是内部网络地址。你也可以定义一个IP地址列表(IP list)。IP地址列表的格式如下:IP地址1/CIDR,IP地址/CIDR,.注意每个IP地址之间不能有空格。例如:alert tcp

10、 !192.168.1.0/24,10.1.1.1.0/24 any -192.168.1.0/24,10.1.1.0/24 111 (content:|00 01 86 a5|;msg:external mountd access;)2.4 端口号在规则中,可以有几种方式来指定端口号,包括:any、静态端口号(static port)定义、端口范围,以及使用非操作定义。any表示任意合法的端口号;静态端口号表示单个的端口号,例如:111(portmapper)、23(telnet)、80(http)等。使用范围操作符:可以指定端口号范围。有几种方式来使用范围操作符:达到不同的目的,例如:lo

11、g udp any any - 192.168.1.0/24 1:1024记录来自任何端口,其目的端口号在1到1024之间的UDP数据包log tcp any any - 192.168.1.0/24 :600记录来自任何端口,其目的端口号小于或者等于6000的TCP数据包log tcp any :1024 - 192.168.1.0/24 500:记录源端口号小于等于1024,目的端口号大于等于500的TCP数据包表5.端口范围示例你还可以使用逻辑非操作符!对端口进行非逻辑操作(port negation)。逻辑非操作符可以用于其它的规则类型(除了any类型,道理很简单)。例如,你如果要日志

12、除了X-window系统端口之外的所有端口,可以使用下面的规则:log tcp any any - 192.168.1.0/24 !6000:60 10表6.对端口进行逻辑非操作2.5 方向操作符(direction operator)方向操作符-表示数据包的流向。它左边是数据包的源地址和源端口,右边是目的地址和端口。此外,还有一个双向操作符,它使snort对这条规则中,两个IP地址/端口之间双向的数据传输进行记录/分析,例如telnet或者POP3对话。下面的规则表示对一个telnet对话的双向数据传输进行记录:log !192.168.1.0/24 any 192.168.1.0/24 2

13、3表7.使用双向操作符的snort规则activate/dynamic规则activate/dynamic规则对扩展了snort功能。使用activate/dynamic规则对,你能够使用一条规则激活另一条规则。当一条特定的规则启动,如果你想要snort接着对符合条件的数据包进行记录时,使用activate/dynamic规则对非常方便。除了一个必需的选项activates外,激活规则(activate rule)非常类似于报警规则(alert rule)。动态规则(dynamic rule)和日志规则(log rule)也很相似,不过它需要一个选项:activated_by。动态规则还需要另

14、一个选项:count。当一个激活规则启动,它就打开由activate/activated_by选项之后的数字指示的动态规则,记录count个数据包。下面是一条activate/dynamic规则对的规则:activate tcp !$HOME_NET any - $HOME_NET 143 (flags:PA;content:|E8C0FFFFFF|in|;activates:1; 表8.activate/dynamic规则对这个规则使snort在检测到IMAP缓冲区溢出时发出报警,并且记录后续的50个从$HOME_NET之外,发往$HOME_NET的143号端口的数据包。如果缓冲区溢出成功,

15、那么接下来50个发送到这个网络同一个服务端口(这个例子中是143号端口)的数据包中,会有很重要的数据,这些数据对以后的分析很有用处。 3.规则选项规则选项构成了snort入侵检测引擎的核心,它们非常容易使用,同时又很强大和容易扩展。在每条snort规则中,选项之间使用分号进行分割。规则选项关键词和其参数之间使用冒号分割。截止到写本文为止(snort 1.7版),snort有23个规则选项关键词:msg:在报警和日志中打印的消息 logto:把日志记录到一个用户指定的文件,而不是输出到标准的输出文件 ttl:测试IP包头的TTL域的值 tos:测试IP包头的TOS域的值 id:测试IP分组标志符

16、(fragment ID)域是否是一个特定的值 ipoption:查看IP选项(IP option)域 fragbits:测试IP包头的分片位(fragmentation bit) dsize:测试数据包包数据段的大小 flags:测试TCP标志(flag)是否是某个值 seq:测试TCP包的序列号是否是某个值 ack:测试TCP包的确认(acknowledgement)域是否为某个值 itype:测试ICMP数据包的类型(type)域 icode:测试ICMP数据包的编码(code)域 icmp_id:测试ICMP回送包的标志符(ICMP ECHO ID)是否为某个值 content:在数据

17、包的数据段中搜索模式(pattern) content-list:在数据包的数据段中搜索模式清单 offset:设置开始搜索的偏移量 depth:设置搜索最大深度 nocase:大小写不敏感匹配内容字符串 session:剥离一个对话的应用层信息 rpc:观察RPC服务对特定应用程序的调用 resp:激活反应措施(断开连接等) react:激活反应措施(阻塞WEB站点) 3.1 msgmsg规则选项告诉日志引擎在复制包时同时打印的信息,以及让报警引擎输出的警告消息。它只是一个简单的文本字符串,使用作为转义符。格式:msg:;3.2 logtologto选项告诉snort把触发某条规则所有的数据

18、包都记录到指定的文件。使用这个选项,对处理来自nmap扫描、HTTP CGI扫描的数据非常方便。注意如果使用二进制日志模式,这个选项会失效。 格式:logto:;3.3 ttl这个选项设置要测试的生命周期(time-to-live)值。只有数据包的TTL和这个选项设置的值精确匹配,测试才会成功。这个选项主要用来检测路由企图。格式:ttl:;3.4 tos你可以使用tos关键词检查IP包头的TOS(type of service)域是否是一个特定的值。也是只有在被检测包TOS域的值和给定的值精确匹配时,这个测试才会成功。格式:tos:;3.5 ID这个选项关键词用来测试IP分片包头的ID域。一些

19、黑客工具为了不同的目的把这个域设置为特殊的值,例如:31337是在一些黑客中比较流行的值。使用这个选项就可以阻止这种攻击。格式:id: ;3.6 lpoption如果IP包中有选项域,可以使用这个规则选项搜索IP包头的特定选项,例如源路由。这个规则选项可以使用的参数如下:rr:路由记录 eof:End of list nop:无操作 ts:时间戳 sec:IP安全选项 lsrr:宽松源路由(loose source routing) ssrr:严格源路由(strict source roution) satid:流标识符 最常被注意的IP选项是loose&strict source routi

20、ng,不过在Internet上广泛使用的任何应用程序中都没使用这两个选项。每条规则中只能设定一个IP规则。格式:ipopts: ;3.7 fragbits使用这个规则选项可以观察IP包头的分片位和保留位。它们在IP包头的标识域,共有3位,分别是:保留为(reserved bit,RB)、还有分组片位(more fragments,MF)、不可分片(dont fragment,DF)。这些位可以以各种方式组合检查,使用下面的值指定:R:保留位 D:DF位 M:MF位 你也可以使用修饰符号对特定的位进行逻辑组合:+-ALL标志,指定的位加上任何其它的位为真 *-ANY标志,指定的任何位为真 !-N

21、OT标志,指定的位不为真 格式:fragbits: ;例子:alert tcp !$HOME_NET any - $HOME_NET any (fragbits:R+;msg:Reserverd IP bit set!;)表9.fragbits示例3.8 dsize这个规则选项用来测试数据包负载的大小。它可以被设置为任意值,还可以使用大于/小于号。例如,如果你知道某个服务有一个特定大小的缓冲区,你就能够设置这个选项来捕获制造缓冲区溢出的企图。它比检查数据包的内容速度快的多。格式:dsize: |是可选的3.9 content关键词content是snort一个非常重要的特征。用户可以在规则中使

22、用这个关键词,snort就会搜索数据包中content指定的内容,并且触发对于这些数据的反应。每当对一个content规则选项进行模式匹配时,snort都会调用Boyer-Moore模式匹配函数,测试数据包的内容。无论在数据包的那个位置发现要搜索的数据,就算测试成功。接下来,snort就会对这条规则中其余的选项进行测试。注意:测试是大小写敏感的。content选项包含的数据可以混合有文本和二进制数据。二进制数据一般被包在管道符(|)中,由字节码(bytecode)表示。字节码使用16进制数字表示二进制数据。表10是一条混有文本和二进制数据的snort规则。alert tcp any any -

23、 192.168.1.0/24 143(content:|90c8 c0ff ffff|/bin/sh;msg:IMAP buffer overflow);表10.content规则选项中混有文本和二进制数据格式:content:;3.10 offset在使用content规则选项时,offset规则选项作为其修饰符。这个关键词设置对content的内容进行模式匹配时的起始位置。这个规则选项在某些情况下很有用,例如CGI扫描,要搜索的字符串从来不会在数据包的前4个字节出现。注意:设置偏移值一定要小心,它可能会造成漏检!这个规则选项只能和content规则选项搭配使用。 格式:offset: ;

24、3.11 depthdepth是content规则选项的另一个修饰符。它用来设置最大的搜索深度,以减少无谓的搜索,使snort只在特征码可能出现的区域内搜索,例如如果在一个web绑定(web-bound)包中搜索“cgi-bin/phf,你就不必浪费时间在数据包负载数据的前20个字节之外搜索。表11的规则结合了content、offset、depth。alert tcp any any - 192.168.1.0/24 80 (content:cgi-bin/phf;offset:3;depth:22;msg:CGI-PHF access;)表11.含有content、offset和depth

25、规则选项的规则格式:depth: ;3.12 nocasenocase使对content进行模式匹配时大小写不敏感。snort将不再区别每个ASCII字符的大小写。格式:nocase;例如:alert tcp any any - 192.168.1.0/24 21 (content:USER root;nocase;msg:FTP root login attempt;)表12.使用nocase修饰符的规则3.13 flags这个规则选项用来测试TCP包头的标志。实际上,在snort中有8个有效的标志:F:FIN(TCP标志字节最左边一位) S:SYN R:RST P:PSH A:ACK S:

26、ACK U:URG 2:保留位2 1:保留位1(标志字节最右边一位) 还可以使用逻辑操作符对指定的标志位进行操作:+:ALL,指定的标志位和其它任意的标志位为真 *:ANY,指定的标志位中任意的标志位为真 !:NOT,除了指定标志位外,任意的标志位为真 保留位能够用来检测非正常的行为,例如对IP协议栈指纹特征的探测企图或者其它可疑行为。表13是一条针对SYN-FIN扫描的检测规则。alert any any - 192.168.1.0/24 any (flags:SF;msg:Possible SYN FIN scan;)表13.TCP标志格式:flags: ;3.14 seq这个规则选项涉及

27、TCP包的序列号。实质上,它检测包是否有一个静态的序列号集合,因此这个规则选项非常没有用处。指示出于完整性的考虑才包含了这个选项。 格式:seq:3.15 ack这个规则选项涉及TCP包头的确认域(acknowledge)。迄今为止,它只有一个实际的用途:检测NMAP TCP ping扫描。扫描程序nmap进行TCP ping扫描时,把TCP包头的确认号(4个字节)设置为0,然后向目标主机发出TCP ACK包,确定目标主机是否正在运行。表14是一个检测这种探测的规则:alert any any - 192.168.1.0/24 any (flags:A;ack:0;msg:nmap TCP p

28、ing;)表14.TCP ACK域的使用格式:ack:;3.16 itypeitype规则选项用来测试ICMP包头的类型域,使用数字进行设置。每种ICMP包对应的数值如下:0:回送应答 3:无法到达目的地 4:抑制包源 5:重定向(改变路径) 8:回送请求 11:IP分组超时 12:IP分组参数有问题 13:时间戳请求 14:时间戳应答 15:信息请求 16:信息应答 17:地址掩码请求 18:地址掩码应答 注意:拒绝服务和淹没攻击的数据包有时使用无效的ICMP类型,可以使用这个规则选项对无效的ICMP类型进行检测,也就是说,这个规则选项中的值可以不是上面所列的数值。格式:itype:;3.1

29、7 icodeicode规则选项和itype非常相似,也是使用数字进行设置,具体数值见snort源代码的decode.h文件。同样,也可以使用其它的数值来检测可疑的数据包。格式:icode:;3.18 sessionsesion关键词是从snort-1.3.1.1版加入的,用来从TCP会话中剥离用户的数据。如果想观察用户在telnet、rlogin、ftp,甚至WEB会话过程中输入了什么,就可以使用这个规则选项。session规则选项有两个参数关键词:printable、all。使用printable,snort就会只输出可打印数据;使用all,snort就会输出所有的数据,不可打印的数据以1

30、6进制表示。不过,这个功能会大大降低snort的速度,所以不太适合大负载的情况,而且最好使用二进制日志文件格式。表15是一条记录telnet会话的规则:log tcp any any 192.168.1.0/24 23 (session: printable;)表15.记录可打印的telnet会话数据格式:session:printable|all;3.19 icmp_idicmp_id规则选项用来检测ICMP回送(echo)数据包的ICMP ID号是否为一个特定的值。之所以会用到这个规则选项,是因为一些隐秘通道(covert channel)程序在通讯时使用静态的ICMP域。为了执行stacheldreht检测规则,开发了这个特别的插件,这些规则是由M

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

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