《入侵检测》课件第5章_第1页
《入侵检测》课件第5章_第2页
《入侵检测》课件第5章_第3页
《入侵检测》课件第5章_第4页
《入侵检测》课件第5章_第5页
已阅读5页,还剩173页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章入侵检测系统的架构与设计5.1用户的需求分析与设计原则5.2入侵检测系统各功能模块的设计与通信5.3入侵检测系统与其它网络安全产品的协同 5.1用户的需求分析与设计原则

5.1.1用户的需求调研及需求分析

1.检测功能需求

检测功能是入侵检测系统最基本的需求。按照不同用户的检测目标要求,检测功能需求又可以分为不同的类型。

通常的用户需要对发生在外部的针对本地网络的攻击行为进行有效检测,以发现潜在的外部威胁,包括拒绝服务攻击、非授权访问企图或者漏洞扫描等攻击性活动。满足此类用户需求的系统设计,应该以网络入侵检测技术为主。其次,在某些安全保护等级要求高的内部网络环境中,例如军事计算环境和金融交易网络,用户需求将要求对内部网络中用户的异常活动进行检测。一般而言,主机入侵检测技术比较适用于检测此类内部人员的威胁模式。同时,网络入侵检测技术也可以用于内部网络上的可疑活动。

2.响应需求

在入侵检测一般模型中,通常都包含了一定的响应模块,这也就反映了一般用户都具有的对所检测到的异常行为进行响应的基本需求。

通常用户最初对响应需求的期望值很高,例如自动切断会话连接或者锁定特定用户账户等,用来达到快速阻断攻击的目标。但是,设计者需要进一步分析自动响应需求所存在的潜在风险,即有可能反而被攻击者用来实施拒绝服务攻击。因此,在设计中要妥善处理好此类响应操作的实现过程。

最强烈的响应需求是自动注销用户账户,这是在确认该用户实施了恶意的攻击行为之后采取的措施;其次,在调查某个用户的可疑活动时,暂停该用户账户,或者是在调查过程中,降低用户的权限等级并限制其访问范围等。

3.操作需求

操作需求定义了执行入侵检测工作的具体过程。确定如何操作一个入侵检测系统将极大地影响系统部署的总体有效性。不同的操作方式类型将包含不同的操作需求,具体的操作方式包括:后台操作、按需操作、预定操作、实时操作和全天候操作。

(1)后台操作。

后台操作需要入侵检测系统在后台自动地运行,而不需要人为干预。在这种方式下,代理和传感器需要自动收集各种数据,例如网络数据包和事件日志,然后将这些数据发送到某个处理点进行集聚处理。(2)按需操作。

按需操作也可以减少对外部资源的需求。为了满足按需操作,系统应该提供安全管理员在特定时候进行各种按需任务的操作能力,例如调查某个可疑的用户活动。按需操作通常与后台操作结合起来,能够利用有限的资源获得较好的检测效果。

(3)预定操作。

预定操作有利于在资源有限的情况下,执行资源密集型的工作任务,例如周期性的大量数据传送和对系统的周期性维护工作等。预定操作能够减少完成重复性任务的资源需求。(4)实时操作。

实时操作在提供用户期望性能需求的同时,还带来了很大的资源开销。尽管很多情况下,执行大多数的检测任务并不需要实时操作,但是对于某些特定的应用而言,实时操作是关键的任务需求。例如,对关键服务程序的攻击行为,包括对电子商务Web站点的拒绝服务攻击、对关键数据库服务器的漏洞发掘等,必须要执行实时的检测工作。

(5)全天候操作。

全天候操作主要是针对大型的网络基础设施不间断地实时地进行威胁检测和响应工作。全天候操作的代价很高,通常是在某些行业内存在特殊需求时使用。

4.平台范围需求

通常用户会从运行平台范围的角度提出自己的需求,例如入侵检测系统所能处理的网络协议类型、所能运行的操作系统平台类型以及能够监控的计算机和应用程序范围等。平台范围需求通常描述了用户需要监控的目标网络组件类型。

例如,用户提出系统应该具备在Solaris和Windows2000上的网络结点检测性能;或者是要求系统能够检测针对特定应用程序的攻击行为,包括Web站点和电子邮件服务器等。

5.数据来源需求

用户还会提出数据来源的需求,即系统能够监控那些输入的审计数据源。不同行业内的信息系统通常由不同类型的主机、操作系统和应用程序组成,因此拥有不同类型、种类繁多的审计数据源,并且各种审计数据源都具备不同的安全性能。

其它的数据来源需求,还可能包括能够分析防火墙日志信息、路由器日志以及SNMP网管日志等的能力。

6.检测性能需求

入侵检测系统具有通用的性能需求,同时不同类型的入侵检测技术各自具备自己的性能需求指标。

(1)传统的基于网络入侵检测。

该类检测的性能指标通常包括所能监控的网络带宽情况,例如100MHz或者1000MHz的以太网上的检测工作是否能够顺利展开。具体的参数包括在负载为百分之多少时网络分组的丢失率应该小于某个阈值。此外,还要考虑在交换式网络环境下和加密情况下的性能需求。(2)网络结点入侵检测。

该类检测关注的性能需求指标主要是网络环境中各结点数据的关联分析性能,即能够对多少个独立网络结点的检测结果进行关联分析,从而获得对整个网络安全状态的评估结果。

(3)基于主机的入侵检测。

该类检测性能需求主要来自于目标监控系统日志产生的速度,以及系统处理审计记录的速度要求。例如,假定目标系统中包含10台主机系统,而每台主机每小时独立生成10MB的日志记录,则要求入侵检测系统能够达到每小时处理100MB日志数据的性能指标。(4)应用程序入侵检测。

该类检测是基于主机入侵检测的一个特例,其性能需求包括主机入侵检测的参数指标。特别之处在于,需要注意从各种特定应用程序处收集数据的性能需求,尤其是在需要进行实时的应用程序安全分析时,此种性能需求更为重要。

(5)分布式的入侵检测系统。

7.取证和诉讼需求

如果要把入侵检测系统用于法律起诉用途的工具,则需要满足相关的取证和诉讼需求。为此,则需要确定如何设计系统才能够确保证据的可信度和说服力以及具备完整的法律效力,包括如何选择恰当的审计数据源,如何充分保证数据的处理过程满足诉讼要求等。

许多用于诉讼的需求是与具体过程相关的,这些需求确定了在调查期间的各个阶段需要何种安全等级的数据。

8.其它需求

入侵检测系统还需要满足其它的需求,例如用于损伤情况评估的需求和尽可能减少对目标系统性能影响的需求等。5.1.2入侵检测系统设计原则

入侵检测系统在设计和开发过程一般应遵循以下设计原则。

(1)机制的经济性原则。

该原则提倡保护机制的设计应该在有效的前提下,尽量保持实现简单。在正常无错误的条件下,保护机制通常都能够生效。保护机制的设计必须足够简单明了,以便能够通过手工检查方式或者数学证明方式来进行有效的正确性和有效性评估验证过程。

(2)可靠默认原则。

可靠默认原则是指保护机制的设计应该确保在默认的情况下,任何主体没有访问的特权,而保护机制的设计应该指出在哪些特定的条件下允许访问操作。

可靠默认原则的一个拓展情况就是,在系统设计和实现中的每个资源访问点上,都必须确保在进行实际的访问操作时,必须首先执行特定的操作来获得所需的授权,否则系统应该拒绝后继的操作。

(3)时效原则。

时效性原则就是必须能及时发现各种入侵行为,理想情况是在事前发现攻击企图,比较现实的情况则是在攻击行为发生的过程中检测到攻击行为。如果事后才发现攻击的结果,必须保证时效性,因为一个已经被攻击过的系统往往还面临后续的攻击行为。时效性可以避免管理员通过对系统日志进行审计以查找入侵者或入侵行为线索时的种种不便与技术限制。

(4)安全性原则。

入侵检测系统自身必须安全。如果入侵检测系统自身的安全性得不到保障,就意味着入侵检测系统提供的信息不可信,最严重的情况是让入侵者控制了入侵检测系统,即获得对系统的控制权,因为一般情况下入侵检测系统都是以特权状态运行的。

(5)完全调节原则。

该原则要求保护机制检查对每个对象的每次访问操作,必须确保该次操作得到了合理的授权。遵循此原则并系统地实施,可以避免一些最常见的安全脆弱性。

事实上,如果在保护机制的设计过程中,完全和系统地贯彻此原则,将构成整个机制设计安全保护的最关键基础。另外,值得注意的是,该原则要求访问的完全授权,从而能够增强系统的安全性。但是其并不能确保授权完毕后与进行实际操作之间存在的时间间隔内,授权的状态不会发生变化。因此,需要在具体的实现过程中,保证授权状态检查与实际操作的一致性。

(6)开放设计原则。

开放设计原则要求保护机制的设计不应该建立在攻击者对机制原理一无所知的假设基础之上。实施开发设计原则的一个原因就是保护机制的支持者都需要检查保护机制的设计,以确保该保护机制的安全等级具备足够的信任度来满足实际需求。因此,该保护机制必须能够接受其它人的全面测试,也包括攻击者的攻击测试,来检验安全设计的质量等级。安全领域内较为明显地体现安全设计原则的例子就是密码算法的设计。

开放设计原则要求保护机制的系统设计对外开放,那么如何来保证保护机制的生效激活呢?一般来说,需要依赖于安全证书的形式来激活整个保护机制。(7)特权分割原则。

特权分割原则的基本要点在于不能够在满足一种条件的情况下,允许对对象的访问操作。一般来说,至少要满足两个特点条件后,才能够做出允许访问的决定。某些情况下,可以采用“双因子”的概念来描述该原则。

(8)最小权限原则。

最小权限原则指的是,系统中每个实体(包括用户和进程)都应该在其能够满足要求的最小权限下进行操作。所需权限只有在需要时才进行适当提升,以满足必要的条件;而在不需要时,则要进行降低,避免潜在的安全风险。

在进行入侵检测系统设计时,实施最小权限原则将能够限制实施攻击的机会,特别是考虑到攻击者有可能利用入侵检测系统作为后继攻击中介体的潜在威胁。

(9)最小通用原则。

该原则的微妙之处在于,进行系统设计时尽可能减少出现所有用户都依赖的通用机制,例如共享的通信信道和资源等。最小通用原则能够减少共享资源的各个用户之间出现因为疏忽而造成敏感信息泄漏的情况。

同时,该原则可以降低机制设计的复杂性,因为要为所有用户提供服务的通用机制通常要求复杂的数据处理技术,一旦出现故障,则会影响所有的相关用户。

(10)心理可接受原则。

心理可接受原则对于安全保护机制能否得到实际应用起到关键的作用。该原则的要点是安全保护机制的人机交互界面必须要直观明显,便于用户操作。

一个系统设计得再好,如果用户不去使用,也无法生效。所以,实际的系统设计中必须要切实根据操作环境和用户的特点,进行良好的界面设计工作。5.2入侵检测系统各功能模块的设计与通信

5.2.1主要功能模块的设计

模块化是指解决一个复杂问题时自上向下逐层把系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。

在入侵检测系统的设计过程中,根据系统各个部分所实现的功能的不同,可以把入侵检测系统分成不同的功能模块,这样做的最大好处就是在前期的设计和后期的修改优化过程中都比较灵活、方便。

1.基于CIDF模型的系统各功能模块的设计

1)总体设计

(1)设计目标。

实现一个入侵检测系统,基本模块与CIDF模块相对应,要求其有较好的实时性、可扩展性、安全性与可用性、检测准确性等。图5.1总体设计模型(2)设计模型。总体设计模型如图5.1所示,各主要模块的功能如下:

①数据包捕获模块:监听网络接口卡,抓取流过的数据包,并过滤出系统需要的数据。

②协议分析模块:对数据采集模块采集的数据进行协议分析,将其还原为不同协议(IMCP、TCP、UDP、HTTP等)的数据包,根据各个不同协议的具体内容对其进行分析,检测入侵行为,并将这些数据包交给数据检测模块进行处理。

③数据检测模块:对协议分析模块传来的数据根据不同的协议调用不同的规则库进行模式匹配,如匹配成功,则调用系统响应模块。

④系统响应模块:对入侵行为进行响应,如向控制台输出一些报警信息。

⑤规则库:存放入侵特征的规则,在进行协议分析和模式匹配时要根据该库中的规则进行入侵检测。

2)数据包捕获模块设计

这里所设计的入侵检测系统是基于Libpcap的数据包处理器。Libpcap(PacketCaptureLibrary)是一个与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库,用于访问数据链路层。其捕获机制是BPF机制。Libpcap是由Berkeley大学LawrenceBerkeleyNationalLaboratory研究院的VanJacobson、CraigLeres和StevenMcCanne编写的。网络上著名软件tcpdump及idssnort都是基于libpcap编写的,此外Nmap扫描器也是基于libpcap来捕获目标主机返回的数据包的。(1)网络数据包的捕获原理。

以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输的。当网络适配器设置为监听模式(混杂模式,PromiscuousMode)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。(2)Windows环境下捕获数据包的结构。

Windows环境下捕获数据包的结构如图5.2所示,其中NDIS(NetworkDriverInterfaceSpecification)是Microsoft和3Com公司联合制定的网络驱动规范,并提供了大量的操作函数。它为上层的协议驱动提供服务,屏蔽了下层各种网卡的差别。NDIS向上支持多种网络协议,比如TCP/IP、NWLink、IPX/SPX、NETBEUI等,向下支持不同厂家生产的多种网卡。NDIS还支持多种工作模式,支持多处理器,提供一个完备的NDIS库。但库中所提供的各个函数都是工作在内核模式下的,用户不宜直接操作,这就需要寻找另外的接口。NDIS驱动程序的结构如图5.3所示。图5.2捕获数据包的结构图图5.3NDIS驱动程序结构(3)BPF过滤机制。

BPF(BerkeleyPacketFilter)全称为伯克利数据包过滤器,其过滤器模型和接口如图5.4所示。图5.4

BFP过滤机制

BPF有两个主要部件:Networktap和PacketFilter。Networktap从网络设备驱动程序中搜集数据拷贝并转发到监听程序。过滤器决定是否接受该数据包和复制数据包的哪些部分。BPF在内核设置了过滤器,可以预先对数据包进行过滤,并且只将用户需要的数据提交给用户进程。每个BPF都有一个buffer,如果过滤器判断接受某个包,BPF就将它复制到相应的buffer中暂存起来,等收集到足够的数据后再一起提交给用户进程,提高效率。它的缓存机制使用循环双缓存,若其中一个缓存满时则将两缓存调换。这种缓存机制对提高效率有很大作用。(4)WinPcap工作原理。

Winpcap是Windows平台下一个免费、公共的网络访问系统。是BPF模型和Libpcap函数库在Windows平台下网络数据包捕获和网络状态分析的一种体系结构,是由伯克利分组捕获库派生而来的分组捕获库,在Windows操作平台上来实现对底层包的截取过滤。

如图5.5所示,Winpcap的体系结构是由一个核心的包过滤驱动程序、一个底层的动态连接库Packet.dll和一个高层的独立于系统的库Wpcap.dll组成。它提供了以下的各项功能:①捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;

②在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;

③在网络上发送原始的数据包;

④收集网络通信过程中的统计信息。图5.5WinPcap结构图

Winpcap的主要功能在于独立于主机协议(如TCPIP)而发送和接收原始数据包。也就是说,Winpcap不能阻塞、过滤或控制其它应用程序数据包的收发,它仅仅只是监听共享网络上传送的数据包。

Winpcap提供给用户两个不同级别的编程接口:一个基于libpcap的wpcap.dll,另一个是较底层的packet.dll。对于一般的要与Unix平台上libpcap兼容的开发来说,使用wpcap.dll是当然的选择。首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(rawpacket),这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖(systemdependent)的,在Winpcap的解决方案里它被认为是一个设备驱动,称做NPF(NetgroupPacketFilter,网络数据包过滤器)。Winpcap开发小组针对Windows95,Windows98,WindowsME,WindowsNT4,Windows2000和WindowsXP提供了不同版本的驱动。这些驱动不仅提供了基本的特性(例如抓包和注入),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对

网络通信中的一个子集(例如,仅仅捕获特殊主机产生的ftp通信的数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。其次,抓包系统必须有用户级的程序接口,通过这些接口,用户程序可以利用内核驱动提供的高级特性。Winpcap提供了两个不同的库:packet.dll和wpcap.dll。前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了一组更强大的与libpcap一致的高层抓包函数库(captureprimitives)。这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。

Packet.dll直接映射了内核的调用,Wpcap.dll提供了更加友好、功能更加强大的函数调用。WinPcap的优势提供了一套标准的抓包接口,与Libpcap兼容,可使得原来许多Unix平台下的网络分析工具能够快速移植过来以便于开发各种网络分析工具,充分考虑了各种性能和效率的优化,包括对于NPF内核层次上的过滤器支持,支持内核态的统计模式,提供了发送数据包的能力等。

图中的网路分流器(NetworkTap),也叫做测试接入端口(TAP),是一个硬件设备,它直接插入到网络电缆和发送一份网络通信给其它设备。网络分流器通常用于网络入侵检测系统(IPS),网络探测器和分析器。(5)利用WinPcap抓包的设计步骤。具体步骤如下:

①打开网卡,并设为混杂模式。

②回调函数NetworkTap在得到监听命令后,从网络设备驱动程序处收集数据包把监听到的数据包负责传送给过滤程序。

③当Packetfilter监听到有数据包到达时,NDIS中间驱动程序首先调用分组驱动程序,该程序将数据传递给每一个参与进程的分组过滤程序。④由Packetfilter过滤程序决定哪些数据包应该丢弃,哪些数据包应该接收,是否需要将接收到的数据拷贝到相应的应用程序。

⑤通过分组过滤器后,将数据未过滤掉的数据包提交给核心缓冲区。然后等待系统缓冲区满后,再将数据包拷贝到用户缓冲区。监听程序可以直接从用户缓冲区中读取捕获的数据包。(6)数据捕获模块的设计与实现。

这里就按照上面WinPcap抓包的步骤进行数据包捕获模块的设计。

根据用Windows分组捕获库WinPcap提供的功能,首先要初始化两个结构体,一个是适配器的结构体LpAdapter,一个是存放接收到的数据包的结构体RecvPacket。

数据包捕获实现的步骤:

①获得适配器列表。

②获得系统中网络适配器的名字。

③从适配器列表中选择一个默认的0号适配器。

④将所选择的适配器LpAdapter设置为混杂模式。⑤设置BPF内核中包过滤的过滤器的参数。利用这个函数以完成对于原始数据包的初始的过滤处理,如根据其中端口号、IP地址等。

⑥设置缓冲池为512KB。

⑦分配一个数据包对象,并连接已分配的缓冲。

⑧捕获多个数据包。从网卡LpAdapter接收数据包,并将数据包放入LpPacket所指向的数据包结构体中,若接收成功,返回TRUE,否则返回FALSE。

⑨通过触发回调函数,把捕获符合过滤器规则的数据包转发给网络协议分析模块进行分析处理。

⑩结束接收数据包,释放数据包对象。

(11)关闭网卡设备,将网卡恢复到正常接收状态。

3)协议分析模块设计

若要进行协议分析就必须事先知道规则,规则与协议相对应,一定的协议类型的数据包需要特定的规则进行处理。规则包括规则头和规则体两部分。图5.6

Snort规则构成(1)规则头和规则体。

规则头定义了规则触发时所要采取的动作(alert、pass和log),该规则所对应的协议(只有是该协议类型的数据包才需要用该规则进行处理),以及包括IP地址、网段、端口在内的源和目的信息。图5.6描述了规则头的组成。

规则行为包括pass、log和alert三种。

pass:如果符合该条规则记录,则忽略对该数据包的处理。log:如果符合该条规则记录,则记录到指定的日志。

alert:如果符合该条规则记录,则记录该数据包的详细信息到告警数据库中。如规则记录

alerttcpany21_>any!21

其中,表示对所有源自21端口、目的端口不是21的TCP报文段记录到告警数据库中。规则体是可选的。规则体的作用是在规则头信息的基础上作进一步的分析,在此基础上再确认复杂的攻击。规则体由若干个被分号隔开的片断组成,每个片断定义了一个选项和相应的选项值。表5.1对当前Snort中所用到的规则体选项进行说明。表5.1

Snort的关键字一条完整的规则语言设计如下:

alerttcpanyany_>/24any

(content:″proxyconnection″;offset:0;depth:500;nocase;msg:″proxyuse″;)其描述的信息是:记录目的地址为202.204.111网段,TCP报文中的数据从第1字节到500字节中含proxyconnection的内容的TCP报文以proxyuse的消息类型到告警数库中。相同类型的规则记录可以组成一个规则文件,例如对于DoS攻击的规则类型,这里就可以组成一个DoS规则文件。这样,当有新的攻击类型出现时,可以通过实验找出其特征码,从而在一个新的规则文件中建立多个规则记录。目前已有的规则文件如表5.2所示。表5.2系统所完成入侵事件特征码的规则文件描述(2)规则树逻辑结构。

在处理规则文件的时候,本系统参考了Snort2.0采用三维链表的方式来存储它们以便和后面将要到来的数据包进行匹配。链表是一个存储了一系列项目的算法。这里,把规则和它们的选项存储在链表中,并且在匹配规则头的时候对链表进行查找。然后,在规则头匹配的情况下,查找模式匹配或利用一个检测插件来匹配。其形成的规则树如图5.7所示。图5.7规则树链表逻辑结构图数据结构RuleTreeNodes(RTN)和OptTreeNodes(OTN)存储规则数据,形成二维链表结构,其数据结构定义见附录2。

其中,RTNS组成横向链表,每个RTN节点下又由多个OTNs组成纵向链表,进而构成1棵规则树,这样每1个OTN节点就对应1条规则。如果在1个规则文件中定义了N条检测N攻击活动的规则,而且它们具有相同的源/目的IP(Src/DesIP)和端口号(Src/DesPort),为了加快检测速度,这N条检测规则就共用1个链表头(chainheader),其中记录了源/目的IP和端口号,而每条规则的检测特征将保存到不同的链表选项(chainoption)结构中。这样在进行规则检测时只检测1次RTN。(3)规则树的实现。读入规则文件形成规则树的程序流程图如图5.8所示。图5.8规则树实现流程图

4)数据检测模块设计

(1)基于协议分析的检测模型。

基于协议分析的模式匹配模型如图5.9所示。与其它方法相比,基于协议分析的模式匹配方法可以检测到更广泛的攻击,包括已知的和未知的。协议分析可以有效地应对欺骗性攻击。因而它提供了一种先进的网络入侵检测方案,下面详细说明该方法在入侵检测系统中的应用。图5.9基于协议分析的模式匹配模型使用协议分析的入侵检测引擎对于与DNS、HTTP、FTP、SMTP等协议相关的已知和未知的攻击非常有效。根据网络协议的高度规则性,可以提前知道各种不同协议的工作方式,这样就可以近似地分析这些协议的内容来检查是否有可疑或不正常的行为存在。对于每个具体协议来说,分析时不仅要依赖协议的标准,还要依赖实际中发生的事件。单纯进行简单的模式匹配必须是针对某些特定的已知攻击。由于还有很多的攻击程序和脚本,许多这些程序的变体,因此就无法制订一个规则来包括所有的攻击特征。其次就是时间问题,因为规则是在知道攻击发生后才制订出来的,存在时间上的滞后性。在攻击发生前,规则是无法识别它的。而协议分析可以查找任何违背标准或预期行为的行为,提高了检测引擎检测已知和未知攻击方法的能力。

对于各种不同分类的攻击都可以使用协议分析方法识别,可以通过确认协议数据来捕获攻击。在最初的分类中,可以制订一种可以识别可能的攻击特征的规则。然后进一步分类,不需要决定攻击的目的,而只需要确定是否有不正常的行为发生以及进行进一步的研究。只要着重对已知协议进行仔细分析,而不需要研究攻击特征。(2)利用协议分析方法识别欺骗。

①简单路径欺骗。

简单路径欺骗的基本原理是通过改变路径,使其具有不同的面貌,但实质是相同的。这种攻击技术一般用于在基于HTTP攻击中隐藏URL。假设需要对含有scripts/iisadmin的URL发出报警,攻击者可以使用反斜杠(\)代替斜杠()。大多数Web服务器对于使用反斜扫还是斜杠来划分目录不敏感,所以Web服务器认为含有scripts/iisadmin和含有scripts\iisadmin的URL是一回事,所以对scripts\iisadmin不加理睬。不过,模式匹配只是进行简单的字符匹配工作,但协议分析方法就可以识别这种变体入侵分析方法,经过一系列的协议分析,最后从URL中读出路径,然后对其进行分析。转换反斜杠,使URL标准化,然后找出可疑的目录内容scripts/iisadmin。②HEX编码欺骗。

HEX编码可以代替URL中的字符。例如带有%20的URL,就是HEX编码,这相当于一个空格,因为URL中无法使用真正的空格,所以当目录或文件名中含有空格时要用%20代替。所有文字和数字都可以用相等的HEX编码写入URL中。虽然Web服务器识别HEX编码,但使用简单模式匹配的入侵检测引擎却不能识别。但可以利用协议分析的方法来识别这种攻击。还以scripts/iisadmin为例,攻击者要绕过IDS,他使用HEX编码代替字符,%73与字符s等同。因此,该URL可写成为script%73/iisadmin,这样就欺骗了IDS。如果用协议分析的方法,对HEX编码进行解析,这样IDS会先将%73转换为s,然后再进行URL分析找出潜在的攻击。③二次HEX编码欺骗。

二次HEX编码就是进行二次HEX解析。例如URL中含有scripts/..%255c../winnt.%25,在HEX编码中相当于%的编码。所以,当第一次解码时,URL被解析为scripts/..%5c../winnt.%5c,是HEX码中相当于反斜杠的编码;当二次解码以后,URL将包含scripts/…./winnt,这就是一个攻击特征。使用协议分析可以对整个URL路径进行两次HEX解码来识别这种欺骗。④Unicode(UTF-8)编码欺骗。

这是另一种代替字符的方法。例如%c0%a就是一个Unicode序列。与ASCII字符相关的HEX编码一直到%7f,Unicode编码的值要高于它。例如,要解析URL为scripts/../%c0%af../winnt的路径,%cO%a在Unicode中相当于斜杠,解析后就是scripts/../../winnt。利用协议分析的方法,可以对整个URL路径进行Unicode解码来识别这种欺骗。识别整个URL的过程如图5.10所示。图5.10识别URL的过程(3)匹配算法。

在执行content选项的模式匹配时,本系统采用了B-M(BoyerMoore)模式匹配算法来对该数据包进行检测,如果在数据包负载中存在与选项参数字符串精确匹配的数据内容,则该检测成功。

假设将长度为M的模式P与长度为N的文本T进行匹配,B-M匹配算法的基本思想描述如下:

①匹配由右向左进行。

②若匹配失败,发生Pj≠Ti,且Ti不出现在模式P中,则将模式右移,直到P位于匹配失败位Ti的右边第1位(即Ti+1),若在P中,许多地方出现匹配,则应该选择J=MAX{K|Pk=Ti}。图5.11B-M匹配算法匹配过程(1)③若模式P后面K位和文本T中一致的部分,有一部分在P中其它部分出现,则可将P向右移动,直接使这部分对齐,且要求这一致部分尽可能的大。

例如:P=“ing”,T=“thisisastring”,匹配从“↓”处开始,匹配过程示意图如图5.11~5.16所示。图5.12B-M匹配算匹配过程(2)图5.13B-M匹配算法匹配过程(3)图5.14B-M匹配算法匹配过程(4)图5.15B-M匹配算法匹配过程(5)图5.16B-M匹配算法匹配过程(6)首先比较的字符是模式串中最右边的字符“g”。

在图5.12文本中正在比较的是与“g”对应的“i”,它在模式P中出现过,其移动值是2,所以将模式直接右移2位,进行下一次比较。如图5.12和图5.13所示。

在图5.13文本中正在比较的依然是与“g”对应的“i”,它在模式P中出现过,其移动值是2,所以将模式直接右移2位,进行下一次比较。如图5.13所示。

在文本中正在比较的是与“g”对应的“a”,它在模式P中也没有出现过,因此根据算法第3步,模式向右移3位。如图5.14和图5.15所示。在文本中正在比较的是与“g”对应的“r”,它在模式P中也没有出现过,根据算法第3步,模式向右移3位。如图5.15和图5.16所示。

最后在文本的末端发现一个成功的匹配,如图5.16所示。在最坏情况下B-M匹配算法的时间复杂度为O(M*N)。

5)系统响应模块设计

(1)入侵响应类型。

入侵响应方式的分类是任何入侵响应系统的基础。并非每一个针对入侵行为的响应措施都是恰当正确的,因此对入侵响应的方式进行恰当分类,使具体的攻击对应适当的响应措施十分重要。以前的研究大多针对系统的安全漏洞和攻击行为的分类,而对入侵响应的分类却很少。从响应的方式上分,入侵检测系统响应可以分为主动响应(ActiveResponses)和被动响应(PassiveResponse)两种类型。①主动响应。

在主动响应中,系统自动地或以用户设置的方式来阻断攻击过程或以其它方式影响攻击过程,可以选择的措施归为下列几类:

·针对入侵者采取的措施:这是最具侵略性的形式,即追踪入侵者实施攻击的发起地,并采取措施以禁用入侵者的机器或网络连接。对入侵者采取断开网络会话,阻挡入侵IP地址的数据包是较为常用的形式。

·修正系统:修正系统以弥补引起攻击的缺陷,这种保护自身安全而装备的“自疗”系统类似于生物体的免疫系统,可以辨认出问题所在并将引起问题的部分隔离起来。产生合适的响应对于鉴定问题所在也是很有帮助的。在一些入侵检测系统中,这类响应可以改变分析引擎的一些参数设置和操作方式,例如提高敏感级别等。也可以通过添加规则,如提高某类攻击的可疑级别和扩大监控范围,来改变专家系统,从而达到在更好的粒度层次上收集信息的目的。这种策略类似于在实时过程控制系统中利用当前系统进程的结果来调整和优化以后的进程。

·收集更详细的信息:当被保护的系统关系重大而且当事人要求法律赔偿时,这种措施就很有价值。有时,这种记录日志的响应与专用的服务器结合起来使用,作为可以将入侵者转移的环境来安置。专用服务器在这里是指诱骗系统,它有很多名称,最常见的是蜜罐(HoneyPots)。这些服务器可以模拟关键系统的文件系统和其它系统特征,引诱攻击者进入,记录下攻击者的行为,从而获得关于攻击者的详细信息,作为进一步采取法律措施的证据。用这种方法收集的信息对网络安全威胁趋势分析也是很有价值的,而对于必须在敌对威胁环境中运行的系统或面临大量攻击的系统尤其有用,如政府的Web服务器或高收入的电子商务站点。②被动响应。

被动响应是指为用户提供信息,由用户决定接下来应该采取什么措施。被动响应根据危险程度高低的次序提交给用户,这里的危险程度是警报机制与问题汇报最主要的区别。被动响应主要有两类:

·警报和通知:警报的响应方式有多种,用户可以自己定制适合自己系统运行过程的警报。最常见的警报和通知是直接在监控台的屏幕上显示的警告信息或者通知窗口,一般出现在入侵检测系统的控制台上,也可以出现在用户安装入侵检测系统时所定义的部件上,还可以通过电子邮件或者移动电话等给系统管理员和安全人员发送警报和警告信息。

·SNMP消息或陷阱:入侵检测系统可以被设计成与网络管理工具一起协同运作。这种协作系统可以更好地利用网络管理的基础设备,在网络管理控制台上发送和显示警报或警告信息,一些产品可以利用简单网络管理协议(SNMP)的消息或陷阱作为一种报警方式。这种结合可以带来几个好处,如可以利用普通通信信道的功能,提供适应当时网络环境的主动响应外,SNMP陷阱还可让用户将响应检测到的问题的处理工作转移到接受陷阱的系统上。(2)响应策略。

前面讨论了响应的主要类型。这里,采用主动响应和被动响应相结合的方式来对入侵行为做出响应。主动响应主要有断开TCP连接和发送ICMP报文。

①断开TCP连接。

攻击者和一个激活的端口进行连接后,如果它向该端口发送一个数据包,其中含有攻击字符串或可利用该端口的程序,那么对一个有脆弱性的系统来说,这是十分危险的。对于TCP连接,可以向源地址或目的地址或者双方都发送TCP断开连接报文。在TCP报文的头部中,控制字段的标示如图5.17所示。

在图5.17中的RST位为1时,接受到此报文的主机会断开TCP连接,反应模块在处理TCP入侵时,就会根据规则向发送方、接受方或双方发送RST报文,断开连接,剪断入侵。②发送ICMP报文。

对于一些非TCP连接的入侵,也可以选择发送ICMP报文。如图5.18所示,ICMP类型为3时目的站不可达报文,可以选择发送这种类型的报文。

图5.18中,ICMP类型域为3,代码域可以为0~12,响应模块可以选择发送网络不可达报文(代码为0)、主机不可达报文(代码为1)、端口不可达报文(代码为3)或以上三种报文的组合。图5.17TCP报文控制段图5.18ICMP目的地不可达报文格式③日志管理。

日志管理的作用是保存每次捕获的数据包到指定的文件,当以后需要使用时,可以从日志文件中提取出相应的数据,同时也可以保存入侵的证据。此系统中日志记录分为两类:攻击日志记录和协议操作日志记录。攻击日志记录在入侵事件发生之后,把攻击行为记录下来,提供给网络入侵管理者;协议操作日志记录是一套可查询的日志记录,用于以后对入侵行为的审计和追踪。

2.基于Snort系统的各模块的设计

Snort系统的总体逻辑设计如图5.19所示。图5.19Snort系统的总体逻辑设计

Snort系统是一个非常优秀的、开放源代码的入侵检测系统。从检测机制上看,它不仅具有基于规则的误用检测方法,而且还有基于异常的检测方法(第三方添加)。从体系结构上看,它充分考虑到扩展的需求,大量使用了插件机制。从功能模块上看,各个模块功能明晰,相对独立,设计合理。从编码上看,它具有很好的编码风格和详细的注释,易于理解。

无论从入侵检测实现技术还是编程技术来看,Snort都是一个非常好的学习对象,所以这里就以Snort为例来介绍入侵检测各系统的设计与架构。

Snort系统主要由数据包捕获模块、网络协议分析模块、规则解析模块、入侵事件检测模块、存储模块等组成。下面就按照图5.19的总体框架来进行Snort系统主要模块的设计。

1)数据包捕获模块

Snort系统也是基于Libpcap的数据包处理器,Libpcap(PacketCaptureLibrary)和BPF捕获机制见5.1.1节中数据包捕获模块部分。下面直接介绍网络数据包捕获模块的实现。

Snort系统的网络数据包捕获模块是由snort.c(snort.h)来实现的。通过在终端命令行下输入snort-c/etc/snort/snort.confieth0-D命令之后,Snort系统根据配置文件snort.conf,作为后台程序运行,从网卡接口eth0上捕获数据包。网络数据包捕获模块执行的过程如下:

①解析命令行,处理用户输入的各个参数,如上述命令行中的c/etc/snort/snort。conf,ieth0,D等三个参数,并根据这些参数的设置来决定Snort系统的运行方式。该步骤是由ParseCmdLine()来实现的。

②设置并打开Libpcap的接口,获得处理数据包的网卡句柄等,并根据此句柄从网卡上读取数据包。该步骤是由OpenPcap()来实现的。

③设置数据包处理器。这样,从网卡上读取的数据包就可以交给由该函数设置的

处理器进行处理,此步骤用来调用协议分析模块进行各种协议的分析。该步骤是由SetPktProcessor()来实现的。④从网卡上循环读取数据包。一旦网卡上有新的数据包达到,此时,内核首先将数据包从链路层拷贝BPF的缓冲区,并结合BPF设置的过滤器对每个数据包进行过滤,之后内核再把数据包交给协议栈进行处理。由于BPF虚拟机是基于寄存器的,所以效率很高,此时,用户可以通过Libpcap库访问BPF的缓冲区。该步骤是由pcap_loop()来实现的。

⑤关闭打开的网卡句柄。该步骤是由pcap_close()来实现的。

②到⑤都是处理捕获数据包的细节。

2)网络协议分析模块的实现

在实现了网络数据包捕获模块之后,获得了针对单个数据包的处理函数的指针值grinder,本章将针对以太网各个协议进行分析。在此假设条件下,grinder此时指向处理函数DecodeEthPkt,可以通过该函数获得对数据包的进一步分析。

(1)数据包的封装与拆封。图5.20是TCP/IP协议族分层结构示意图。当需要发送数据时,就要进行封装。封装的过程就是把用户数据用协议来进行封装,首先由应用层协议进行封装。如HTTP协议是基于TCP协议的,它就被TCP协议进行封装,HTTP包作为TCP数据段的数据部分。而TCP协议是基于IP协议的,所以TCP段就作为IP协议的数据部分,加上IP协议头,就构成了IP数据包。而IP数据包是基于以太网的(假设是以太网环境),所以这个时候就被封装成了以太网帧,就可以通过物理介质发送数据了。当接收方收到网络数据时,就要进行数据包拆封,拆封的过程与封装的过程刚好相反。某一层只能识别发送方跟它同一层次封装的“信封”,而对于被封装在“信封”内部的数据仅仅是拆封后将其提交给上层,本层不作任何处理。如物理层从线路上接收电信号,进行跟发送方物理层相反的处理过程,如解码等,上交给数据链路层,去掉以太网头和以太网尾,再把剩下的部分传递给网络层,去掉IP头,然后把剩下的传递给传输层,例如TCP协议,再去掉TCP首部,此时只剩下发送方发出的应用层部分信息,再去除应用层协议头部如HTTP协议头,得到用户真正想要发出的用户数据部分。接受方用户就可以通过相关的应用软件操作该数据,如用浏览器来浏览HTML页面等。图5.20

TCP/IP协议族分层结构示意图(2)网络协议分析模块的实现。

网络协议分析模块是由decode.c(decode.h)来实现的。

网络协议分析模块执行的过程如下:

①以太网协议分析。该步骤由函数DecodeEthPkt()来实现。

②根据以太网帧的类型字段,确认其上层协议的类型,从而对数据包作进一步的分析。如果类型字段值为0x0806或0x0835,则进行ARP协议或RARP协议解析,其处理函数为DecodeARP();如果类型字段值为0x0800,则进行IP协议解析,其处理函数为DecodeIP()。③如果确认是IP报文,则还需根据该报文的协议类型,对其作进一步的分析。如果协议类型字段值为1,则进行ICMP协议分析,其处理函数为DecodeICMP();如果协议类型字段值为6,则进行TCP协议分析,其处理函数为DecodeTCP();如果协议类型字段值为17,则进行UDP协议分析,其处理函数为DecodeUDP()。

具体流程如图5.21所示。图5.21协议分析过程的基本流程为了能够记录捕获到的数据包在各个协议层的头部信息,继而利用入侵事件检测模块,结合攻击特征库里的各种协议规则,对相应协议类型的数据包头部信息进行规则匹配,一旦匹配成功,即说明有告警事件的发生。因此,在Snort系统中设计有一个Packet数据结构,该结构用来存放从链路层到传输层各个协议的首部信息,并在协议解析的各个模块中进行赋值。

在分析了以太网帧、ARP和RARP报文、IP报文、ICMP报文、TCP报文段、UDP报文段之后,把以上各种协议的分析结构存到Packet数据结构中。因此,这里只要对该数据结构中的值与攻击特征库中对应协议的特征码进行模式匹配,就可以判断是否有告警事件的发生。

3)规则解析模块的实现

(1)Snort入侵规则语言的设计。

Snort的规则是由规则头和规则体组成,对于规则头和规则体的介绍见5.2.1节中的“3)协议分析模块设计”。

由于Snort系统的规则库文件更新很快,因此这里需要定时地去Snort官方网站上下载其新增加的规则库文件。

规则库可以从网站http:///pub_bin/downloads.cgi上根据当前安装的版本下载对应的规则库文件。如果下载的规则库文件中有新增的文件,则需要在Snort配置文件中添加一行include$RULE_PATH/*.rules($RULE_PATH表示规则文件所在的路径,*.rules表示规则文件的名称),重新启动Snort即可。(2)规则解析模块的实现。

规则解析模块是在函数ParseCmdLine()中调用的。一旦用户在启动Snort系统时指定参数c,即启动规则解析模块,Snort系统会把所有在snort.conf配置文件中指定的所有规则记录加载到内存当中。此时,按照规则头中指定的规则行为,Snort系统分别建立三个链表:alert链表、pass链表和log链表。这是规则解析模块所需要完成的工作。

规则解析模块是由rule.c(rule.h)来实现的。该模块的入口函数为ParseRulesFile()。①规则解析模块执行的过程。

步骤一:打开规则文件。

Thefp=fopen(file,″r″);

步骤二:循环读取规则文件中的规则记录,

while((fgets(buf,STD_BUF,thefp))!=NULL);

步骤三:解析规则记录。

ParseRule(buf);步骤四:关闭规则文件。

fclose(Thefp);

②模块公共数据结构和变量声明介绍见附录4。

③模块主要操作步骤的函数说明:

VoidParseRulesFile(char*file)

输入参数:file——指定的规则文件名称。

输出参数:AlertList、LogList、PassList这三个链表,分别包含Alert行为、Log行为、Pass行为的规则记录。操作结果:把规则记录以链表的方式加载到内存中,以便根据其内容与数据包中的内容进行匹配。即把Packet结构体变量与链表中的规则记录进行匹配,如果匹配成功,则可以检测出有告警事件的发生。④解析规则记录函数ParseRule()的定义及实现voidParseRule(char*rule):

输入参数:参数rule表示指向规则记录的指针。

输出参数:current结点,并根据其规则头的行为,加载到AlertList、LogList或PassList链表中。

函数说明:把规则记录加载到相应规则行为的链表中。该函数的执行过程如下:

步骤1:解析规则头的各选项和整个规则体部分,并把选项内容存到toks数组中。该步骤是由函数mSplit()来实现的。

toks=mSplit(rule,″″,10,&num_toks,0);

由于规则头和规则体之间以及规则头各部分之间是通过空格隔开的,这样通过mSplit对整条规则进行解析,把解析后的规则选项存到toks数组中。该函数表示对字符串rule按照空格进行分解,分解后的字符串个数不超过10个,其个数存放在num_toks变量中,并把解析后的字符串存放在toks数组中。例如:规则

alerttcpanyany_>/24any

(content:″proxyconnection″;offset:0;depth:500;nocase;msg:″proxyuse″;),通过函数mSplit解析之后,num_toks的值为8,toks的值为alert,tcp,any,any,/24,any和(content:″proxyconnection″;offset:0;depth:500;nocase;msg:″proxyuse″;),这样,这里就可以通过对字符串数组toks进行操作即可。步骤2:根据不同的规则行为,获得规则行为所对应的值。

rule_type=RuleType(toks[0]);

如果规则行为toks[0]为alert,则其值等于5;如果为pass,则其值等于4;如果为log,则其值等于3。

步骤3:如果rule_type=5,则把current结点加载到AlertList链表中;如果rule_type=4,则把current结点加载到LogList链表中;如果rule_type=3,则把current结点加载到PassList链表中。

CreateRuleNode(rule_type);步骤4:设置current结点中规则头的值,包括协议类型、源IP地址、子网掩码、源端口、方向操作符、目的IP地址、子网掩码、目的端口等信息。

current_>type=rule_type;

current_>proto=WhichProto(toks[1]);

……

步骤5:设置current结点中规则体的值。

ParseRuleOptions();

4)入侵事件检测模块的实现

入侵事件检测模块是在TCP、UDP、ICMP协议分析中通过调用规则解析模块的ApplyRules函数来进行入侵事件的检测。其定义如下:

voidApplyRules(Packet*p);

输入参数:参数p存储了对当前数据包进行解析后的结果信息。

输出参数:把参数p中的内容输出到告警数据库中。其执行流程如下:

if(!pv.rules_order_flag)

if(!EvalPacket(&AlertList,5,p))

if(!EvalPacket(&PassList,4,p))

EvalPacket(&LogList,3,p);

else

if(!EvalPacket(&PassList,4,p))

if(!EvalPacket(&AlertList,5,p))

EvalPacket(&LogList,3,p);函数说明:缺省模块下,入侵事件的检测总是按照alert、pass、log这样的顺序,因此,一旦数据包中的内容与AlertList中的某个结点匹配成功,则会调用存储模块中的函数insert_data_into_database(p),把该数据包中的相关内容输出到数据库中。

(1)如果匹配不成功,则继续与PassList中的结点继续比较。

(2)如果匹配成功,则匹配结束。

(3)如果还匹配还不成功,则继续与LogList中的结点匹配,如果匹配成功,则记录相关内容到指定的日志文件当中。

5)存储模块的实现

(1)告警数据库的设计。

告警数据库主要分为两个部分来实现,一个部分是为了进行安全管理而进行的角色控制;另一个部分是记录发生告警事件的详细信息,包括协议类型、协议头的基本信息、部分数据的信息等,按格式存储到数据库相应的表中。这些字段可以分为三大类:攻击的行为描述、关联记录、检测规则。

行为描述:指对攻击特征的文字描述信息。包括特征的名称、对应漏洞、发布时间、影响系统、补丁、解决方案。关联记录:指本条攻击特征在其它知名攻击库和漏洞库中的相关信息,包括了CVE编号、bugtraq编号、arachNIDS编号等。

检测规则:指IDS检测这种攻击所使用的匹配规则。主要有两种,一种是攻击包的格式信息匹配,包括攻击使用的协议、包的长度、IP包头每个域的值、TCP/UDP/ICMP等协议头的每个域的值;另一种是字节匹配,是攻击包中具有代表性的一些字节。综合使用这两种规则,可以有效地描述特定攻击。例如近期爆发的MyDoom蠕虫会对网络进行随机扫描,这种特定的攻击行为就可以描述为:目的端口3127,有效负载的第21个字节是Ox85h。(2)Snort系统连接Oracle数据库的方法。

为了使Snort系统能够支持Oracle数据库,这里需要在编译Snort系统时指定其支持的数据库选项,其值为

./configurewithoracle=/opt/oracle/product/9.2.0

等号右边为Oracle系统的安装目录。(3)存储模块的实现。

当入侵事件检测模块检测到告警事件时,则把该数据包存储到数据库当中。该模块由函数Insert_data_into_database来实现,其函数定义如下:

voidInsert_data_into_database(Packet*p)

输入参数:参数p存储了对当前数据包进行解析后的结果信息。

模块执行的操作步骤:根据数据包中协议类型字段的值,分别做不同的操作。如果类型字段值为1,则将ICMP报文插入到数据库中;如果类型字段值为6,则将TCP报文段的信息插入到数据库中;如果类型字段值为17,则将UDP报文段的信息插入到数据库中。

if(p_>type==1)Insert_icmp_database(p);

elseif(p_>type==6)Insert_tcp_database(p);

elseif(p_>type==17)Insert_udp_database(p);5.2.2各功能模块之间的通信

入侵检测系统各个模块之间进行实时、有效的通信,是入侵检测系统正常、有效工作的基础。各个模块之间只有进行实时、有效的通信,才能实现各个模块协同工作,使整个系统安全有效地运转。

由于很多系统模块的设计是基于CIDF模型的,例如上节介绍的Snort系统基本上也是基于CIDF模型的,基本模块与CIDF模块相对应,所以下面就根据CIDF的组件通信来说明模块间的通信。

1.CIDF的组件通信分析

CIDF通过提供匹配服务(Matchrtmking)来实现其内部组件的通信。匹配服务(或者称为匹配器)提供了一种标准的统一机制来实现CIDF组件之间的通信,使得任一组件可为其它组件所识别,而同时又可以随时定位到和其通信的对应组件。这实际上就是建立了一个组件与组件之间的连接。

1)匹配器的功能

匹配器的功能是根据一个给定的组件请求,提供查找服务,将通信的双方匹配起来。使用匹配器,客户组件可以用特征查找或组件身份查找来找到自己需访问的组件,从而实现组件之间的通信。它需要提供匹配服务,并实现可扩展性、易管理性、安全性和持久性。

2)匹配器的系统结构

匹配器结构的一个核心部分是匹配代理程序(matchmakingbroker),由它提供CIDF组件的查找服务。组件可看做是代理程序的客户端,通常情况下,代理程序和一个组件客户端是一对一的映射关系,并且只是在运行时和客户端(组件)链接。不过,匹配器结构也同样允许代理程序和它所服务的客户端(组件)分离,成为一个分离的进程,从而使得单个代理程序可对应多个组件客户端。匹配器的其它组件包括:一个验证和授权模块、一个通信模块(当代理程序口对应单个组件客户端时,此模块的实现为空)、一个存放最近查搜信息的缓存。

3)本地代理

匹配器结构支持两种情况的配置,第一种是客户端与代理程序在同一个主机上(即具有本地代理程序的匹配器);第二种情况是客户端与代理程序在不同主机上(即具有远程代理程序的匹配器)。其中图5.22是具有一个本地匹配代理程序的组件客户端。由匹配器的API(一组函数集)发出查找请求来激活通信模块(此时为空),然后调用代理程序,由代理程序通过Ldap协议(简单目录访问协议)在建立好的CIDF组件信息目录中查找相应组件的信息。图5.22具有本地代理程序的匹配器客户端

4)远程代理

图5.23描述了当客户端和代理程序在不同主机上的情况,这里查找请求通过验证/授权模块的验证后,激活通信模块,由通信模块和代理程序进行通信,从而把查找请求发送给代理程序。再由代理程序通过Ldap协议在建立好的CIDF组件信息目录中查找相应组件的信息,和图5.22的第一种情况的区别就是使用了通信模块。图5.23代理程序在远端主机的匹配代理

2.基于CIDF的组件通信算法描述

在对CIDF的组件通信进行分析后,对于其中几个具体的模块,将给出其在具体实现中的算法描述,见附录5。

CIDF是构建可协作入侵检测系统的基本框架。它使用匹配服务来完成组件和组件之间的关联,并建立了一个组件信息的目录结构,使得查找组件信息,实现组件之间的通信更为方便。5.3入侵检测系统与其它网络安全产品的协同

5.3.1入侵检测系统与防火墙的联动

1.联动的必要性

防火墙不识别网络流量,只要是经过合法通道的网络攻击,防火墙就无能为力。例如很多来自于ActiveX和JavaAPPlct的恶意代码,通过合法的Web访问通道,对系统形成威胁。虽然现在的开发商对防火墙进行了许多功能扩展,有些具备了基本初步的入侵检测功能,但防火墙作为网关,极易成为网络的瓶颈,并不宜做太多的扩展。同样,入侵检测系统也有自己的弱点,自身极易遭受拒绝服务攻击,其包捕捉引擎在突发的、海量的流量前能够迅速失效,而且还有一些攻击可绕过它的检测。同时,入侵检测系统对攻击的抵抗控制力也很弱,对攻击源一般只有两种处理方式:一种是发送RST包复位连接,另一种是发送回应包“HostUnraehcbale”欺骗攻击源。这两种方式都不可避免地增加了网络的流量,甚至拥塞网络。综上所述,防火墙和入侵检测系统的功能特点和局限性决定了它们彼此非常需要对方,且不可能相互取代,原因在于防火墙侧重于访问控制,入侵检测系统则侧重于主动发现入侵信号。而且,它们本身所具有的强大功效仍没有得到充分的发挥。

例如,入侵检测系统检测到一种攻击行为,如不能及时有效地阻断或过滤,这种攻击行为仍将对网络应用造成损害,没有入侵检测系统,一些攻击会利用防火墙的合法通道进入网络。因此,防火墙和入侵检测系统之间十分适合建立紧密的联动关系,以将两者的能力充分发挥出来,相互弥补不足,互相提供保护。进一步地,从信息安全整体防御的角度出发,这种联动是十分必要的,极大地提高了网络安全体系的防护能力。

1)联动技术介绍

(1)OPSEC。1997年,Checkpoint提出建立联动联盟OPEEC,通过提供开放接口标准,以CheckPoint防火墙为核心,在多个安全产品之间构建一个主动的网络安全防护体系。OPSEC模型的基本构架呈模块化的层次结构,如图5.24所示。图5.24

OPSEC的模块化结构

OPSEC提供了API,这些OPSECAPI可以用来配置防火墙与OPSEC组件间的交互。OPSECSDK包括以下API:

CVP(ContentVectoringProtocol):执行内容放映和反病毒检查。

UFP(URLFilteringProtocol):控制对外部Web站点的访问。

SAMp(SuspiciousActiviytMonitoringProtocol):检测并阻断入侵企图。

LEA(LogExportAPI):提取并输出防火墙日志数据。

OMI(OpsECManagementInterafce):开发能够查询、修改和安装防火墙安全策略的Cleint。

ELA(EvnetLoggingAPI):使得别的应用程序能够将日志事件记录到防火墙管理系统。(2)TOPSEC。

2000年,国内防火墙厂商天融信提出了建立国家自有知识产权的安全体系开放平台TOPSEC。

TOPSEC提供的接口协议主要有入侵检测与阻断协议(IntursinoDetectionBlockingProtocol,BP)、信息检查与过滤协议(InofmrationCheckScreenProtocol,ICSP)、鉴别服务接口(AuthenticationSevriceInterafce,ASI)、信任服务接口(TurstSevriceInterafce,TSI),日志输出协议(LogExportingProtocol,LEP)、加密网关协议(CryptoGatewyaProtocol,CGP)。入侵检测与阻断协议(Bp)用来实现IDS与防火墙的有机联动,以实现积极的入侵检测、阻断与防御功能。IDBP协议采用C/S结构,客户端(防火墙)启动后和服务器端建立连接、两端握手协商加密方法和会话密钥,此时为易于实现使用固有的密钥加密通信,其后的通信都是使用会话密钥进行通信。每次检测到入侵,需要阻断某个访问,服务器端会发送阻断命令给所有连接上的客户端,客户端进行配置,以完成阻断保护的功能。

2)防火墙与入侵检测系统联动的关键技术

入侵检测系统和防火墙之间的联动包含以下三种方式:

(1)系统嵌入方式。

把入侵检测系统嵌入防火墙中,入侵检测系统的数据不再来源于网络的直接抓包,而是流经防火墙的数据流。所有通过的包既要接受防火墙的验证,还要判断是否有攻击,以达到真正的实时阻断。(2)端口映像方式。

防火墙将网络中指定的一部分流量镜像到入侵检测系统中,入侵检测系统再将处理后的结果通知防火墙,要求其相应地修改安全策略。这种方式适用于通信量不大但在内网和非军事区都有需求的情况。(3)专用响应方式。

当入侵检测系统发现网络中的数据存在攻击企图时,通过一个开放接口实现与防火墙的通信,双方按照固定的协议进行网络安全事件传输,更改防火墙安全策略,对攻击的源头进行封堵。

这里主要对三种联动处理方式进行讨论,主要是由于选择的技术都较为成熟,而且技术实现难度不大,这样的系统在实际开发过程中可以降低实现的复杂程度,可以缩短开发的时间,完成系统又不失其完整性和稳定性。

2.防火墙与入侵检测系统之间的通信

对于防火墙与入侵检测系统之间的通信,应考虑以下情况:

(1)实现异构操作平台之间的通信。

(2)传输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论