科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Linux内核入侵检测安全增强实现(上) (2)

Linux内核入侵检测安全增强实现(上) (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

这里我们建立一个在内核级能够实现截获和监视特殊系统调用的函数。我们的方法需要最小的改变系统原来内部的结构。

作者:赛迪网技术社区 来源:赛迪网技术社区 2007年11月2日

关键字: Linux

  • 评论
  • 分享微博
  • 分享邮件
 

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

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

1、在恶意的系统调用执完全行前检测到它,以起到阻止恶意的入侵攻击。

2、允许对系统调用参数的一个有效的检测。

3、在不改变系统已经存在的数据结构和体系的情况下,通过扩展内核的功能来实现一个增强的安全的操作系统。

感谢即时的入侵检测,因为原来的扩展操作系统可以让入侵者的恶意进程和合法的进程一起运行。有了这个系统,我们就可以对系统的所有进程进行分析,发现恶意的进程以及他们之间的关系。作为一个实现我们技术的例子我们创建了一个在攻击完成前对缓冲区溢出攻击进行检测的原形。一个基于操作系统的入侵检测的实现能在检测缓冲区溢的时候的提供一些必要的功能选项。

二.系统调用运行步骤

我们的系统安全增强是建立在一个内核后面的参考监视器上的。用户的进程要想访问系统的调用就必须经过这个参考的监视器。这个系统调用参考的监视器包括两个重要的功能部分:参考功能函数和认证功能函数。参考功能函数是用来生成一个结果,这个结果是关于是否允许或是拒绝一个基于访问控制数据库系统调用请求的。这个访问控制数据库概念性的包括入口和访问控制的规则(规则涉及进程,系统调用,访问模式)。在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进程可以被马上识别出来。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章