CN103605921A - 内核扩展安全访问方法及装置 - Google Patents
内核扩展安全访问方法及装置 Download PDFInfo
- Publication number
- CN103605921A CN103605921A CN201310516742.5A CN201310516742A CN103605921A CN 103605921 A CN103605921 A CN 103605921A CN 201310516742 A CN201310516742 A CN 201310516742A CN 103605921 A CN103605921 A CN 103605921A
- Authority
- CN
- China
- Prior art keywords
- function
- kernel
- kernel extensions
- variable
- service regeulations
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及计算机安全防范技术领域,公开了一种内嵌规则的内核扩展安全访问方法,包括:S1:在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则;S2:对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致对不会引起系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。本发明的方法使得开发者能够直接调用内核扩展函数,而不必要关心内核扩展内部的使用规则,运行时动态检测内核扩展函数的使用规范性,对不正确的轻量级错误进行容错,危险错误则终止运行,并给出警告,从而提高驱动的可靠性和安全性。
Description
技术领域
本发明涉及计算机安全防范技术领域,特别涉及一种内核扩展安全访问方法及装置。
背景技术
驱动程序作为内核扩展的主要使用者,对系统的可靠性和安全性影响极大。由于驱动开发者相比内核开发者,对系统的熟悉程度存在一定差距,同时部分驱动还存在源码不公开,功能测试常常依赖于具体的硬件,使得测试不够全面,因此驱动自身的问题较多。在WindowXp分析报告中指出,85%的系统崩溃与驱动相关。
另外,驱动开发者和内核本身的利益取向也不完全一致。驱动开发者常常希望从内核中获得尽量大的权限,尽量多的资源,便于自身的运行。但是,因为自身的安全缺陷,部分驱动对权限和资源的管理不够细致,从而成为系统的安全漏洞。驱动的权限和资源获取均依赖于内核扩展实现,因此在内核扩展的接口位置对权限和资源获取进行审计和访问控制是较为可行的。
已有的一些安全报告指出了大量扩展相关的安全漏洞和攻击实例。其中包括比较常见的空指针、权限漏检、缓冲区溢出、整数错、数据未初始化予以引用等问题。系统中该类通用的安全问题一旦被恶意攻击者发现,将产生巨大的经济损失。现行的一些源码的静态分析方法和动态检测方法并不能很好的解决驱动的非开源、内嵌恶意代码等一系列问题。
在原有的内核扩展中,各个函数相对较为独立,函数之间的约束关系需要开发者维护,开发者的要求相对较高,仍然不可避免地产生由于驱动导致的安全性问题。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何提高驱动程序的可靠性和安全性
(二)技术方案
为解决上述技术问题,本发明提供了一种内核扩展函数安全访问方法,包括步骤:
S1:在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量;
S2:对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
其中,所述步骤S1中,检查驱动对内核扩展函数的调用是否满足预定的使用规则具体包括:在所述状态变量所处的当前状态下,根据约束条件变量判定是否允许执行所述内核扩展函数的访问。
其中,所述步骤S1中,所述状态变量用于记录所述内核扩展函数所属对象实例的当前状态;约束条件变量用于记录所述对象实例是否允许所述对象实例的当前属主进程执行所述内核扩展函数的访问。
其中,所述内核扩展函数所属的对象实例的当前状态包括:是否已经初始化完毕,能否允许进行读写。
其中,所述内核扩展函数所属的对象实例的当前状态包括:该内核扩展函数的使用顺序。
其中,所述步骤S2中,所述进行容错具体包括:
允许所述驱动访问所述内核扩展函数,且通过审计日志记录驱动的信息及所述驱动访问内核扩展函数的内容。
其中,所述内核扩展函数为自旋锁的扩展函数,包括:初始化函数、加锁函数及解锁函数,所述自旋锁的使用规则包括:自旋锁状态变量和自旋锁约束条件变量;
所述自旋锁状态变量包括:初始化变量、加解锁状态变量;
所述自旋锁约束条件变量包括:自旋锁函数的加锁函数和解锁函数的属主进程必须为相同的进程的标识;
在驱动访问内核时,检查驱动对自旋锁的扩展函数调用是否满足预定的使用规则具体包括:
调用初始化函数初始化自旋锁;
在初始化,且加锁状态下,可执行自旋锁函数的解锁函数,在初始化,且解锁状态下,可执行自旋锁函数的加锁函数,所述加锁函数和解锁函数的属主进程为同一进程。
本发明还提供了一种内核扩展函数安全访问装置,包括:
调用检查模块,用于在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量;
判断执行模块,用于对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
(三)有益效果
本发明提供的内嵌规则的内核扩展安全访问方法,使得开发者能够直接调用内核扩展函数,而不必要关心内核扩展内部的使用规则,运行时动态检测内核扩展函数的使用规范性,对不正确的轻量级错误进行容错,危险错误则终止运行,并给出警告,从而提高驱动的可靠性和安全性。
附图说明
图1是本发明实施例的一种内核扩展安全访问方法流程图;
图2是本发明实施例的一种内核扩展安全访问装置结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本发明的内嵌规则的内核扩展安全访问方法流程如图1所示,包括:
步骤S110,在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则。所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量。
本实施例中,可以预先在内核扩展函数所属的类中定义相关的变量,并在内核扩展函数中增加相关的变量参数和/或对相关的变量的判断语句。并将新的核扩展函数接口提供给驱动,以供其调用。
其中,检查驱动对内核扩展函数的调用是否满足预定的使用规则具体包括:在所述状态变量所处的当前状态下,根据约束条件变量判定是否允许执行所述内核扩展函数的访问。所述状态变量用于记录内核扩展函数所属的对象实例的当前状态;约束条件变量用于记录所述对象实例是否允许所述对象实例的当前属主进程执行所述内核扩展函数的访问。
其中,内核扩展函数所属的对象实例的当前状态包括:是否已经初始化完毕,能否允许进行读写;内核扩展函数的使用顺序等。由于不同的内核扩展函数具有不同的是使用规则,因此,在内核扩展函数所属的对象实例中包括所述使用规则相应的变量。例如该变量作为函数的参数或返回值。
步骤S120,对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行(即终止驱动对该内核扩展函数的访问),并给出警告,否则进行容错。本步骤中,对于不满足所述使用规则的内核扩展调用按照错误的严重性分别处理,其中,对不正确的轻量级错误调用进行容错,危险错误调用则终止驱动运行,并给出警告。错误调用对其它进程影响较小,甚至对系统的稳定性产生影响较小时,则尝试进行容错,即允许驱动访问所述内核扩展函数,且通过审计日志记录驱动的信息及所述驱动访问内核扩展函数的内容。对于会导致系统的稳定性和安全漏洞的错误调用,则需要终止该驱动的运行,防止对系统和其它模块产生影响。
本实施例的方法使得开发者能够直接调用内核扩展函数,而不必要关心内核扩展内部的使用规则,运行时动态检测内核扩展函数的使用规范性,对不正确的轻量级错误进行容错,危险错误则终止运行,并给出警告,从而提高驱动的可靠性和安全性。
以下结合自旋锁(spin_lock)为例对本发明进行说明。
自旋锁的使用规则主要是:自旋锁在加锁之前必须初始化;自旋锁在解锁之前必须依据加锁;自旋锁在加锁之后不能再次加锁。另外,关于自旋锁的属性约束则主要是:自旋锁的加、解锁函数的属主需要是同一个进程。
在内核扩展中实现自旋锁的使用规则,通过在spin_lock的spin_lock_t实例增加两个状态变量,一个状态变量标记自旋锁的执行状态(标识自旋锁处于加锁还是解锁状态),另一个状态变量用于标记自旋锁的进程属主,并将原来的自旋锁相关的内核扩展函数实现成如下内核扩展的接口形式:
void spin_lock_init_safe(spinlock_t*lock)
int spin_trylock_safe(spinlock_t*lock)
void spin_lock_safe(spinlock_t*lock)
void spin_unlock_safe(spinlock_t*lock)
修改驱动源码,使得驱动源码调用修改后的内核扩展接口,通过使用简单的宏即可实现,具体如下:
#define spin_lock_init spin_lock_init_safe
#define spin_trylock spin_trylock_safe
#define spin_lock spin_lock_safe
#define spin_unlock spin_unlock_safe
并在驱动文件的末尾加上:
#undef(spin_lock_init)
#undef(spin_trylock)
#undef(spin_lock)
#undef(spin_unlock)
编译上述修改后的内核扩展,同时编译使用了安全内核扩展函数的驱动模块,重启计算机即可加载修改后的驱动。
运行时动态检查内核扩展的使用是否满足规则,对于不满足规则的内核扩展调用首先分析是否违反了自旋锁的使用规则,对于加锁之前没有初始化的自旋锁,调用自旋锁初始化函数进行容错;对于重复加锁的终止该驱动运行并提出警告;对于解锁时,自旋锁没有处于加锁状态的直接返回,并提交警告,但是不会终止运行;同时对于通过规则审查的内核扩展调用执行属性约束审查,判断解锁的进程是否和之前加锁的进程号一致。若不一致,则终止驱动运行,并提交警告。
结合上述描述,针对自旋锁的反复加锁攻击以及恶意解锁攻击均能够成功防御。
本发明还提供了一种内核扩展安全访问装置,如图2中所示:主要包括:调用检查模块210和判断执行模块220。
调用检查模块210,用于在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量;
判断执行模块220,用于对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Claims (8)
1.一种内核扩展函数安全访问方法,其特征在于,包括步骤:
S1:在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量;
S2:对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
2.根据权利要求1所述的内核扩展函数安全访问方法,其特征在于,所述步骤S1中,检查驱动对内核扩展函数的调用是否满足预定的使用规则具体包括:在所述状态变量所处的当前状态下,根据约束条件变量判定是否允许执行所述内核扩展函数的访问。
3.根据权利要求1所述的内核扩展函数安全访问方法,其特征在于,所述步骤S1中,所述状态变量用于记录所述内核扩展函数所属对象实例的当前状态;约束条件变量用于记录所述对象实例是否允许所述对象实例的当前属主进程执行所述内核扩展函数的访问。
4.根据权利要求3所述的内核扩展函数安全访问方法,其特征在于,所述内核扩展函数所属的对象实例的当前状态包括:是否已经初始化完毕,能否允许进行读写。
5.根据权利要求3所述的内核扩展函数安全访问方法,其特征在于,所述内核扩展函数所属的对象实例的当前状态包括:该内核扩展函数的使用顺序。
6.根据权利要求1所述的内核扩展函数安全访问方法,其特征在于,所述步骤S2中,所述进行容错具体包括:
允许所述驱动访问所述内核扩展函数,且通过审计日志记录驱动的信息及所述驱动访问内核扩展函数的内容。
7.根据权利要求1~6中任一项所述的内核扩展函数安全访问方法,其特征在于,所述内核扩展函数为自旋锁的扩展函数,包括:初始化函数、加锁函数及解锁函数,所述自旋锁的使用规则包括:自旋锁状态变量和自旋锁约束条件变量;
所述自旋锁状态变量包括:初始化变量、加解锁状态变量;
所述自旋锁约束条件变量包括:自旋锁函数的加锁函数和解锁函数的属主进程必须为相同的进程的标识;
在驱动访问内核时,检查驱动对自旋锁的扩展函数调用是否满足预定的使用规则具体包括:
调用初始化函数初始化自旋锁;
在初始化,且加锁状态下,可执行自旋锁函数的解锁函数,在初始化,且解锁状态下,可执行自旋锁函数的加锁函数,所述加锁函数和解锁函数的属主进程为同一进程。
8.一种内核扩展函数安全访问装置,其特征在于,包括:
调用检查模块,用于在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量;
判断执行模块,用于对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310516742.5A CN103605921A (zh) | 2013-10-28 | 2013-10-28 | 内核扩展安全访问方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310516742.5A CN103605921A (zh) | 2013-10-28 | 2013-10-28 | 内核扩展安全访问方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103605921A true CN103605921A (zh) | 2014-02-26 |
Family
ID=50124142
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310516742.5A Pending CN103605921A (zh) | 2013-10-28 | 2013-10-28 | 内核扩展安全访问方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103605921A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942145A (zh) * | 2014-04-15 | 2014-07-23 | 清华大学 | 一种基于配对资源管理函数的自适应挖掘和分析方法 |
CN108959085A (zh) * | 2018-06-25 | 2018-12-07 | 清华大学 | 一种检测内核模块在原子上下文中休眠错误的方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6247025B1 (en) * | 1997-07-17 | 2001-06-12 | International Business Machines Corporation | Locking and unlocking mechanism for controlling concurrent access to objects |
CN102129391A (zh) * | 2011-03-14 | 2011-07-20 | 华中科技大学 | 一种数据库中自旋锁的实现方法 |
CN103049381A (zh) * | 2012-12-21 | 2013-04-17 | 清华大学 | 基于访问规则控制的内核扩展模块错误检测方法及装置 |
CN103176943A (zh) * | 2011-09-02 | 2013-06-26 | 辉达公司 | 用于功率优化的多处理器同步的方法 |
-
2013
- 2013-10-28 CN CN201310516742.5A patent/CN103605921A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6247025B1 (en) * | 1997-07-17 | 2001-06-12 | International Business Machines Corporation | Locking and unlocking mechanism for controlling concurrent access to objects |
CN102129391A (zh) * | 2011-03-14 | 2011-07-20 | 华中科技大学 | 一种数据库中自旋锁的实现方法 |
CN103176943A (zh) * | 2011-09-02 | 2013-06-26 | 辉达公司 | 用于功率优化的多处理器同步的方法 |
CN103049381A (zh) * | 2012-12-21 | 2013-04-17 | 清华大学 | 基于访问规则控制的内核扩展模块错误检测方法及装置 |
Non-Patent Citations (2)
Title |
---|
刘虎球 等: "一种新型内核扩展安全访问方法", 《小型微型计算机系统》, vol. 34, no. 10, 31 October 2013 (2013-10-31) * |
马超 等: "KFUR:一个新型内核扩展安全模型", 《计算机学报》, vol. 35, no. 10, 31 October 2012 (2012-10-31) * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942145A (zh) * | 2014-04-15 | 2014-07-23 | 清华大学 | 一种基于配对资源管理函数的自适应挖掘和分析方法 |
CN103942145B (zh) * | 2014-04-15 | 2016-08-17 | 清华大学 | 一种基于配对资源管理函数的自适应挖掘和分析方法 |
CN108959085A (zh) * | 2018-06-25 | 2018-12-07 | 清华大学 | 一种检测内核模块在原子上下文中休眠错误的方法及系统 |
CN108959085B (zh) * | 2018-06-25 | 2020-09-01 | 清华大学 | 一种检测内核模块在原子上下文中休眠错误的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Díaz et al. | Static analysis of source code security: Assessment of tools against SAMATE tests | |
US8918885B2 (en) | Automatic discovery of system integrity exposures in system code | |
Lin et al. | Check-then-act misuse of java concurrent collections | |
Lee et al. | Design and implementation of the secure compiler and virtual machine for developing secure IoT services | |
Cong et al. | Automatic fault injection for driver robustness testing | |
US8276021B2 (en) | Concurrency test effectiveness via mutation testing and dynamic lock elision | |
US20100131472A1 (en) | Detection and utilzation of inter-module dependencies | |
Zhu et al. | Mitigating access control vulnerabilities through interactive static analysis | |
Abidi et al. | Code smells for multi-language systems | |
Vanegue et al. | Towards practical reactive security audit using extended static checkers | |
EP3752945A1 (en) | Automatic generation of patches for security violations | |
Calvagna et al. | Automated conformance testing of Java virtual machines | |
CN103605921A (zh) | 内核扩展安全访问方法及装置 | |
Lin et al. | A study and toolkit of CHECK‐THEN‐ACT idioms of Java concurrent collections | |
Yu et al. | An approach to testing commercial embedded systems | |
Kim et al. | JRF-E: using model checking to give advice on eliminating memory model-related bugs | |
Xie et al. | Idea: interactive support for secure software development | |
Cotroneo et al. | Introduction to software fault injection | |
Saha et al. | Finding resource-release omission faults in linux | |
Zhioua et al. | Formal specification and verification of security guidelines | |
White | Secure Coding Assistant: enforcing secure coding practices using the Eclipse Development Environment | |
CN112416799A (zh) | 一种代码质量预警方法、装置、电子设备及存储介质 | |
Serbanuta et al. | Maximal causal models for multithreaded systems | |
Heckeler et al. | Accelerated model-based robustness testing of state machine implementations | |
Salles et al. | Can we rely on COTS microkernels for building fault-tolerant systems? |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140226 |