公开/公告号CN101414339A
专利类型发明专利
公开/公告日2009-04-22
原文格式PDF
申请/专利权人 北京瑞星国际软件有限公司;
申请/专利号CN200710162449.8
发明设计人 韩宇;
申请日2007-10-15
分类号G06F21/22(20060101);
代理机构72002 永新专利商标代理有限公司;
代理人王英
地址 100080 北京市中关村大街22号中科大厦1305室
入库时间 2023-12-17 21:49:12
法律状态公告日
法律状态信息
法律状态
2018-03-16
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F21/22 变更前: 变更后: 申请日:20071015
专利权人的姓名或者名称、地址的变更
2016-05-11
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F21/22 变更前: 变更后: 申请日:20071015
专利权人的姓名或者名称、地址的变更
2012-05-23
授权
授权
2010-12-08
实质审查的生效 IPC(主分类):G06F21/22 申请日:20071015
实质审查的生效
2010-05-19
专利申请权的转移 IPC(主分类):G06F21/22 变更前: 变更后: 登记生效日:20100413 申请日:20071015
专利申请权、专利权的转移
2009-04-22
公开
公开
查看全部
技术领域
本发明涉及网络安全和系统安全领域,特别涉及保护进程内存及确保驱动程序加载的安全性的方法。
背景技术
随着互联网技术的发展,网络安全问题日益突出,而由此带来的系统安全性问题也越来越引起人们的关注。各种计算机病毒、木马程序等恶意软件不仅让广大计算机用户防不胜防,同时也极大地制约着包含电子商务在内的互联网相关产业的发展。因此,信息安全问题已经成为涉及网上身份认证、网上支付技术在内的整个电子商务产业的发展瓶颈。
一般地,这些恶意软件的破坏性是通过向系统的进程内存中非法写入恶意代码或者在系统中安装恶意驱动程序而造成的。因此,如何有效地防止非法写内存或者非法安装驱动程序成了抵制这类恶意软件的关键,也成了保证网络安全和系统安全的关键。
当前,人们广为使用的操作系统的运行可被分为用户模式和内核模式。在用户模式下,对来自外部的用户请求等进行处理,其相当于计算机三环保护模型中的三环(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函数的系统服务号A1和A2处,将NtWriteVirtualMemory函数和NtLoadDriver函数的地址指针分别修改为安全检测程序1和2的地址指针,其中,安全检测程序1可实现对进程的写内存请求的安全检测,安全检测程序2可实现对驱动程序的加载请求的安全检测。当外部请求到达并查找到SSDT的系统服务号A1或A2处时,调用该服务号处此时记录的地址指针(即,修改后的安全检测程序1或2的地址指针),由此,该外部请求实际上被拦截并转向安全检测程序1或2,安全检测程序1或2进而可对外部请求的安全性进行检测。可选地,安全检测程序1和2的功能可以集成在一起,从而在SSDT被修改后,系统服务号A1和A2处所记录的地址指针将指向相同的安全检测程序地址。
下面具体描述根据本发明的保护进程内存的方法。
图2示出根据本发明的保护进程内存的方法的流程图。
在步骤S20,在SSDT中与NtWriteVirtualMemory函数对应的系统服务号A1处,将NtWriteVirtualMemory函数的地址指针修改为安全检测程序1的地址指针。在步骤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函数的权限。如果该加载请求合法,则调用NtLoadDriver函数对所述驱动程序进行加载操作;如果该加载请求不合法,则执行规则处理(将结合图5进行说明)。
可选地,在上述的步骤S40之前,例如,可以通过跟踪OpenService函数的执行过程,获得NtLoadDriver函数在SSDT中的系统服务号和地址指针。对于NtLoadDriver函数的系统服务号和地址指针的获取也可以采用本领域技术人员能够借助的其它技术手段来实现。
可选地,在步骤S40中,还可以对NtLoadDriver函数的地址指针进行存储,以便在后续的处理中由安全检测程序2调用。
在本发明的一个实施例中,可以在步骤S42之前建立受信驱动程序列表。受信驱动程序列表中记录了可信任且不会对安全性造成危害的驱动程序,对于这些驱动程序可以直接进行加载操作,而未记录在受信驱动程序列表中的驱动程序则被视为是不信任的,不能对其随意地进行加载操作。从而,步骤S46中判断加载请求是否合法的处理可以具体实现为:判断所述驱动程序是否位于受信驱动程序列表中。如果所述驱动程序位于受信驱动程序列表中,则表明所述驱动程序是可信任的并可对其进行加载操作,因而该加载请求被判断为合法;如果所述驱动程序不位于受信驱动程序列表中,则表明所述驱动程序是不信任的,因而该加载请求被判断为不合法。
在一种优选实施方式中,可以利用驱动程序的全路径来对驱动程序进行辨别,从而,受信驱动程序列表中记录的将是所有受信驱动程序的全路径。在判断一个驱动程序是否位于受信驱动程序列表中时,可以利用全路径来对驱动程序进行匹配。例如,该判断过程可以为:首先,解析所述驱动程序的全路径;然后,判断解析出的所述驱动程序的全路径是否与受信驱动程序列表中的某一驱动程序的全路径相匹配;如果存在匹配,则判断所述加载请求为合法;如果不存在匹配,则判断所述加载请求为不合法。
图5示出在根据本发明的确保驱动程序加载的安全性的方法中所执行的规则处理的示例性流程图。
在对驱动程序的加载请求被判断为不合法后,在步骤S50,判断该加载请求是否需要交由用户处理。如果不需要由用户处理,则拒绝该加载请求;否则,交给用户进行处理并等待用户的处理结果(步骤S52)。在步骤S54,判断用户是否接受该加载请求。如果用户接受该加载请求,则调用NtLoadDriver函数对所述驱动程序进行加载操作;如果用户不接受,则拒绝该加载请求。
此外,可选地,规则处理也可以不必通过用户来进行,而是简单地直接拒绝加载请求。
以上描述了根据本发明的保护进程内存及确保驱动程序加载的安全性的方法。由于本发明的方法是在系统的内核层实现的,所以具有安全、稳定、效率高、使用简便、通用性强等特点。本发明可以广泛地用于密码帐号保护、个人隐私保护等网络安全领域,并且对实现系统的安全性具有积极意义。
机译: 控制机床的方法,尤其是用于调整和确保用于实现相同功能的工具加载操作和软件产品的安全性的方法
机译: 完全建立计算机系统后,通过DOS提示符将设备驱动程序加载到内存中的方法,尤其是将设备驱动程序加载到内存中的方法
机译: 完全建立计算机系统后,通过DOS提示符将设备驱动程序加载到内存中的方法,尤其是将设备驱动程序加载到内存中的方法