Snort:修改和编写自定义Snort规则

日期: 2008-10-30 作者:JP Vossen翻译:Tina Guo 来源:TechTarget中国 英文

Snort规则强大而灵活,而且编写相对简单。最好从VRT(Sourcefire Vulnerability Research Team)认证的规则开始,因为他们的编写最好,但是还有其他的规则资源。如果已经下载了已有的IDS规则,就可以根据需要修改规则。   在开始前,先查看Snort.org的常见疑难问答,可以在这里下载最新的VRT规则。

(查阅How to decipher the Oinkcode)。阅读这些规则、修改并实验(当然是在测试环境中)。如果已有的Snort规则不能按照想要的方式工作,就可以做些修改。下面是如何做。

  所有的Snort规则都遵循一个简单的格式,这个格式应该检查一下……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Snort规则强大而灵活,而且编写相对简单。最好从VRT(Sourcefire Vulnerability Research Team)认证的规则开始,因为他们的编写最好,但是还有其他的规则资源。如果已经下载了已有的IDS规则,就可以根据需要修改规则。

  在开始前,先查看Snort.org的常见疑难问答,可以在这里下载最新的VRT规则。(查阅How to decipher the Oinkcode)。阅读这些规则、修改并实验(当然是在测试环境中)。如果已有的Snort规则不能按照想要的方式工作,就可以做些修改。下面是如何做。

  所有的Snort规则都遵循一个简单的格式,这个格式应该检查一下。首先是SID和Rev(revision)的笔记。SID是Snort规则ID(也就是Signature ID)。Snort.org保留了不到一百万条的“官方”规则,而Bleeding Snort使用的SID超过了两百万。如果修改一条规则,就在SID中增加了一百万,所以可以跟踪到原始的。如果要创建新规则,使用起点是九百万的SID。当做出改变或者规则更改控制完成时增加修订。

  有些Snort规则是空地址规则文件。不要使用它,或者你的自定义IDS规则可以在下一次安装新的规则的时候重写空文件。创建一个或者两个文件,例如company_prod.rules和company_test.rules,并在snort.conf文件中增加包含语句。可以在一台计算机和接口上运行多个Snort,这对于测试规则很有用,但是在和产品平行的旧的PC上运行测试版的Snort可能会更早、也更安全。

  下面是一条简单的Snort规则:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP PING NMAP"; dsize:0; itype:8; reference:arachnids,162; classtype:attempted-recon; sid:469; rev:3;)

这  些代码的意思是:如果发现了定义为(default = any)的$EXTERNAL_NET ICMP内容到定义为(default = any)的$HOME_NET的ICMP包就发送一个警告;如果数据大小(dsize)是0,而ICMP类型(itype)是8(就是echo(request))。(还可以查看http://www.snort.org/pub-bin/sigs.cgi?sid=469)除“警告”外的其他动作包括,但不止是,登录和通过。这种情况下的协议是ICMP,但是也支持IP, TCP和UDP。变量需要在配置文件中定义,并添加美元符号前缀。

  SID469不是很好的规则。它会产生很多的假阳性,因为它相当“宽容”。除了NMAP外的其他应用发送没有任何负载的echo request包,而且没有其他标准可以是这条规则“更严格”或者更详细。下面是一条较好的规则:
alert udp $EXTERNAL_NET any -> $SQL_SERVERS any (msg:"MS-SQL probe response overflow attempt"; content:"|05|"; depth:1; byte_test:2,>,512,1; content:"|3B|"; distance:0; isdataat:512,relative; content:!"|3B|"; within:512; reference:bugtraq,9407; reference:cve,2003-0903; reference:url,www.microsoft.com/technet/security/bulletin/MS04-003.mspx; classtype:attempted-user; sid:2329; rev:6;)

  由于空间限制,我不能解释这条规则的每个细节,但是你只要看看就可以发现它很详细。你还可能注意到这些例子包括对外部资源的参考。查看Snort“etc”目录下的“reference.config”文件中的url,或者查看Snort网站上的SID中的规则文件,包括这些参考资料的连接。

  Snort 2.1.0版本引入了PCRE(Perl Compatible Regular Expressions)、thresholding和suppression,所有的这些对适当的调制都很严格。PCRE允许在规则中使用Regular Expression,所以你搜索的很详细。三种类型的thresholding允许限制“噪杂”规则以各种方式发送的警告的数量,而且可以写入自定义规则,或者放置在单独的配置文件中,例如threshold.conf。特别是,你可以使用外部文件 “调制”官方Snort.org规则。而不需要实际修改这些规则,这就使更新更加简单了。Suppression命令允许在哪些设备允许或者不允许触发警告上更加细致具体。例如,如果你在10.1.1.54上有网络管理工作站,使用“public”社区字符串选择SNMP设备(这样很不好,对吧?)。你可以使用下面的规则来抑制这个情况:suppress gen_id 1, sig_id 1411, track by_src, ip 10.1.1.54

  我们只是提到了表面。更全面的信息请查看Snort.org上的Snort用户手动指南,并从Snort.org和BleedingSnort.com上获取目前的规则。“readme”文件中包括Snort的源代码,这些源代码可以下载、检查来学习更多。如果你不想下载源代码,可以访问Snort CVS Repository网页上的Snort源代码、文档和废弃的规则。注意CVS库中的规则没有像2005年四月那样做维护,虽然有一些这方面的讨论,也可能会做出一些改变。可以阅读Snort.org上的文档或者加入Snort的Sigs(Special Interest Group)邮件表。

翻译

Tina Guo
Tina Guo

相关推荐