入侵检测IDS是通过对入侵行为的过程与特征的研究,使安全系统对入侵事件和入侵过程能做出实时响应来保证网络安全的方式。那么,我们能不能够基于Linux系统来实现入侵检测IDS的保护功能呢?
Linux下的实现
在对入侵检测IDS技术研究的基础上,我们在Linux系统下设计并实现了一个基于网络的入侵检测IDS系统。
1 系统的组成结构
该系统的组成结构如图1所示。数据采集模块负责从网络上收集原始的网络数据流,在经过一定的预处理后,这些数据被送到数据分析模块,由数据分析模块进行分析,以便判断是否有违反安全策略的入侵行为发生。并及时将分析结果送到告警模块,由告警模块向控制台产生告警信息。用户可以通过用户界面与控制台交互,通过控制台,一方面可以对各个模块进行配置,另一方面也可以接收告警信息。
图1 系统的组成结构
2 系统的功能描述
该系统实现了入侵检测IDS的主要功能,包括数据采集、数据预处理、入侵分析以及告警。具体来说,可以完成以下功能:
● 捕获符合指定条件的网络数据包。
● 进行IP重组,提供IP包数据。
● 重组TCP流,提供TCP流数据。
● 重组应用层数据流,提供HTTP数据流。
● 实现基于规则的入侵检测IDS方法。
● 向控制台提交分析结果。
● 接受控制台的配置和管理。
由于该系统功能的实现主要体现在数据采集模块和数据分析模块中,所以下面将对这两个模块加以详细说明。
3 数据采集模块
数据采集是入侵检测IDS的基础,入侵检测IDS的效率在很大程度上依赖于所采集信息的可靠性和正确性。在基于网络的入侵检测IDS系统中,数据采集模块需要监听所保护网络的某个网段或某几台主机的网络流量,经过预处理后得到网络、系统、用户以及应用活动的状态和行为信息。数据采集需要在网络中的若干关键点进行。
具体来说,数据采集模块需要监听网络数据包,进行IP重组,进行TCP/UDP协议分析,同时也要进行应用层协议数据流分析。采集到的数据要经过预处理才能提交给数据分析模块。由于不同的分析方法所需要的数据源是不同的,所以预处理也会有很大的不同。但是,一般来说,分析模块所分析的数据都是基于某个网络协议层的数据信息,或是直接采用这些数据的某些部分。因此在该系统的设计中,数据采集模块除了采集数据外,还要对这些信息进行协议分析。协议分析是指将网络上采集到的基于IP的数据进行处理,以便得到基于某种协议的数据。在本系统中主要是针对TCP/IP协议族的分析。
网络数据采集是利用以太网络的广播特性实现的,以太网数据传输通过广播实现,但是在系统正常工作时,应用程序只能接收到以本主机为目标主机的数据包,其他数据包将被丢弃。为了采集到流经本网段的所有数据,我们需要首先将网卡设置为混杂模式,使之可以接收目标MAC地址不是自己MAC地址的数据包,然后直接访问数据链路层,截获相关数据,由应用程序对数据进行过滤处理,这样就可以监听到流经网卡的所有数据。
在进行数据捕获时,我们采用的是libpcap,libpcap是一个与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库,用于访问数据链路层。该库提供的C函数接口可用于需要捕获经过网络接口数据包的系统开发上。这个库为不同的平台提供了一致的编程接口,在安装了libpcap的平台上,以libpcap为接口写的程序,可以自由地跨平台使用。
Libpcap在网上捕获到的是数据帧,我们还需要对数据帧进行协议分析,协议分析的处理过程为:首先根据预先定义的过滤规则从网络上获取所监听子网上的数据包,然后进行TCP/IP栈由下至上的处理过程,主要是IP重组和TCP/UDP层协议处理,最后进行应用层协议分析。
协议分析的工作在每个操作系统里都有,在这里,我们选择了libnids函数库。libnids是在libnet和libpcap的基础上开发的,它封装了开发网络入侵检测IDS系统的许多通用型函数。libnids提供的接口函数除了可以监视流经本地的所有网络通信、检查数据包外,还具有重组TCP数据段、处理IP分片包的功能。而且它同样具有很好的移植性。
【编辑推荐】