入侵检测系统分析及其在Linux下的实现(下)

日期: 2009-04-20 来源:TechTarget中国 英文

  2.3 数据采集模块

  数据采集是入侵检测的基础,入侵检测的效率在很大程度上依赖于所采集信息的可靠性和正确性。在基于网络的入侵检测系统中,数据采集模块需要监听所保护网络的某个网段或某几台主机的网络流量,经过预处理后得到网络、系统、用户以及应用活动的状态和行为信息。数据采集需要在网络中的若干关键点进行。

  具体来说,数据采集模块需要监听网络数据包,进行IP重组,进行TCP/UDP协议分析,同时也要进行应用层协议数据流分析。采集到的数据要经过预处理才能提交给数据分析模块。由于不同的分析方法所需要的数据源是不同的,所以预处理也会有很大的不同。但是,一般来说,分析模块所分析的数据都是基于某个网络协议层的数据信息,或是直接采用这些数据的某些部分。因此在该系统的设计中,数据采集模块除了采集数据外,还要对这些信息进行协议分析。协议分析是指将网络上采集到的基于IP的数据进行处理,以便得到基于某种协议的数据。在本系统中主要是针对TCP/IP协议族的分析。

  网络数据采集是利用以太网络的广播特性实现的,以太网数据传输通过广播实现,但是在系统正常工作时,应用程序只能接收到以本主机为目标主机的数据包,其他数据包将被丢弃。为了采集到流经本网段的所有数据,我们需要首先将网卡设置为混杂模式,使之可以接收目标MAC地址不是自己MAC地址的数据包,然后直接访问数据链路层,截获相关数据,由应用程序对数据进行过滤处理,这样就可以监听到流经网卡的所有数据。

  在进行数据捕获时,我们采用的是libpcap,libpcap是一个与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库,用于访问数据链路层。该库提供的C函数接口可用于需要捕获经过网络接口数据包的系统开发上。这个库为不同的平台提供了一致的编程接口,在安装了libpcap的平台上,以libpcap为接口写的程序,可以自由地跨平台使用。

  Libpcap在网上捕获到的是数据帧,我们还需要对数据帧进行协议分析,协议分析的处理过程为:首先根据预先定义的过滤规则从网络上获取所监听子网上的数据包,然后进行TCP/IP栈由下至上的处理过程,主要是IP重组和TCP/UDP层协议处理,最后进行应用层协议分析。

  协议分析的工作在每个操作系统里都有,在这里,我们选择了libnids函数库。libnids是在libnet和libpcap的基础上开发的,它封装了开发网络入侵检测系统的许多通用型函数。libnids提供的接口函数除了可以监视流经本地的所有网络通信、检查数据包外,还具有重组TCP 数据段、处理IP分片包的功能。而且它同样具有很好的移植性。

  数据分析是入侵检测系统的核心。各种分析方法各有利弊,但基于规则的检测方法因为事先将各种入侵方式表示为规则存放于规则库中,因此在规则库比较完备的基础上,可以有很好的检测效率,所以我们在该系统的实现中主要考虑了基于规则的检测方法。

  基于规则的检测方法是误用检测的一种。入侵检测系统需要从以往的攻击入侵活动中,归纳识别出对应的入侵模式,并将这些入侵模式存放于规则库中,然后将系统现有的活动与规则库中的规则进行模式匹配,从而决定是否有入侵行为发生。

  每一种基于规则的入侵检测方法都需要一个确定的入侵模式库,即规则库,其中存放着描述入侵方法和行为的规则。在我们的系统中,采用了SNORT 的入侵行为描述方法。SNORT是一个开放源代码的轻量级的基于网络的入侵检测系统。这种描述方法简单、易于实现,能够描述绝大多数的入侵行为。由于其简单,因此检测速度比较快。

  规则库中的每条规则在逻辑上分为两部分:规则头部和规则选项。规则头部包含规则的操作、协议、源IP地址和目标IP地址及其网络掩码和端口。规则选项包括报警信息及需要检测的模式信息。规则的一般格式为:

  <规则操作><协议><源主机IP><源端口><方向操作符><目标主机 IP><目标端口>(<规则选项1:值1>;<规则选项2:值2>;…;<规则选项n:值 n>;)

 在圆括号前的部分是规则头部,在圆括号中的部分是规则选项。规则选项部分中冒号前面的词组称为选项关键字。规则选项不是规则的必需部分,它只是用来定义收集特定数据包的特定特征。一条规则中不同部分必须同时满足才能执行,相当于“与”操作。而同一个规则库文件中的所有规则之间相当于一个“或”操作。

  以下是一个例子:alert tcp any any -> 192.168.1.0/24 111 (content:|00 01 86 a5|; msg: mountd access;)。该条规则描述了:任何使用TCP协议连接网络192.168.1.0/24中任何主机的111端口的数据包中,如果出现了二进制数据 00 01 86 a5,便发出警告信息mountd access。

  规则操作说明当发现适合条件的数据包时应该做些什么。有两种操作:alert和log。如果是 alert,则使用选定的告警方法产生警报,并记录这个数据包;如果是log,则只记录该数据包。

  协议指明当前使用的是何种协议。对于IP地址和端口,关键字“any”可以用来定义任何IP地址。在IP地址后指定网络掩码,如/24指定一个 C类网络,/16指定一个B类网络,/32指定一个特定主机。如192.168.1.0/24指定了从192.168.1.1 到 192.168.1.255的一个范围的IP地址。

  IP地址有一个“非”操作。这个操作符号用来匹配所列IP地址以外的所有IP地址。“非”操作使用符号“!”表示。例如任何由外部网络发起的连接可以表示为:alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111。

  端口号可以用几种方法指定:用“any”、数字、范围以及用“非”操作符。“any”指定任意端口。指定端口范围用“:”它可以指定一个范围内的所有端口。如:log udp any any -> 192.168.1.0/24 1:1024。该条规则记录任何从任意主机发起的到目标网络任何主机上的1~1024端口的UDP协议数据包。

  方向操作符“->”规定了规则应用的数据流方向。其左边的IP地址为数据流的起点,右边为终点。双向操作符为“<>”,它告诉系统应该关注任何方向的数据流。

  规则选项形成了检测系统的核心,一个规则的规则选项中可能有多个选项,不同选项之间使用“;”分隔开来,他们之间为“与”的关系。选项由关键字和参数组成,每个关键字和它的参数使用冒号“:”分隔。这些关键字主要包括:

  • msg:在警报和记录的数据中打印消息。
  • logto:将数据包记录到一个用户指定的文件中。
  • ttl:检测IP数据包的TTL域。
  • id:检测IP数据包的分段ID域是否等于特定的值。
  • nocase:设定搜索中使用与大小写无关的方式。
  • dsize:检测数据包的有效荷载是否等于特定的值。
  • content:在数据流中搜索特定的模式串。
  • offset:设定content中的起点。
  • depth:设定content中的终点。
  • flags:检测TCP数据包的标志是否等于特定的值。
  • seq:检测TCP的顺序号是否等于特定的值。
  • ack:检测TCP的应答域否等于特定的值。

  三、实例分析

  下面结合入侵检测的实例来介绍该系统是如何检测入侵的,这里以WEB攻击为例来进行介绍。WEB攻击是入侵的一大类,它是指利用CGI、WEB 服务器和浏览器等存在的安全漏洞来损害系统安全或导致系统崩溃的一类入侵方式。由于WEB的广泛使用,关于它的各种安全问题不断地发布出来,这些漏洞中的一些漏洞甚至允许攻击者获得系统管理员的权限而进入站点内部。因此,WEB攻击的危害很大。

  虽然WEB攻击种类繁多,但是分析一下,还是具有如下几个特点:

  • 都是通过HTTP数据流来进行的,所以可以通过HTTP数据流来进行检测。
  • HTTP是无状态的协议,一般都是通过一次请求来实现,或者包含有一次具有典型的入侵特征的请求,所以利用一次请求信息就可以实现检测。
  • 一般都是通过构造别有用心的请求字符串来实现的,所以可以采用基于规则的方法。

  在我们的系统中可以检测出100多种WEB攻击方式。例如规则:alert http $EXTERNALNET any -> $HTTPSERVER 80 (content:/maillist.pl; nocase; msg: WEB-CGI Maillist CGI access attempt 😉 。该规则规定了检测从外网的任意端口到内网的WEB服务器的80端口的数据流。检测条件为请求中包含“/maillist.pl”字符串,匹配不分大小写,告警名称为“WEB-CGI Maillist CGI access attempt”。这里利用了两个自定义的变量$EXTERNALNET和$HTTPSERVER,分别表示外网和WEB服务器。

  四、结束语

  本文在对入侵检测系统进行分析的基础上,在Linux系统下实现了一个基于网络的入侵检测系统。实践表明,该系统对于检测一些常见的入侵方式具有很好的效率和性能。同时,该系统提供了完整的框架,可以灵活地应用于各种环境并扩充。当然,本系统还有很多不足的地方:数据源比较单一,还应该加入日志数据源;而且现在对于应用层协议只实现了HTTP协议分析,以后还可以加入其他协议分析,如TELNET、FTP等。这些都需要今后进一步完善。未来的入侵检测系统将会结合其它网络管理软件,形成入侵检测、网络管理、网络监控三位一体的工具。同时,网络安全需要纵深的、多层次的防护。即使拥有当前最强大的入侵检测系统,如果不及时修补网络中的安全漏洞的话,安全也无从谈起。只有将入侵检测系统与其他安全工具结合起来,才能构筑起一道网络安全的立体防御体系,最大程度地确保网络系统的安全。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐

  • 网络入侵防御系统全解

    现在有很多网络入侵防御系统产品,它们主要有三种形式,而本文重点介绍的作为专用硬件和软件产品的IPS,这种IPS直接部署到企业的网络,以及虚拟设备以部署到服务器内虚拟网络。

  • 绿盟科技四款产品入围电信集采

    在2014年中国电信集团的集采中,绿盟科技4款产品:ADS、IPS、FW、WAF均表现优异,全部入围!这是中国电信集团对绿盟科技产品的认可,也证实了绿盟科技在安全行业领军者的地位。

  • 戴尔SonicWALL SuperMassive E10800再次入围NSS实验室“推荐”评级

    戴尔运行SonicOS 6.0软件和集成式入侵防御服务的下一代防火墙SonicWALL SuperMassive E10800再度赢得美国NSS实验室2013入侵防御系统安全值图的“推荐”评级。

  • Linux系统中最实用的十大开源防火墙

    Iptables/Netfilter是基于防火墙的最流行的命令行。它是Linux服务器安全的头道防线。许多系统管理员用它来微调服务器。