Linux内核即时入侵检测安全增强(一)

发表于:2007-07-02来源:作者:点击数: 标签:
在计算机制造业中,只要涉及到计算机 安全 性要求非常重要高的地方,总要提起 入侵检测 和如何处理黑客的入侵。在这个方面的主要讨论焦点是:在入侵者进行完成入侵后发现并记录入侵,还不如在他们入侵之前就发现并阻止他们对系统的入侵。 前言 ( 2001-04-27

  在计算机制造业中,只要涉及到计算机安全性要求非常重要高的地方,总要提起入侵检测和如何处理黑客的入侵。在这个方面的主要讨论焦点是:在入侵者进行完成入侵后发现并记录入侵,还不如在他们入侵之前就发现并阻止他们对系统的入侵。

前言 ( 2001-04-27 )
一.介绍 ( 2001-04-27 )
二.系统调用运行步骤 ( 2001-04-27 )
三.防止缓冲区溢出的内核补丁 ( 2001-04-27 )
四.实现 ( 2001-04-27 )
五.后语 ( 2001-04-27 )
  在计算机制造业中,只要涉及到计算机安全性要求非常重要高的地方,总要提起入侵检测和如何处理黑客的入侵。在这个方面的主要讨论焦点是:在入侵者进行完成入侵后发现并记录入侵,还不如在他们入侵之前就发现并阻止他们对系统的入侵。我们可以检测系统每一个进程,这样我们就可以在入侵者实行入侵攻击的时候实现入侵的防御,因为这样就可以即时阻止恶意的系统命令的执行。实际上,最严重的破坏都是通过在被攻击系统上执行的恶意系统调用带来的。

  这篇文章提供了设计和实现这种对敏感的系统调用的监视功能。我们的目的主要是在类UNIX系统内核上通过截获系统调用来实现这种功能。这个系统的综合功能可以嵌入到内核中的系统调用代码,这样在系统调用被引用的时候就可以检查系统调用是否符合访问控制数据库所定义的规则。

  这里实现的方法是通过一个简单的方法来截获系统调用和他们的参数值。这样做不用改变内核已有的数据结构和算法。在对所有对程序进程的修正和改变后,他们还可以继续稳定的运行,不用改变源代码和重新编译内核。

  这里还提供了一个完整的能够检测和阻止缓冲区溢出攻击的代码,这段代码可以作为一套Linux的操作系统的内核源代码补丁。
 
一.介绍
冰块


  现在大家已经公认了,世界上没有绝对的方法或绝对安全的系统来阻止黑客的入侵:

没有漏洞的软件对我们来说还是一个梦想。即使是很流行的程序或是操作系统一样会包含很都可以被入侵者利用的漏洞。

许多软件包的行为都是和其他操作系统的组件(函数库或是内核)相互作用的。

  由于这个原因,所以入侵检测和如何处理入侵行为在计算机工业里一直在广泛的讨论和研究。

  很多现有的入侵检测的技术都是基于一些对审计和日志文件的分析。主要思想是搜索整个系统的文件和参考列表来发现畸形的,不期望的系统配置的改变。(如,有一个新的用户的用户ID是0)。另外一种方法就是周期性的执行一个程序来做系统文件的属性和参考列表的比较。这些过程主要是来对付Trojan木马的。这样的程序是看起来对系统不是很危险,但是可以让入侵者得到控制整个系统所需的权限。

  这样程序的好处是不用进入内核部分。如,他们不用进行对系统命令的修改。但是,他们也不能对入侵进行即时的防范,因为,大多数情况下,这些结果都是在入侵者攻击以后才生成的。

  因为所有对系统的破坏性攻击都是通过一些敏感的系统调用来实现的。所以,即时的入侵检测通过监视每一个系统调用就可以保护你的系统不受攻击者破坏。

  这里我们建立一个在内核级能够实现截获和监视特殊系统调用的函数。我们的方法需要最小的改变系统原来内部的结构。由于类UNIX系统的这个代码都是公开的,我们就可以基于公开的内核代码来截获系统调用,并根据我们设定的规则来检验系统调用是否是恶意的,起到入侵检测和防范的功能。

  这个软件的主要设计目的如下:

在恶意的系统调用执完全行前检测到它,以起到阻止恶意的入侵攻击。
允许对系统调用参数的一个有效的检测。
在不改变系统已经存在的数据结构和体系的情况下,通过扩展内核的功能来实现一个增强的安全的操作系统。
感谢即时的入侵检测,因为原来的扩展操作系统可以让入侵者的恶意进程和合法的进程一起运行。有了这个系统,我们就可以对系统的所有进程进行分析,发现恶意的进程以及他们之间的关系。
  作为一个实现我们技术的例子我们创建了一个在攻击完成前对缓冲区溢出攻击进行检测的原形。一个基于操作系统的入侵检测的实现能在检测缓冲区溢的时候的提供一些必要的功能选项。

二.系统调用运行步骤
冰块
  我们的系统安全增强是建立在一个内核后面的参考监视器上的。

  用户的进程要想访问系统的调用就必须经过这个参考的监视器。如图1。这个系统调用参考的监视器包括两个重要的功能部分:参考功能函数和认证功能函数。参考功能函数是用来生成一个结果,这个结果是关于是否允许或是拒绝一个基于访问控制数据库系统调用请求的。这个访问控制数据库概念性的包括入口和访问控制的规则(规则涉及进程,系统调用,访问模式)。在ACD中的访问控制规则能捕捉在系统调用和他们相关参数的情况。举例,一个execve系统调用的控制规则可以在executable文件列表中指定访问的模式来控制调用这个进程的调用execve的系统调用。这个文件就是调用进程对execve的合法通行凭证。这样的功能可以允许阻止一个有特权的没有正确注册的进程(如,setuid)如交互的shell对系统的非授权攻击或是滥用。

  ACD不是参考监视器的一部分,但是对这个数据库的所有控制都是通过参数监视器来控制的。这就是我们说的第二个组件,认证功能组件。

  这个组件是用来监视对个别访问控制规则改变的。参考监视器的一个基本的规则就是全部的,也就是所有的访问都必须在这里调停。然而,一般方法在系统调用的高端级别来实现这个功能会有很到的资源的消耗。大约会对系统调用有30%的资源浪费。为了减少这样的消耗,我们提出了一个更加有效率的方法,就是在基于拦截系统内核的系统调用来实现这个参考监视器的功能。我们这个方法能尽量少的改变本地操作系统,也不会改变操作系统内部的官方接口。如类UNIX系统,还有其他的一些公开源代码的操作系统(如,Linux、xxBSD、Solaris)。我们的目的是建立一个参考的监视妻来截获系统调用,并把截获到的系统调用和访问控制数据库进行比较,来确定是不是合法的系统调用和参数。

  因为这样的方法是在系统调用生效前就截获的,所以他可以阻止任何由入侵者对系统非法的恶意的系统调用。从而起到保护系统的功能。

原文转自:http://www.ltesting.net