IDS的数据收集机制
研究数据收集机制的重要性是显而易见的:就准确性、可靠性和效率而言,IDS收集到的数据是它进行检测和决策的基础。如果收集数据的时延太大,系统很可能在检测到攻击的时候,入侵者已经长驱直入;如果数据不完整,系统的检测能力就会大打折扣;如果数据本身不正确,系统就无法检测某些攻击,从而给用户造成一种很虚假的安全感,后果更不堪设想。
普莱斯在研究了不同滥用检测系统的需求和不同操作系统提供的数据之后,得出了一个结论:传统操作系统所提供的审计数据无法为滥用检测提供足够的有用信息。
基于网络的数据收集和基于主机的数据收集
入侵检测系统目前所能检测到的大部分入侵都是由主机上的活动引起的,如执行某一命令、访问某项服务并提供不正确的数据等,这些攻击活动发生在终端机上,有时通过网络检测也可以发现它们。
针对网络本身的攻击通常都是数据洪流,即发送的数据量超过网络的承受能力,以至于使得合法数据包通信受阻。但在终端机上也照样可以检测到这些攻击,例如,通过查看主机ICMP层是否有大量的Echo-Request分组,也可以检测到是否有Ping洪流攻击发生。
基于网络的数据收集有时会比基于主机的数据收集效果更好,尤其是主机对攻击行为没有反应的时候(例如,攻击数据包指向的端口是关闭的),但即使在这种情况下,也可以通过终端主机网络栈的底层检测到这些攻击。
总体而言,基于主机的数据收集要好一些,原因如下:
1.基于主机收集到的数据能准确反映主机上发生的情况,而不是根据从网络上收集到的数据包去猜测发生了什么事情。
2.在数据流量很大的网络中,网络监视器经常会丢包,但主机监视器则可以报告每台主机上发生的所有事件。
3.基于网络的数据收集机制对插入攻击和规避攻击无能为力,但基于主机的数据收集就不存在这样的问题,它能够处理主机收到的所有数据。
这些问题也从更一般的意义上反映出了直接数据收集和非直接数据收集方法的差异。
直接监控和间接监控
我们将数据收集分成直接监控和间接监控两种方法。
1.直接监控:从数据生成地或属地直接获取数据。例如,如果要直接监控某主机的CPU负载情况,就需要从主机相应的内核结构中获取数据; 如果要直接监控inetd后台进程所提供的网络服务的情况,就需要直接从inetd获取关于那些访问情况的数据。
2.间接监控:从能反映监控目标行为的数据源处获取数据。还以前面的两个例子为证,间接监控可以通过读取记录CPU负载的日志文件,完成对主机CPU 负载的监控;通过读取inetd后台进程所产生的日志文件,或通过类似TCP-Wrappers的辅助程序,间接监控网络服务的访问情况;也可以通过监视发往主机特定端口的数据包进行间接监控。
就检测入侵行为而言,直接监控要优于间接监控,原因如下:
(1)从非直接数据源获取的数据(例如审计踪迹)在被IDS使用之前,有被入侵者修改的潜在可能。
(2)非直接数据源可能无法记录某些事件。例如,并不是inetd后台进程的所有行为都会被记录到日志文件中的; 间接数据源可能无法访问监视对象的内部信息,例如,TCP-Wrappers不能检查inetd后台进程的内部操作,只能检查那些通过外部接口传递的数据。
(3)在间接监控中,数据一般都是通过某种机制生成的(如编写审计踪迹的代码),但那些机制并不了解IDS使用数据的具体需求。正因如此,从间接数据源获取的数据量总是非常之大,一个C2级生成的审计踪迹可能包含每个用户每天 50k~500k的记录,对于一个中等规模的用户组来说,每天审计踪迹数据可能会有好几百兆。
由于这个原因,IDS在使用间接数据源时,通常必须消耗大量的资源对数据进行过滤和精简。
直接监控方法只获取它需要的数据,所以生成的数据量相对较小。此外,监控组件自身也会对数据进行分析,只有在检测到相关事件时才产生结果,这样就减少了数据的存储量。
(4)间接监控机制的伸缩性差。因为当主机及其内部被监控要素的数目增加时,过滤数据的开销会降低被监控主机的性能。
(5)间接数据源常常在数据产生和IDS访问这些数据之间有一个时延,而直接监控的时延就小得多,这样IDS才能据此做出更及时的响应。
外部探测器和内部探测器
有些入侵检测系统在实现数据收集时采用了外部探测器和内部探测器,如普渡大学的AAFID,使用外部探测器时,监控组件与被监控程序分离,而内部探测器则在所监控的程序代码内实现。
外部探测器和内部探测器在用于直接数据收集时各有利弊。下表列出了这两种类型探测器各自的优缺点。
从软件工程的角度来看,内部探测器和外部探测器在以下几方面具有不同的特点:
1.错误引入:当使用内部探测器时,必须修改被监视程序的代码,所以程序操作中更容易引入错误。当然,外部探测器也会引入错误,例如,代理消耗了过量资源,或库调用错误地修改了某些参数。因此,实现内部探测器的代码应尽量短,这样,万一出现错误,检查难度也不会太大。
2.可维护性:外部探测器与所监控的程序是相互分离的,所以更容易维护。
3.规模:内部探测器是现成程序的一部分,所以避免了与创建进程相关的一些基本开销,因而可以比外部探测器小。
4.完备性:内部探测器可以访问所监视程序中的任何信息,而外部探测器只能访问外部可获的数据。所以,内部探测器能获得关于监视程序行为更完备的信息。此外,内部探测器可以被放置在所监视程序的任何地方,而外部探测器只能“从外面”检查程序,所以前者比后者的观察范围要广。
5.正确性:内部探测器访问的数据更完全,而外部探测器只能根据可获数据作出基于经验的猜测,所以前者产生的结果也比后者更正确。
对于IDS的设计者和实现者来说,研究所使用的数据源、权衡使用这些数据源的利弊以及是否可能有更好的方法,都是至关重要的。只有当决策数据可靠时,IDS的可靠性才能得到保证。所以如何为入侵检测系统提供尽可能好的数据源是所有IDS开发商和研究者应认真考虑的问题。