CN103049381A - 基于访问规则控制的内核扩展模块错误检测方法及装置 - Google Patents
基于访问规则控制的内核扩展模块错误检测方法及装置 Download PDFInfo
- Publication number
- CN103049381A CN103049381A CN2012105647080A CN201210564708A CN103049381A CN 103049381 A CN103049381 A CN 103049381A CN 2012105647080 A CN2012105647080 A CN 2012105647080A CN 201210564708 A CN201210564708 A CN 201210564708A CN 103049381 A CN103049381 A CN 103049381A
- Authority
- CN
- China
- Prior art keywords
- kernel
- kernel extensions
- extensions module
- service regeulations
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及计算机安全防范技术领域,具体涉及一种基于访问规则控制的内核扩展模块错误检测方法及装置;该错误检测方法包括步骤:S1.为内核扩展模块设定内核函数使用规则;S2.分析所述使用规则与内核扩展模块之间的依赖关系并根据所述依赖关系建立状态转移图;S3.根据所述状态转移图中的转移条件,在所述内核扩展模块中添加插装标记;S4.所述内核扩展模块运行至插装标记位置时触发根据所述使用规则执行的检测。本发明能够实时准确的检测出内核扩展模块运行过程是否存在不安全因素,进而提升操作系统内核的安全性,减少不必要的损失,同时降低程序员的工作量。
Description
技术领域
本发明涉及计算机安全防范技术领域,具体涉及一种基于访问规则控制的内核扩展模块错误检测方法及装置。
背景技术
在通用操作系统中,内核扩展模块运行于内核态,几乎可以访问所有计算机系统的资源,具有非常高的权限。因此,内核扩展模块的安全性直接影响着操作系统的安全性。
同时,由于内核扩展模块可以进行任意添加和删除,因此操作系统大量使用内核扩展模块来实现各种功能。在Linux操作系统中,代码量占操作系统代码总量70%左右的设备驱动就是作为内核扩展模块运行的。但是内核扩展模块可能存在较大的安全隐患,因此,提高内核扩展模块的安全性对于计算机安全性的提升具有重要意义。
通常情况下,内核扩展模块的安全性方面常常依赖于开发者对开发规范的遵守,并且需要进行反复的测试以及审核分析,这些对于程序开发者的能力以及职业素养都有较高的要求,同时部署难度也很大。
综上所述,一种新的内核扩展模块错误检测方法及装置是亟待提供的。
发明内容
(一)要解决的技术问题
本发明的目的在于提供一种基于访问规则控制的内核扩展模块错误检测方法及装置,用于实时准确的检测出内核扩展模块运行过程是否存在不安全因素,进而提升操作系统内核的安全性,减少不必要的损失,同时降低程序员的工作量。
(二)技术方案
本发明技术方案如下:
一种基于访问规则控制的内核扩展模块错误检测方法,包括步骤:
S1.为内核扩展模块设定内核函数使用规则;
S2.分析所述使用规则与内核扩展模块之间的依赖关系并根据所述依赖关系建立状态转移图;
S3.根据所述状态转移图中的转移条件,在所述内核扩展模块中添加插装标记;
S4.所述内核扩展模块运行至插装标记位置时触发根据所述使用规则执行的检测。
优选的,所述步骤S3包括:
根据所述转移条件,查找所述内核扩展模块与所述使用规则相关的所有必要接口;在所有必要接口处添加插装标记。
优选的,所述插装标记包括注册和初始化标记以及触发检测的标记。
优选的,所述步骤S4之后还包括步骤:
若所述步骤S4中检测到所述内核扩展模块转移到不安全状态,则对其执行审计或者删除操作。
优选的,所述不安全状态包括:所述内核扩展模块调用其无权调用的函数、所述内核扩展模块访问其无权访问的内存以及所述内核扩展模块隐含潜在的危害。
本发明还提供了一种基于访问规则控制的内核扩展模块错误检测装置:
一种基于访问规则控制的内核扩展模块错误检测装置,包括分别与待检测内核扩展模块连接的使用规则库、标记插装单元以及动态检测器;
所述标记插装单元在根据所述使用规则库中的使用规则查找到的 必要接口处添加插装标记,所述动态检测器根据所述插装标记实时监控内核扩展模块的运行状态并在所述内核扩展模块转移至不安全状态时向操作系统内核报警。
(三)有益效果
本发明的内核扩展模块错误检测方法,通过为内核扩展模块设定内核函数使用规则,分析使用规则与内核扩展模块之间的依赖关系并根据依赖关系建立状态转移图,进而结合状态转移图在所述内核扩展模块中添加插装标记,内核扩展模块运行至插装标记位置时会触发根据所述使用规则执行的检测,从而能够实时准确的检测出内核扩展模块运行过程是否存在不安全因素,进而提升操作系统内核的安全性,减少不必要的损失,同时降低程序员的工作量。
附图说明
图1是本发明实施例一中自旋锁的工作机理和状态转移图;
图2是本发明的一种基于访问规则控制的内核扩展模块错误检测装置结构示意图。
具体实施方式
下面结合附图和实施例,对发明的具体实施方式做进一步描述。以下实施例仅用于说明本发明,但不用来限制本发明的范围。
实施例一
一种基于访问规则控制的内核扩展模块错误检测方法,主要包括以下步骤:
S1.为内核扩展模块设定内核函数使用规则;使用规则可以是既定规则,也可以是一些机构或者系统所有者自定义的一些和既定规则没有直接关系的特定规则;例如,Linux操作系统中的自旋锁用于保证对临界区的互斥访问,其接口函数中有加锁和解锁两类操作,其中“自旋锁不能在未被加锁之前解锁”就是一条关于自旋锁的内核扩展模块的内核函数使用规则;同样,内核在释放后不能再次被使用同样 是一条使用规则;甚至可以自定义内核在第一次使用前必须执行清空操作,这也是一条合理的使用规则。
本实施例中以自旋锁为例进行说明,自旋锁加锁通过spin_lock(**)执行,解锁则通过spin_unlock(**)执行;现定义自旋锁的使用规则如下:(1)、自旋锁在使用前必须进行初始化;(2)、自旋锁不能在未被加锁之前解锁。
S2.分析所述使用规则与内核扩展模块之间的依赖关系并根据所述依赖关系建立状态转移图;状态转移图中的顶点表示状态,边表示状态的转移,对于每个顶点,记录其允许访问的变量地址、内存区域以及内核函数;需要说明的是:该状态转移图只是为了描述内核扩展模块内部的状态变化,是实际使用的一种原理图,并非必须绘制出状态转移图,对应该状态转移图的计算机程序为有限状态自动机。
本实施例以e1000网卡驱动中的e1000_read_eeprom函数使用e1000_eeprom_lock自旋锁为例对状态转移图进行说明;以下为e1000_read_eeprom函数的源代码:
1:startic DEFINE_SPINLOCK(e1000_eeprom_lock);
2:s32 e1000_read_eeprom(structe1000_hw*hw,u16offset,
u16words,u16*data)
3:{
4: s32 ret;
5: spin_lock(&e1000_eeprom_lock);
6: ret=e1000_do_read_eeprom(hw,offset,words,data);
7: spin_unlock(&e1000_eeprom_lock);
8: return ret;
9:}
以上代码中使用了e1000_eeprom_lock自旋锁,在调用函数e1000_do_read_eeprom之前调用spin_lock加锁函数进行加锁,在e1000_do_read_eeprom函数执行完毕之后调用spin_unlock解锁函数进 行解锁;其中,在第5行代码已经执行完毕时处于加锁状态,此时自旋锁内核函数使用情况如图1中所示:图中标出了在状态2(加锁)和状态3(解锁)时能够访问的与自旋锁相关的内核函数以及对于e1000_eeprom_lock自旋锁的状态记录;从图中可以看出,e1000_eeprom_lock自旋锁在状态2的可写对象表中,表明e1000_eeprom_lock自旋锁当前处于状态2;从图中也可以看出,在状态3时不能访问spin_unlock解锁函数,即自旋锁不能在未被加锁之前解锁。
S3.根据所述状态转移图中的转移条件,在所述内核扩展模块中添加插装标记;该步骤主要包括:根据所述转移条件,查找所述内核扩展模块与所述使用规则相关的所有必要接口;在所有必要接口处添加插装标记;所述插装标记包括注册和初始化标记以及触发检测的标记;注册和初始化标记是指在待检测内核扩展模块定义时,添加的向动态检测器注册和初始化该待检测变量的标记,其需要将待检测内核扩展模块的地址以及待检测内核扩展模块所要遵守的内核函数使用规则作为参数传递给动态检测器;触发检测的标记是指在内核扩展模块调用内核函数前,添加的触发动态检测器进行检测的标记,其需要将待检测内核扩展模块的地址、待调用函数以及所要遵守的内核函数使用规则作为参数传递给动态检测器。
仍然以e1000网卡驱动中的e1000_read_eeprom函数使用的e1000_eeprom_lock自旋锁为例对该步骤进行说明;从上述步骤S2中e1000_read_eeprom函数源代码中可以看到自旋锁e1000_eeprom_lock作为全局变量被定义和初始化;向动态检测器注册和初始化待检测变量e1000_eeprom_lock的标记被添加到网卡驱动的初始化函数e1000_probe中,自旋锁e1000_eeprom_lock的地址、自旋锁应当遵守的内核函数使用规则等信息作为函数参数传递至动态检测器;在e1000_read_eeprom函数调用spin_lock加锁函数之前插入触发检测的 标记,将自旋锁的地址、函数spin_lock的地址以及自旋锁应当遵守的内核函数使用规则作为函数参数传递至动态检测器;同样也在调用spin_unlock函数之前插入了触发检测的标记。
S4.所述内核扩展模块运行至插装标记位置时触发根据所述使用规则执行的检测;该步骤主要包括:对添加了插装标记的内核扩展模块进行重新编译、运行,可以通过动态检测器动态检测是否存在违规操作;动态检测器一直运行在内核中,一旦运行到插装标记位置,则会执行根据使用规则对内核扩展模块进行检查;其中,注册和初始化标记触发动态检测器完成对设定的需要被检测的变量进行注册和初始化,动态检测器记录被检测变量在内核函数使用规则的状态转移图中所处的状态;例如,在对待检测的自旋锁进行注册和初始化后,该自旋锁处于内核函数使用规则状态转移图表示的状态1;触发检测的标记触发动态检测器根据内核函数使用规则对当前函数调用是否正确进行检测,同时完成状态转移图的状态转移;例如,在调用加锁函数spin_lock后,自旋锁处于内核函数使用规则状态转移图的状态2,在调用解锁函数spin_unlock后,自旋锁处于内核函数使用规则状态转移图的状态3;如果在某状态调用了不允许其调用的函数或访问了不允许其访问的内存时,动态检测器会向操作系统内核报警;例如,如果自旋锁在状态3时调用spin_unlock函数,动态检测器在允许调用函数的散列表中找不到spin_unlock,则通知操作系统内核有错误发生。
进一步的,所述步骤S4之后还包括步骤:
若所述步骤S4中检测到所述内核扩展模块转移到不安全状态,则对其执行审计或者删除操作,其中,不安全状态包括:所述内核扩展模块调用其无权调用的函数、所述内核扩展模块访问其无权访问的内存以及所述内核扩展模块隐含潜在的危害等。
实施例二
本发明还提供了一种根据实施例一中所述基于访问规则控制的内 核扩展模块错误检测方法的装置,如图2中所示:包括分别与待检测内核扩展模块连接的使用规则库、标记插装单元以及动态检测器;使用规则库中包含与内核扩展模块相关的内核函数使用规则,标记插装单元在根据所述使用规则库中的使用规则查找到的必要接口处添加插装标记,所述动态检测器根据所述插装标记实时监控内核扩展模块的运行状态,在所述内核扩展模块转移至不安全状态时向操作系统内核报警。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的保护范畴。
Claims (6)
1.一种基于访问规则控制的内核扩展模块错误检测方法,其特征在于,包括步骤:
S1.为内核扩展模块设定内核函数使用规则;
S2.分析所述使用规则与内核扩展模块之间的依赖关系并根据所述依赖关系建立状态转移图;
S3.根据所述状态转移图中的转移条件,在所述内核扩展模块中添加插装标记;
S4.所述内核扩展模块运行至插装标记位置时触发根据所述使用规则执行的检测。
2.根据权利要求1所述的错误检测方法,其特征在于,所述步骤S3包括:
根据所述转移条件,查找所述内核扩展模块与所述使用规则相关的所有必要接口;在所有必要接口处添加插装标记。
3.根据权利要求1所述的错误检测方法,其特征在于,所述插装标记包括注册和初始化标记以及触发检测的标记。
4.根据权利要求1-3任意一项所述的错误检测方法,其特征在于,所述步骤S4之后还包括步骤:
若所述步骤S4中检测到所述内核扩展模块转移到不安全状态,则对其执行审计或者删除操作。
5.根据权利要求4所述的错误检测方法,其特征在于,所述不安全状态包括:所述内核扩展模块调用其无权调用的函数、所述内核扩展模块访问其无权访问的内存以及所述内核扩展模块隐含潜在的危害。
6.一种基于访问规则控制的内核扩展模块错误检测装置,其特征在于,包括分别与待检测内核扩展模块连接的使用规则库、标记插装单元以及动态检测器;
所述标记插装单元在根据所述使用规则库中的使用规则查找到的必要接口处添加插装标记,所述动态检测器根据所述插装标记实时监控内核扩展模块的运行状态并在所述内核扩展模块转移至不安全状态时向操作系统内核报警。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105647080A CN103049381A (zh) | 2012-12-21 | 2012-12-21 | 基于访问规则控制的内核扩展模块错误检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105647080A CN103049381A (zh) | 2012-12-21 | 2012-12-21 | 基于访问规则控制的内核扩展模块错误检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103049381A true CN103049381A (zh) | 2013-04-17 |
Family
ID=48062028
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012105647080A Pending CN103049381A (zh) | 2012-12-21 | 2012-12-21 | 基于访问规则控制的内核扩展模块错误检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103049381A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103605921A (zh) * | 2013-10-28 | 2014-02-26 | 清华大学 | 内核扩展安全访问方法及装置 |
CN103647771A (zh) * | 2013-12-12 | 2014-03-19 | 浪潮电子信息产业股份有限公司 | 一种对网络数据包进行强制访问控制的方法 |
CN105988885A (zh) * | 2015-03-26 | 2016-10-05 | 朱怡安 | 基于补偿回滚的操作系统故障自恢复方法 |
US11461465B1 (en) * | 2019-05-24 | 2022-10-04 | Trend Micro Inc. | Protection of kernel extension in a computer |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080148048A1 (en) * | 2006-11-01 | 2008-06-19 | Kinshuk Govil | Virtualization Hardware For Device Driver Isolation |
CN102521089A (zh) * | 2011-11-23 | 2012-06-27 | 清华大学 | 硬件设备错误检测方法 |
-
2012
- 2012-12-21 CN CN2012105647080A patent/CN103049381A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080148048A1 (en) * | 2006-11-01 | 2008-06-19 | Kinshuk Govil | Virtualization Hardware For Device Driver Isolation |
CN102521089A (zh) * | 2011-11-23 | 2012-06-27 | 清华大学 | 硬件设备错误检测方法 |
Non-Patent Citations (2)
Title |
---|
GEORGE C. NECULA AND PETER LEE: "Safe kernel extensions without run-time checking", 《IN 2ND OSDI》 * |
马超,尹杰,刘虎球,李浩: "KFUR:一个新型内核扩展安全模型", 《计算机学报》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103605921A (zh) * | 2013-10-28 | 2014-02-26 | 清华大学 | 内核扩展安全访问方法及装置 |
CN103647771A (zh) * | 2013-12-12 | 2014-03-19 | 浪潮电子信息产业股份有限公司 | 一种对网络数据包进行强制访问控制的方法 |
CN105988885A (zh) * | 2015-03-26 | 2016-10-05 | 朱怡安 | 基于补偿回滚的操作系统故障自恢复方法 |
CN105988885B (zh) * | 2015-03-26 | 2019-01-29 | 朱怡安 | 基于补偿回滚的操作系统故障自恢复方法 |
US11461465B1 (en) * | 2019-05-24 | 2022-10-04 | Trend Micro Inc. | Protection of kernel extension in a computer |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8930324B2 (en) | Guarded file descriptors | |
CN109583200B (zh) | 一种基于动态污点传播的程序异常分析方法 | |
CN103699480B (zh) | 一种基于java的web动态安全漏洞检测方法 | |
CN107301082B (zh) | 一种实现操作系统完整性保护的方法和装置 | |
US9804952B1 (en) | Application debugging in a restricted container environment | |
Mao et al. | RID: finding reference count bugs with inconsistent path pair checking | |
US20060129880A1 (en) | Method and system for injecting faults into a software application | |
CN103049381A (zh) | 基于访问规则控制的内核扩展模块错误检测方法及装置 | |
CN111258850B (zh) | 一种基于Linux系统的更新软件信息的方法及装置 | |
Meredith et al. | Runtime verification with the RV system | |
CN103930872A (zh) | 使用可扩展索引编制的虚拟系统的被动监视 | |
US8276021B2 (en) | Concurrency test effectiveness via mutation testing and dynamic lock elision | |
Wu et al. | Understanding and detecting disordered error handling with precise function pairing | |
Pakki et al. | Exaggerated error handling hurts! an in-depth study and context-aware detection | |
CN112925524A (zh) | 一种检测驱动程序中不安全直接存储器访问的方法及装置 | |
Bissyandé et al. | Diagnosys: automatic generation of a debugging interface to the linux kernel | |
EP3752945A1 (en) | Automatic generation of patches for security violations | |
TW201435614A (zh) | 非揮發性記憶體監控 | |
US7657792B2 (en) | Identifying race conditions involving asynchronous memory updates | |
US10089463B1 (en) | Managing security of source code | |
CN113987507A (zh) | 堆内存漏洞检测方法、装置、存储介质及电子设备 | |
King et al. | Automating security mediation placement | |
CN115756935A (zh) | 嵌入式软件系统的异常故障定位方法、装置及设备 | |
CN111045891B (zh) | 基于java多线程的监控方法、装置、设备以及存储介质 | |
CN103605921A (zh) | 内核扩展安全访问方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130417 |