CN103605921A - 内核扩展安全访问方法及装置 - Google Patents

内核扩展安全访问方法及装置 Download PDF

Info

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
Application number
CN201310516742.5A
Other languages
English (en)
Inventor
胡事民
刘虎球
白家驹
马超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CN201310516742.5A priority Critical patent/CN103605921A/zh
Publication of CN103605921A publication Critical patent/CN103605921A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying 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.一种内核扩展函数安全访问装置,其特征在于,包括:
调用检查模块,用于在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量;
判断执行模块,用于对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
CN201310516742.5A 2013-10-28 2013-10-28 内核扩展安全访问方法及装置 Pending CN103605921A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 辉达公司 用于功率优化的多处理器同步的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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