采用用于促进对安全存储器的访问的中间结构的制作方法

文档序号:11142304阅读:267来源:国知局
采用用于促进对安全存储器的访问的中间结构的制造方法与工艺

本公开涉及存储器访问事务,以及更特别地涉及促进操作系统和设备中的存储器的安全区域之间的交互。



背景技术:

电子技术的发展已经导致在现代社会中各种电子设备的激增和集成。典型地由固定计算设备提供的功能现在在移动设备以及甚至手持设备中可用。该演进已经导致用户变得对其用于个人和/或商业相关交易的电子设备依赖。例如,用户可以与家庭、朋友、商业伙伴、客户、顾客等交互、访问财务记录、进行财务交易(诸如转让、购买等)、传输可包含敏感和/或机密性质的信息(例如,诸如个人标识信息、家庭或工作联系人信息、账号等)的数据等。执行上述活动所需的信息中的一些可以被存储在用户的设备上,且因此可能将引人注意的目标呈现给可能意图用这样的信息做坏事的那些人。例如,未知的各方可能尝试访问设备以获得关于用户的敏感或机密信息以供偷窃和/或滥用该用户的资产、身份盗用、使用户失信、获悉用户的定期安排和/或当前行踪等中使用。

已经设计了各种软件解决方案来防止对设备的未授权访问。这些软件解决方案典型地在与设备的操作系统相同的特权级别处实施,且因此可能易受到来自该设备上的在更高特权级别处操作的恶意软件(流氓软件)的攻击。随着软件开发者尝试加强其抵抗被损害的防御,攻击者继续设计通过在设备的操作层级内的更低级别处引入恶意代码来损害这些防御的手段。例如,恶意软件(诸如后门程序(rootkit))可以在比现有恶意软件检测和/或保护措施可适应的特权级别更高的特权级别处攻击设备。为了对抗该威胁,装备制造商正在开始开发在设备的最低操作级别/最高特权级别处实施的基于硬件的保护方案。这些保护措施可以被设计成在设备操作发起时通过部署来在设备中提供安全操作环境。然而,这样的低级别保护措施与现有/新兴操作系统的集成在没有特殊规定的情况下可能证明是有问题的。

附图说明

随着下面的具体实施方式继续进行且在参考附图的情况下,所要求保护的主题的各种实施例的特征和优点将变得显而易见,在附图中相似附图标记指定相似部分,以及在附图中:

图1图示了根据本公开至少一个实施例可使用的设备的示例性配置;

图2图示了根据本公开至少一个实施例的采用用于促进对安全存储器的访问的中间结构的示例性存储器模块;

图3图示了根据本公开至少一个实施例的应用和安全存储器之间的存储器映射的示例;

图4图示了根据本公开至少一个实施例的当从安全页面高速缓存中的槽驱逐安全页面时的定时问题的示例;

图5图示了根据本公开至少一个实施例的用以避免定时可能问题的中间结构的示例;

图6图示了根据本公开至少一个实施例的示例性操作,其中使用中间结构来从安全高速缓存中的槽驱逐安全页面;

图7图示了根据本公开至少一个实施例的虚拟异常处理的示例;以及

图8图示了根据本公开至少一个实施例的用于采用用于促进对安全存储器的访问的中间结构的示例性操作。

尽管下面的具体实施方式将在参考所图示的实施例的情况下继续进行,但其许多可替代方式、修改和变形将对本领域技术人员来说显而易见。

具体实施方式

本申请涉及采用用于促进对安全存储器的访问的中间结构。在一个实施例中,设备中的硬件(例如固件)可以将安全驱动器(SD)加载到设备中(例如在激活时)。该SD可以预留设备的存储器模块中的存储器的至少部分作为安全页面高速缓存(SPC)。该SPC可能能够保护对应于在设备中执行的应用的数据以免被其他活动应用(例如,在设备的操作系统(OS)中执行)访问。例如,当应用正在执行时,应用页面表(PT)中的线性地址(LA)可以典型地指向在程序执行期间可能需要的SPC中安全数据页面的位置。然而,与本公开一致的是,线性地址实际上可以被映射到线性地址管理器(LAM)中的伪页面地址,其可以进而被映射到SPC中的页面槽。该LAM可能被插入到应用的PT和SPC之间来模拟SPC。以这种方式,竞争条件可能被避免,这可能对设备性能有负面影响。此外,SD可以通过重新配置原本将被OS忽略的虚拟异常(#VE)来促进设备中的差错处理。例如,#VE的出现可能引起SD写入地址到OS将对其反应的控制寄存器,而关于#VE的实际原因的信息被储存在安全地址空间内的别处以用于稍后检索(例如,当对#VE的原因寻址时)。

在一个实施例中,被配置成采用用于促进对安全存储器的访问的中间结构的设备可以包括例如至少存储器模块和固件模块。该固件模块可以导致至少一个安全驱动器被加载到存储器模块中。该至少一个安全驱动器可以:导致存储器模块中的存储器的至少一个部分被预留作为包括至少一个安全页面槽的安全页面高速缓存;以及生成线性地址管理器,该线性地址管理器将该线性地址管理器中的至少一个伪页面地址映射到该至少一个安全页面槽。

在一个实施例中,存储器模块可以进一步包括例如应用在其中执行的操作系统,在该操作系统中至少一个应用的执行导致数据从存储器模块中的别处加载到安全页面高速缓存中。该应用可以包括例如至少一个页面表,该至少一个页面表包括由安全驱动器预留以用于映射到线性地址管理器中的至少一个伪页面地址的至少一个线性地址。与上文的示例性应用一致,该安全驱动器可以进一步放开由安全驱动器预留的线性地址以用于重新指派、将该线性地址映射到线性地址管理器中的伪页面地址,以及从应用加载应用页面到被映射到伪页面地址的安全页面槽中,该应用页面在加载时变成安全页面。随着该应用执行,安全驱动器可以进一步至少基于接收到页面错误来确定被加载在安全页面槽中的安全页面要从安全页面高速缓存中驱逐,引起对应于安全页面的伪页面地址从该安全页面被加载在其中的安全页面槽取消映射,并引起从该安全页面槽卸载该安全页面。此外,该安全驱动器可以进一步引起新应用页面被加载到安全页面槽中,引起新伪页面地址被映射到安全页面槽并引起新线性地址被映射到新伪页面地址。

在相同或不同的实施例中,该安全驱动器可以进一步接收由于发生在安全页面高速缓存中的页面错误而引起的虚拟异常,将虚拟异常重新配置为被操作系统处理,并将重新配置的虚拟异常提供给操作系统内核。安全驱动器重新配置虚拟异常可以包括:安全驱动器推送差错代码到操作系统调用栈上,并将指示虚拟异常已经发生的线性地址写入到处理模块的控制寄存器,以引起操作系统差错处理程序对该虚拟异常作出反应,该线性地址指示虚拟异常在引起了该异常的应用的地址空间内且在存储器模块内的安全地址空间外。此外,安全驱动器可以进一步将引起了该虚拟异常的线性地址写入到存储器模块中的安全地址空间中的寄存器。与本公开一致的示例性方法可以包括:引起存储器的至少一个部分被预留作为包括至少一个安全页面槽的安全页面高速缓存;以及生成线性地址管理器,该线性地址管理器将该线性地址管理器中的至少一个伪页面地址映射到该至少一个安全页面槽。

图1图示了根据本公开至少一个实施例可使用的设备100的示例性配置。本文公开的各种系统、组件、方法等可以适用于范围广泛的电子设备。设备100可以是例如:移动通信设备,诸如基于来自Google公司的Android® OS、来自Apple公司的iOS®、来自Microsoft公司的Windows® OS、来自Apple公司的Mac OS、来自Linux基金会的Tizen OS、来自Mozilla项目的Firefox OS、来自Blackberry公司的Blackberry® OS、来自Hewlett-Packard公司的Palm® OS、来自Symbian基金会的Symbian® OS等的蜂窝手机或智能电话;移动计算设备,诸如平板计算机(像来自Apple公司的iPad®、来自Microsoft公司的Surface®、来自Samsung公司的Galaxy Tab®、来自Amazon公司的Kindle Fire®等)、 包括由Intel公司制造的低功率芯片集的Ultrabook®、上网本、笔记本、膝上型电脑、掌上电脑等;典型固定计算设备,诸如台式计算机、服务器、智能电视、小形状因子计算解决方案(例如用于空间受限应用、TV机顶盒等),像来自Intel公司的Next Unit of Computing (NUC)平台等。无论如何,已经仅作为可在其上配置与本公开一致的实施例的装置的一般的示例而提供设备100,并且设备100不意在将这些各种实施例限于任何特定实现方式。

设备100可以包括例如系统模块102,系统模块102被配置成管理设备操作。系统模块102可以包括例如处理模块104、存储器模块106、电源模块108、用户接口模块110和通信接口模块112。设备100也可以包括通信模块114。虽然通信模块114已经被示出为与系统模块200分离,但已经仅为了解释而提供在图1中公开的示例性实施方式。与通信模块114相关联的功能中的一些或全部可以被结合到系统模块102中。

在设备100中,处理模块104可以包括位于分离的组件中的一个或多个处理器或者可替代地包括在单个组件中(例如在片上系统(SoC)配置中)体现的一个或多个处理核和任何处理器相关支持电路(例如桥接接口等)。示例性处理器可以包括但不限于可从Intel公司得到的各种基于x86的微处理器,其包括Pentium、Xeon、Itanium、Celeron、Atom、Core i-系列产品族、高级RISC(例如精简指令集计算)机器或“ARM”处理器等中的那些。支持电路的示例可以包括芯片集(例如可从Intel公司得到的北桥、南桥等)以提供接口,通过该接口,处理模块104可以与设备100中的可以以不同速度、在不同总线上等等进行操作的其他系统组件交互。通常与支持电路相关联的功能中的一些或全部也可以被包括在与处理器相同的物理封装中(例如,诸如在可从Intel公司得到的Sandy Bridge处理器族中)。

处理模块104可以被配置成在设备100中执行各种指令。指令可以包括:程序代码,被配置成引起处理模块104执行与读取数据、写入数据、处理数据、公式化数据、转换数据、变换数据等有关的活动。信息(例如指令、数据等)可以被储存在存储器模块106中。存储器模块106可以包括具有固定或可移除格式的随机存取存储器(RAM)或只读存储器(ROM)。RAM可以包括被配置成在设备100(诸如例如静态RAM(SRAM)或动态RAM(DRAM))的操作期间保持信息的易失性存储器。ROM可以包括:非易失性(NV)存储器模块,基于BIOS、UEFI等而配置成在设备100被激活时提供指令;可编程存储器,诸如电子可编程ROM(EPROM);闪存等。其他固定/可移除存储器可以包括但不限于磁存储器(诸如例如软盘、硬盘驱动器等)、电子存储器(诸如固态闪速存储器(例如嵌入式多媒体卡(eMMC)等)、可移除存储器卡或棒(例如微存储设备(uSD)、USB等)、光学存储器(诸如基于致密盘的ROM(CD-ROM)、数字视频盘(DVD)、蓝光盘等)。

电源模块108可以包括内部电源(例如电池、燃料电池等)和/或外部电源(例如机电或太阳能发电机、电力网、燃料电池等)、以及被配置成向设备100供给操作所需的电力的相关电路。用户接口模块110可以包括允许用户与设备100交互的硬件和/或软件,诸如例如各种输入机构(例如麦克风、开关、按钮、旋钮、键盘、扬声器、触敏表面、被配置成捕捉图像和/或感测接近度、距离、运动、手势、取向等的一个或多个传感器)和各种输出机构(例如扬声器、显示器、发光/闪光指示器、用于振动、运动等的机电组件)。用户接口模块110中的硬件可以被结合在设备100内和/或可以经由有线或无线通信介质耦合到设备100。

通信接口模块112可以被配置成管理分组路由和用于通信模块114的其他控制功能,其可以包括被配置成支持有线和/或无线通信的资源。在一些实例中,设备100可以包括均由集中式通信接口模块112管理的多于一个通信模块114(例如包括用于有线协议和/或无线无线电的分离的物理接口模块)。有线通信可以包括串行和并行有线介质,诸如例如以太网、通用串行总线(USB)、火线、数字视频接口(DVI)、高清多媒体接口(HDMI)等。无线通信可以包括例如紧密接近无线介质(例如射频(RF),诸如基于近场通信(NFC)标准、红外(IR)等)、短距离无线介质(例如蓝牙、WLAN、Wi-Fi等)、长距离无线介质(例如蜂窝广域无线电通信技术、基于卫星的通信等)或经由声波的电子通信。在一个实施例中,通信接口模块112可以被配置成防止在通信模块114中活动的无线通信彼此干扰。在执行此功能时,通信接口模块112可以基于例如消息等待传输的相对优先级来调度通信模块114的活动。虽然图1中公开的实施例图示了通信接口模块112与通信模块114分离,但通信接口模块112和通信模块114的功能被结合在相同模块内也可以是可能的。

图2图示了根据本公开至少一个实施例的采用用于促进对安全存储器的访问的中间结构的示例性存储器模块106'。最初,将使用可通常与某些设备制造商(例如Intel公司)和/或软件提供商(例如Microsoft公司)相关联的术语来描述本文所公开的各种实施例。该术语的使用仅为了在可容易理解的上下文中传达重要概念,且不意图将与本公开一致的任何实施方式限于特定装备和/或软件。

一般地,与本公开一致的各种实施例可以允许设备中的基于硬件的存储器保护方案的实施,该设备可以包括不直接与该保护方案兼容的OS。更具体地,该保护方案可能要求可能不是被所有类型和/或版本的OS都支持的与OS的某些接口和/或交互。与本公开一致的实施例可能能够计及在实施存储器保护时对来自OS的直接支持的缺乏。

存储器模块106'的示例性实施方式可以包括例如至少OS 200、应用202和安全资源204。安全资源204可以包括至少SPC 206和LAM 208。从通信观点来看,SD 210可以促进安全资源204中的SPC 206、LAM 208和应用202之间的交互。为了对#VE作出反应,SD 210可以重新配置#VE以使得其可以被OS 200识别,OS 200将#VE移交给应用202,应用202将#VE路由给SD 210以用于处理异常的原因。

OS 200可以包括例如至少一个软件程序,其被配置成管理包括计算功能的装备的操作。上文已经阐述了OS 200的示例。在许多实例中,本文中将仅为了解释而参考与Windows OS相关联的特征。安全资源204可以包括基于硬件的保护方案,诸如由Intel公司设计的Software Guard Extensions (SGX)。SGX包括嵌入在某些Intel®处理器和芯片集的架构中的一组新指令和存储器访问改变。这些扩展允许应用202对受保护的容器或“飞地”进行实例化,“飞地”可以是提供机密性、完整性等的应用202的地址空间内的区域,甚至在存在非常有特权的恶意软件的情况下。防止从未驻留于飞地中的软件(甚至从有特权的软件,诸如虚拟机监视器、BIOS、OS 200的组件等)对该飞地的所尝试的访问。

SGX架构包括新指令、新处理器结构和新执行模式。这些包括例如将飞地加载到受保护的存储器中、经由PT映射而对资源的访问、以及调度飞地使能应用202的执行。因此,OS 200仍然维持关于飞地可访问什么资源的控制。SGX操作可以被分类成下面的功能:飞地构建/拆除、飞地进入/退出、飞地安全操作、分页指令和调试指令。可用来针对飞地分配受保护的存储器、将值加载到受保护的存储器中、测量(例如,针对已知好版本的程序的散列值验证程序的代码的散列值)被加载到飞地的受保护的存储器中的软件以及在应用202已经完成之后拆除飞地的指令如下:“ECREATE”可以声明基础和范围且可以发起构建,“EADD”可以添加4K页面到飞地,“EEXTEND”可以测量256个字节,“EINIT”可以声明飞地构建,以及“EREMOVE”可以从飞地移除页面。这些指令可以由SD 210(例如,ring-0软件,典型地被称为SGX驱动器)来执行。SD 210可以通过例如存储器模块106内的固件而被加载到设备100中。在一个实施例中,当(例如从冷启动、重新启动等)激活设备100时,固件可以加载SD 210。在一个实施例中,SD 210可以由先前加载/测量的程序来测量,由所测量的程序对随后加载的程序的测量也被称作建立设备200中的“信任链”。

可以使用其他指令来进入和退出飞地。明确地,可以使用“EENTER”来进入飞地,以及可以使用“EEXIT”来退出飞地。由于中断或异常也可以使用“AEX”来异步退出飞地。在AEX的实例中,硬件可以将所有秘密保存在飞地内部,从寄存器擦洗秘密,以及返回到外部程序流。应用202然后可以在其停止执行的地方恢复。可允许OS 200安全地将飞地页面移动到未受保护的存储器以及从未受保护的存储器移动飞地页面的指令可以包括例如:“EPA”,创建版本阵列页面;“ELDB/U”,将被驱逐的页面加载到受保护的存储器中;“EWB”,驱逐受保护的页面;以及“EBLOCK”和“ETRACK”,准备驱逐。

一般地,安全资源204可以包括SD 210可执行以实施被加载到SPC 206中的安全页面的分页的指令。虽然由安全资源204提供的保护可能使应用202能够在有机密性、完整性等的情况下执行,但对被加载到SPC 206中的安全页面进行分页可以具有某些要求。使用SGX作为示例,要求OS 200提供特定的存储器管理应用程序接口(API)且能够特殊处理SPC存储器访问错误。大多数现代操作系统以某种类型的结构化异常处理(SEH)机制为特征。SEH使应用能够处理硬件和软件异常。存储器访问异常典型地导致页面错误(#PF),该页面错误(#PF)首先由OS 200处理。然而,如果OS 200不能应对特定#PF,则其可以首先通过SEH机制将其交给引起了#PF的应用202。对SPC分页的第二要求可以是存储器管理API,其允许当前未被加载在SPC 206中的安全页面的LA的预留。这样的API将允许将安全LA(SLA)从SPC 206的页面(SP)的物理地址取消映射,而同时,预留那些地址直到被驱逐的飞地页面再次被加载到SPC 206中。不幸的是,上面的差错处理和API特征在大多数(如果不是所有)通常可用的操作系统中不可用。

图3图示了根据本公开至少一个实施例的应用和安全存储器之间的存储器映射的示例。假定SD 210被加载且是操作的,那么应用202可以引起SPC 206通过执行一系列输入和输出控制(IOCTL)调用而被加载到SD 210。使用SGX作为示例,除了ECREATE和EADD IOCTL之外,在SPC 206被加载的同时,应用202也可以执行EEXTEND和EINIT IOCTL。可以针对每个所加载的安全页面多次执行EEXTEND IOCTL以在加载期间测量SPC 206,并且,可以在结尾处执行EINIT IOCTL一次以将最终测量结果传递到硬件以用于验证。为了清楚起见,可在SPC 206的加载期间出现的各种测量和验证操作已经从图2中省略。虽然它们可能出现在适当的时候,但它们的操作与本文公开的实施例不相关。第一IOCTL(例如ECREATE_IOCTL)发信号通知SPC 206即将被加载。基于应用202可作为ECREATE_IOCTL调用的一部分而传递的实参,SD 210可以预留应用虚拟存储器的稍后要被映射到SPC 206将被加载到的物理地址(例如也称为SPC槽)的区域。

图3图示了八个应用页面AP1、AP2、AP3、AP4、AP5、AP6、AP7和AP8(例如统称为“SP 1-8”),其属于驻留在标准存储器302(例如,存储器模块106中的其他存储器空间)中的应用202。然后可以进行IOCTL调用,从而将AP 1-8加载到空SPC 206'中,其中八个可用槽包括槽1、槽2、槽3、槽4、槽5、槽6、槽7和槽8(统称为“槽1-8”)。在加载到槽1-8中之后,AP 1-8可以变成安全页面SP1、SP2、SP3、SP4、SP5、SP6、SP7和SP8(统称为“SP 1-8”)。在OS 200准许针对正在加载的SPC 206'预留虚拟地址空间区域的请求之后,属于应用202的过程的至少一个页面表(例如APT 300)可以包括八个页面帧SLA1、SLA2、SLA3、SLA4、SLA5、SLA6、SLA7和SLA8(例如统称为SLA 1-8)。在此时,一些内部数据结构已经被分配,并且应用202一发出EADD_IOCTL指令,SD 210就可以准备好将AP 1-8加载到可用的SPC槽中。在应用202执行第一EADD_IOCTL请求之后,SD 210可以执行两部分存储器重新映射请求。第一部分可以释放LA(例如SLA 1),因此其可以被映射到下一部分中的对应物理地址空间(例如槽1)。在将SLA映射到物理地址空间之后,对应应用页面(例如AP1)然后可以被加载到物理地址空间(例如槽1)中,该应用页面然后变成安全页面(例如SP1)。该过程可以被重复,直到SLA 1-8被映射到槽1-8,SP 1-8被分别加载到槽1-8中。上述两部分存储器重新映射请求可以受到竞争条件的影响。在当应用202请求另一个线程上的存储器分配时的场景中,OS 200可以准许分配请求并在由SD 210完成第二部分之前使用新释放的LA。如果那种情况发生,则SD 210将不得不中止并且整个构建过程将不得不重新开始。

图4图示了根据本公开至少一个实施例的当从安全页面高速缓存中的槽驱逐安全页面时的定时问题的示例。虽然上文所公开的竞争条件可能是不太可能的,但复杂得多的情况可能出现在当SP 1-8不得不被从SPC 206'驱逐时的情形中。SD 210必须能够处理当各个飞地的尺寸或所有所加载的飞地的总尺寸超过SPC 206的尺寸时的情形。例如,当采用SGX时,SD 210可以采用SGX分页指令以从SPC 210驱逐至少一个SP 1-8(例如也被称作“受害者页面”),使得新应用页面(例如也被称作“目标页面”)可以被加载到SPC 210中。

假定例如正在利用SGX并且OS 200是Windows,那么SD 210必须利用Windows存储器地址空间管理API以加载应用页面并实施飞地页面高速缓存(EPC)分页方案。例如,在设备100中启用SGX之前(例如在系统启动的早期阶段中),被称为处理器预留存储器范围寄存器(PRMRR)的特殊范围寄存器可以被禁用。EPC可以是PRM的一部分,并且出于本公开的目的,可以假定PRM事实上是EPC。就OS 200而言,应用PT中的物理地址和LA之间的映射完全相同,无论它们指的是常规物理存储器还是EPC存储器。CPU可以强制:被映射到EPC内的物理地址的LA仅可以在特殊SGX模式中被访问(例如,正如SMRAM可能仅在SMI模式中被访问)。如果未在SGX模式中访问,则它们与所谓的中止页面访问具有相同的行为;写入被静默地丢弃,并且读取返回“-1”。

存在可能重要的两类API。第一类分配和释放应用虚拟地址空间。例如,“ZwAllocateVirtualMemory”例程可以预留和/或提交指定过程的用户模式虚拟地址空间内的页面区域,而“ZwFreeVirtualMemory”例程可以放开和/或回收指定过程的虚拟地址空间内的页面区域。包括例程“ZwMapViewOfSection”和“ZwUnmapViewOfSection”的第二类API可以将物理地址(例如,所调用的部分视图)映射到LA空间中并可以从LA取消映射这样的部分视图。当SD 210需要将另一个飞地页面(例如SP9)加载到已经满的EPC(例如通过EADD或者通过ELD指令之一)时,其可以首先使用EBLOCK、ETRACK和EWB指令(例如下文称“EWB”)的序列来识别/驱逐受害者页面(例如SP4)。在SD 210经由EWB驱逐受害者页面(例如,留下SPC 206'中的槽4对于新SP 9而言可用)之后,被驱逐的页面的LA(例如SLA4)然后可以使用ZwUnmapViewOfSection例程而被取消映射,并可以在被驱逐的页面需要稍后被重新加载的实例中预留该虚拟地址(例如,使用ZwAllocateVirtualMemory例程)。该两部分过程可以被称为“停靠”LA。然而,由于竞争条件,虚拟存储器重新映射过程可能失败,由此来自应用202的另一个线程400可以请求分配一些虚拟存储器,这可能导致OS 200重用新释放的LA SLA4以满足该请求。在此时,SD 210不能恢复线性地址。其向应用202返回差错代码并毁坏飞地。

图5图示了根据本公开至少一个实施例的避免定时可能问题的中间结构的示例。在至少一个示例性实施方式中,Intel架构可以允许OS 200维持将LA转化成物理地址的PT,并且,可以通过中断描述符表(IDT)来将#PF递送到合适的OS处理程序。当虚拟化开启扩展页面表(EPT)时,由被称为管理程序的VMX-root模式(例如主机模式)中操作的软件引入地址转化的附加层。包含OS 200的虚拟机(VM)作为客户机而被“托管”,因此OS维持的线性地址和物理地址现在分别被称为客户机线性地址(GLA)和客户机物理地址(GPA)。EPT可以从GPA转化到主机物理地址(HPA),并且,被称为EPT违反的访问错误可以经由VM-exit而被递送到管理程序。管理程序可以将EPT违反转换到客户机页面错误。

在Windows存储器地址空间管理API中明显的限制可以通过永久地映射创建永不改变的GLA→GPA映射的飞地线性地址空间而补救。这样的映射将在SD 210执行ECREATE指令之前被创建,且可以直到从SPC 206'移除了最后飞地页面才被放开。换言之,飞地线性地址空间将被永久地停靠。同时,为了启用针对被驱逐的飞地页面的访问错误,可以使用EPT来添加附加级别的地址转化。EPT可以将这样的停靠空间(例如LAM 208')的GPA映射到实际EPC的HPA。针对从SPC 206'驱逐的安全页面的GPA→HPA映射将被标记为不存在于EPT中。同样,针对LAM 208'中的可用槽的映射将被标记为不存在。对这样的页面的访问将产生下述EPT违反:管理程序会将将该EPT违反转换到#PF。LAM 208'的设立可能要求仅非常简约的VT管理程序,其不必是充分发展的(full-blown)VMM。可以假定仅存在一个客户机并且没有硬件资源必须被虚拟化。管理程序必须创建将LAM 208'映射到GPA空间中的EPT。客户机(例如OS 200)可以例如通过新的CPUID 0x12叶来发现该附加“存储器”。重要的是要注意,该设计将限制可在任何给定时间处被“加载”到LAM 208'中的飞地的总尺寸。该尺寸可以取决于被映射到GPA空间中的LAM 208'的尺寸。然而,即使在SGX中(例如,在具有针对EPC分页的所要求的OS支持的情况下),该尺寸仍然可能受OS 200愿意分页到盘的物理存储器的量限制,因此目前,这一点可以被忽略。

例如,SD 210可以执行CPUID 0x12的新叶来发现LAM 208'位于GPA空间中的何处以及其有多大。随着SPC 206'被加载,SD 210然后可以使用应用PT将飞地页面的LA(例如SLA 1-8)映射到LAM 208'的伪页面地址PP1、PP2、PP3、PP4、PP5、PP6、PP7、PP8和PP9(例如统称为PP 1-9)。对于被加载到SPC 206'中的SP 1-8,SD 210可以改变EPT中的映射,因此PP 1-9被映射到槽1-8。对于从SPC 206'驱逐的任何SP1-8,该映射可以指示(例如被标记为):被驱逐的SP 1-8不存在。当从SPC 206'驱逐的任何SP 1-8被访问时,可以由处理模块104生成EPT违反。EPT违反可以经由VM出口而仅被递送到管理程序。由于EPC管理中不涉及管理程序,因此其可以通过例如操纵客户机的虚拟机控制结构(VMCS)将EPT违反转换到#PF。#PF通过结构化异常处理而被递送到SGX驱动器。驱动器找到受害者页面并将它们从EPC驱逐并将丢失的页面加载到EPC中。当受害者页面被驱逐时,驱动器将EPT中的对应映射标记为不存在并使它们无效。当丢失的页面被加载到EPC中时,驱动器用新的EPC HPA更新对应的EPT映射并将它们标记为存在。针对在该过程中涉及的任何飞地页面的应用PT中的映射不改变。

图6图示了根据本公开至少一个实施例的示例性操作,其中使用中间结构从安全高速缓存中的槽驱逐安全页面。图6图示了如何使用APT 300和EPT通过FEPC将SLA 1-8映射到EPC。同样示出的是:SLA 1-8从不被重新映射,而飞地页面被从EPC驱逐且被加载回到EPC中。在图6中所描绘的示例中,将SP4从SPC 206'驱逐以让出地方给SP9。新LA SLA9然后可以被映射到PP9,PP9可以被映射到包含SP9的槽4。然而,SLA4保持被预留(例如,被映射到PP4),因此当应用202中的另一个线程针对新分配的存储器而请求LA时,SLA4不能被OS 200重用。当尝试通过SLA4对SP4访问时,访问错误可能产生,因为LAM 208'和SPC 206'之间的EPT映射不存在。SD 210然后可以接收该错误作为#PF,并可以驱逐另一个SP以释放出空间来重新加载SP4。如果其他线程400(例如来自图5)会碰巧向堆请求一些存储器,则OS 200然后可能被迫使用驻留在SPC 206'外的SLA。

诸如上文所公开的实施系统并不是没有要克服的挑战。概念验证(PoC)测试(例如利用Intel装备和Microsoft Windows OS)已经证明:在发出ECREATE指令之前预留SLA可能是非常浪费的,因为SPC 206'可能是非常稀疏的。此外,通过映射EPT中的LAM 208'预留所声明的LA空间可能不必要地浪费用于LAM 208'的EPT条目,并且,在最后EADD之后重新要求那些浪费的条目的任何尝试可以将性能代偿(penalty)和不必要的代码复杂度添加到SD 210。为了计及这些问题,在每个EADD之前,在LAM 208'中将PoC从SLA映射到GPA。该变通方法被认为是可接受的,只要其他线程未尝试分配可能导致上文所描述的竞争条件的存储器。更重要地,基于实际出错GLA而转换到#PF的EPT违反可以被OS 200忽略为伪造的,因为就OS 200而言它们所参考的GLA→GPA映射可以被认为是“有效的”。添加这样的转换所需的VM退出的性能代偿,必须使用更好的解决方案。最后,随着LAM 208'中的GPA在SP被加载到SPC 206'中的槽中时被映射到SPC 106'中的HPA,或在SP被驱逐时无效,GPA→HPA这些映射必须被更新。通常,这在管理程序中完成,因为用于使高速缓存的EPT映射无效的INVEPT指令仅可以在VMX-root模式中执行。由于仅SD 210知道哪些映射要改变以及如何改变,需要VMCALL指令来将该知识传送到管理程序。VMCALL引起VM退出到管理程序中,至少从数据处理性能观点来看这可能是昂贵的提议。

可以在连同Windows OS一起操作的一些Intel处理器和芯片集中找到针对上述性能担忧的补救。例如,(例如在来自Intel公司的某些产品中可得到的)虚拟技术(VT)架构可以包括促进针对视图管理的性能改进且在VMX-root操作中时利用EPT而启用的特殊扩展。至少一个特殊扩展可以包括被称为EPT指针(EPTP)切换的特征,其允许客户机软件在被称为视图的不同EPT层级之间切换。EPTP引入了下述能力:EPT违反突变成新异常类型(被称为虚拟化异常(#VE,向量20)),OS 200可以处理该新异常类型,由于其具有与#PF相同的语义。这给OS 200提供了以异常处理的等待时间检测EPT违反和/或对EPT违反作出响应的能力,这与在到达视图管理逻辑之前累积VM退出等待时间形成对照。EPTP切换可以基于EPT结构层级,其中每个EPT结构层级描述独有的存储器区域。EPTP列表是指向第一级别(PML4)EPT页面的具有多达512个EPTP的页面尺寸数据结构,第一级别(PML4)EPT页面进而指向不同EPT层级。EPT层级可以定义存储器视图,其共享它们之间的GPA空间的一些部分。PML4.0视图常常被称为默认视图。通过在EAX寄存器中传递的第一实参被设置为0并且ECX寄存器中传递的第二实参被设置为视图号的情况下执行VMFUNC指令,客户机软件可以在EPT视图之间切换。为了在不招致VM退出的情况下从一个存储器视图移动到另一个存储器视图,活动源存储器视图中的VMFUNC调用页面必须与目的地存储器视图共享该页面。

在Windows的x64版本中,Microsoft选择了开始强制驱动器可以和不可以修改什么系统结构。内核补丁保护(KPP)或“PatchGuard”(如其非正式地所知)是强制限制的技术。PatchGuard可以周期性地验证内核中的受保护的系统结构尚未被修改。如果检测到修改,则Windows可以发起漏洞检查并用蓝屏和/或重启来关掉系统。对应的漏洞检查号码是0x109,并且漏洞检查码是CRITICAL_STRUCTURE_CORRUPTION。被禁止的修改可以包括:修改系统服务表,修改中断描述符表,修改全局描述符表,使用未被内核分配的内核栈,修改或修补包含在内核本身或HAL或NDIS内核库内的代码,等等。

通过采用BP扩展,可以显著改进LAM 208'的设计。然而,可以要求对管理程序的附加改变。管理程序可以启用EPTP切换,以及通过下述操作来使EPT违反突变成#VE:操纵各种客户机控制以允许SD 210直接地且安全地改变针对LAM 208'的EPT映射。管理程序可以将包含LAM 208'和SPC 206'之间的GPA→HPA映射的最后级别EPT映射到GPA空间中。为了保护那些映射免受攻击,管理程序可以创建特殊EPT视图,其与默认的EPT视图相同,除了所有页面仅以读写访问许可而映射。这防止默认视图中的任何代码默认地访问针对LAM 208'的EPT页面。该视图包含以读写访问许可而映射到GPA空间中的LAM 208'的EPT页面。管理程序也可以添加VMCALL,其允许SD 210以读写执行访问许可将更多页面添加到该视图。SD 210可以使用VMCALL来添加在默认视图和包含LAM 208'的EPT的视图之间切换的代码页面并操纵这些EPT映射。

例如,针对LAM 208'的EPT视图(例如PML4.511)可以由包括来自#PF处理程序的两个代码页面的管理程序来生成,SD 210可以使用该#PF处理程序以切换到PML4.511视图,快速访问并编辑针对LAM 208'的EPT映射,以及切换回到默认视图。SD 210可能仍然需要执行VMCALL,如果其想要使针对从EPC驱逐的飞地页面的高速缓存FEPC EPT映射无效的话,这是因为VMX-root模式中仅软件可以执行INVEPT指令。然而,可以采用“特别技巧”以通过执行VM函数0来使EPT映射无效。

EPT映射可以被标记有地址空间标识符(ASID),其连同实际GPA→HPA映射一起使其跨所有视图而唯一。对于任何处理器来说EPT视图的最大数目是512(例如,存储器页面是4096个字节并且一个EPTP记录是八个字节,因此存在4096/8个记录)。每CPU核仅存在一个EPTP列表页面。因此,可能生成完全相同的多达511个EPTP视图,加上第512个视图,该第512个视图允许驱动器编辑将LAM 208'映射到SPC 206'的叶EPT(例如假定ASID的数目绝不会超过512)。例如,管理程序可以生成默认PML4 EPT页面的拷贝并用指向拷贝的EPTP填充EPTP列表。每当要使针对LAM 208'的陈旧EPT映射无效时,SD 210可以执行VMFUNC (0, 索引),其中该索引可以从0增加到511且然后回到0。在操作的示例中,CPU可以使用四个ASID,因此管理程序可以创建五个默认视图。SD 210然后可以旋转通过视图PML4.0到PML4.4且回到PML4.0。PML4.511视图仍然可以被预留以用于LAM 208'中的EPT和操纵它们的代码。

图7图示了根据本公开至少一个实施例的虚拟异常处理的示例。为了处理通过对被标记为不存在的LAM 208'中的EPT映射的访问而生成的#VE,SGX驱动器必须在所有硬件线程上钩住OS 200的IDT中的#VE向量。这通常通过用新地址替换IDT中的#VE处理程序的地址而完成。然而,IDT是Windows PatchGuard所保护的系统数据结构。SD 210'不可以修改原始IDT,因此取而代之,其必须创建新的IDT。SD 210'可以在所有硬件线程上执行SIDT指令来从IDT寄存器(IDTR)检索包括IDT所位于的地址的值。SD 210'然后可以对原始IDT作出拷贝,从而用驱动器自身的#VE处理程序的地址替换原始#VE处理程序的地址。SD 210'然后可以在所有硬件核上用新IDT的地址执行LIDT。IDTR中的值也由PatchGuard实用工具周期性地检查,并且如果它们被改变,则PatchGuard将发起漏洞检查过程。这可以通过在管理程序中虚拟化IDTR而补救。每当执行LGDT、LIDT、LLDT、LTR、SGDT、SIDT、SLDT和STR时,管理程序可以在对任何描述符表寄存器的访问时启用VM退出。管理程序然后可以返回表寄存器的原始值而不是其当前内容。管理程序然后可以启用另一个VMCALL,SD 210'可以利用该另一个VMCALL来传递原始描述符表寄存器的值,每当执行SGDT或SIDT时,管理程序供给这些值。以该方式钩住IDT有时被称为生成虚拟IDT或VIDT 702。VIDT 702一般对与本公开一致的任何实施例来说不是必要的,且因此可以取决于例如OS 200(例如具有启用的PatchGuard的Windows OS)而在需要的基础上采用。

当#VE由处理模块104生成时,其将与异常相关联的信息写入到被称为虚拟化异常信息区域(#VE Info)的特殊数据结构。该信息可以包括四个64位值:当前EPTP、差错代码、GLA和GPA。可以通过将#VE信息的地址写入到客户机VMCS中的字段来启用#VE。由于仅管理程序可以编辑客户机VMCS,因此SD 210'可以使用VMCALL来传递针对处理器模块104中的每个处理器核的#VE Info的地址。SD 210'和管理程序然后可以使用被称为VE控制结构或VECS 708的特殊结构来经由VMCALL指令进行通信。管理程序为VECS 708分配一个页面,SD 210'使用CPUID 0x12中的新叶来发现该一个页面。VECS 708可以在所有的硬件核之间划分,并且其可以存储针对每个核的#VE Info和描述符表寄存器。管理程序将#VE Info地址写入到客户机VMCS以启用#VE。每当SGDT或SIDT被执行时,除了读取描述符表寄存器区域中的值以外,在OS 200通过执行LGDT或LIDT来改变它们的情况下,管理程序也可以写入到该区域。由于VECS 708包含处理#VE所需的信息,因此其可以驻留在未被内核分页的存储器中。错误处理程序内部的错误将导致双重错误,其通常由内核处理。

异常和中断通常由OS 200以专有且常常未被记入文档的方式来处理。因此,SD 210'中的#VE处理程序不可以依赖于任何内核API。例如,SD 210'可在其#VE处理程序中做的唯一事情可以被限于以某种方式将信息从#VE Info传递到内核本身以用于适当处理。由于#VE具有与#PF相同的语义,因此将#VE转换到#PF并将它们传递给内核是可能的解决方案。#VE和#PF之间的一个差别是:当生成#VE时,处理模块104中的处理器不像在#PF的情况下所做的那样将差错代码推送到栈上。同样,由于由四个值而不是在#PF的情况下由两个值来描述#VE,因此不使用控制寄存器CR2来写入GLA。如上文所描述的,在管理程序中将EPT违反转换到#PF被证明不是有效的解决方案。就OS 200而言,CR2寄存器和#PF差错代码(PFEC)中提供的信息所标识的GLA→GPA映射是有效的,以及因此,这样的#PF被OS 200忽略为伪造的。因此,使用与在#VE Info中报告的GLA相同的GLA将#VE转换成对应的#PF也可能失败。

为了解决此问题,SD 210'可以采用其在ECREATE被执行之前针对每个飞地预留的特殊FAULT_LA。其可能是例如应用202'的地址空间内但处于安全资源204的安全地址空间外的LA。由于该LA未被映射到任何VA或SP,因此通过它的访问将通常导致#PF。然而,OS 200不会知道如何处理#PF,且会经由SEH 700将其传递到应用202'。由于CR2控制寄存器被用于写入FAULT_LA,因此需要储存实际GLA的地方。查看SGX作为示例,结果是,EDX寄存器可能不可用于使用,这是由于其典型地用于将实参传递到一些SGX指令。因此,SD 210'可以将对应于导致了#VE的GPA的实际GLA写入到EDX寄存器。最后部分然后可以将以这样的方式构造的#PF递送到内核中的#PF处理程序。SD 210'然后可以检查VECS 706中的IDTR的当前值,因为其可能已经在某个时间被OS 200改变,并通过从由IDTR指向的IDT检索#PF处理程序的当前地址来读取它。SD 210'然后跳到该地址。

图7图示了可以如何将#VE转换到#PF并传递到OS内核710、然后到应用202'且然后回到SD 210'(例如从SEH 700到页面错误处理程序704)以用于对异常进行寻址的示例。最初,可以由设备装备712(例如处理模块106和/或SPC 206)导致#VE。VIDT 702的向量20中的基础地址指向SD 210'中的#VE处理程序。描述符表访问VM退出处理程序和EPT视图可以被设立在管理程序710中。当通过尝试访问具有在LAM 208'中被标记为不存在的映射的PP来生成#VE时,可以通过VIDT 702来执行SD 210'中的#VE处理程序706。#VE处理程序706可以检索#VE Info VECS 708,将差错代码推送到栈上,将GLA写入到EDX中,以及将针对出错页面所属的飞地的特殊FAULT_LA写入到EDX中。SD 210'然后针对IDTR的最新值检查VECS 708并从IDT检索内核710中#PF处理程序712的地址并将该控制转移到#PF内核712。#PF处理程序712并不忽略#PF,这是由于FAULT_LA未被映射到任何物理存储器。然而,其也不可以处理它,因为该地址从未被映射到可能已被分页出去的任何物理存储器。内核710然后可以通过SEH 700将错误转发到应用202'。应用202'中的现有SEH 700会通常通过调用#PF IOCTL将错误转发到SD 210'。然而,出错的GLA已经被储存,位于EDX中。#PF IOCTL然后可以被改变,因此SEH 700可以传递来自由内核提供的异常信息结构的两个值:来自CR2的GLA和来自EDX的值。SD 210'然后可以处理错误,例如,通过驱逐受害者页面以及在所要求的目标页面中进行分页,同时相应地更新针对LAM 208'的EPT映射。

图8图示了根据本公开至少一个实施例的用于采用用于促进对安全存储器的访问的中间结构的示例性操作。图8中公开的示例性操作可以是从在设备中操作的安全驱动器的视角来看的。在操作800中,安全页面高速缓存可以被预留在存储器中(例如在设备的存储器模块中)。可以在操作802中生成线性地址管理器映射(例如将伪页面地址映射到安全页面槽),并且后面接着可以在操作804中执行应用。在操作806中,可以预留应用页面表中的线性地址,并且可以在操作808中将该线性地址映射到线性地址管理器中的对应伪页面地址。然后可以在操作810中将应用页面加载到安全页面高速缓存槽中,该应用页面在加载时变成安全页面。

应用可以在操作812中开始正常操作。然后在操作814中可以关于虚拟异常是否已经发生作出确定。如果在操作814中确定虚拟异常已经发生,则在操作816中,可以重新配置虚拟异常以供操作系统处理。在操作818中,可以从应用接收页面错误(例如对应于虚拟异常),从而触发安全驱动器以开始解决问题(例如,从安全页面高速缓存驱逐受害者安全页面并在被驱逐的受害者页面的槽中加载目标应用页面)的操作。这些操作可以包括例如在操作820中从安全页面高速缓存槽(例如对应于受害者页面)取消映射至少一个伪页面地址。在操作822中,可以从受害者页面的安全页面高速缓存槽卸载该受害者页面,后面接着在操作824中将新的线性地址(例如对应于要加载的目标页面)映射到新的伪页面地址。然后在操作826中,可以将新的伪页面地址映射到可用的安全页面高速缓存槽,以及在操作828中,可以将新的应用页面(对应于在操作824中映射的线性地址)加载到可用的安全页面高速缓存槽中。操作828可以后面接着操作814来检测进一步的异常。

如果在操作814中确定虚拟异常尚未发生,则在操作830中应用可以继续正常操作直到在操作830中确定应用准备好(例如,或需要)终止。在操作832中,应用可以停止执行。在操作834中,可以放开与应用相关联的线性地址,后面接着在操作836中从存储器卸载安全页面高速缓存。操作836可以可选地后面接着返回到操作804,其中可以加载新应用。操作806-836然后可以如上文所描述的那样继续进行。

虽然图8图示了根据实施例的操作,但要理解的是,并非在图8中所描绘的所有操作对于其他实施例来说都是必要的。确实,在本文中完全预期的是,在本公开其他实施例中,图8中描绘的操作和/或本文中描述的其他操作可以以未在任何附图中具体示出但仍与本公开完全一致的方式组合。因此,涉及没有确切地在一个附图中示出的特征和/或操作的权利要求被认为是在本公开的范围和内容内。

如在本申请中和在权利要求中所使用的,由术语“和/或”联结的项目的列表可以意指所列项目的任何组合。例如,词组“A、B和/或C”可以意指:A;B;C;A和B;A和C;B和C;或A、B和C。如在本申请中和在权利要求中所使用的,由术语“……中的至少一个”联结的项目的列表可以意指所列术语的任何组合。例如,词组“A、B或C中的至少一个”可以意指:A;B;C;A和B;A和C;B和C;或A、B和C。

如在本文的任何实施例中所使用的,术语“模块”可以指的是被配置成执行前述操作中的任一项的软件、固件和/或电路。软件可以体现为被记录在非瞬变计算机可读存储介质上的软件包、代码、指令、指令集和/或数据。固件可以体现为在存储器设备中硬编码(例如非易失性)的代码、指令或指令集和/或数据。如本文中的任何实施例中所使用的“电路”可以包括:例如,单个地或以任何组合,硬连线电路、可编程电路(诸如包括一个或多个个体指令处理核的计算机处理器)、状态机电路和/或存储由可编程电路执行的指令的固件。模块可以共同地或个体地体现为形成更大系统的一部分的电路,例如,集成电路(IC)、片上系统(SoC)、台式计算机、膝上型计算机、平板计算机、服务器、智能电话等。

本文所描述的任何操作可以在包括一个或多个存储介质(例如非瞬变存储介质)的系统中实施,该存储介质上个体地或以组合方式存储有当由一个或多个处理器执行时执行方法的指令。此处,处理器可以包括例如服务器CPU、移动设备CPU和/或其他可编程电路。同样,意图是,本文所描述的操作可以跨多个物理设备(诸如,多于一个不同的物理位置处的物理结构)而分布。存储介质可以包括任何类型的有形介质,例如任何类型的盘,包括硬盘、软盘、光盘、致密盘只读存储器(CD-ROM)、致密盘可重写(CD-RW)和磁光盘、半导体器件(诸如只读存储器(ROM))、随机存取存储器(RAM)(诸如动态和静态RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪速存储器、固态盘(SSD)、嵌入式多媒体卡(eMMC)、安全数字输入/输出(SDIO)卡、磁或光卡、或适合于存储电子指令的任何类型的介质。其他实施例可以被实施为由可编程控制设备执行的软件模块。

因此,本申请涉及采用用于促进对安全存储器的访问的中间结构。安全驱动器(SD)可以被加载到设备中来预留设备中的存储器的至少部分作为安全页面高速缓存(SPC)。该SPC可以保护应用数据免受设备中的其他活动应用访问。可以通过将应用页面表(PT)中的线性地址(LA)映射到SPC中的页面槽的线性地址管理器(LAM)的使用来避免潜在的竞争条件。SD也可以通过重新配置原本会被OS忽略的VE来促进设备中的差错处理。

下面的示例关于进一步的实施例。本公开的下面的示例可以包括主题材料,诸如设备、方法、用于存储指令(该指令当被执行时引起机器执行基于该方法的动作)的至少一个机器可读介质、用于执行基于该方法的动作的装置和/或用于采用用于促进对安全存储器的访问的中间结构的系统,如下文所提供。

根据示例1,提供了一种被配置成采用用于促进对安全存储器的访问的中间结构的设备。该设备可以包括处理模块和存储器模块,该存储器模块包括至少固件模块,该固件模块引起安全驱动器被加载到该存储器模块中,该安全驱动器引起存储器模块中的存储器的至少一个部分被预留作为包括至少一个安全页面槽的安全页面高速缓存,并生成线性地址管理器,该线性地址管理器将该线性地址管理器中的至少一个伪页面地址映射到该至少一个安全页面槽。

示例2可以包括示例1的要素,其中该存储器模块进一步包括应用在其中执行的操作系统,在该操作系统中至少一个应用的执行引起数据从存储器模块中的别处加载到安全页面高速缓存中。

示例3可以包括示例2的要素,其中该应用包括至少一个页面表,该至少一个页面表包括至少一个线性地址,该至少一个线性地址由安全驱动器预留以用于映射到线性地址管理器中的至少一个伪页面地址。

示例4可以包括示例3的要素,其中该安全驱动器进一步放开由安全驱动器预留的线性地址以用于重新指派,将该线性地址映射到线性地址管理器中的伪页面地址,并将来自该应用的应用页面加载到被映射到伪页面地址的安全页面槽中,该应用页面在加载时变成安全页面。

示例5可以包括示例4的要素,其中该安全驱动器进一步至少基于接收到页面错误来确定在安全页面槽中加载的安全页面要从安全页面高速缓存中驱逐,引起对应于安全页面的伪页面地址从该安全页面被加载在其中的安全页面槽取消映射,并引起从该安全页面槽卸载该安全页面。

示例6可以包括示例5的要素,其中该安全驱动器进一步引起新应用页面被加载到安全页面槽中,引起新伪页面地址被映射到安全页面槽,并引起新线性地址被映射到新伪页面地址。

示例7可以包括示例4的要素,其中该安全驱动器进一步至少基于接收到页面错误来确定在安全页面槽中加载的安全页面要从安全页面高速缓存中驱逐,引起对应于安全页面的伪页面地址从该安全页面被加载在其中的安全页面槽取消映射,引起该安全页面从该安全页面槽中卸载,引起新应用页面被加载到安全页面槽中,引起新伪页面地址被映射到安全页面槽,并引起新线性地址被映射到新伪页面地址。

示例8可以包括示例7的要素,其中该线性地址管理器至少避免竞争条件,其中当安全页面从安全页面高速缓存中驱逐时,所预留的线性地址被重新指派到另一个程序线程。

示例9可以包括示例1到8中任一个的要素,其中该安全驱动器进一步接收由于发生在安全页面高速缓存中的页面错误而引起的虚拟异常,将该虚拟异常重新配置为由操作系统处理,并将重新配置的虚拟异常提供给操作系统内核。

示例10可以包括示例9的要素,其中该安全驱动器重新配置虚拟异常包括:该安全驱动器将差错代码推送到操作系统调用栈上,并将指示该虚拟异常已经发生的线性地址写入到处理模块的控制寄存器,以引起操作系统差错处理程序对该虚拟异常作出反应,该线性地址指示该虚拟异常在引起了该异常的应用的地址空间内且在存储器模块内的安全地址空间外。

示例11可以包括示例10的要素,其中该安全驱动器进一步将引起了该虚拟异常的线性地址写入到安全地址空间中的寄存器。

示例12可以包括示例9的要素,其中该安全驱动器重新配置虚拟异常包括:该安全驱动器:将差错代码推送到操作系统调用栈上;将指示该虚拟异常已经发生的线性地址写入到处理模块的控制寄存器,以引起操作系统差错处理程序对该虚拟异常作出反应,该线性地址指示该虚拟异常在引起了该异常的应用的地址空间内且在该存储器模块内的安全地址空间外;以及将引起了该虚拟异常的线性地址写入到安全地址空间中的寄存器。

示例13可以包括示例12的要素,其中该安全驱动器进一步接收来自应用中的结构化差错处理程序的页面错误并基于接收到页面错误来解决该虚拟异常。

示例14可以包括示例1到8中任一个的要素,其中该安全驱动器是安全防护扩展(SGX, Secure Guard Extensions)驱动器,并且该安全页面高速缓存是SGX飞地页面高速缓存。

根据示例15,提供了一种用于采用用于促进对安全存储器的访问的中间结构的方法。该方法可以包括:引起存储器的至少一个部分被预留作为包括至少一个安全页面槽的安全页面高速缓存;以及生成线性地址管理器,该线性地址管理器将该线性地址管理器中的至少一个伪页面地址映射到该至少一个安全页面槽。

示例16可以包括示例15的要素,以及可以进一步包括:执行包括至少一个页面表的应用,该至少一个页面表具有至少一个线性地址,该至少一个线性地址被预留以用于映射到该线性地址管理器中的至少一个伪页面地址;以及基于执行该应用来引起数据从存储器中的别处加载到安全页面高速缓存中。

示例17可以包括示例16的要素,其中引起数据被加载到安全页面高速缓存中包括:放开所预留的线性地址以用于重新指派;将线性地址映射到线性地址管理器中的伪页面地址;以及将来自该应用的应用页面加载到被映射到该伪页面地址的安全页面槽中,该应用页面在加载时变成安全页面。

示例18可以包括示例17的要素,以及可以进一步包括:至少基于接收到页面错误来确定在安全页面槽中加载的安全页面要从安全页面高速缓存中驱逐;引起对应于安全页面的伪页面地址从安全页面被加载在其中的安全页面槽取消映射;以及引起从该安全页面槽卸载该安全页面。

示例19可以包括示例18的要素,以及可以进一步包括:引起新应用页面被加载到安全页面槽中;引起新伪页面地址被映射到安全页面槽;以及引起新线性地址被映射到新伪页面地址。

示例20可以包括示例17的要素,以及可以进一步包括:至少基于接收到页面错误来确定在安全页面槽中加载的安全页面要从安全页面高速缓存中驱逐;引起对应于安全页面的伪页面地址从安全页面被加载在其中的安全页面槽取消映射;引起该安全页面从安全页面槽中卸载;引起新应用页面被加载到该安全页面槽中;引起新伪页面地址被映射到安全页面槽;以及引起新线性地址被映射到新伪页面地址。

示例21可以包括示例20的要素,其中该线性地址管理器至少避免竞争条件,其中当安全页面从安全页面高速缓存中驱逐时,所预留的线性地址被重新指派到另一个程序线程。

示例22可以包括示例15到21中任一个的要素,以及可以进一步包括:接收由于发生在安全页面高速缓存中的页面错误而引起的虚拟异常;将该虚拟异常重新配置为由操作系统处理;以及将重新配置的虚拟异常提供给操作系统内核。

示例23可以包括示例22的要素,其中重新配置该虚拟异常包括:将差错代码推送到操作系统调用栈上;以及将指示该虚拟异常已经发生的线性地址写入到处理模块的控制寄存器,以引起操作系统差错处理程序对该虚拟异常作出反应,该线性地址指示该虚拟异常在引起了该异常的应用的地址空间内且在存储器模块内的安全地址空间外。

示例24可以包括示例23的要素,以及可以进一步包括:将引起了该虚拟异常的线性地址写入到安全地址空间中的寄存器。

示例25可以包括示例22的要素,其中重新配置该虚拟异常可以包括:将差错代码推送到操作系统调用栈上;将指示该虚拟异常已经发生的线性地址写入到处理模块的控制寄存器,以引起操作系统差错处理程序对该虚拟异常作出反应,该线性地址指示该虚拟异常在引起了该异常的应用的地址空间内且在该存储器模块内的安全地址空间外;以及将引起了该虚拟异常的线性地址写入到安全地址空间中的寄存器。

示例26可以包括示例25的要素,以及可以进一步包括:接收来自应用中的结构化差错处理程序的页面错误;以及基于接收到页面错误来解决该虚拟异常。

示例27可以包括示例15到21中任一个的要素,其中该安全页面高速缓存是安全防护扩展(SGX)飞地页面高速缓存。

根据示例28,提供了一种包括至少一设备的系统,该系统被布置成执行上述示例15到27中任一个的方法。

根据示例29,提供了一种芯片集,其被布置成执行上述示例15到27中任一个的方法。

根据示例30,提供了至少一种机器可读介质,其包括多个指令,所述指令响应于在计算设备上执行而引起该计算设备实施根据上述示例15到27中任一个所述的方法。

根据示例31,提供了一种被配置用于采用用于促进对安全存储器的访问的中间结构的设备,该设备被布置成执行上述示例15到27中任一个的方法。

根据示例32,提供了一种用于采用用于促进对安全存储器的访问的中间结构的系统。该系统可以包括:用于引起存储器的至少一个部分被预留作为包括至少一个安全页面槽的安全页面高速缓存的装置;以及用于生成线性地址管理器的装置,该线性地址管理器将该线性地址管理器中的至少一个伪页面地址映射到该至少一个安全页面槽。

示例33可以包括示例32的要素,以及可以进一步包括:用于执行包括至少一个页面表的应用的装置,该至少一个页面表具有至少一个线性地址,该至少一个线性地址被预留以用于映射到该线性地址管理器中的至少一个伪页面地址;以及用于基于执行该应用来引起数据从存储器中的别处加载到安全页面高速缓存中的装置。

示例34可以包括示例33的要素,其中用于引起数据被加载到安全页面高速缓存中的装置可以包括:用于放开被预留以用于重新指派的所预留的线性地址的装置;用于将线性地址映射到线性地址管理器中的伪页面地址的装置;以及用于将来自该应用的应用页面加载到被映射到该伪页面地址的安全页面槽中的装置,该应用页面在加载时变成安全页面。

示例35可以包括示例34的要素,以及可进一步包括:用于至少基于接收到页面错误来确定在安全页面槽中加载的安全页面要从安全页面高速缓存中驱逐的装置;用于引起对应于安全页面的伪页面地址从该安全页面被加载在其中的安全页面槽取消映射的装置;以及用于引起从该安全页面槽卸载该安全页面的装置。

示例36可以包括示例35的要素,以及可以进一步包括:用于引起新应用页面被加载到该安全页面槽中的装置;用于引起新伪页面地址被映射到该安全页面槽的装置;以及用于引起新线性地址被映射到该新伪页面地址的装置。

示例37可以包括示例31到36中任一个的要素,以及可以进一步包括:用于接收由于发生在安全页面高速缓存中的页面错误而引起的虚拟异常的装置;用于将该虚拟异常重新配置为由操作系统处理的装置;以及用于将重新配置的虚拟异常提供给操作系统内核的装置。

示例38可以包括示例37的要素,其中用于重新配置虚拟异常的装置可以包括:用于将差错代码推送到操作系统调用栈上的装置;以及用于将指示该虚拟异常已经发生的线性地址写入到处理模块的控制寄存器,以引起操作系统差错处理程序对该虚拟异常作出反应的装置,该线性地址指示该虚拟异常在引起了该异常的应用的地址空间内且在存储器模块内的安全地址空间外。

示例39可以包括示例38的要素,以及可以进一步包括:用于将引起了虚拟异常的线性地址写入到安全地址空间中的寄存器的装置。

示例40可以包括示例31到36中任一个的要素,其中该安全页面高速缓存是安全防护扩展(SGX)飞地页面高速缓存。

本文中已采用的术语和表达被用作描述而非限制的术语,并且在这样的术语和表达的使用中,并不意图排除所示出和描述的特征的任何等同物(或其部分),并且应当认识到的是,在权利要求的范围内各种修改是可能的。相应地,权利要求意图覆盖所有这样的等同物。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1