• 2005-10-23

    Snort 2.x数据区搜索规则选项的改进 - [黑客技术]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://mountainkingneo.yourblog.org/logs/463788.html

    Snort 2.x的规则选项与2.0以前的版本相比有了相当大的改进,有必要介绍和分析一下。 首先翻译一下Snort使用手册中相关的规则选项说明。由于这个手册写的极烂,很多地方意思表述重复冗长,用词不准确,而且还有些明显的错误,应该仔细说明的地方反而没有说明,叙述顺序上也混乱的很,还有让人不可理解的是手册中的示例规则本来就是简单的文本竟然采用了图片的格式,简直就是一个垃圾手册的范例,所以在翻译时没有完全参照,而是融入和补充了我认为正确的说法,还调整了一下某些选项说明的顺序。这个文档写于一年多前,当时的原文链接为 http://www.snort.org/docs/snort_manual/node14.html ,对于当前的网站,对应的链接差不多是 http://www.snort.org/docs/snort_manual/node21.html 。 ---------------------------------------------------------------------------------------- 2.5.1 content选项 content选项是Snort提供的多个选项中比较重要的一个。它可以使用户搜索数据包净载中特定的内容并相引发相应的动作。当执行一个content选项匹配时,程序调用Boyer-Moore模式匹配例程检查包内容中是否包含了此内容,如果选项中指定的数据正好包含在数据包的净载中,那么检查返回成功,规则中其他的选项会继续得以执行。需要小心的是默认的content选项匹配是关心大小写的。 选项中指定的数据可能会比较复杂;它可能包含混和的文本和二进制数据。二进制数据通常用管道(|)符号括起来并以字节码的方式指定。字节码是以十六进制的格式表示的,这样可以很方便地描述复杂的二进制数据。示例的Snort规则中就包含了混合的文本及二进制数据。 在一条规则可以指定多个content选项,这样可以使规则尽可能少地出现误报的情况。 如下字符在content选项内容中出现时必须被转义(如何转义至少在这个手册里的此节没说,我补充一下,有两个方法:1. 使用前导“\”字符 2. 使用字节的二进制表示方式,比如用“|3A|”表示“:”): : ; \ " 如果content选项内容之前放置了“!”字符,则表示在数据中不包含选项内容时引发报警。 2.5.1.1 格式 content: [!] ""; content选项可以带有多个修饰选项。修饰选项可以影响紧接之前的content选项的工作方式,这些修饰选项如下: 1. nocase 2. rawbytes 3. depth 4. offset 5. distance 6. within 2.5.1.2 示例 alert tcp any any -> any 139 (content:"|5c 00|P||00|I|00|P|00|E|00 5c|";) 混和了二进制数据和文本的content选项内容 alert tcp any any -> any 80 (content:!"GET";depth:3;nocase;) 取反匹配,此规则匹配数据包净载的前三个字节不是“GET”的情况 2.5.2 nocase修饰选项 nocase选项修饰紧接之前的content选项,使之在匹配时忽略大小写。 2.5.2.1 格式 nocase; 2.5.2.2 示例 alert tcp any any -> any 21 (msg:"FTP ROOT"; content:"USER root"; nocase;) 带有nocase修饰选项的content规则 2.5.3 rawbytes修饰选项 rawbytes选项修饰紧接之前的content选项,使之只匹配最原始的数据,忽略那些预处理器所做的解码。 2.5.3.1 格式 rawbytes; 2.5.3.2 示例 alert tcp any any -> any 21 (msg: "Telnet NOP"; content: "|FF F1|"; rawbytes;) 上面的示例使content选项匹配最原始的网络流量,而不是经过telnet解码器解码后的数据。 2.5.4 depth修饰选项 depth选项修饰紧接之前的content选项,允许用户指定在数据区中搜索特定模式的深度。如果设置depth等于5,则表示在数据包净载中从某个起点(如果没有下面论及的另一个offset修饰选项,则默认为数据区净载的开头)开始的5个字节中匹配content选项内容指定的模式。 2.5.4.1 格式 depth: ; 2.5.5 offset修饰选项 offset选项修饰紧接之前的content选项,允许用户指定从数据包净载的哪个字节开始进行匹配。如果设置offset等于5,Snort会在数据区净载的前5个字节以后开始搜索content选项内容指定的模式。 2.5.5.1 格式 offset: ; alert tcp any any -> any 80 (content: "cgi-bin/phf"; offset:4; depth:20;) 组合使用了content,offset,depth选项的规则,从数据包净载的第5个字节开始的20字节内查找“cgi-bin/phf”字串。 2.5.6 distance distance选项修饰紧接之前的content选项,允许用户指定相对于上一个content选项匹配成功的串尾再加多少字节开始搜索distance所修饰的这个content选项指定的匹配内容。此修饰选项与offset类似,只不过是相对于上一个content选项匹配成功的串尾而不是相对于数据区净载的开头。 2.5.6.1 格式 distance: ; 2.5.6.2 示例 alert tcp any any -> any any (content:"ABC"; content: "DEF";distance:1;) 此规则示例匹配的目的相当于正则表达式:/ABC.{1}DEF/ 2.5.7 within within选项修饰紧接之前的content选项,允许用户指定从上一个content选项匹配成功的串尾加上distance选项指定

    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我