评测人员Coretez Giovanni发现另外一种让IDS误报的入侵: 快速地产生告警信息,抑制IDS的反应速度,以致使IDS失去反应能力,甚至让系统出现死机现象。当时,Coretez写了一个名为Stick的程序,作为IDS产品的测试用例。它的作用是: 可以读入Snort的规则,然后按照Snort的规则组包。由于Snort的规则涵盖了绝大多数的攻击种类,所以IDS一旦匹配了按Snort规则产生的攻击报文,即可发出告警信息。对于比较有名的IDS像ISS Realscur和Snort,Stick都能给它们造成30s以上的停顿。所以,对于新出现的IDS及其造成的危害,用户绝不能忽视。
在发现新型IDS误报入侵方面,Stick功不可没。为了更好地测试用户选用的IDS产品,用户不妨从http://www.securityfocus.com/frames/?content=/templates/tools.html%3Fid%3D1974上下载Stick,其编译起来并不麻烦,只需查看帮助即可。需要指出的是,绝大多数的IDS都是从Snort得到众多借鉴的,建议用户试用一下Stick。
2.IDS漏报
和IDS误报相比,漏报其实更危险。采用IDS技术就是为了在发现入侵时给出告警信息。如果入侵者入侵成功而IDS尚未告警,IDS便失去存在的意义。笔者从国外网站上看到一篇文章,它对利用TCP连接特点让IDS做漏报进行了详细的描述,同时还给出一些实现漏报的办法,给笔者提供了一种新思路: IDS想要防止欺骗,就要尽可能地模仿TCP/IP栈的实现。但是从效率和实现的复杂性考虑,IDS并不能很容易地做到这一点。
这种方法比较适合智能化的IDS,好的IDS一般为了减少误报,会像现在一些高端的防火墙一样基于状态进行判断,而不是根据单个的报文进行判断。这样上面谈到的Stick对这种IDS一般不起作用。但是用户应该注意到,这种简单的IDS只是字符串匹配,一旦匹配成功,即可报警。
2001年4月,又出了一个让IDS漏报的程序ADMmutate,据说它可以动态改变Shellcode。本来IDS依靠提取公开的溢出程序的特征码来报警,特征码变了以后,IDS就报不出来了。但是程序还一样起作用,服务器一样被黑。这个程序的作者是ktwo,我们可以从http://www.ktwo.ca/c/ADMmutate-0.7.3.tar.gz上下载该程序。用户不妨也试试它,以检测自己的IDS产品性能。不过,ADMmutate只能对依靠检查字符串匹配告警的IDS起作用,如果IDS还依靠长度和可打印字符等综合指标,则ADMmutate将很容易被IDS监控到。
IDS的实现总是在漏报和误报中徘徊,漏报率降低了,误报率就会提高; 同样误报率降低了,漏报率就会提高。一般地,IDS产品会在两者中取一个折衷,并且能够进行调整,以适应不同的网络环境。
四、自身安全性
毫无疑问,IDS程序本身的健壮性是衡量IDS系统好坏的另一个指标。如上所述,Stick程序能让IDS停止响应,该IDS的健壮性就值得怀疑。
IDS的健壮性主要体现在两个方面: 一是程序本身在各种网络环境下都能正常工作; 二是程序各个模块之间的通信能够不被破坏,不可仿冒。IDS用于各个模块间远程通信和控制,如果通信被假冒,比如假冒一个停止远程探测器的命令或者假冒告警信息,都是釜底抽薪的狠招。这就需要用户在模块间的通信过程中引入加密和认证的机制,并且这个加密和认证的机制的健壮性要经受过考验。如果模块间的通信被切断,则需要良好的恢复重传机制。告警信息暂时没有发送出去,并不是丢弃,而是要本地保存,在适当的时候再发送。
从上面的描述中我们可以看到,没有IDS的安全防护体系是不完善的。希望本文可以帮助大家了解IDS,在网络安全体系中使用IDS增强网络的坚固性,并为用户选购IDS产品提供参考。
关于IDS
IDS采用分布式结构,内含Probe(又称探测器或探针),用于收集信息,一旦发现非法入侵便告警。根据其所处的位置不同,Probe又可以分成基于主机的和基于网络的。基于主机的Probe位于希望监控的服务器上,通过收集服务器的信息来进行分析告警。基于网络的Probe位于希望监控服务器的同一个Hub或交换机上,通过监听网络上到达服务器的报文来分析告警。