CN111737656B - 面向应用程序的特权硬件资源访问方法及电子设备 - Google Patents
面向应用程序的特权硬件资源访问方法及电子设备 Download PDFInfo
- Publication number
- CN111737656B CN111737656B CN202010473124.7A CN202010473124A CN111737656B CN 111737656 B CN111737656 B CN 111737656B CN 202010473124 A CN202010473124 A CN 202010473124A CN 111737656 B CN111737656 B CN 111737656B
- Authority
- CN
- China
- Prior art keywords
- mode
- root mode
- privileged
- root
- application
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 71
- 238000012545 processing Methods 0.000 claims description 33
- 230000006870 function Effects 0.000 claims description 20
- 230000008569 process Effects 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 11
- 230000005856 abnormality Effects 0.000 claims description 10
- 230000001960 triggered effect Effects 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 2
- 238000003672 processing method Methods 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 101100452681 Arabidopsis thaliana INVD gene Proteins 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000008260 defense mechanism Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000007727 signaling mechanism Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/123—Restricting unauthorised execution of programs by using dedicated hardware, e.g. dongles, smart cards, cryptographic processors, global positioning systems [GPS] devices
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Remote Sensing (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Radar, Positioning & Navigation (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供一种面向应用程序的特权硬件资源访问方法及电子设备,其中,所述方法将CPU操作模式划分为根模式和非根模式,每种模式具有相应的内核态与用户态。所述方法包括:在非根模式的内核态下运行所述应用程序;以及限制所述应用程序对非授权特权指令的执行。其中,所述非授权特权指令指的是用于访问所述应用程序无权访问的特权硬件资源的指令。本发明提升了应用程序访问特权硬件资源的性能、安全性以及通用性。
Description
技术领域
本发明涉及计算机***安全及***虚拟化技术领域,更具体地,涉及一种面向应用程序的特权硬件资源访问方法以及电子设备。
背景技术
随着各种计算机设备的广泛应用,针对计算机***的攻击手段也越来越多。为了应对现实世界中的各种安全威胁,人们对计算机***的安全性提出了更高的要求。目前,部分研究人员提出通过限制应用程序对特权硬件资源的访问来提高计算机***的安全性,这样做的原因是当应用程序被攻击者攻击时,应用程序拥有的资源越少,攻击者能够利用的资源也越少,因而攻击者的能力将受到限制,使计算机***免于遭受更大的安全威胁。还有一部分研究人员利用特权硬件资源来增强应用程序的能力,以实现更强的防御机制,例如利用Intel处理器中的记录路径信息的硬件Intel处理器跟踪单元(Intel ProcessorTrace,IPT)实现更精确的控制流完整性检查,利用最后分支记录单元(Last BranchRecording,LBR)防御面向返回地址编程的攻击,利用性能监测单元(PerformanceMonitoring Unit,PMU)检测***中受到的基于缓存的侧信道攻击等。
由于在现有的操作***设计中,用户态下的应用程序无法直接访问特权硬件资源,因此对特权硬件资源的利用主要通过使用内核模块或使用虚拟设备的方式来完成。其中,使用内核模块的方式包括在操作***运行过程中将内核模块装载到内核中,将该内核模块运行在内核态下,由此可以在该内核模块中访问特权硬件资源;使用虚拟设备的方式需要开发者在***中创建一个虚拟设备,当应用程序访问特权硬件资源时,首先与该虚拟设备通信,然后在虚拟设备中完成对特权硬件资源的访问,最后由虚拟设备将结果返回给应用程序。使用内核模块的方式通常性能较好(即访问效率较高),但由于编写内核模块的过程比较复杂,并且实现不同功能的内核模块之间可能存在冲突而无法共存于同一个计算机***中,因此该方式的通用性较低。使用虚拟设备的方式通常安全性较高,然而该方式需要陷入内核执行大量的内核代码,这导致性能较差(即访问效率较低),并且不适用于需要频繁访问特权硬件资源的场景;此外,使用虚拟设备的方式需要针对不同的场景创建不同的虚拟设备,因此其通用性也比较低。
另外还有一种利用特权硬件资源的方式,该方式将应用程序放到内核态下运行,其性能较好并且通用性较高(例如Dune,其由小型内核模块组成)。然而,这种方式的安全性较低,这是由于内核态下的所有特权硬件资源都暴露给了应用程序,一旦应用程序被攻击者控制,则攻击者将具有使用所有特权硬件资源的权限,利用这些权限,攻击者可以进行危害更大的攻击,导致应用程序乃至整个计算机***都会受到影响。
发明内容
为解决上述现有技术中存在的问题,根据本发明的一个实施例,提供一种面向应用程序的特权硬件资源访问方法,该方法将CPU操作模式划分为根模式和非根模式,其中每种模式具有相应的内核态与用户态。该方法包括:在非根模式的内核态下运行所述应用程序;以及限制所述应用程序对非授权特权指令的执行,其中,所述非授权特权指令指的是用于访问所述应用程序无权访问的特权硬件资源的指令。
上述方法中,限制所述应用程序对非授权特权指令的执行可以包括:响应于截获触发虚拟机下陷的非授权特权指令,停止所述非授权特权指令的执行。上述方法还可以包括:响应于确定非授权特权指令是条件下陷指令,将所述非授权特权指令配置为在执行时触发虚拟机下陷。
上述方法还可以包括:将非授权特权指令配置为在执行时引发异常以触发虚拟机下陷,并且限制所述应用程序对非授权特权指令的执行包括:响应于截获引发异常而触发虚拟机下陷的非授权特权指令,停止所述非授权特权指令的执行。
上述方法中,限制所述应用程序对非授权特权指令的执行可以包括:无效所述非授权特权指令的执行结果。
上述方法还可以包括通过以下步骤配置非根模式下的内存:将所述根模式下最高一级页表的用户空间部分拷贝至所述非根模式;以及所述非根模式复用所述根模式下除最高一级页表之外的其他级页表。
上述方法还可以包括:在***调用的入口处触发虚拟机下陷;虚拟机下陷后,在所述根模式下调用***调用处理函数以处理***调用;以及从所述根模式返回所述非根模式。
上述方法还可以包括:在发生中断或异常时触发虚拟机下陷;虚拟机下陷后,在所述根模式下调用中断处理函数以处理中断,或者在所述根模式下调用异常处理函数以处理异常;以及从所述根模式返回所述非根模式。
上述方法中,从所述根模式返回所述非根模式包括:确定是否存在待处理的信号,其中所述信号用于通知发生异步事件;响应于确定存在待处理的信号,部署信号栈以存储寄存器状态,并且返回所述非根模式;在所述非根模式下执行信号处理函数,并且重新触发虚拟机下陷;在所述根模式下根据所述信号栈上存储的寄存器状态恢复之前的寄存器;以及返回所述非根模式以继续运行所述应用程序。
据本发明的一个实施例,还提供一种电子设备,所述电子设备包括处理器和用于存储一个或多个计算机程序的存储器,当所述一个或多个计算机程序被所述处理器执行时,使得所述电子设备实现上述面向应用程序的特权硬件资源访问方法。
本发明实施例提供如下的有益效果:
1.利用硬件辅助虚拟化技术将应用程序运行在非根模式的内核态下,实现了应用程序对特权硬件资源的直接访问,因此访问效率较高。同时,应用程序只能访问提前定制好的有权访问的那些特权硬件资源,因而应用程序在内核态下运行时不会给攻击者带来额外的攻击面,从而保证了应用程序在内核态下运行的安全性。另外,应用程序运行在非根模式下,其与运行在根模式下的宿主机操作***有效地隔离开,从而对应用程序的任何攻击都无法影响宿主机操作***,保证了宿主操作***的安全性。开发人员可以利用应用程序的配置文件实现对特权硬件资源的定制,因此通用性较高。
2.提供了一种虚拟化环境下的内存配置,并且对应用程序运行过程中的***调用处理、异常和中断处理、信号处理进行了优化,使得应用程序在非根模式的内核态下能够正确运行。其中,应用程序在非根模式下无法访问内核空间内存,保证了安全性,同时无需使用EPT机制,因此提高了应用程序的访存效率;此外,将***调用、异常和中断转交至根模式下进行处理,避免给应用程序带来额外的安全威胁,从而进一步提高了安全性。
附图说明
以下将通过参考附图对示例性实施例进行详细描述,附图意在描绘示例性实施例而不应被解释为对权利要求的预期范围加以限制。除非明确指出,否则附图不被认为依比例绘制。
图1示出根据本发明一个实施例的特权硬件定制化平台的结构框图;
图2示出根据本发明一个实施例的面向应用程序的特权硬件资源访问方法的流程图;
图3示出根据本发明一个实施例的虚拟化环境下的内存布局示意图;
图4示出根据本发明一个实施例的针对信号的处理方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如上文所述,为使用户态下的应用程序访问特权硬件资源,当前常用的使用内核模块或者虚拟设备的方式存在性能较差、通用性较低等问题;而将应用程序直接运行在内核态下(例如Dune)来直接访问特权硬件资源的方式,又会给应用程序新增过多权限,使攻击者获得更大的攻击面,导致安全性较低。为解决这些问题,本发明利用硬件辅助虚拟化技术,将应用程序运行在非根模式的内核态下,使得应用程序既能够直接访问特权硬件资源,又不给攻击者带来更大攻击面。
当前,硬件辅助虚拟化技术包括但不限于Intel的VT-x以及AMD的AMD-V。以Intel的VT-x为例,虚拟机监视器(VMM)和客户机操作***(Guest OS)分别运行在不同的CPU操作模式下,即分别运行在VMX根模式(或称VMX Root模式、宿主机模式、Root模式,后文统称为根模式)和VMX非根模式(或称VMX Non-Root模式、客户机模式、Non-Root模式,后文统称为非根模式)下,根模式和非根模式都具有相应的CPU运行级别0-3(Ring0-Ring3)。通常情况下,Guest OS的核心指令可以无需经过VMM,直接下达到计算机***硬件进行执行。当GuestOS执行到特殊指令(例如,用于访问特权硬件资源的特权指令)的时候,***切换到VMM,让VMM来处理特殊指令。在硬件辅助虚拟化技术中,利用虚拟机控制结构(Virtual MachineControl Structure,VMCS)来保存两种CPU操作模式下的状态,以便实现CPU操作模式之间的转换,例如,VMM可以配置VMCS以确定非根模式下的哪个指令或者哪个异常可以导致虚拟机下陷(VM-Exit,指示CPU操作模式从非根模式转换到根模式);另外,也可以通过VMCALL指令来手动触发虚拟机下陷。
本发明利用上述硬件辅助虚拟化技术提供一种特权硬件定制化平台,具体而言,该特权硬件定制化平台利用了Intel的VT-x。图1示意性地示出了该特权硬件定制化平台的结构框图,如图1所示,应用程序运行在非根模式下(更准确地说,运行在非根模式的内核态下),宿主机操作***运行在根模式下(更准确地说,运行在根模式的内核态下)。其中,宿主机操作***装载有事先编写好的内核模块,该内核模块用于启动应用程序,并且进行***调用处理、异常和中断处理以及信号处理等。
基于上述特权硬件定制化平台,根据本发明的一个实施例,提供一种面向应用程序的特权硬件资源访问方法。该方法利用硬件辅助虚拟化技术,将CPU操作模式划分为根模式和非根模式,以提供两种类型的VMX操作,其中每种模式具有相应的内核态与用户态(换句话说,每种模式具有相应的CPU运行级别Ring0-Ring3)。
图2示意性地示出根据本发明一个实施例的面向应用程序的特权硬件资源访问方法的流程图,如图2所示,该方法包括以下步骤:
1.在非根模式的内核态下运行应用程序。
首先,在宿主机操作***中装载一个内核模块,由该内核模块开启虚拟化并创建虚拟设备。在开启虚拟化之后提供非根模式和根模式两种CPU操作模式,当前***环境(包括内核和所有进程)在根模式下运行。
应用程序启动时处于根模式的用户态下,随后,该应用程序与内核模块所创建的虚拟设备通信以传送其运行信息,内核模块根据该运行信息创建并配置一个虚拟化环境,接着将处理器切换到非根模式的内核态(Ring0)下运行。此时,虚拟化环境中运行的代码是应用程序的代码,并且应用程序运行在非根模式的内核态下。
2.限制应用程序对非授权特权指令的执行,其中,非授权特权指令指的是用于访问应用程序无权访问的特权硬件资源的指令。
为保证安全性,应用程序只能访问开发人员为其定制的特权硬件资源,而无权访问其他的特权硬件资源。在一个实施例中,开发人员可以通过配置文件来实现对特权硬件资源的定制,例如在应用程序的配置文件中记录该应用程序有权访问哪个/哪些特权硬件资源。这样,在应用程序启动时可以根据其配置文件来判断应用程序是否能够访问某个/某些特权硬件资源。
对特权硬件资源的访问是通过相应的特权指令来完成的,根据本发明的一个实施例,可以将特权指令进行分类,如表1所示,针对不同类别的特权指令执行不同的特权指令防护方法,这些特权指令防护方法可用于限制应用程序对非授权特权指令的执行。
表1
特权指令分类 | 特权指令名称 |
硬件相关 | HLT/INVD/INVPLG等 |
描述符表相关 | LGDT/LIDT/LLDT等 |
控制寄存器/Debug寄存器相关 | MOV CR0/CR3/DR0等 |
模块指定寄存器相关 | RDMSR/WRMSR/SWAPGS等 |
输入输出相关 | IN/INS/OUT/OUTS等 |
段相关 | LAR/LDS/LES/MOV DS等 |
虚拟化相关 | VMLAUNCH/VMRESUME等 |
其他特权指令 | CLI/STI等 |
表2示出了特权指令的另一分类示例,其中,特权指令被分为三个类别,分别是EXIT类、INV类和EXP类。
表2
基于表2所示的分类示例,根据本发明的一个实施例,针对特权指令的三个类别分别提供如下三种特权指令防护方法,以限制在非根模式的内核态下对非授权特权指令的执行:
①响应于截获触发虚拟机下陷的特权指令(例如,表2中所示的EXIT类特权指令),停止该特权指令的执行。
在当前的硬件辅助虚拟化技术中,根模式下的VMM能够监视虚拟机中的关键行为。表2中所示的EXIT类特权指令在非根模式的内核态下执行时,若触发虚拟机下陷则可以由VMM截获,在截获后,内核模块可以停止该特权指令的执行。
表2中所示的EXIT类特权指令可进一步划分为无条件下陷指令和条件下陷指令。其中,无条件下陷指令(如表2第1-2行所示的特权指令)的执行一定会触发虚拟机下陷,而条件下陷指令(如表2第3-9行所示的特权指令)的执行是否会触发虚拟机下陷取决于VMCS中的相应配置。为限制应用程序在非根模式的内核态下执行条件下陷指令,根据本发明的一个实施例,将EXIT类特权指令中的条件下陷指令配置成在执行时触发虚拟机下陷,从而使得VMM能够截获这些特权指令,以便停止这些特权指令的执行。
②将特权指令(例如,表2中所示的EXP类特权指令)配置为在执行时引发异常以触发虚拟机下陷,响应于截获引发异常而触发虚拟机下陷的特权指令,停止该特权指令的执行。
具体地,针对表2中所示的EXP类特权指令,将其配置为在执行时引发异常,从而由异常触发虚拟机下陷。根据本发明的一个实施例,引发异常包括:
■引发#UD异常
例如,针对表2第20行所示的特权指令,可以通过在VMCS中关闭对它们的支持,从而使得在执行这些特权指令时引发#UD异常,根模式下的VMM能够截获这些特权指令的执行,内核模块可用于停止这些特权指令的执行。
■引发#GP异常
例如,针对表2第16-18行所示的与段操作相关的特权指令,利用段描述符缓存结构,在段寄存器的描述符高速缓存中填入正确的段描述符信息,并将段描述符表设置为空。更具体地,在VMCS的Guest域中设置所有段寄存器的内容,包括选择子(selector)和相应的段描述符信息,在进入非根模式时这些信息将直接装载到Guest段寄存器中,同时将Guest域中GDTR和LDTR寄存器中的base和limit字段的值设置为0。当应用程序执行段切换操作时,处理器在访问段描述符表时就会引发#GP异常,进而触发虚拟机下陷。在截获到#GP异常后,内核模块可以检查该段切换操作是否合法(合法的段切换操作指的是以应用程序本应执行的权级作为CPL能够合法访问的目标段,而不是Ring 0下能够访问的段),如果合法则对相应的指令进行模拟执行(以将所请求的段信息填入VMCS中的相应段寄存器中,并且返回非根模式);如果不合法则停止特权指令的执行。
■引发#PF异常
例如,针对表2第19行所示的引起段切换的特权指令(例如,SYSEXIT或SYSRET),这些特权指令的执行会将CPL设置成3并且在Ring 3下运行。根据本发明的一个实施例,通过将应用程序的代码映射为管理者模式页面(supervisor-mode page)并且将处理器配置为不能在用户态下从管理者模式页面中取指令,从而使得CPU在执行特权指令(SYSEXIT或SYSRET)的下一条指令时,由取指操作引发#PF异常。在截获引发#PF异常而触发虚拟机下陷的特权指令之后,内核模块可以停止该特权指令的执行。
③使特权指令的执行结果无效
针对表2所示的INV类特权指令,使它们的执行结果无效,从而阻止攻击者利用这些特权指令获取信息或者更改任何内核状态。
以表2第10行所示的CR0和CR4寄存器相关的读写指令为例,其中CR0和CR4寄存器均有一组guest/host mask和read shadows,将guest/host mask的全部位设置成1,以及将read shadows的全部位设置成0,这样,攻击者读CR0/CR4寄存器的值全都是0,写这两个寄存器并不会真正修改CR0和CR4寄存器的值。
与现有的访问特权硬件资源的方法相比,上述实施例所提供的面向应用程序的特权硬件资源访问方法中,利用了硬件辅助虚拟化技术将应用程序运行在非根模式的内核态下,实现了应用程序对特权硬件资源的直接访问,因此访问效率较高。同时,应用程序只能访问开发人员提前定制好的特权硬件资源,因此应用程序在内核态下运行时不会给攻击者带来额外的攻击面,从而保证了应用程序在内核态下运行的安全性。由于应用程序运行在非根模式下,其与运行在根模式下的宿主机操作***被有效地隔离开,因此对应用程序的任何攻击都不会影响宿主操作***,这保证了宿主操作***的安全性。另外,开发人员通过配置应用程序的配置文件就可以实现应用程序对特权硬件资源的定制,因此该方法还具有较高的通用性。
在上述实施例中,应用程序在启动时处于根模式的用户态下,随后切换到非根模式的内核态下运行。为了保证应用程序能够在非根模式下正确运行(例如,如后文所述,能够在根模式下处理***调用),非根模式下的虚拟内存通常需要与根模式下的保持一致,在一个实施例中,可以通过复用页表的方式使非根模式与根模式使用相同的页表。然而,如果在非根模式下直接复用根模式下的页表,则应用程序在非根模式下运行时就能访问内核空间的地址,导致安全性较低。
出于安全性的考虑,根据本发明的一个优选实施例,在内核模块根据应用程序的运行信息创建并配置虚拟化环境时,对虚拟化环境下的内存进行配置。其中,通过将根模式下最高一级页表的用户空间部分拷贝至非根模式并且复用根模式下其他级页表来得到非根模式下的页表,如图3所示。经过配置,非根模式下最高一级页表的内核空间部分为空,从而能够限制运行在非根模式下的应用程序对内核空间内存的访问,进一步保证了安全性。除了保证安全性,还可以避免使用硬件辅助虚拟化技术中的扩展页表(Extended PageTable,EPT)机制,减少了EPT中的地址转换过程,因此还提高了应用程序的访存效率。
以64位的X86为例,页表通常分为PML4、PDPT、PD和PT四级,为了保证应用程序能够在非根模式下正确运行,在非根模式下复用根模式下的2、3、4级页表,并且拷贝根模式下的最高一级页表PML4(PML4共512项,前256项指向用户空间,后256项指向内核空间),得到非根模式下的最高一级页表PML4’。PML4’共512项,其中前256项(0~255项)指向用户空间,第256~510项清空,并且第511项索引到VSYSCALL页(VSYSCALL用于加速从内核请求数据的***调用)。由此,实现一种非根模式下四级页表的配置。
另外,在应用程序的运行过程中,可能会更新根模式下的页表。在监测到根模式下的最高一级页表更新后,可以对非根模式下的最高一级页表进行同步操作。由于根模式下最高一级页表与拷贝得到的非根模式下最高一级页表分散在两个页中,为了保证这两个页在应用程序运行时的一致性,根据本发明的一个实施例,可以将这两个页设置为只读权限以实现同步操作。
在上述实施例中,当运行在非根模式的内核态下的应用程序需要通过***调用向宿主机操作***内核请求更高权限的服务时,可以在非根模式下引入***调用处理的代码,但这可能导致攻击者在劫持应用程序之后利用这些代码进行攻击。针对这一问题,根据本发明的一个优选实施例,将应用程序运行时执行的***调用转交至根模式下进行处理。考虑到通常用于执行***调用的指令SYSCALL和SYSRET不能实现非根模式与根模式之间的切换,为使***调用能够正确转交到根模式下进行处理,基于图3所示的虚拟化环境下的内存配置,提供一种针对***调用的处理方法,包括:
■在***调用的入口处执行VMCALL指令来触发虚拟机下陷;
■虚拟机下陷后,在根模式下处理***调用,即由内核模块根据***调用号调用相应的***调用处理函数,以完成对***调用的处理。其中,由于非根模式下与根模式下最高一级页表的用户空间部分相同,因此在根模式下调用相应的***调用处理函数就可以完成对***调用的处理;
■从根模式返回非根模式。
具体地,针对***调用的处理方法包括:在应用程序的内存空间中开辟一个代码页,该代码页处于非根模式的内核态下并且存储如下两条指令:
SyscallEntry:VMCALL
JMP*%RCX
同时,将非根模式下的IA32_LSTAR_MSR寄存器的值设置为SyscallEntry。当应用程序执行到SYSCALL指令时,会将该指令的下一条指令的地址存入RCX寄存器中,同时从IA32_LSTAR_MSR寄存器中获取***调用的入口SyscallEntry,从而转入执行VMCALL。VMCALL的执行会使虚拟机下陷,即CPU从非根模式切换到根模式下,并将控制交给内核模块。内核模块再根据***调用号,调用宿主机操作***内核中原有的***调用处理函数。当***调用处理函数执行完毕后,内核模块执行VMRESUME指令,从根模式切换到非根模式,并从JMP*%RCX开始执行。由于RCX存储的是SYSCALL指令的下一条指令地址,JMP*%RCX会跳转到SYSCALL的下一条指令,从而完成一次***调用。
以上针对***调用的处理方法可以保证在非根模式下不会引入***调用处理的代码,能够防止攻击者在劫持应用程序后利用这些代码实现攻击,从而进一步提高了应用程序运行的安全性。
当应用程序运行在非根模式的内核态下,根据本发明的一个实施例,还提供一种针对中断(例如,外部中断)或异常(例如,页面异常、除0异常、非法指令异常等)的处理方法,与针对***调用的处理方法类似,将应用程序运行时的中断或异常转交至根模式下进行处理。该针对中断或异常的处理方法包括:
■配置VMCS(具体地,配置VMCS中的虚拟机执行控制字段,即VM-ExecutionControls Field,使得非根模式下发生的中断或异常触发虚拟机下陷;
■发生中断或异常时触发虚拟机下陷;
■虚拟机下陷后,在根模式下处理中断或异常。其中,针对中断,由内核模块根据中断号调用相应的中断处理函数,以完成对中断的处理;针对异常,由内核模块根据异常号调用相应的异常处理函数,以完成对异常的处理;
■从根模式返回非根模式。
以上针对中断或异常的处理方法可以将对中断或异常的处理与应用程序的运行隔离开来,应用程序本身无法感知到中断或异常的发生,使得攻击者无法针对中断或异常的处理进行攻击,避免了给应用程序带来额外的安全威胁,从而进一步提高了安全性。
当应用程序运行在非根模式的内核态下,根据本发明的一个实施例,还提供一种针对信号的处理方法,用于保证信号机制能够正常工作。其中,信号用于通知发生异步事件,信号机制指示一种异步进程间通信机制。参见图4,针对信号的处理方法包括:
■在***调用处理或者异常或中断处理之后,确定是否存在待处理的信号。具体地,由内核模块调用signal_pending()函数,检查信号队列中是否存在待处理的信号。
■如果不存在待处理的信号,则处理器从根模式返回非根模式并且结束信号处理;如果存在待处理的信号,则执行下一步。
■由内核模块部署信号栈。具体地,调用do_signal()函数完成用户态上下文(即所有寄存器状态)在信号栈上的保存以及切换工作,并且将用户态新的上下文设置到VMCS的Guest状态域中。
■执行恢复虚拟机指令(VMRESUME)返回非根模式。
■在非根模式下执行信号处理函数。
■在信号处理函数执行完之后,调用SIGRETURN***调用,重新触发虚拟机下陷。
■在根模式下,由内核模块根据信号栈上保存的寄存器状态恢复之前的寄存器,并且重新配置虚拟化环境。
■执行VMRESUME返回非根模式,在非根模式下继续运行应用程序。
应注意到一些示例性方法被描绘为流程图。虽然流程图将操作表述为顺序执行,但可以理解的是,许多操作可以并行、同时或同步地执行。另外,可以重新排列操作的顺序。处理可以在操作完成时终止,但是也可以具有并未包括在图中或实施例中的另外的步骤。
上述方法可以通过硬件、软件、固件、中间件、伪代码、硬件描述语言或者它们的任意组合来实现。当以软件、固件、中间件或伪代码实施时,用来执行任务的程序代码或代码分段可以被存储在计算机可读介质中,诸如存储介质,处理器可以执行该任务。
应理解,软件实现的示例性实施例通常在一些形式的程序存储介质上进行编码或者在一些类型的传输介质上实现。程序存储介质可以是任意的非瞬态存储介质,诸如磁盘(例如,软盘或硬盘)或光盘(例如,紧凑盘只读存储器或“CD ROM”),并且可以是只读的或者随机访问的。类似地,传输介质可以是双绞线、同轴线缆、光纤,或者本领域已知的一些其它适用的传输介质。
虽然本发明已经通过优选实施例进行了描述,然而本发明并非局限于这里所描述的实施例,在不脱离本发明范围的情况下还包括所做出的各种改变以及变化。
Claims (10)
1.一种面向应用程序的特权硬件资源访问方法,其中CPU操作模式被划分为根模式和非根模式,每种模式具有相应的内核态与用户态,其特征在于,所述方法包括:
在非根模式的内核态下运行所述应用程序,以使所述应用程序能直接访问特权硬件资源;
获取所述应用程序的配置文件,其指示所述应用程序在非根模式的内核态下运行时有权访问的特权硬件资源;以及
根据所述配置文件限制所述应用程序在非根模式的内核态下对非授权特权指令的执行,其中,所述非授权特权指令是用于访问所述应用程序无权访问的特权硬件资源的指令。
2.根据权利要求1所述的方法,其特征在于,限制所述应用程序对非授权特权指令的执行包括:
响应于截获触发虚拟机下陷的非授权特权指令,停止所述非授权特权指令的执行。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
响应于确定非授权特权指令是条件下陷指令,将所述非授权特权指令配置为在执行时触发虚拟机下陷。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将非授权特权指令配置为在执行时引发异常以触发虚拟机下陷;以及
其中,限制所述应用程序对非授权特权指令的执行包括:
响应于截获引发异常而触发虚拟机下陷的非授权特权指令,停止所述非授权特权指令的执行。
5.根据权利要求1所述的方法,其特征在于,限制所述应用程序对非授权特权指令的执行包括:
无效所述非授权特权指令的执行结果。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述方法还包括通过以下步骤配置非根模式下的内存:
将所述根模式下最高一级页表的用户空间部分拷贝至所述非根模式;以及
所述非根模式复用所述根模式下除最高一级页表之外的其他级页表。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在***调用的入口处触发虚拟机下陷;
虚拟机下陷后,在所述根模式下调用***调用处理函数以处理***调用;以及
从所述根模式返回所述非根模式。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在发生中断或异常时触发虚拟机下陷;
虚拟机下陷后,在所述根模式下调用中断处理函数以处理中断,或者在所述根模式下调用异常处理函数以处理异常;以及
从所述根模式返回所述非根模式。
9.根据权利要求7或8所述的方法,其特征在于,从所述根模式返回所述非根模式包括:
确定是否存在待处理的信号,其中所述信号用于通知发生异步事件;
响应于确定存在待处理的信号,部署信号栈以存储寄存器状态,并且返回所述非根模式;
在所述非根模式下执行信号处理函数,并且重新触发虚拟机下陷;
在所述根模式下根据所述信号栈上存储的寄存器状态恢复之前的寄存器;以及
返回所述非根模式以继续运行所述应用程序。
10.一种电子设备,其特征在于,所述电子设备包括处理器和用于存储一个或多个计算机程序的存储器,当所述一个或多个计算机程序被所述处理器执行时,使得所述电子设备实现如权利要求1至9中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2019104621403 | 2019-05-30 | ||
CN201910462140 | 2019-05-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111737656A CN111737656A (zh) | 2020-10-02 |
CN111737656B true CN111737656B (zh) | 2023-10-27 |
Family
ID=72646505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010473124.7A Active CN111737656B (zh) | 2019-05-30 | 2020-05-29 | 面向应用程序的特权硬件资源访问方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111737656B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113225344B (zh) * | 2021-05-10 | 2022-09-30 | 深信服科技股份有限公司 | 一种访问控制方法、装置、设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521531A (zh) * | 2011-11-24 | 2012-06-27 | 华中科技大学 | 基于硬件虚拟化的密码保护*** |
CN103270491A (zh) * | 2011-12-06 | 2013-08-28 | 华为技术有限公司 | 一种硬件资源保护方法和***以及虚拟机管理器 |
CN104424034A (zh) * | 2013-09-04 | 2015-03-18 | 华为技术有限公司 | 硬件资源访问方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8479196B2 (en) * | 2009-09-22 | 2013-07-02 | International Business Machines Corporation | Nested virtualization performance in a computer system |
-
2020
- 2020-05-29 CN CN202010473124.7A patent/CN111737656B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521531A (zh) * | 2011-11-24 | 2012-06-27 | 华中科技大学 | 基于硬件虚拟化的密码保护*** |
CN103270491A (zh) * | 2011-12-06 | 2013-08-28 | 华为技术有限公司 | 一种硬件资源保护方法和***以及虚拟机管理器 |
CN104424034A (zh) * | 2013-09-04 | 2015-03-18 | 华为技术有限公司 | 硬件资源访问方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111737656A (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9400885B2 (en) | Computer security systems and methods using virtualization exceptions | |
KR102116571B1 (ko) | 가상 머신을 나가자 마자 현재 프로세서 명령의 결과를 노출하기 위한 시스템 및 방법 | |
US10140448B2 (en) | Systems and methods of asynchronous analysis of event notifications for computer security applications | |
US9507727B2 (en) | Page fault injection in virtual machines | |
US20160210069A1 (en) | Systems and Methods For Overriding Memory Access Permissions In A Virtual Machine | |
CN110574009B (zh) | 用于管理对能力的使用的设备和方法 | |
Gu et al. | Harmonizing performance and isolation in microkernels with efficient intra-kernel isolation and communication | |
US11727110B2 (en) | Verifying stack pointer | |
US9596261B1 (en) | Systems and methods for delivering context-specific introspection notifications | |
US20160048458A1 (en) | Computer Security Systems and Methods Using Hardware-Accelerated Access To Guest Memory From Below The Operating System | |
US20150379265A1 (en) | Systems And Methods For Preventing Code Injection In Virtualized Environments | |
CN111737656B (zh) | 面向应用程序的特权硬件资源访问方法及电子设备 | |
US20200117458A1 (en) | Apparatus and method for controlling a change in instruction set | |
US9531735B1 (en) | Systems and methods for delivering introspection notifications from a virtual machine | |
US11216280B2 (en) | Exception interception | |
CN114090273B (zh) | 一种进程间通信的方法、装置及计算机存储介质 | |
JP7369720B2 (ja) | アクションをトリガするための装置及び方法 | |
CN114090273A (zh) | 一种进程间通信的方法、装置及计算机存储介质 | |
CN117222990A (zh) | 用于使用能力约束对存储器的访问的技术 | |
CN118069403A (zh) | 一种异常指令的处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |