现在很多企业都力图通过增加设备投入来加强自身网络的安全性,继防火墙之后入侵检测类产品已经越来越多地被列入了采购的清单。由于看好这块市场,很多并不具备足够研发实力的纷纷推出了所谓有自主知识产权的入侵检测产品,与其他当前比较热门的安全产品一样,入侵检测产品市场也呈现了鱼龙混杂的局面。
如何为自己挑选到一款相对较好的NIDS产品呢?用户当然可以参考一些第三方评测机构的报告,比如国外比较出名的NSS、OSEC的评测。这些评测从技术上来看还是比较完善的,结果也是相对公平的,但仔细看这些评测报告,会发现存在着一些问题:1. 基本上没有国内产品参与过此类评测,所以无法从报告中了解很多国内产品的情况,而我们的采购则基本上以国内的产品为主。2. 比较侧重性能的测试,在检测能力的评测上比较弱,用于测试的攻击都相对很老,于是出现结果你好我好大家都好的局面,因此无法了解产品对于攻击的检测能力。
了解一个产品好坏最好的办法当然是一段时间在实际环境中的试用,这样可以了解产品使用起来是不是顺手,漏报误报如何,还会很快暴露出评测过程中不会出现的问题。但大多数的情况是在采购过程中除了简单的测试外,也没有评测报告可以参考,那么我们能不能从侧面粗略评价一下NIDS的检测能力呢?
当前主流的NIDS从技术上还是采用以误用检测为主的方式,也就是说NIDS对于新攻击的检测与病毒检测类似,发现新的漏洞或攻击方式以后,厂商在产品的规则集中添加相应的特征,用户获取更新后的规则集后具备对新攻击的检测能力。
现在各大厂商都号称自己的产品能够检测数以几千计的攻击,在做宣传的时候能检测的攻击数吹得就如同文革时候放高产卫星一样,你说一千那我就说两千,你说两千我就说三千,做演示的时候厂商往往会打开产品的帮助文件让你看看里面所列的各种攻击名称和相关说明,以使你确信他们的产品真的具备检测很多种攻击的能力。事实情况是不是真的如厂商说的那样吗?很不尽然。
国际上比较权威的漏洞数据库及索引有SECURITYFOCUS、CVE、OSVDB,国内最权威和完整的中文漏洞数据库则当数绿盟科技。SECURITYFOCUS公司的漏洞数据库来源于BUGTRAQ,目前收录的条目超过10000条;CVE本身并不是漏洞数据库,它是一个对同一漏洞统一编号系统,目前收录的条目超过7000条;OSVDB是近期公布的一个开放源码的漏洞数据库,目前收录的条目超过8000条;国内绿盟科技的数据库目前收录条目超过6000条。在这些漏洞中,其中大部分是本地漏洞,不在NIDS检测的侯选之列,在远程可利用的侯选漏洞列表中,有的利用难度太高而不具真正的可用性,有的影响的软件使用量太少,有的漏洞太老当前已经基本上不存在了,有的利用方式现有NIDS技术无法实现检测,经过层层筛选真正值得NIDS去检测的漏洞攻击也就是1000左右的数量级。当然,厂商根据自己NIDS产品的定位可能会加入不少并不是攻击检测的网络监控类规则,比如各种服务的用户登录、用户执行某些操作等等,但这些不会是规则的主要构成部分。那么有的厂商为什么会号称有几千条的规则呢?事实上规则看起来数量多很多时候并不意味着NIDS的检测能力强,由于NIDS产品技术的复杂性,情况有可能正好相反,可能的原因有几方面:
1. NIDS产品检测引擎实现简单,缺乏必要的关联能力,只能检测并报出同一种攻击的多个具体操作,而这些却被厂商吹成是检测到多个攻击。以Snort为例,用于检测同一个版本的DeepThroat后门规则有好几条,无法关联多个事件的Snort引擎只能检测到后门执行的某些操作,而无法给出一个抽象层次更高的告警。
alert udp $EXTERNAL_NET any - $HOME_NET 2140 (msg:"BACKDOOR DeepThroat 3.1 Connection attempt"; content:"00"; depth:2; classtype:misc-activity; sid:1980; rev:1;)
alert udp $HOME_NET 2140 - $EXTERNAL_NET any (msg:"BACKDOOR DeepThroat 3.1 Server Response"; content:"Ahhhh My Mouth Is Open"; reference:arachnids,106; sid:195;
classtype:misc-activity; rev:4;)
alert udp $EXTERNAL_NET any - $HOME_NET 3150 (msg:"BACKDOOR DeepThroat 3.1 Connection attempt [3150]"; content:"00"; depth:2; classtype:misc-activity; sid:1981; rev:1;)
alert udp $HOME_NET 3150 - $EXTERNAL_NET any (msg:"BACKDOOR DeepThroat 3.1 Server Response [3150]"; content:"Ahhhh My Mouth Is Open"; reference:arachnids,106; classtype:misc-activity; sid:1982; rev:1;)
alert udp $EXTERNAL_NET any - $HOME_NET 4120 (msg:"BACKDOOR DeepThroat 3.1 Connection attempt [4120]"; content:"00"; depth:2; classtype:misc-activity; sid:1983; rev:1;)
alert udp $HOME_NET 4120 - $EXTERNAL_NET any (msg:"BACKDOOR DeepThroat 3.1 Server Response [4120]"; content:"Ahhhh My Mouth Is Open"; reference:arachnids,106; classtype:misc-activity; sid:1984; rev:1;)
2. 对于攻击的特征缺乏研究,无法从原理上检测攻击,只能检测多个已知的攻击代码,而如果从原理上检测攻击可能只需要一个规则,这样看起来检测的攻击虽然种数又上去了,但攻击者只要稍稍修改一下规则就能绕过NIDS的检测而造成漏报。以Snort为例,因为Snort没有对DNS协议做解码分析无法从原理上检测攻击,检测同一种DNS TSIG和DNS iquery溢出攻击Snort分别只能使用两个检测特定攻击代码的规则。
alert tcp $EXTERNAL_NET any - $HOME_NET 53 (msg:"DNS EXPLOIT named tsig overflow attempt"; flow:to_server,established; content:"|AB CD 09 80 00 00 00 01 00 00 00 00 00 00 01 00 01 20 20 20 20 02 61|"; reference:cve,CVE-2001-0010; reference:bugtraq,2302; reference:arachnids,482; classtype:attempted-admin; sid:303; rev:8;)
alert udp $EXTERNAL_NET any - $HOME_NET 53 (msg:"DNS EXPLOIT named tsig overflow attempt"; content:"|80 00 07 00 00 00 00 00 01 3F 00 01 02|"; classtype:attempted-admin; sid:314; rev:6; reference:cve,CVE-2001-0010; reference:bugtraq,2303;)
alert tcp $EXTERNAL_NET any - $HOME_NET 53 (msg:"DNS EXPLOIT named overflow (ADM)"; flow:to_server,established; content:"thisissometempspaceforthesockinaddrinyeahyeahiknowthisislamebutanywaywhocareshorizongotitworkingsoalliscool"; reference:cve,CVE-1999-0833; reference:bugtraq,788; classtype:attempted-admin; sid:259;
rev:4;)
alert tcp $EXTERNAL_NET any - $HOME_NET 53 (msg:"DNS EXPLOIT named overflow (ADMROCKS)"; flow:to_server,established; content:"ADMROCKS"; reference:cve,CVE-1999-0833; reference:url,www.cert.org/advisories/CA-1999-14.html; reference:bugtraq,788; classtype:attempted-admin; sid:260; rev:5;)
3. 规则的描述能力弱,无法描述相对复杂些的攻击特征,只能多个规则描述同一个种攻击的多种表现形式。以Snort为例,由于规则没有能力描述或的关系,所以对于NewApt.Worm的检测只能拆成几条来写。
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - cooler3.exe"; content: "filename=\"COOLER3.EXE\""; nocase; reference:MCAFEE,10540; sid:761;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - party.exe"; content: "filename=\"PARTY.EXE\""; nocase; reference:MCAFEE,10540; sid:762;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - hog.exe"; content: "filename=\"HOG.EXE\""; nocase; reference:MCAFEE,10540; sid:763;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - goal1.exe"; content: "filename=\"GOAL1.EXE\""; nocase; reference:MCAFEE,10540; sid:764;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - pirate.exe"; content: "filename=\"PIRATE.EXE\""; nocase; reference:MCAFEE,10540; sid:765;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - video.exe"; content: "filename=\"VIDEO.EXE\""; nocase; reference:MCAFEE,10540; sid:766;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - baby.exe"; content: "filename=\"BABY.EXE\""; nocase; reference:MCAFEE,10540; sid:767;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - cooler1.exe"; content: "filename=\"COOLER1.EXE\""; nocase; reference:MCAFEE,10540; sid:768;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - boss.exe"; content: "filename=\"BOSS.EXE\""; nocase; reference:MCAFEE,10540; sid:769;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible NewApt.Worm - g-zilla.exe"; content: "filename=\"G-ZILLA.EXE\""; nocase; reference:MCAFEE,10540; sid:770;
classtype:misc-activity; rev:3;)
alert tcp any 110 - any any (msg:"Virus - Possible ToadieE-mail Trojan"; content: "filename=\"Toadie.exe\""; nocase; reference:MCAF