保护进程内存及确保驱动程序加载的安全性的方法

文档序号:6612787阅读:334来源:国知局
专利名称:保护进程内存及确保驱动程序加载的安全性的方法
技术领域
本发明涉及网络安全和系统安全领域,特别涉及保护进程内存及 确保驱动程序加载的安全性的方法。
背景技术
随着互联网技术的发展,网络安全问题日益突出,而由此带来的 系统安全性问题也越来越引起人们的关注。各种计算机病毒、木马程 序等恶意软件不仅让广大计算机用户防不胜防,同时也极大地制约着 包含电子商务在内的互联网相关产业的发展。因此,信息安全问题己 经成为涉及网上身份认证、网上支付技术在内的整个电子商务产业的 发展瓶颈。
一般地,这些恶意软件的破坏性是通过向系统的进程内存中非法 写入恶意代码或者在系统中安装恶意驱动程序而造成的。因此,如何 有效地防止非法写内存或者非法安装驱动程序成了抵制这类恶意软 件的关键,也成了保证网络安全和系统安全的关键。
当前,人们广为使用的操作系统的运行可被分为用户模式和内核 模式。在用户模式下,对来自外部的用户请求等进行处理,其相当于
计算机三环保护模型中的三环(Ring 3),具有最低权限级别。在内 核模式下,执行系统内核组件功能,通过系统内核函数等的执行来最 终响应用户请求,其对应于三环保护模型中的零环(Ring 0),具有 最高权限级别。
目前,人们开发出的多种网络防护和系统防护软件产品未能从系 统内核层的角度来考虑进行架构,即,未能在具有最高权限级别的内 核模式下防止恶意软件对内核层函数进行调用,从而不能从根源上抵 制恶意软件的破坏行为。由于这些产品的设计构架的局限性,其并不 能满足人们对于网络安全和系统安全的日益增长的需求。因此,需要能够从内核层来实现保护进程内存及确保驱动程序加 载的安全性的方法,以便更高效地抵制恶意软件的破坏行为。

发明内容
针对上述问题,本发明从系统的内核层出发来实现网络安全性和 系统安全性。
本发明的一个目的是对进程的写内存请求进行拦截和检测,以实 现执行写内存请求时的安全性。
本发明的另一个目的是对驱动程序的加载请求进行拦截和检测, 以实现执行驱动程序加载请求时的安全性。
为了实现上述目的,本发明提供一种保护进程内存的方法,包括-
(a) 在系统服务描述表(SSDT)中与NtWriteVirtualMemory函 数对应的系统服务号处,将NtWriteVirtualMemory函数的地址指针修 改为安全检测程序的地址指针;
(b) 接收进程的写内存请求;
(c) 在修改后的SSDT中查找所述系统服务号并调用所述安全
检测程序;以及
(d) 所述安全检测程序判断所述写内存请求是否受限,如果受 限,则执行规则处理,如果不受限,则调用NtWriteVirtualMemory函 数对所述进程进行写内存操作。
此外,本发明还提供一种确保驱动程序加载的安全性的方法,包

(a) 在系统服务描述表(SSDT)中与NtLoadDriver函数对应的 系统服务号处,将NtLoadDriver函数的地址指针修改为安全检测程 序的地址指针;
(b) 接收对驱动程序的加载请求;
(c) 在修改后的SSDT中查找所述系统服务号并调用所述安全 检测程序;以及
(d) 所述安全检测程序判断所述加载请求是否合法,如果合法, 则调用NtLoadDriver函数进行对所述驱动程序的加载操作,如果不合法,则执行规则处理。
本发明的方法具有安全、稳定、效率高、使用简便、通用性强等 特点。本发明可以广泛地用于保证系统安全性以及网络安全性。


图1示出根据本发明对系统服务描述表(SSDT)进行修改的示 意图2示出根据本发明的保护进程内存的方法的流程图3示出在根据本发明的保护进程内存的方法中所执行的规则
处理的示例性流程图4示出根据本发明的确保驱动程序加载的安全性的方法的流
程图;以及
图5示出在根据本发明的确保驱动程序加载的安全性的方法中 所执行的规则处理的示例性流程图。
具体实施例方式
当前使用的操作系统在接收到外部用户请求时,会经由系统服务 调用接口对相应的内核层函数进行调用,从而响应用户请求。对内核 层函数进行调用的过程主要为对用户请求进行解析,在系统服务描
述表(SSDT)中查找到相应的系统服务号及在该系统服务号处记录 的与之对应的指向内核层函数的地址指针,然后根据该地址指针调用 并执行函数。本发明保护进程内存的方法涉及内核层的 NtWriteVirtualMemory函数,而确保驱动程序加载的安全性的方法涉 及内核层的NtLoadDriver函数。基于以上描述的调用过程,例如, 可以通过对外部函数WriteVirtualMemory (用于写内存)和 OpenService (用于加载驱动程序)的执行过程分别进行跟踪,获得 NtWriteVirtualMemory函数和NtLoadDriver函数在SSDT中的系统服 务号及其地址指针。由此,便可通过对地址指针进行修改并进而由本 发明的安全检测程序进行安全性检测来实现本发明的目的,以下将种 此进行详细描述。图1示出根据本发明对SSDT进行修改的示意图。 在本发明中,为了利用安全检测程序实现对外部请求的拦截和检 测,在SSDT中分别对应于NtWriteVirtualMemory函数和 NtLoadDriver函数的系统月艮务号 Al 和 A2处,将 NtWriteVirtualMemory函数和NtLoadDriver函数的地址指针分别修改 为安全检测程序1和2的地址指针,其中,安全检测程序1可实现对 进程的写内存请求的安全检测,安全检测程序2可实现对驱动程序的 加载请求的安全检测。当外部请求到达并查找到SSDT的系统服务号 Al或A2处时,调用该服务号处此时记录的地址指针(即,修改后 的安全检测程序1或2的地址指针),由此,该外部请求实际上被拦 截并转向安全检测程序1或2,安全检测程序1或2进而可对外部请 求的安全性进行检测。可选地,安全检测程序1和2的功能可以集成 在一起,从而在SSDT被修改后,系统服务号Al和A2处所记录的 地址指针将指向相同的安全检测程序地址。
下面具体描述根据本发明的保护进程内存的方法。 图2示出根据本发明的保护进程内存的方法的流程图。 在步骤S20,在SSDT中与NtWriteVirtualMemory函数对应的系 统服务号Al处,将NtWriteVirtualMemory函数的地址指针修改为安 全检测程序l的地址指针。在步骤S22,接收进程的写内存请求。在 步骤S24,在修改后的SSDT中查找系统服务号A1,并根据A1处此 时记录的安全检测程序1的地址指针来调用安全检测程序1。在步骤 S26,安全检测程序1判断写内存请求是否是受限的,即,确定该写 内存请求是否由于其可能是恶意软件所发出并可能对安全性造成危 害而应受到限制,或者该写内存请求是否具有直接调用 NtWriteVirtualMemory函数的权限。如果该写内存请求受限,则执行 规则处理(将结合图3进行说明),如果不受限,则调用 NtWriteVirtualMemory函数对所述进程进行写内存操作。
可选地,在上述的步骤S20之前,例如,可以通过跟踪 WriteVirtualMemory函数的执行过程,获得NtWriteVirtualMemory函 数在SSDT中的系统服务号和地址指针。对于NtWriteVirtualMemory函数的系统服务号和地址指针的获取也可以采用本领域技术人员能 够借助的其它技术手段来实现。
可选地,在步骤S20中,还可以对NtWriteVirtualMemory函数的 地址指针进行存储,以便在后续的处理中由安全检测程序1调用。
在本发明的一个实施例中,可以在步骤S22之前建立受保护进程 列表。受保护进程列表中记录了为了实现安全性而应受到保护的进 程,例如网上支付进程等,由于这些进程可能涉及用户的隐私信息或 者其它保密信息,因此这些进程的内存不应被随意地写入。从而,步 骤S26中判断写内存请求是否受限的处理可以具体实现为判断所述 进程是否位于受保护进程列表中。如果所述进程位于受保护进程列表 中,则表明所述进程应受到保护而不应对其进程内存随意写入,因而 该写内存请求被判断为受限;如果所述进程不位于受保护进程列表 中,则表明所述进程不必受到保护并可以对其进程内存进行写入,因 而该写内存请求被判断为不受限。
在一种优选实施方式中,可以利用进程的全路径来对进程进行辨 别,从而,受保护进程列表中记录的将是所有受保护进程的全路径。 在判断一个进程是否位于受保护进程列表中时,可以利用全路径来对 进程进行匹配。例如,该判断过程可以为首先,解析所述进程的全 路径;然后,判断解析出的所述进程的全路径是否与受保护进程列表 中的某一进程的全路径相匹配;如果存在匹配,则判断所述写内存请 求为受限;如果不存在匹配,则判断所述写内存请求为不受限。
图3示出在根据本发明的保护进程内存的方法中所执行的规则 处理的示例性流程图。
在写内存请求被判断为受限后,在步骤S30,判断该写内存请求 是否需要交由用户处理。如果不需要由用户处理,则拒绝该写内存请 求;否则,交给用户进行处理并等待用户的处理结果(步骤S32)。 在步骤S34,判断用户是否接受该写内存请求。如果用户接受该写内 存请求,则调用NtWriteVirtualMemory函数对所述进程进行写内存操 作;如果用户不接受,则拒绝该写内存请求。
此外,可选地,规则处理也可以不必通过用户来进行,而是简单地直接拒绝写内存请求。
以上描述了通过修改SSDT来保护进程内存的方法。基于类似的 原理,本发明也可通过修改SSDT来确保驱动程序加载的安全性。
图4示出根据本发明的确保驱动程序加载的安全性的方法的流 程图。
在步骤S40,在SSDT中与NtLoadDriver函数对应的系统服务号 A2处,将NtLoadDriver函数的地址指针修改为安全检测程序2的地 址指针。在步骤S42,接收对驱动程序的加载请求。在步骤S44,在 修改后的SSDT中査找系统服务号A2,并根据A2处此时记录的安全 检测程序2的地址指针来调用安全检测程序2。在步骤S46,安全检 测程序2判断该加载请求是否是合法的,即,确定该加载请求是否由 于其可能是恶意软件所发出并可能对安全性造成危害而属于不合法 请求,或者该加载请求是否具有直接调用NtLoadDriver函数的权P艮。 如果该加载请求合法,则调用NtLoadDriver函数对所述驱动程序进 行加载操作;如果该加载请求不合法,则执行规则处理(将结合图5 进行说明)。
可选地,在上述的步骤S40之前,例如,可以通过跟踪OpenService 函数的执行过程,获得NtLoadDriver函数在SSDT中的系统服务号和 地址指针。对于NtLoadDriver函数的系统服务号和地址指针的获取
也可以采用本领域技术人员能够借助的其它技术手段来实现。
可选地,在步骤S40中,还可以对NtLoadDriver函数的地址指 针进行存储,以便在后续的处理中由安全检测程序2调用。
在本发明的一个实施例中,可以在步骤S42之前建立受信驱动程 序列表。受信驱动程序列表中记录了可信任且不会对安全性造成危害 的驱动程序,对于这些驱动程序可以直接进行加载操作,而未记录在 受信驱动程序列表中的驱动程序则被视为是不信任的,不能对其随意 地进行加载操作。从而,步骤S46中判断加载请求是否合法的处理可 以具体实现为判断所述驱动程序是否位于受信驱动程序列表中。如 果所述驱动程序位于受信驱动程序列表中,则表明所述驱动程,是可 信任的并可对其进行加载操作,因而该加载请求被判断为合法;如果所述驱动程序不位于受信驱动程序列表中,则表明所述驱动程序是不 信任的,因而该加载请求被判断为不合法。
在一种优选实施方式中,可以利用驱动程序的全路径来对驱动程 序进行辨别,从而,受信驱动程序列表中记录的将是所有受信驱动程 序的全路径。在判断一个驱动程序是否位于受信驱动程序列表中时, 可以利用全路径来对驱动程序进行匹配。例如,该判断过程可以为 首先,解析所述驱动程序的全路径;然后,判断解析出的所述驱动程 序的全路径是否与受信驱动程序列表中的某一驱动程序的全路径相 匹配;如果存在匹配,则判断所述加载请求为合法;如果不存在匹配, 则判断所述加载请求为不合法。
图5示出在根据本发明的确保驱动程序加载的安全性的方法中 所执行的规则处理的示例性流程图。
在对驱动程序的加载请求被判断为不合法后,在步骤S50,判断 该加载请求是否需要交由用户处理。如果不需要由用户处理,则拒绝 该加载请求;否则,交给用户进行处理并等待用户的处理结果(步骤 S52)。在步骤S54,判断用户是否接受该加载请求。如果用户接受该 加载请求,则调用NtLoadDriver函数对所述驱动程序进行加载操作; 如果用户不接受,则拒绝该加载请求。
此外,可选地,规则处理也可以不必通过用户来进行,而是简单 地直接拒绝加载请求。
以上描述了根据本发明的保护进程内存及确保驱动程序加载的 安全性的方法。由于本发明的方法是在系统的内核层实现的,所以具 有安全、稳定、效率高、使用简便、通用性强等特点。本发明可以广 泛地用于密码帐号保护、个人隐私保护等网络安全领域,并且对实现 系统的安全性具有积极意义。
权利要求
1、一种保护进程内存的方法,包括(a)在系统服务描述表(SSDT)中与NtWriteVirtualMemory函数对应的系统服务号处,将NtWriteVirtualMemory函数的地址指针修改为安全检测程序的地址指针;(b)接收进程的写内存请求;(c)在修改后的SSDT中查找所述系统服务号并调用所述安全检测程序;以及(d)所述安全检测程序判断所述写内存请求是否受限,如果受限,则执行规则处理,如果不受限,则调用NtWriteVirtualMemory函数对所述进程进行写内存操作。
2、 如权利要求1所述的保护进程内存的方法,其中,在步骤(a) 之前还包括通过跟踪WriteVirtualMemory函数的执行过程,获得 NtWriteVirtualMemory函数在SSDT中的所述系统服务号和所述地址 指针。
3、 如权利要求1所述的保护进程内存的方法,其中,步骤(a) 还包括对NtWriteVirtualMemory函数的所述地址指针进行存储。
4、 如权利要求1所述的保护进程内存的方法,其中,在步骤(b) 之前还包括建立受保护进程列表。
5、 如权利要求4所述的保护进程内存的方法,其中,步骤(d) 中判断所述写内存请求是否受限的处理包括判断所述进程是否位于 所述受保护进程列表中。
6、 如权利要求5所述的保护进程内存的方法,其中,如果所述 进程位于所述受保护进程列表中,则所述写内存请求被判断为受限;如果所述进程不位于所述受保护进程列表中,则所述写内存请求被判 断为不受限。
7、 如权利要求5所述的保护进程内存的方法,其中,判断所述进程是否位于所述受保护进程列表中的处理包括 解析所述进程的全路径;判断解析出的所述进程的全路径是否与受保护进程列表中的某 一进程的全路径匹配。
8、 如权利要求7所述的保护进程内存的方法,其中,如果存在 匹配,则所述写内存请求被判断为受限;如果不存在匹配,则所述写 内存请求被判断为不受限。
9、 如权利要求1所述的保护进程内存的方法,其中,所述规则 处理包括判断是否需要由用户处理;如果不需要由用户处理,则拒绝所述写内存请求, 否则,交给用户处理。
10、 如权利要求9所述的保护进程内存的方法,其中,如果用户 接受所述写内存请求,则调用NtWriteVirtualMemory函数进行写内存 操作;如果用户不接受,则拒绝所述写内存请求。
11、 如权利要求1所述的保护进程内存的方法,其中,所述规则 处理包括直接拒绝所述写内存请求。
12、 一种确保驱动程序加载的安全性的方法,包括(a)在系统服务描述表(SSDT)中与NtLoadDriver函数对应的 系统服务号处,将NtLoadDriver函数的地址指针修改为安全检测程 序的地址指针;(b) 接收对驱动程序的加载请求;(c) 在修改后的SSDT中查找所述系统服务号并调用所述安全 检测程序;以及(d) 所述安全检测程序判断所述加载请求是否合法,如果合法, 则调用NtLoadDriver函数进行对所述驱动程序的加载操作,如果不 合法,则执行规则处理。
13、 如权利要求12所述的确保驱动程序加载的安全性的方法, 其中,在步骤(a)之前还包括通过跟踪OpenService函数的执行过 程,获得NtLoadDriver函数在SSDT中的所述系统服务号和所述地址 指针。
14、 如权利要求12所述的确保驱动程序加载的安全性的方法, 其中,步骤(a)还包括对NtLoadDriver函数的所述地址指针进行存 储。
15、 如权利要求12所述的确保驱动程序加载的安全性的方法, 其中,在步骤(b)之前还包括建立受信驱动程序列表。
16、 如权利要求15所述的确保驱动程序加载的安全性的方法, 其中,步骤(d)中判断所述加载请求是否合法的处理包括判断所 述驱动程序是否位于所述受信驱动程序列表中。
17、 如权利要求16所述的确保驱动程序加载的安全性的方法, 其中,如果所述驱动程序位于所述受信驱动程序列表中,则所述加载 请求被判断为合法;如果所述驱动程序不位于所述受信驱动程序列表 中,则所述加载请求被判断为不合法。
18、 如权利要求16所述的确保驱动程序加载的安全性的方法, 其中,判断所述驱动程序是否位于所述受信驱动程序列表中的处理包括解析所述驱动程序的全路径;判断解析出的所述驱动程序的全路径是否与受信驱动程序列表 中的某一驱动程序的全路径匹配。
19、 如权利要求18所述的确保驱动程序加载的安全性的方法, 其中,如果存在匹配,则所述加载请求被判断为合法;如果不存在匹 配,则所述加载请求被判断为不合法。
20、 如权利要求12所述的确保驱动程序加载的安全性的方法, 其中,所述规则处理包括判断是否需要由用户处理;如果不需要由用户处理,则拒绝所述加载请求, 否则,交给用户处理。
21、 如权利要求20所述的确保驱动程序加载的安全性的方法, 其中,如果用户接受所述加载请求,则调用NtLoadDriver函数进行 对所述驱动程序的加载操作;如果用户不接受,则拒绝所述加载请求。
22、 如权利要求12所述的确保驱动程序加载的安全性的方法, 其中,所述规则处理包括直接拒绝所述加载请求。
全文摘要
本发明提供了保护进程内存及确保驱动程序加载的安全性的方法。所述方法包括在SSDT中与NtWriteVirtualMemory函数或NtLoadDriver函数对应的系统服务号处,将相应函数的地址指针修改为相应安全检测程序的地址指针;接收进程的写内存请求或对驱动程序的加载请求;在修改后的SSDT中查找相应的系统服务号并调用相应的安全检测程序;以及安全检测程序判断写内存请求或加载请求是否受限或合法,如果不受限或合法,则调用并执行NtWriteVirtualMemory函数或NtLoadDriver函数,如果受限或不合法,则执行规则处理。本发明的方法可广泛地用于保证网络安全性和系统安全性。
文档编号G06F21/00GK101414339SQ200710162449
公开日2009年4月22日 申请日期2007年10月15日 优先权日2007年10月15日
发明者宇 韩 申请人:北京瑞星国际软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1