基于访问规则控制的内核扩展模块错误检测方法及装置的制作方法

文档序号:6385194阅读:140来源:国知局
专利名称:基于访问规则控制的内核扩展模块错误检测方法及装置的制作方法
技术领域
本发明涉及计算机安全防范技术领域,具体涉及一种基于访问规则控制的内核扩展模块错误检测方法及装置。
背景技术
在通用操作系统中,内核扩展模块运行于内核态,几乎可以访问所有计算机系统的资源,具有非常高的权限。因此,内核扩展模块的安全性直接影响着操作系统的安全性。同时,由于内核扩展模块可以进行任意添加和删除,因此操作系统大量使用内核扩展模块来实现各种功能。在Linux操作系统中,代码量占操作系统代码总量70%左右的设备驱动就是作为内核扩展模块运行的。但是内核扩展模块可能存在较大的安全隐患,因此,提高内核扩展模块的安全性对于计算机安全性的提升具有重要意义。通常情况下,内核扩展模块的安全性方面常常依赖于开发者对开发规范的遵守,并且需要进行反复的测试以及审核分析,这些对于程序开发者的能力以及职业素养都有较高的要求,同时部署难度也很大。综上所述,一种新的内核扩展模块错误检测方法及装置是亟待提供的。

发明内容
(一)要解决的技术问题本发明的目的在于提供一种基于访问规则控制的内核扩展模块错误检测方法及装置,用于实时准确的检测出内核扩展模块运行过程是否存在不安全因素,进而提升操作系统内核的安全性,减少不必要的损失,同时降低程序员的工作量。(二)技术方案本发明技术方案如下一种基于访问规则控制的内核扩展模块错误检测方法,包括步骤S1.为内核扩展模块设定内核函数使用规则;S2.分析所述使用规则与内核扩展模块之间的依赖关系并根据所述依赖关系建立状态转移图;S3.根据所述状态转移图中的转移条件,在所述内核扩展模块中添加插装标记;S4.所述内核扩展模块运行至插装标记位置时触发根据所述使用规则执行的检测。优选的,所述步骤S3包括根据所述转移条件,查找所述内核扩展模块与所述使用规则相关的所有必要接口 ;在所有必要接口处添加插装标记。优选的,所述插装标记包括注册和初始化标记以及触发检测的标记。优选的,所述步骤S4之后还包括步骤若所述步骤S4中检测到所述内核扩展模块转移到不安全状态,则对其执行审计或者删除操作。优选的,所述不安全状态包括所述内核扩展模块调用其无权调用的函数、所述内核扩展模块访问其无权访问的内存以及所述内核扩展模块隐含潜在的危害。 本发明还提供了 一种基于访问规则控制的内核扩展模块错误检测装置一种基于访问规则控制的内核扩展模块错误检测装置,包括分别与待检测内核扩展模块连接的使用规则库、标记插装单元以及动态检测器;所述标记插装单元在根据所述使用规则库中的使用规则查找到的必要接口处添加插装标记,所述动态检测器根据所述插装标记实时监控内核扩展模块的运行状态并在所述内核扩展模块转移至不安全状态时向操作系统内核报警。(三)有益效果本发明的内核扩展模块错误检测方法,通过为内核扩展模块设定内核函数使用规贝U,分析使用规则与内核扩展模块之间的依赖关系并根据依赖关系建立状态转移图,进而结合状态转移图在所述内核扩展模块中添加插装标记,内核扩展模块运行至插装标记位置时会触发根据所述使用规则执行的检测,从而能够实时准确的检测出内核扩展模块运行过程是否存在不安全因素,进而提升操作系统内核的安全性,减少不必要的损失,同时降低程序员的工作量。


图1是本发明实施例一中自旋锁的工作机理和状态转移图;图2是本发明的一种基于访问规则控制的内核扩展模块错误检测装置结构示意图。
具体实施例方式下面结合附图和实施例,对发明的具体实施方式
做进一步描述。以下实施例仅用于说明本发明,但不用来限制本发明的范围。实施例一一种基于访问规则控制的内核扩展模块错误检测方法,主要包括以下步骤S1.为内核扩展模块设定内核函数使用规则;使用规则可以是既定规则,也可以是一些机构或者系统所有者自定义的一些和既定规则没有直接关系的特定规则;例如,Linux操作系统中的自旋锁用于保证对临界区的互斥访问,其接口函数中有加锁和解锁两类操作,其中“自旋锁不能在未被加锁之前解锁”就是一条关于自旋锁的内核扩展模块的内核函数使用规则;同样,内核在释放后不能再次被使用同样是一条使用规则;甚至可以自定义内核在第一次使用前必须执行清空操作,这也是一条合理的使用规则。本实施例中以自旋锁为例进行说明,自旋锁加锁通过spin_lock (**)执行,解锁则通过spin_unlock(**)执行;现定义自旋锁的使用规则如下(1)、自旋锁在使用前必须进行初始化;(2)、自旋锁不能在未被加锁之前解锁。S2.分析所述使用规则与内核扩展模块之间的依赖关系并根据所述依赖关系建立状态转移图;状态转移图中的顶点表示状态,边表示状态的转移,对于每个顶点,记录其允许访问的变量地址、内存区域以及内核函数;需要说明的是该状态转移图只是为了描述内核扩展模块内部的状态变化,是实际使用的一种原理图,并非必须绘制出状态转移图,对应该状态转移图的计算机程序为有限状态自动机。本实施例以elOOO网卡驱动中的el000_read_eeprom函数使用el000_eeprom_lock自旋锁为例对状态转移图进行说明;以下为el000_read_eeprom函数的源代码Istartic DEFINE_SPINLOCK(el000_eeprom_lock);2 s32 el000_read_eeprom(structel000_hw*hw, ul6offset,ul6words, ul6*data)3 {4 s32 ret ;5 spin_lock(&el000_eeprom_lock);6: ret = el000_do_read_eeprom(hw, offset, words, data);7 spin_unlock(&el000_eeprom_lock);8 return ret ;9 }以上代码中使用了 el000_eeprom_lock自旋锁,在调用函数el000_do_read_eeprom之前调用spin_lock加锁函数进行加锁,在el000_do_read_eeprom函数执行完毕之后调用spin_unlock解锁函数进行解锁;其中,在第5行代码已经执行完毕时处于加锁状态,此时自旋锁内核函数使用情况如图1中所示图中标出了在状态2 (加锁)和状态3 (解锁)时能够访问的与自旋锁相关的内核函数以及对于el000_eeprom_lock自旋锁的状态记录;从图中可以看出,el000_eeprom_lock自旋锁在状态2的可写对象表中,表明el000_eeprom_lock自旋锁当前处于状态2 ;从图中也可以看出,在状态3时不能访问spin_unlock解锁函数,即自旋锁不能在未被加锁之前解锁。S3.根据所述状态转移图中的转移条件,在所述内核扩展模块中添加插装标记;该步骤主要包括根据所述转移条件,查找所述内核扩展模块与所述使用规则相关的所有必要接口 ;在所有必要接口处添加插装标记;所述插装标记包括注册和初始化标记以及触发检测的标记;注册和初始化标记是指在待检测内核扩展模块定义时,添加的向动态检测器注册和初始化该待检测变量的标记,其需要将待检测内核扩展模块的地址以及待检测内核扩展模块所要遵守的内核函数使用规则作为参数传递给动态检测器;触发检测的标记是指在内核扩展模块调用内核函数前,添加的触发动态检测器进行检测的标记,其需要将待检测内核扩展模块的地址、待调用函数以及所要遵守的内核函数使用规则作为参数传递给动态检测器。仍然以elOOO 网卡驱动中的 el000_read_eeprom 函数使用的 el000_eeprom_lock自旋锁为例对该步骤进行说明;从上述步骤S2中el000_read_eeprom函数源代码中可以看到自旋锁el000_eepix)m_lOCk作为全局变量被定义和初始化;向动态检测器注册和初始化待检测变量el000_eeprom_lock的标记被添加到网卡驱动的初始化函数el000_probe中,自旋锁el000_eeprom_lock的地址、自旋锁应当遵守的内核函数使用规则等信息作为函数参数传递至动态检测器;在el000_read_eeprom函数调用spin_lock加锁函数之前插入触发检测的标记,将自旋锁的地址、函数spin_loCk的地址以及自旋锁应当遵守的内核函数使用规则作为函数参数传递至动态检测器;同样也在调用spin_unloCk函数之前插入了触发检测的标记。
S4.所述内核扩展模块运行至插装标记位置时触发根据所述使用规则执行的检测;该步骤主要包括对添加了插装标记的内核扩展模块进行重新编译、运行,可以通过动态检测器动态检测是否存在违规操作;动态检测器一直运行在内核中,一旦运行到插装标记位置,则会执行根据使用规则对内核扩展模块进行检查;其中,注册和初始化标记触发动态检测器完成对设定的需要被检测的变量进行注册和初始化,动态检测器记录被检测变量在内核函数使用规则的状态转移图中所处的状态;例如,在对待检测的自旋锁进行注册和初始化后,该自旋锁处于内核函数使用规则状态转移图表示的状态I ;触发检测的标记触发动态检测器根据内核函数使用规则对当前函数调用是否正确进行检测,同时完成状态转移图的状态转移;例如,在调用加锁函数spin_lock后,自旋锁处于内核函数使用规则状态转移图的状态2,在调用解锁函数spin_unlock后,自旋锁处于内核函数使用规则状态转移图的状态3 ;如果在某状态调用了不允许其调用的函数或访问了不允许其访问的内存时,动态检测器会向操作系统内核报警;例如,如果自旋锁在状态3时调用spin_unlock函数,动态检测器在允许调用函数的散列表中找不到spin_unloCk,则通知操作系统内核有错误发生。进一步的,所述步骤S4之后还包括步骤若所述步骤S4中检测到所述内核扩展模块转移到不安全状态,则对其执行审计或者删除操作,其中,不安全状态包括所述内核扩展模块调用其无权调用的函数、所述内核扩展模块访问其无权访问的内存以及所述内核扩展模块隐含潜在的危害等。实施例二本发明还提供了一种根据实施例一中所述基于访问规则控制的内核扩展模块错误检测方法的装置,如图2中所示包括分别与待检测内核扩展模块连接的使用规则库、标记插装单元以及动态检测器;使用规则库中包含与内核扩展模块相关的内核函数使用规则,标记插装单元在根据所述使用规则库中的使用规则查找到的必要接口处添加插装标记,所述动态检测器根据所述插装标记实时监控内核扩展模块的运行状态,在所述内核扩展模块转移至不安全状态时向操作系统内核报警。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的保护范畴。
权利要求
1.一种基于访问规则控制的内核扩展模块错误检测方法,其特征在于,包括步骤51.为内核扩展模块设定内核函数使用规则;52.分析所述使用规则与内核扩展模块之间的依赖关系并根据所述依赖关系建立状态转移图;53.根据所述状态转移图中的转移条件,在所述内核扩展模块中添加插装标记;54.所述内核扩展模块运行至插装标记位置时触发根据所述使用规则执行的检测。
2.根据权利要求1所述的错误检测方法,其特征在于,所述步骤S3包括根据所述转移条件,查找所述内核扩展模块与所述使用规则相关的所有必要接口 ;在所有必要接口处添加插装标记。
3.根据权利要求1所述的错误检测方法,其特征在于,所述插装标记包括注册和初始化标记以及触发检测的标记。
4.根据权利要求1-3任意一项所述的错误检测方法,其特征在于,所述步骤S4之后还包括步骤若所述步骤S4中检测到所述内核扩展模块转移到不安全状态,则对其执行审计或者删除操作。
5.根据权利要求4所述的错误检测方法,其特征在于,所述不安全状态包括所述内核扩展模块调用其无权调用的函数、所述内核扩展模块访问其无权访问的内存以及所述内核扩展模块隐含潜在的危害。
6.一种基于访问规则控制的内核扩展模块错误检测装置,其特征在于,包括分别与待检测内核扩展模块连接的使用规则库、标记插装单元以及动态检测器;所述标记插装单元在根据所述使用规则库中的使用规则查找到的必要接口处添加插装标记,所述动态检测器根据所述插装标记实时监控内核扩展模块的运行状态并在所述内核扩展模块转移至不安全状态时向操作系统内核报警。
全文摘要
本发明涉及计算机安全防范技术领域,具体涉及一种基于访问规则控制的内核扩展模块错误检测方法及装置;该错误检测方法包括步骤S1.为内核扩展模块设定内核函数使用规则;S2.分析所述使用规则与内核扩展模块之间的依赖关系并根据所述依赖关系建立状态转移图;S3.根据所述状态转移图中的转移条件,在所述内核扩展模块中添加插装标记;S4.所述内核扩展模块运行至插装标记位置时触发根据所述使用规则执行的检测。本发明能够实时准确的检测出内核扩展模块运行过程是否存在不安全因素,进而提升操作系统内核的安全性,减少不必要的损失,同时降低程序员的工作量。
文档编号G06F11/36GK103049381SQ201210564708
公开日2013年4月17日 申请日期2012年12月21日 优先权日2012年12月21日
发明者胡事民, 刘虎球, 马超 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1