内核扩展安全访问方法及装置制造方法
【专利摘要】本发明涉及计算机安全防范【技术领域】,公开了一种内嵌规则的内核扩展安全访问方法,包括:S1:在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则;S2:对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致对不会引起系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。本发明的方法使得开发者能够直接调用内核扩展函数,而不必要关心内核扩展内部的使用规则,运行时动态检测内核扩展函数的使用规范性,对不正确的轻量级错误进行容错,危险错误则终止运行,并给出警告,从而提高驱动的可靠性和安全性。
【专利说明】内核扩展安全访问方法及装置
【技术领域】
[0001]本发明涉及计算机安全防范【技术领域】,特别涉及一种内核扩展安全访问方法及装置。
【背景技术】
[0002]驱动程序作为内核扩展的主要使用者,对系统的可靠性和安全性影响极大。由于 驱动开发者相比内核开发者,对系统的熟悉程度存在一定差距,同时部分驱动还存在源码 不公开,功能测试常常依赖于具体的硬件,使得测试不够全面,因此驱动自身的问题较多。 在Window Xp分析报告中指出,85%的系统崩溃与驱动相关。
[0003]另外,驱动开发者和内核本身的利益取向也不完全一致。驱动开发者常常希望从 内核中获得尽量大的权限,尽量多的资源,便于自身的运行。但是,因为自身的安全缺陷,部 分驱动对权限和资源的管理不够细致,从而成为系统的安全漏洞。驱动的权限和资源获取 均依赖于内核扩展实现,因此在内核扩展的接口位置对权限和资源获取进行审计和访问控 制是较为可行的。
[0004]已有的一些安全报告指出了大量扩展相关的安全漏洞和攻击实例。其中包括比较 常见的空指针、权限漏检、缓冲区溢出、整数错、数据未初始化予以引用等问题。系统中该类 通用的安全问题一旦被恶意攻击者发现,将产生巨大的经济损失。现行的一些源码的静态 分析方法和动态检测方法并不能很好的解决驱动的非开源、内嵌恶意代码等一系列问题。
[0005]在原有的内核扩展中,各个函数相对较为独立,函数之间的约束关系需要开发者 维护,开发者的要求相对较高,仍然不可避免地产生由于驱动导致的安全性问题。
【发明内容】
[0006](一)要解决的技术问题
[0007]本发明要解决的技术问题是:如何提高驱动程序的可靠性和安全性
[0008](二)技术方案
[0009]为解决上述技术问题,本发明提供了一种内核扩展函数安全访问方法,包括步 骤:
[0010]S1:在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规 贝U,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应 的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变 量;
[0011]S2:对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩 溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
[0012]其中,所述步骤SI中,检查驱动对内核扩展函数的调用是否满足预定的使用规则 具体包括:在所述状态变量所处的当前状态下,根据约束条件变量判定是否允许执行所述 内核扩展函数的访问。[0013]其中,所述步骤SI中,所述状态变量用于记录所述内核扩展函数所属对象实例的 当前状态;约束条件变量用于记录所述对象实例是否允许所述对象实例的当前属主进程执 行所述内核扩展函数的访问。
[0014]其中,所述内核扩展函数所属的对象实例的当前状态包括:是否已经初始化完毕, 能否允许进行读写。
[0015]其中,所述内核扩展函数所属的对象实例的当前状态包括:该内核扩展函数的使 用顺序。
[0016]其中,所述步骤S2中,所述进行容错具体包括:
[0017]允许所述驱动访问所述内核扩展函数,且通过审计日志记录驱动的信息及所述驱 动访问内核扩展函数的内容。
[0018]其中,所述内核扩展函数为自旋锁的扩展函数,包括:初始化函数、加锁函数及解 锁函数,所述自旋锁的使用规则包括:自旋锁状态变量和自旋锁约束条件变量;
[0019]所述自旋锁状态变量包括:初始化变量、加解锁状态变量;
[0020]所述自旋锁约束条件变量包括:自旋锁函数的加锁函数和解锁函数的属主进程必 须为相同的进程的标识;
[0021]在驱动访问内核时,检查驱动对自旋锁的扩展函数调用是否满足预定的使用规则 具体包括:
[0022]调用初始化函数初始化自旋锁;
[0023]在初始化,且加锁状态下,可执行自旋锁函数的解锁函数,在初始化,且解锁状态 下,可执行自旋锁函数的加锁函数,所述加锁函数和解锁函数的属主进程为同一进程。
[0024]本发明还提供了一种内核扩展函数安全访问装置,包括:
[0025]调用检查模块,用于在驱动访问内核时,检查驱动对内核扩展函数的调用是否满 足预定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所 述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数 的约束条件变量;
[0026]判断执行模块,用于对于不满足所述使用规则的内核扩展函数的调用,若所述调 用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容 错。
[0027](三)有益效果
[0028]本发明提供的内嵌规则的内核扩展安全访问方法,使得开发者能够直接调用内核 扩展函数,而不必要关心内核扩展内部的使用规则,运行时动态检测内核扩展函数的使用 规范性,对不正确的轻量级错误进行容错,危险错误则终止运行,并给出警告,从而提高驱 动的可靠性和安全性。
【专利附图】
【附图说明】
[0029]图1是本发明实施例的一种内核扩展安全访问方法流程图;
[0030]图2是本发明实施例的一种内核扩展安全访问装置结构示意图。
【具体实施方式】[0031]下面结合附图和实施例,对本发明的【具体实施方式】作进一步详细描述。以下实施 例用于说明本发明,但不用来限制本发明的范围。
[0032]本发明的内嵌规则的内核扩展安全访问方法流程如图1所示,包括:
[0033]步骤S110,在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的 使用规则。所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规 则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条
件变量。
[0034]本实施例中,可以预先在内核扩展函数所属的类中定义相关的变量,并在内核扩 展函数中增加相关的变量参数和/或对相关的变量的判断语句。并将新的核扩展函数接口 提供给驱动,以供其调用。
[0035]其中,检查驱动对内核扩展函数的调用是否满足预定的使用规则具体包括:在所 述状态变量所处的当前状态下,根据约束条件变量判定是否允许执行所述内核扩展函数的 访问。所述状态变量用于记录内核扩展函数所属的对象实例的当前状态;约束条件变量用 于记录所述对象实例是否允许所述对象实例的当前属主进程执行所述内核扩展函数的访 问。
[0036]其中,内核扩展函数所属的对象实例的当前状态包括:是否已经初始化完毕,能否 允许进行读写;内核扩展函数的使用顺序等。由于不同的内核扩展函数具有不同的是使用 规则,因此,在内核扩展函数所属的对象实例中包括所述使用规则相应的变量。例如该变量 作为函数的参数或返回值。
[0037]步骤S120,对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致 系统崩溃和安全漏洞的错误调用,则终止所述驱动运行(即终止驱动对该内核扩展函数的 访问),并给出警告,否则进行容错。本步骤中,对于不满足所述使用规则的内核扩展调用按 照错误的严重性分别处理,其中,对不正确的轻量级错误调用进行容错,危险错误调用则终 止驱动运行,并给出警告。错误调用对其它进程影响较小,甚至对系统的稳定性产生影响较 小时,则尝试进行容错,即允许驱动访问所述内核扩展函数,且通过审计日志记录驱动的信 息及所述驱动访问内核扩展函数的内容。对于会导致系统的稳定性和安全漏洞的错误调 用,则需要终止该驱动的运行,防止对系统和其它模块产生影响。
[0038]本实施例的方法使得开发者能够直接调用内核扩展函数,而不必要关心内核扩展 内部的使用规则,运行时动态检测内核扩展函数的使用规范性,对不正确的轻量级错误进 行容错,危险错误则终止运行,并给出警告,从而提高驱动的可靠性和安全性。
[0039]以下结合自旋锁(spin_loCk)为例对本发明进行说明。
[0040]自旋锁的使用规则主要是:自旋锁在加锁之前必须初始化;自旋锁在解锁之前必 须依据加锁;自旋锁在加锁之后不能再次加锁。另外,关于自旋锁的属性约束则主要是:自 旋锁的加、解锁函数的属主需要是同一个进程。
[0041]在内核扩展中实现自旋锁的使用规则,通过在spin_lock的spin_lock_t实例增 加两个状态变量,一个状态变量标记自旋锁的执行状态(标识自旋锁处于加锁还是解锁状 态),另一个状态变量用于标记自旋锁的进程属主,并将原来的自旋锁相关的内核扩展函数 实现成如下内核扩展的接口形式:
[0042]void spin_lock_init_safe(spinlock_t*lock)[0043]int spin_trylock—safe(spinlock—t木lock)
[0044]void spin—lock—safe(spinlock—t*lock)
[0045]void spin—unlock—safe(spinlock—t木lock)
[0046]修改驱动源码,使得驱动源码调用修改后的内核扩展接口,通过使用简单的宏即可实现,具体如下:
[0047]#define spin_lock—init spin_lock_init_safe
[0048]#define spin_trylock spin_trylock—safe
[0049]#define spin—lockspin—lock—safe
[0050]#define spin—unlock spin—unlock—safe
[0051]并在驱动文件的末尾加上:
[0052]#undef(spin_lock_init)
[0053]#undef(spin_trylock)
[0054]#undef (spin_lock)
[0055]#undef(spin_unlock)
[0056]编译上述修改后的内核扩展,同时编译使用了安全内核扩展函数的驱动模块,重启计算机即可加载修改后的驱动。
[0057]运行时动态检查内核扩展的使用是否满足规则,对于不满足规则的内核扩展调用首先分析是否违反了自旋锁的使用规则,对于加锁之前没有初始化的自旋锁,调用自旋锁初始化函数进行容错;对于重复加锁的终止该驱动运行并提出警告;对于解锁时,自旋锁没有处于加锁状态的直接返回,并提交警告,但是不会终止运行;同时对于通过规则审查的内核扩展调用执行属性约束审查,判断解锁的进程是否和之前加锁的进程号一致。若不一致,则终止驱动运行,并提交警告。
[0058]结合上述描述,针对自旋锁的反复加锁攻击以及恶意解锁攻击均能够成功防御。
[0059]本发明还提供了一种内核扩展安全访问装置,如图2中所示:主要包括:调用检查模块210和判断执行模块220。
[0060]调用检查模块210,用于在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量, 所述使用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量;
[0061]判断执行模块220,用于对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
[0062]以上实施方式仅用于说明本发明,而并非对本发明的限制,有关【技术领域】的普通技术人员,在不脱离本发 明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
【权利要求】
1.一种内核扩展函数安全访问方法,其特征在于,包括步骤:S1:在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预定的使用规则,所 述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使用规则相应的变量 包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约束条件变量;S2:对于不满足所述使用规则的内核扩展函数的调用,若所述调用为导致系统崩溃和 安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
2.根据权利要求1所述的内核扩展函数安全访问方法,其特征在于,所述步骤SI中,检 查驱动对内核扩展函数的调用是否满足预定的使用规则具体包括:在所述状态变量所处的 当前状态下,根据约束条件变量判定是否允许执行所述内核扩展函数的访问。
3.根据权利要求1所述的内核扩展函数安全访问方法,其特征在于,所述步骤SI中,所 述状态变量用于记录所述内核扩展函数所属对象实例的当前状态;约束条件变量用于记录 所述对象实例是否允许所述对象实例的当前属主进程执行所述内核扩展函数的访问。
4.根据权利要求3所述的内核扩展函数安全访问方法,其特征在于,所述内核扩展函 数所属的对象实例的当前状态包括:是否已经初始化完毕,能否允许进行读写。
5.根据权利要求3所述的内核扩展函数安全访问方法,其特征在于,所述内核扩展函 数所属的对象实例的当前状态包括:该内核扩展函数的使用顺序。
6.根据权利要求1所述的内核扩展函数安全访问方法,其特征在于,所述步骤S2中,所 述进行容错具体包括:允许所述驱动访问所述内核扩展函数,且通过审计日志记录驱动的信息及所述驱动访 问内核扩展函数的内容。
7.根据权利要求1?6中任一项所述的内核扩展函数安全访问方法,其特征在于,所述 内核扩展函数为自旋锁的扩展函数,包括:初始化函数、加锁函数及解锁函数,所述自旋锁 的使用规则包括:自旋锁状态变量和自旋锁约束条件变量;所述自旋锁状态变量包括:初始化变量、加解锁状态变量;所述自旋锁约束条件变量包括:自旋锁函数的加锁函数和解锁函数的属主进程必须为 相同的进程的标识;在驱动访问内核时,检查驱动对自旋锁的扩展函数调用是否满足预定的使用规则具体 包括:调用初始化函数初始化自旋锁;在初始化,且加锁状态下,可执行自旋锁函数的解锁函数,在初始化,且解锁状态下,可 执行自旋锁函数的加锁函数,所述加锁函数和解锁函数的属主进程为同一进程。
8.一种内核扩展函数安全访问装置,其特征在于,包括:调用检查模块,用于在驱动访问内核时,检查驱动对内核扩展函数的调用是否满足预 定的使用规则,所述内核扩展函数所属对象实例中包括所述使用规则相应的变量,所述使 用规则相应的变量包括:内核扩展函数所属对象实例的状态变量和使用内核扩展函数的约 束条件变量;判断执行模块,用于对于不满足所述使用规则的内核扩展函数的调用,若所述调用为 导致系统崩溃和安全漏洞的错误调用,则终止所述驱动运行,并给出警告,否则进行容错。
【文档编号】G06F21/57GK103605921SQ201310516742
【公开日】2014年2月26日 申请日期:2013年10月28日 优先权日:2013年10月28日
【发明者】胡事民, 刘虎球, 白家驹, 马超 申请人:清华大学