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

ZDNet软件频道 时间:2009-11-04 作者: | 中国IT实验室 我要评论()
本文关键词:系统安全 linux安全 Linux
在计算机制造业中,只要涉及到计算机安全性要求非常重要高的地方,总要提起入侵检测和如何处理黑客的入侵。在这个方面的主要讨论焦点是:在入侵者进行完成入侵后发现并记录入侵,还不如在他们入侵之前就发现并阻止他们对系统的入侵。

  二.系统调用运行步骤

  我们的系统安全增强是建立在一个内核后面的参考监视器上的。

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

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

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

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

  三.防止缓冲区溢出的内核补丁

  这一部分我们来描述一个对系统安全有很大危害的缓冲区溢出的Linux内核补丁。

  3.1 缓冲区溢出漏洞攻击

  在C语言中对队列资源的限制很容易让一个内存溢出。有很多广为人知的方法来利用缓冲区溢出的漏洞来对系统进行攻击。他们可以利用缓冲区溢出的漏洞来向系统内插入一些恶意的系统命令操作,就可以得到一个特权的shell,从而对系统进行控制。主要就是利用攻击由root或是administrator运行的程序,插入一些命令,而这些命令就有了root的运行权限。

  一个root的进程可以划分为以下的几种类型:

  交互式的:这是一个标准的超级用户进程。用户ID(UID)和有效用户ID(SUID)都为0。对于这个用户没有什么权限问题,因为用户已经取得了对系统的所有控制权限。

  后台:这个主要是指在系统启动的时候生成的root用户级别运行的程序后台进程。虽然对这方面的技术比较复杂,但是大多数时候也可以利用来进行缓冲区溢出漏洞的攻击。

  Setuid进程:这样的进程有一队用户的标记(UID,EUID),并且值都应该是大于-的。所以一个setuid到root的进程表明下面的一个宏定义。

  #define IS_SETUID_TO_ROOT(proc) !((proc)->euid)&&(proc)->uid

  对于这个宏不同的系统可能有不同的定义。

  在下面的内容里,我们将会讨论在内核中什么样的root进程可以被马上识别出来。

  3.2 后台的root程序

  只有一个UNIX系统才会有root程序在后台运行。大多数情况下,系统管理员不会去直接开启他们也不会控制他们的执行,所以,象我们前面提到的一样,这样的特权程序就会被当作缓冲区溢出漏洞攻击的主要目标。大概可以分成下面几种类型:

  后台程序都是在系统系统的时候直接由初始化脚本运行的。就象网络服务器中的inetd超级服务器程序那样,里面有web服务器,mail服务器(主要是sendmail)就是利用这样的方式来启动的。另外一个这样的例子就是syslogd后台程序。

  网络服务器由inetd超级服务器启动来履行如远程访问(telnet),文件传输(ftp)等等的服务。

  程序执行启动一个特定的后台程序,大多数都是在系统启动的时候运行。(属于类型级别1。)

  程序是在未来的特定时间用at命令来启动的。实际上这些程序可以认为是特定类型的级别分类。

  程序是在交互的会话时刻在后台运行的。这些都是某些特定的原因才应用的。

  这些程序一般来说都没有一个控制终端。为了告诉它们不在程序交互的模式下运行,我们可以利用下面的宏定义。

  #define IS_A_ROOT_RAEMON(proc) !((proc)->euid)&&((proc)->tty==NULL)

  这里,我们首先检查程序是否是以root级别来运行的,然后我们检查这个程序是否有一个控制终端。

  3.3 系统调用的工具

  为了防止危险的缓冲区溢出漏洞的攻击,有一些简单的简单代码加入到以下的几个系统调用中去。

  Execve(executable-file,…):这个系统调用允许一个嵌入的setuid进程来调用一个交互的shell外壳。为了阻止这样的调用和其他的简单攻击,我们定义了一个原始的检查,来确定这个调用的进程是不是拥有root的权限。如果没有,就不再继续进行检查,这个系统调用可以继续运行,就忽略截取系统调用的其他动作。如果调用的系统调用有root的权限,进一步的,setuid为root,那么这个访问控制数据库就要决定证明是否这个参数executable-file是否可以被setuid进程调用。如果接受了的话,这个调用就继续进行。除非这个调用被入侵处理的子系统禁止抛弃。其他情况下,这些调用的情况都会记录在一个日志文件里面。

  Setuid:我们认为任何一个setuid为root或是在后台以root权限的进程都是可以作为一个潜在的攻击目标。对这样的进程我们用特定的检查程序来过滤这些系统调用。一个setuid的进程是可以在交互模式下,在调用其他避免运行setuid进程的系统调用之前来运行setuid(0)调用的。通过这样的方式,我们可以跳过所有的我们介绍过的检查。因为这个原因,我们必须加载一段代码来补充setuid系统调用来阻止一个setuid进程得到root的UID权限。

  Chmod:当我们调用一个setuid的进程。用户可以应用Chmod来取得对敏感文件的写权限。(如,密码文件)。阻止这样的和其他相关的攻击,一个检查代码加到chmod系统调用代码里来阻止一个setuid进程对一般文件或目录访问权限的修改。

  Chown:当调用一个setuid进程的时候,chown可以用来改变一个可执行文件的拥有者为root。Chown是一个非常的调用,尤其是当他和chmod一起应用的时候。基于这个原因,我们也加入了一段检查的代码到chown系统调用里面去,来阻止一个setuid进程修改常规文件或目录的拥有权。

用户评论
用户名
评论内容
发表时间
ZDNet网友
2011-03-18 14:57:01
ZDNet网友
2010-05-21 00:49:14
ZDNet网友
2010-05-21 00:48:00
ZDNet网友
微软应该对自己的用户负责,如果用户完全使用xp升级微软win7,为什么要付出这样麻烦的代价?都是微软出品软件,且都是利用该软件获取信息以及处理文字、多媒体功能,微软应该尽可能方便用户!虽然有时候这样的请求也许跟不上时代技术发展的脚步,但是微软不要以此为借口,认为一切都理所应当,就不可以方便用户。还是要尽力,所谓拿人手短吃人嘴软,商业不正是讲求有商道吗!至少做人需诚实守信,尽可能帮助用户顺利、安全转换操作系统、各种必须软件功能尽可能兼容以及信息尽可能的少丢失!虽然这很大程度仅仅取决于微软等计算机专家、工程师的自我自律约束,我们普通用户恐怕很难知道微软究竟仅了多大力量为用户考虑,但是我相信真相会有被发现的一天,无论多久远。 微软从某种意义上来说,就是一个类似“掌握魔方”操作特别出神入化的公司。几乎奠定了电脑主要的“规则”,但是,我却相信不久将来我们会发现,电脑依然是非常有限的一个小系统而已!随着我们新的关键材料认知突破,电脑系统会真正被另一个革命性新电脑系统所取代,不要以为我这样的说法是无稽之谈不可实现,我却认为很有可能,只看这样的情况发生究竟是快还是慢,是早还是迟!变成历史的小玩具之后的电脑系统,微软会留下良好的历史声名吗?我们拭目以待! 网友::我爱佛祖
2010-02-03 13:52:55
- 发表评论 -
匿名
注册用户

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134