发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种拦截系统调用的方法和相应的一种拦截系统调用的装置。
依据本发明的一个方面,提供了一种拦截系统调用的方法,应用于支持硬件虚拟化的CPU,所述方法包括:接受对本机操作系统的修改Patch操作,并在本机专用寄存器中生成与所述Patch操作相对应的真实值;
响应本机操作系统向所述本机专用寄存器发起的检测请求,将虚拟寄存器中的虚拟值返回至所述本机操作系统,以拦截所述本机专用寄存器待返回的所述真实值;
通过Patch后的本机操作系统,拦截系统调用;
其中,所述虚拟寄存器通过对所述本机操作系统进行硬件虚拟化生成得到;所述虚拟值是在所述接受对本机操作系统的修改Patch操作步骤之前,所述专用寄存器中生成的与所述本机操作系统的系统调用对应的初始值。
可选地,所述对本机操作系统的Patch操作包括:将驱动入口地址写入所述虚拟寄存器中;
所述通过Patch后的本机操作系统,拦截系统调用,包括:
当通过返回的所述虚拟值确定所述对本机操作系统的Patch操作为合法操作时,则
响应系统调用接口接收到的应用程序的系统调用请求,并向所述系统调用接口返回所述虚拟寄存器中的所述驱动入口地址;其中,所述系统调用请求用于请求待执行的系统调用;
将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述驱动入口地址所指示的驱动;
通过所述驱动拦截所述待执行的系统调用。
可选地,所述驱动入口地址包括主动防御驱动地址,所述主动防御驱动地址指示主动防御驱动所在的位置;
所述将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述驱动入口地址所指示的驱动,包括:
将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述主动防御驱动地址所指示的主动防御驱动。
可选地,所述通过所述驱动拦截所述待执行的系统调用包括:
通过所述主动防御驱动对所述待执行的系统调用进行安全判断,得到判断结果;其中,所述待执行的系统调用包括:执行本机操作系统内核提供的服务和执行所述本机操作系统环境由用户态切换到内核态的操作;
当所述安全判断结果为不安全时,通过所述主动防御驱动拦截所述待执行的系统调用。
可选地,所述对本机操作系统的Patch操作还包括:将执行所述待执行的系统调用的代码集写入所述虚拟寄存器中;
在所述得到判断结果步骤之后,所述通过所述驱动拦截所述待执行的系统调用还包括:
当所述安全判断结果为安全时,通过所述虚拟寄存器中的代码集执行所述待执行的系统调用。
可选地,所述对本机操作系统的Patch操作还包括:生成虚拟代码集寄存器,并将虚拟代码集写入所述虚拟代码集寄存器中;其中,所述待执行的系统调用通过所述虚拟代码集执行;
在所述得到判断结果步骤之后,所述通过所述驱动拦截所述待执行的系统调用还包括:
当所述安全判断结果为安全时,通过所述虚拟代码集执行所述待执行的系统调用。
可选地,所述主动防御驱动为第三方主动防御软件的驱动。
可选地,所述本机操作系统包括64位Windows操作系统。
根据本发明的另一方面,提供了一种拦截系统调用的装置,应用于支持硬件虚拟化的CPU,所述装置包括:
接受模块,用于接受对本机操作系统的修改Patch操作,并在本机专用寄存器中生成与所述Patch操作相对应的真实值;
虚拟值返回模块,用于响应本机操作系统向所述本机专用寄存器发起的检测请求,将虚拟寄存器中的虚拟值返回至所述本机操作系统,以拦截所述本机专用寄存器待返回的所述真实值;
拦截模块,用于通过Patch后的本机操作系统,拦截系统调用;
其中,所述虚拟寄存器通过对所述本机操作系统进行硬件虚拟化生成得到;所述虚拟值是在所述接受对本机操作系统的修改Patch操作步骤之前,所述专用寄存器中生成的与所述本机操作系统的系统调用对应的初始值。
可选地,所述对本机操作系统的Patch操作包括:将驱动入口地址写入所述虚拟寄存器中;
所述拦截模块包括:
地址返回模块,用于在通过返回的所述虚拟值确定所述对本机操作系统的Patch操作为合法操作时,响应系统调用接口接收到的应用程序的系统调用请求,并向所述系统调用接口返回所述虚拟寄存器中的所述驱动入口地址;其中,所述系统调用请求用于请求待执行的系统调用;
发送模块,用于将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述驱动入口地址所指示的驱动;
驱动拦截模块,用于通过所述驱动拦截所述待执行的系统调用。
可选地,所述驱动入口地址包括主动防御驱动地址,所述主动防御驱动地址指示主动防御驱动所在的位置;
所述发送模块,用于将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述主动防御驱动地址所指示的主动防御驱动。
可选地,所述驱动拦截模块包括:
安全判断模块,用于通过所述主动防御驱动对所述待执行的系统调用进行安全判断,得到判断结果;其中,所述待执行的系统调用包括:执行本机操作系统内核提供的服务和执行所述本机操作系统环境由用户态切换到内核态的操作;
主动防御驱动拦截模块,用于在所述安全判断结果为不安全时,通过所述主动防御驱动拦截所述系统调用。
可选地,所述对本机操作系统的Patch操作还包括:将执行所述待执行的系统调用的代码集写入所述虚拟寄存器中;
所述驱动拦截模块还包括:
第一执行模块,用于在所述安全判断模块得到判断结果之后,在所述安全判断结果为安全时,通过所述虚拟寄存器中的代码集执行所述待执行的系统调用。
可选地,所述对本机操作系统的Patch操作还包括:生成虚拟代码集寄存器,并将虚拟代码集写入所述虚拟代码集寄存器中;其中,所述待执行的系统调用通过所述虚拟代码集执行;
所述驱动拦截模块还包括:
第二执行模块,用于在所述安全判断模块得到判断结果之后,在所述安全判断结果为安全时,通过所述虚拟代码集执行所述待执行的系统调用。
可选地,所述主动防御驱动为第三方主动防御软件的驱动。
可选地,所述本机操作系统包括64位Windows操作系统。
本发明提供的一种拦截系统调用的方法和装置,应用于支持硬件虚拟化的CPU,通过将虚拟寄存器中的虚拟值返回至所述本机操作系统,使得Patch Guard检测可以通过,避免了蓝屏。从而实现了利用第三方主动防御软件对Windows平台(特别是无法修改内核的64位乃至更高位)进行Patch操作,第三方主动防御软件通过对操作系统的Patch操作,进而可以在64位Windows平台上对系统调用进行拦截,提供完整的主动防御功能,为用户计算机系统解决了现有的安全隐患问题,提高了安全性能。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1,示出了本发明第一实施例中一种拦截系统调用的方法的流程图。
在本发明实施例中,所述拦截系统调用的方法应用于支持硬件虚拟化的CPU。本发明所述的方法利用CPU(Central Processing Unit,中央处理器)(例如Intel或AMD)的硬件虚拟化来扩展支持,实现在64位甚至更高位的Windows平台上实现完整的行为拦截。其中,硬件虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了Intel-VT技术的支持,Guest OS和虚拟机VMM(VMM Virtual Machine Monitor,虚拟机)的执行环境自动地完全隔离开来,Guest OS有自己的寄存器,可以直接运行在最高级别。硬件虚拟化能够具有独立的操作平台,实现对不安全行为的拦截及处理。虚拟化技术的具体原理为:
虚拟化技术允许物理机器(例如服务器、PC(Personal Computer,个人电脑)机、平板电脑等)被分区或共享,以使该机器的底层硬件呈现为一个或多个独立工作的虚拟机。虚拟机监控程序可在计算机上运行,并向其他软件呈现一个或多个虚拟机的抽象。每个虚拟机可用作运行其自己的操作系统(Operating System,OS)和/或应用程序软件的自持平台。虚拟机内执行的软件执行可以被称为客户软件。客户软件可期望如同在专用计算机上而不是在VM(Virtual Machine,虚拟机)上运行,此时,VMM和Guest OS共享底层的处理器资源。即,客户软件可期望控制各种事件,并可访问计算机(例如物理机)上的硬件资源。该物理机器的硬件资源可包括一个或多个处理器、驻留在该处理器上的资源(例如控制寄存器、高速缓存以及其他)、存储器(以及诸如描述符表的驻留在存储器内的结构)以及驻留在物理机中的其他资源(例如输入—输出(I/O)设备)。
在本发明实施例中,所述拦截系统调用的方法应用于支持硬件虚拟化的CPU,所述方法可以包括:
步骤102,接受对本机操作系统的修改Patch操作,并在本机专用寄存器中生成与所述Patch操作相对应的真实值。
目前,大多数微处理器都支持两种模式:用户模式(User/Normal)和内核模式(Kernel/Privileged)。操作系统内核代码和关键数据都处于内核模式,而一般用户模式的程序只能访问私有地址空间和执行非特权等级的指令。对于每个操作系统从应用层到操作系统层,内核模式拥有各种管理系统的权限,应用层没有权限管理各个进程,应用程序需通过系统调用等方式才能从系统内核中调用不同的系统功能。不同的系统根据CPU类型,采用不同的调用方式和调用指令。在具体实现时,可以在操作系统中设置一个模式专用寄存器,所述模式专用寄存器中存储有不同操作系统进入内核模式时分别采用的调用方式和调用指令。应用程序可以通过所述模式专用寄存器中存储的数据直接进入到内核模式,如果第三方主动防御软件要完成对所述应用程序的监控和行为拦截,则需要对本机操作系统进行Patch操作。
例如:在64位Windows操作系统中具有一个操作系统调用接口(System call),所述操作系统服务调用接口定义了Windows内核提供的大量服务,并且提供了操作系统环境由用户模式切换到内核模式的功能。在系统服务调度表中的每一项包含了一个指向系统服务程序的指针,Hook时修改这个指针使其指向自定义的系统服务的地址。Parameter Table是在系统调用过程中传递的参数,系统服务调用程序Ki System Service严格校验传递的每一个参数,并将其参数从线程的用户堆栈中复制到系统的核心堆栈以备使用。应用程序可以通过所述操作系统调用接口进入内核模式,调用内核中的系统功能。所述操作系统调用接口中的函数值、和/或参数值、和/或指令程序可以保存在64位Windows系统下的LSTAR模式专用寄存器中。第三方主动防御软件对所述应用程序进行行为拦截时,对本机操作系统进行Patch操作,修改LSTAR模式专用寄存器中存储的数据的值。同时,专用寄存器可以根据修改后的数据的值生成用于进行Patch Guard校验的真实值;所述真实值可以是根据修改后的数据的值生成的哈希值、或MD5值(MessaGe-DiGest AlGorithm5,MD5,信息-摘要算法)、或CRC(Cyclic Redundancy Check,循环冗余校验码)。进一步地,在第三方主动防御软件对本机操作系统进行Patch操作之前,专用寄存器还可以根据存储的数据的值,生成用于进行Patch Guard(禁止修改)校验的初始值。
步骤104,响应本机操作系统向所述本机专用寄存器发起的检测请求,将虚拟寄存器中的虚拟值返回至所述本机操作系统,以拦截所述本机专用寄存器待返回的所述真实值。
其中,所述虚拟寄存器通过对所述本机操作系统进行硬件虚拟化生成得到;所述虚拟值是在所述接受对本机操作系统的修改Patch操作步骤之前,所述专用寄存器中生成的与所述本机操作系统的系统调用对应的初始值。
在本发明实施例中,由于64为Windows操作系统中增加了PatchGuard机制,在所述Patch Guard机制下,本机操作系统会对本机专用寄存器发起检测请求,获取专用寄存器中当前生成的用于校验的真实值,当专用寄存器当前生成的真实值与前文中所述的初始值相同时,本机操作系统则正常运行;当第三方主动防御软件对本机操作系统进行Patch操作后,专用寄存器当前生成的真实值与前文中所述的初始值不同时,本机将进入蓝屏死机。蓝屏死机是指本机操作系统系统错误,且无法从系统错误中恢复时所显示的屏幕图像。为了避免在第三方主动防御软件对本机操作系统进行Patch操作之后本机进入蓝屏死机情况的发生,在本发明实施例中,将虚拟寄存器根据所述初始值虚拟得到的虚拟值返回至本机操作系统,同时拦截专用寄存器待返回的真实值。由于虚拟值与所述初始值相同,因此,本机操作系统可以继续正常运行。
步骤106,通过Patch后的本机操作系统,拦截系统调用。
在本发明实施例中,按照操作系统模式的划分,可以将实时获取应用程序系统调用的方法分为两大类:通过在操作系统用户态挂接例程,截获相关进程的调用;以及通过在操作系统内核态挂接例程,截获相关进程的调用。
以第三方主动防御软件在Windows平台上常用的内核态例程挂接(Kernel Mode Routine Hooking)为例,微软公司在内核里设计了一张系统服务派发表(SSDT,System Service Dispatch Table),系统服务派发表里的例程涵盖了:文件操作、注册表操作、进程操作、线程操作、内存操作、对象操作等功能。第三方主动防御软件通过对操作系统的Patch操作(例如:替换系统服务派发表里的处理例程),可以达到截获系统调用的目的。进一步地,由于上述调用过程是区分进程的,因此进程的行为可以通过SSDT劫持(SSDT Hooking)来获取。因此,第三方主动防御软件通过对操作系统的Patch操作,可以实现对系统调用的拦截。
可选地,对系统调用进行拦截除了采用SSDT劫持的方法之外,微软官方文档中还推荐使用回调(Callback)的方法来实现行为监控。回调机制是微软操作系统内核集成的事件通知解决方案,在某些事件发生时(如进程创建时、线程创建时、模块加载时),系统会主动通知回调的注册者,也可以获取进程的系统调用行为。
综上所述,本发明提供的一种拦截系统调用的方法,应用于支持硬件虚拟化的CPU,通过将虚拟寄存器中的虚拟值返回至所述本机操作系统,使得Patch Guard检测可以通过,避免了蓝屏。从而实现了利用第三方主动防御软件对Windows平台(特别是无法修改内核的64位乃至更高位)进行Patch操作,进而可以在64位Windows平台上对系统调用进行拦截,提供完整的主动防御功能,为用户计算机系统解决了现有的安全隐患问题,提高了安全性能。
参照图2,示出了本发明第二实施例中一种拦截系统调用的方法的流程图。
在本发明实施例中,由于X86和X86-64体系结构的CPU不满足Popek和Goldberg定理中关于高效VMM的定义,Intel与AMD各自为自己的CPU设计了一套硬件虚拟化扩展支持,分别为Intel-VT与AMD-V,以此来改进处理器加速虚拟化。其基本原理是提供了一种新的操作模式,VMM处于不受限的操作模式,而无论0环的客户操作系统或是3环的客户应用软件都运行在受限的操作模式。客户操作系统或者客户应用软件的敏感行为和事件皆可被VMM感知与拦截。利用此功能,通过将当前运行的Windows操作系统作为客户系统置入受限的操作模式(如Intel-VT的non-root VMX模式)。同时,可以利用驱动程序的最高权限使得CPU运行在支持虚拟化扩展的VMM模式下,使用硬件虚拟化扩展拦截监控该Windows操作系统的虚拟化平台。
在本发明实施例中,所述拦截系统调用的方法应用于支持硬件虚拟化的CPU,所述方法可以包括:
步骤202,接受对本机操作系统的修改Patch操作,并在本机专用寄存器中生成与所述Patch操作相对应的真实值。
步骤204,响应本机操作系统向所述本机专用寄存器发起的检测请求,将虚拟寄存器中的虚拟值返回至所述本机操作系统,以拦截所述本机专用寄存器待返回的所述真实值。
其中,所述虚拟寄存器通过对所述本机操作系统进行硬件虚拟化生成得到;所述虚拟值是在所述接受对本机操作系统的修改Patch操作步骤之前,所述专用寄存器中生成的与所述本机操作系统的系统调用对应的初始值。
在本发明实施例中,第三方主动防御软件通过对本机操作系统进行Patch操作,修改64位Windows操作系统中的LSTAR模式专用寄存器的内容(所述LSTAR模式专用寄存器中的内容可以是系统调用内核模式的入口地址),这样所有来自应用程序的系统调用请求都会先转移至第三方主动防御软件修改的地址,从而对应用程序的系统调用行为进行监控,拦截恶意程序对操作系统的攻击,从而对保护操作系统进行保护。但是,正常情况下,当64位Windows操作系统中的Patch Guard检测到第三方主动防御软件对本机操作系统进行了Patch操作时,本机会直接蓝屏。在本发明实施例中,通过利用虚拟寄存器返回满足Patch Guard检测的虚拟值,使得Patch Guard检查正常通过。从而实现了第三方主动防御软件对操作系统的保护。这里需要说明的是,Patch Guard机制是64位Windows操作系统自带的内核保护系统,防止任何非授权软件对内核进行Patch操作。Patch Guard机制能够有效防止内核模式驱动改动或替换内核的任何内容,对操作系统进行保护。
在本发明实施例中,通过虚拟寄存器返回的虚拟值使得Patch Guard检查正常通过,从而实现了Patch Guard机制和第三方主动防御软件并存,共同对操作系统进行保护的目的。
步骤206,通过Patch后的本机操作系统,拦截系统调用。
在本发明实施例中,所述对本机操作系统的Patch操作可以包括:将驱动入口地址写入所述虚拟寄存器中。所述步骤206可以包括:
子步骤2062,当通过返回的所述虚拟值确定所述对本机操作系统的Patch操作为合法操作时,则响应系统调用接口接收到的应用程序的系统调用请求,并向所述系统调用接口返回所述虚拟寄存器中的所述驱动入口地址。其中,所述系统调用请求用于请求待执行的系统调用。
在本发明实施例中,所述虚拟寄存器中还可以包括驱动入口地址。第三方主动防御软件利用虚拟值通过Patch Guard的检测,使得第三方主动防御软件对本机操作系统的Patch操作合法化,本机操作系统可以正常运行,进而可以响应系统调用接口接收到的应用程序的系统调用请求,并向所述系统调用接口返回所述虚拟寄存器中的所述驱动入口地址。
子步骤2064,将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述驱动入口地址所指示的驱动。
在具体实现时,所述驱动入口地址可以包括主动防御驱动地址,所述主动防御驱动地址指示主动防御驱动所在的位置。较佳地,所述子步骤2064可以包括:
子步骤20642,将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述主动防御驱动地址所指示的主动防御驱动。
子步骤2066,通过所述驱动拦截所述待执行的系统调用。
在本发明实施例中,所述子步骤2066可以包括:
子步骤20662,通过所述主动防御驱动对所述待执行的系统调用进行安全判断,得到判断结果。其中,所述待执行的系统调用包括:执行本机操作系统内核提供的服务和执行所述本机操作系统环境由用户态切换到内核态的操作。
在本发明实施例中,在执行所述待执行的系统调用之前,增加了将所述待执行的系统调用发送到主动防御驱动中进行分析和监控的步骤,从而可以对操作系统调用进行有效的识别和拦截,提高了操作系统的安全性。其中,主动防御驱动对所述待执行的系统调用的分析和监控具体方法可以如下:在操作系统中具有一个应用程序规范行为库,所述应用程序规范行为库可以预先搜集各应用程序的规范行为并存储在服务器或者客户端中。应用程序的规范行为包括应用程序正常运行时可能出现的所有系统调用行为,这些规范的系统调用行为可以通过分析,如人工分析、软件二进制逆向分析、软件行为记录并基于神经网络等算法的训练和学习等方式确定。当获取到应用程序的实时系统调用行为时,首先会从应用程序规范行为库中查找到所述应用程序,再找到所述应用程序对应的规范系统调用行为集合,比较所述实时系统调用行为是否属于规范系统调用行为集合,若不属于,则说明所述实时系统调用行为可能会有潜在的危险,从而确定应用程序出现异常。
在本发明实施例中,较佳地,所述对本机操作系统的Patch操作还包括:将执行所述待执行的系统调用的代码集写入所述虚拟寄存器中。所述子步骤2066还可以包括:
子步骤20664,当所述安全判断结果为不安全时,通过所述主动防御驱动拦截所述待执行的系统调用。
又一较佳地,所述对本机操作系统的Patch操作还包括:生成虚拟代码集寄存器,并将虚拟代码集写入所述虚拟代码集寄存器中;其中,所述待执行的系统调用通过所述虚拟代码集执行。在本发明实施例中,还可以逐条指令分析操作系统调用接口中的KiSystemCall64函数,根据KiSystemCall64函数内容构造一份虚拟代码集,所述虚拟代码集运行起来的功能和KiSystemCall64函数实现的功能一致。所述子步骤2066还可以包括:
子步骤20666,当所述安全判断结果为安全时,通过所述虚拟寄存器中的代码集执行所述待执行的系统调用。
这里需要说明的是,所述本机操作系统包括但不仅限于64位Windows操作系统,还可以是更高位的Windows操作系统。所述主动防御驱动可以包括但不仅限于第三方主动防御软件的驱动。
综上所述,本发明提供的一种拦截系统调用的方法,应用于支持硬件虚拟化的CPU,过将虚拟寄存器中的虚拟值返回至所述本机操作系统,使得Patch Guard检测可以通过,避免了蓝屏。支持第三主动防御软件在64位操作系统上对操作系统的Patch操作,解决了现有技术无法在64位甚至更高位的Windows系统上实现的安全行为与事件的拦截的问题,为操作系统提供了完整有效的主动防御功能。
进一步地,在本发明实施例中,VMM处于不受限的操作模式,而无论0环的客户操作系统或是3环的客户应用软件都运行在受限的操作模式下,因此,客户操作系统或者客户应用软件的敏感行为和事件皆可被VMM感知与拦截。进而,第三方主动防御软件不仅能利用微软的标准接口对文件、注册表、进程与线程对象提供防护,还能通过Patch操作系统,从而有效阻止如窗口消息攻击、利用RPC等进程间通信机制攻击等对操作系统的攻击行为。解决了现有的64位Windows上存在的安全隐患问题,提高了操作系统的安全性能。
需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必需的。
基于与上述拦截系统调用的方法同一发明构思,参照图3,示出了本发明第三实施例中一种拦截系统调用的装置的结构框图。所述拦截系统调用的装置,应用于支持硬件虚拟化的CPU,所述装置可以包括:
接受模块302,用于接受对本机操作系统的修改Patch操作,并在本机专用寄存器中生成与所述Patch操作相对应的真实值。
虚拟值返回模块304,用于响应本机操作系统向所述本机专用寄存器发起的检测请求,将虚拟寄存器中的虚拟值返回至所述本机操作系统,以拦截所述本机专用寄存器待返回的所述真实值。
其中,所述虚拟寄存器通过对所述本机操作系统进行硬件虚拟化生成得到;所述虚拟值是在所述接受对本机操作系统的修改Patch操作步骤之前,所述专用寄存器中生成的与所述本机操作系统的系统调用对应的初始值。
拦截模块306,用于通过Patch后的本机操作系统,拦截系统调用。
综上所述,本发明提供的一种拦截系统调用的装置,应用于支持硬件虚拟化的CPU,通过将虚拟寄存器中的虚拟值返回至所述本机操作系统,使得Patch Guard检测可以通过,避免了蓝屏。从而实现了利用第三方软件对Windows平台(特别是无法修改内核的64位乃至更高位)进行Patch操作,可以在64位Windows平台上提供完整的主动防御产品,为用户计算机系统解决了现有的安全隐患问题,提高了安全性能。
参照图4,示出了本发明第四实施例中一种拦截系统调用的装置的结构框图。所述拦截系统调用的装置,应用于支持硬件虚拟化的CPU,所述装置可以包括:
接受模块402,用于接受对本机操作系统的修改Patch操作,并在本机专用寄存器中生成与所述Patch操作相对应的真实值。
虚拟值返回模块404,用于响应本机操作系统向所述本机专用寄存器发起的检测请求,将虚拟寄存器中的虚拟值返回至所述本机操作系统,以拦截所述本机专用寄存器待返回的所述真实值。
其中,所述虚拟寄存器通过对所述本机操作系统进行硬件虚拟化生成得到;所述虚拟值是在所述接受对本机操作系统的修改Patch操作步骤之前,所述专用寄存器中生成的与所述本机操作系统的系统调用对应的初始值。
拦截模块406,用于通过Patch后的本机操作系统,拦截系统调用。
在本发明实施例中,所述对本机操作系统的Patch操作包括:将驱动入口地址写入所述虚拟寄存器中。所述拦截模块406可以包括:
地址返回模块4062,用于在通过返回的所述虚拟值确定所述对本机操作系统的Patch操作为合法操作时,响应系统调用接口接收到的应用程序的系统调用请求,并向所述系统调用接口返回所述虚拟寄存器中的所述驱动入口地址;其中,所述系统调用请求用于请求待执行的系统调用。在通过返回的所述虚拟值确定所述对本机操作系统的Patch操作为合法操作时,响应系统调用接口接收到的应用程序的系统调用请求,并向所述系统调用接口返回所述虚拟寄存器中的所述驱动入口地址。其中,所述虚拟寄存器中包括驱动入口地址。
发送模块4064,用于将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述驱动入口地址所指示的驱动。
在具体实现时,所述驱动入口地址可以包括主动防御驱动地址,所述主动防御驱动地址指示主动防御驱动所在的位置。所述发送模块4064,具体用于将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述主动防御驱动地址所指示的主动防御驱动。
驱动拦截模块4066,用于通过所述驱动拦截所述待执行的系统调用。
在本发明实施例中,所述驱动拦截模块4066可以包括:
安全判断模块40662,用于通过所述主动防御驱动对所述待执行的系统调用进行安全判断,得到判断结果;其中,所述待执行的系统调用包括:执行本机操作系统内核提供的服务和执行所述本机操作系统环境由用户态切换到内核态的操作。
主动防御驱动拦截模块40664,用于在所述安全判断结果为不安全时,通过所述主动防御驱动拦截所述系统调用。
在本发明实施例中,较佳地,所述对本机操作系统的Patch操作还包括:将执行所述待执行的系统调用的代码集写入所述虚拟寄存器中。所述驱动拦截模块4066,还包括:
第一执行模块40666,用于在所述安全判断模块得到判断结果之后,在所述安全判断结果为安全时,通过所述虚拟寄存器中的代码集执行所述待执行的系统调用。
在本发明实施例中,又一较佳地,所述对本机操作系统的Patch操作还包括:生成虚拟代码集寄存器,并将虚拟代码集写入所述虚拟代码集寄存器中;其中,所述待执行的系统调用通过所述虚拟代码集执行。所述驱动拦截模块4066,还包括:
第二执行模块40668,用于在所述安全判断模块得到判断结果之后,在所述安全判断结果为安全时,通过所述虚拟代码集执行所述待执行的系统调用。
这里需要说明的是,所述本机操作系统包括但不仅限于64位Windows操作系统,还可以是更高位的Windows操作系统。所述主动防御驱动可以包括但不仅限于第三方主动防御软件的驱动。
综上所述,本发明提供的一种拦截系统调用的装置,应用于支持硬件虚拟化的CPU,过将虚拟寄存器中的虚拟值返回至所述本机操作系统,使得Patch Guard检测可以通过,避免了蓝屏。支持第三主动防御软件在64位操作系统上对操作系统的Patch操作,从而实现了Patch Guard机制和第三方主动防御软件并存,共同对操作系统进行保护的目的,提高了操作系统的安全程度。
对于上述装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的一种拦截系统调用的设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种拦截系统调用的方法,应用于支持硬件虚拟化的CPU,所述方法包括:
接受对本机操作系统的修改Patch操作,并在本机专用寄存器中生成与所述Patch操作相对应的真实值;
响应本机操作系统向所述本机专用寄存器发起的检测请求,将虚拟寄存器中的虚拟值返回至所述本机操作系统,以拦截所述本机专用寄存器待返回的所述真实值;
通过Patch后的本机操作系统,拦截系统调用;
其中,所述虚拟寄存器通过对所述本机操作系统进行硬件虚拟化生成得到;所述虚拟值是在所述接受对本机操作系统的修改Patch操作步骤之前,所述专用寄存器中生成的与所述本机操作系统的系统调用对应的初始值。
A2、如A1所述的方法,所述对本机操作系统的Patch操作包括:将驱动入口地址写入所述虚拟寄存器中;
所述通过Patch后的本机操作系统,拦截系统调用,包括:
当通过返回的所述虚拟值确定所述对本机操作系统的Patch操作为合法操作时,则
响应系统调用接口接收到的应用程序的系统调用请求,并向所述系统调用接口返回所述虚拟寄存器中的所述驱动入口地址;其中,所述系统调用请求用于请求待执行的系统调用;
将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述驱动入口地址所指示的驱动;
通过所述驱动拦截所述待执行的系统调用。
A3、如A2所述的方法,所述驱动入口地址包括主动防御驱动地址,所述主动防御驱动地址指示主动防御驱动所在的位置;
所述将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述驱动入口地址所指示的驱动,包括:
将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述主动防御驱动地址所指示的主动防御驱动。
A4、如A3所述的方法,所述通过所述驱动拦截所述待执行的系统调用包括:
通过所述主动防御驱动对所述待执行的系统调用进行安全判断,得到判断结果;其中,所述待执行的系统调用包括:执行本机操作系统内核提供的服务和执行所述本机操作系统环境由用户态切换到内核态的操作;
当所述安全判断结果为不安全时,通过所述主动防御驱动拦截所述待执行的系统调用。
A5、如A4所述的方法,所述对本机操作系统的Patch操作还包括:将执行所述待执行的系统调用的代码集写入所述虚拟寄存器中;
在所述得到判断结果步骤之后,所述通过所述驱动拦截所述待执行的系统调用还包括:
当所述安全判断结果为安全时,通过所述虚拟寄存器中的代码集执行所述待执行的系统调用。
A6、如A4所述的方法,所述对本机操作系统的Patch操作还包括:生成虚拟代码集寄存器,并将虚拟代码集写入所述虚拟代码集寄存器中;其中,所述待执行的系统调用通过所述虚拟代码集执行;
在所述得到判断结果步骤之后,所述通过所述驱动拦截所述待执行的系统调用还包括:
当所述安全判断结果为安全时,通过所述虚拟代码集执行所述待执行的系统调用。
A7、如A3-A6任一项所述的方法,所述主动防御驱动为第三方主动防御软件的驱动。
A8、如A1-A6任一项所述的方法,所述本机操作系统包括64位Windows操作系统。
本发明还公开了B9、一种拦截系统调用的装置,应用于支持硬件虚拟化的CPU,所述装置包括:
接受模块,用于接受对本机操作系统的修改Patch操作,并在本机专用寄存器中生成与所述Patch操作相对应的真实值;
虚拟值返回模块,用于响应本机操作系统向所述本机专用寄存器发起的检测请求,将虚拟寄存器中的虚拟值返回至所述本机操作系统,以拦截所述本机专用寄存器待返回的所述真实值;
拦截模块,用于通过Patch后的本机操作系统,拦截系统调用;
其中,所述虚拟寄存器通过对所述本机操作系统进行硬件虚拟化生成得到;所述虚拟值是在所述接受对本机操作系统的修改Patch操作步骤之前,所述专用寄存器中生成的与所述本机操作系统的系统调用对应的初始值。
B10、如B9所述的装置,所述对本机操作系统的Patch操作包括:将驱动入口地址写入所述虚拟寄存器中;
所述拦截模块包括:
地址返回模块,用于在通过返回的所述虚拟值确定所述对本机操作系统的Patch操作为合法操作时,响应系统调用接口接收到的应用程序的系统调用请求,并向所述系统调用接口返回所述虚拟寄存器中的所述驱动入口地址;其中,所述系统调用请求用于请求待执行的系统调用;
发送模块,用于将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述驱动入口地址所指示的驱动;
驱动拦截模块,用于通过所述驱动拦截所述待执行的系统调用。
B11、如B10所述的装置,所述驱动入口地址包括主动防御驱动地址,所述主动防御驱动地址指示主动防御驱动所在的位置;
所述发送模块,用于将所述应用程序的系统调用请求所请求的所述待执行的系统调用发送至所述主动防御驱动地址所指示的主动防御驱动。
B12、如B11所述的装置,
所述驱动拦截模块包括:
安全判断模块,用于通过所述主动防御驱动对所述待执行的系统调用进行安全判断,得到判断结果;其中,所述待执行的系统调用包括:执行本机操作系统内核提供的服务和执行所述本机操作系统环境由用户态切换到内核态的操作;
主动防御驱动拦截模块,用于在所述安全判断结果为不安全时,通过所述主动防御驱动拦截所述系统调用。
B13、如B12所述的装置,所述对本机操作系统的Patch操作还包括:将执行所述待执行的系统调用的代码集写入所述虚拟寄存器中;
所述驱动拦截模块还包括:
第一执行模块,用于在所述安全判断模块得到判断结果之后,在所述安全判断结果为安全时,通过所述虚拟寄存器中的代码集执行所述待执行的系统调用。
B14、如B12所述的装置,所述对本机操作系统的Patch操作还包括:生成虚拟代码集寄存器,并将虚拟代码集写入所述虚拟代码集寄存器中;其中,所述待执行的系统调用通过所述虚拟代码集执行;
所述驱动拦截模块还包括:
第二执行模块,用于在所述安全判断模块得到判断结果之后,在所述安全判断结果为安全时,通过所述虚拟代码集执行所述待执行的系统调用。
B15、如B11-B14任一项所述的装置,所述主动防御驱动为第三方主动防御软件的驱动。
B16、如B9-B14任一项所述的装置,所述本机操作系统包括64位Windows操作系统。