用于独立执行的创新指令集和软件模型

本文译自“Innovative Instructions and Software Model for Isolated Execution”,原文地址:原文地址
译者:过境龙
翻译时间:2019年3月22日
说明:翻译不到之处请多见谅,有理解不清楚的地方请参考原文。

摘要

多年来PC社区一直努力提供开放平台下的安全解决方案,当前英特尔开发了创新技术,使软件开发人员能够在开放平台上开发和部署安全的应用程序。该技术使得应用在原生操作系统环境下执行,并能够同时保持其机密性和完整性,它通过提供ISA扩展来以开发人员确定的粒度生成硬件可执行容器。这些对操作系统不透明的容器由操作系统管理。本文分析了应用程序面临的威胁和攻击。然后描述用于生成基于硬件的容器的ISA扩展。最后介绍了该容器的编程模型。

1. 简介

今天的计算机系统处理越来越多的重要、敏感和有价值的信息,必须保护此信息不受篡改和盗窃。整个行业都致力于防止系统中信息被窃取,如银行数据或公司知识产权。有许多应用程序必须在平台上保持机密性,如:财务程序、电子银行和病历程序。每个秘密持有人可能相互不信任其他秘密持有人。每个秘密都必须独立于其他秘密进行保护。本文介绍了Intel®软件保护扩展(Intel®SGX),这是一组添加到Intel®体系结构中的新指令和内存访问更改。这些扩展允许应用程序实例化受保护的容器,称为Enclave。Enclave是应用程序地址空间中的一个受保护区域,如图1所示,即使存在特权恶意软件,它也能提供机密性和完整性保护。只要不在Enclave中,即使是特权软件(如虚拟机监视器、BIOS或操作系统)要访问Enclave的内存区域也会被禁止。

SGX允许应用程序的受保护部分以明确的形式分发。在建造Enclave之前,Enclave代码和数据是可被随意检查和分析的。受保护部分被加载到一个Enclave之中,Enclave中的代码和数据被度量。一旦应用程序的代码和数据加载到一个Enclave中,所有外部软件对它的访问都会受到保护。应用程序可以向远程证明自己的身份,并安全地提供密钥和凭据。应用程序还可以请求一个Enclave&平台专用密钥,它可以使用该密钥来保护希望存储在Enclave之外的密钥和数据。
除了安全属性之外,Enclave环境还提供了与开放平台上主CPU相关联的扩展性和性能。

对SGX的支持需要在Intel的体系架构中引入两个主要功能,首先是改变Enclave的内存访问语义,第二个是保护地址映射。
本文分为几个部分:

  • 在第2节中,我们概述了SGX保护模型。
  • 第3节描述了SGX指令集和软件模型。
  • 第4节描述了用于支持应用程序Enclave的硬件组件。
  • 第5节描述了Enclave创建过程。
  • 第6节描述应用程序如何在Enclave内和外转换。
  • 第7节描述了如何从受保护的内存中调出Enclave以允许多个或非常大的Enclave。
  • 最后,在第8节中,我们总结了这些好处,并展示了这项技术在何处包含了提高开放系统安全性的新增强。

SGX体系架构还支持远程证明和封装,相关内容在参考文献[2]中说明,除此之外,因特尔实验室发布的一些重要信息在参考文献[3]中进行了说明。

SGX-用于独立执行的创新指令集和软件模型(翻译)-编程知识网

图1 应用虚拟地址空间中的Enclave

2. 保护机制概述

SGX禁止所有其它软件(包括系统软件、其它Enclave中的软件)访问Enclave内部的代码和数据。试图修改Enclave中内容的行为会被检测到,这些行为要么被禁止、要么中断执行。安全属性总结如下:

  • SGX能够检测出Enclave实例中因软件攻击导致的完整性被破话的情况,并能够阻止访问被篡改的代码或数据;
  • SGX能够提供对Enclave中代码或数据的机密性保护,防止软件攻击;
  • SGX为所有的Enclave实例提供隔离能力;
  • SGX能够防止Enclave实例因软件攻击被重放;
    另外,基于硬件能够保证Enclave内的软件从被认证的位置开始执行,意外退出也不会泄露Enclave内的信息。

最后必须保护Enclave内的数据不被Enclave可信边界以外的软件所篡改,即使当Enclave被管理系统资源的OS或者VMM放到磁盘上或者未经保护的内存中也是如此。

为实现这些保护,硬件需要一些新的能力。首先,在Enclave内部执行的代码必须能够访问Enclave内部的代码和数据,Enclave外部代码访问这些资源则会被禁止。其次从应用程序的虚拟地址到正确物理地址的转换必须与应用程序开发人员构建应用程序时保持一致。构建一个安全容器所需的更多特性细节在文献[4]中进行了说明。 当Enclave数据处在处理器内部的组件中,如寄存器、Cache、或者其它逻辑块中时,通过软件进行的非授权访问会被处理器内部的访问控制机制拒绝。然而当Enclave数据和代码离开这些组件被写到平台内存中时,会被自动进行加密和完整性保护,以防止通过内存探测或者其他技术对Enclave数据或代码进行查看、修改、或者重放。

3.编程模型

SGX 体系架构包括17条新指令、新的处理器结构体、和一个新的执行模式。这包括将Enclave加载到受保护内存,通过页表映射进行资源访问,对Enclave内的应用进行调度执行。然而对于Enclave能够访问哪些资源,系统软件始终保持着控制权。应用既可以被封装到一个独立的Enclave内,也可以被分解为更小的组件,仅将与安全严格相关的组件放到Enclave内。

3.1 SGX指令集

SGX操作可以按以下几类功能进行分类:Enclave创建/销毁,Enclave进入/退出,Enclave安全操作,页面操作指令,调试指令。这些指令会在下面章节进行概述。

Enclave创建和销毁

表3-1包括了Enclave创建和销毁相关的指令,包括为Enclave分配受保护内存、向受保护内存加载值,对Enclave内受保护内存中的值进行度量,以及在应用结束后销毁Enclave。

**表 3-1 Enclave创建指令**

指令 说明
ECREATE Declare base and range, start build
EADD Add 4k page
EEXTEND Measure 256 bytes
EINIT Declare enclave built
EREMOVE Remove Page

Enclave进入和退出

表3-2包括Enclave进入和退出相关的指令。特别地Enclave可以使用EENTER进入、使用EEXIT退出。Enclave也可以在中断或者异常时使用AEX异步退出。使用AEX时会对所有Enclave内的秘密信息进行存储,对寄存器内的秘密信息进行清除,然后返回到外部应用流进行执行,。

**表3-2Enclave进入和退出指令**

指令 说明
EENTER Enter enclave
ERESUME Resume enclave
EEXIT Leave enclave
AEX Asynchronous enclave exit

Enclave页面指令

SGX分页指令允许系统软件在Enclave和未经保护的内存之间安全地移入或移出页面

**表3-3 Enclave页面操作指令**

指令 说明
EPA Create version array page
ELDB/U Load an evicted page into protected memory
EWB Evict a protected page
EBLOCK Prepare for eviction
ETRACK Prepare for eviction

Enclave调试

Enclave调试指令如表3-4所示,这些指令允许开发者使在一个特殊的“调试Enclave”中用熟悉的技术执行调试操作。调试Enclave能够通过单步执行对应用状态进行检查。调试Enclave不能与产品Enclave共享数据。如果调试Enclave退出开发环境,这能够保护Enclave开发者。本文对Enclave调试没有更多的细节。

**表3-4 Enclave调试指令**

指令 说明
EDBGRD Read inside debug enclave
EDBGWR Write inside debug enclave

Enclave安全操作

Enclave安全操作指令如表3-5所示,这些指令允许Enclave向外部证明该Enclave是在支持SGX指令集的硬件上构建的。该过程的细节、以及关键生成指令在文献[1]中有详细的说明。

**表3-5 Enclave安全操作指令**

指令 说明
EREPORT Enclave report
EGETKEY Generate unique key

3.2 地址范围

Enclave在应用的虚拟地址空间内执行,Enclave是该地址空间的子集,所有保护基于Enclave的虚拟地址完成,Enclave的虚拟地址由软件使用ECREATE指令进行声明。

3.3 数据结构和组件

为了实现SGX的安全属性,SGX定义了新的数据结构来维护相关信息,主要的数据结构如表3-6所示。

**表3-6 Enclave数据结构和组件**

数据结构 说明
Enclave Page Cache (EPC) Contains protected code and data in 4K pages
Enclave Page Cache Map (EPCM) Contains meta-data of enclave page
SGX Enclave Control Store (SECS) Meta data for each enclave
Thread Control Structure (TCS) Meta data for each thread
VA Page Version Array of evicted pages
SIGSTRUCT enclave’s signature structure, the sealing identity

EPC为本机中的Enclave提供受保护内存地址范围。EPCM是与每个EPC页面相关的安全元数据,EPCM包含硬件所需的用来保护Enclave的信息,EPC页和EPCM表项之间是1:1对应的。

SECS使用EPC中的一页来维护特定Enclave的元数据。TCS使用EPC中的1页来维护元数据,该元数据被硬件用于控制进入每个逻辑处理器的入口。

除了Enclave页面,还有一些SGX结构体不顺手任何Enclave,这些结构体用于内部.这些结构用于内部预定回收的Enclave页面的版本计数。请查看7.2节了解Enclave页面回收机制的细节。最后,结构体SIGSTRUCT用于传递给EINIT指令,提供更加灵活的封装标识和证明[2]。

3.4 Enclave模式

当处理器进入一个Enclave后,就开始运行在Enclave模式下,此模式更改内存访问语义以对内存访问执行附加检查。它允许Enclave内的代码访问该特定Enclave。如果不是Enclave内的代码,对EPC的内存访问将导致返回abort page值。

3.5 资源管理

ECP是系统范围内共享的资源,由特权软件进行管理。EPC包含一个Enclave执行所需的页面。Enclave并不要求所有页面都在EPC中才能执行,这有点像是Intel体系架构中的虚拟内存机制:当前没有执行的页面可以被移除内存。

4. 硬件组件

为了实现SGX内存保护,需要新的硬件和结构体。Enclave页面和SGX结构体存储在EPC(Enclave Page Cache)中,该内存受硬件和软件访问保护。EPC内部寄存着来自多个不同Enclave的代码和数据,当一个Enclave访问EPC中的地址时,处理器决定是否允许该访问,处理器在一个称为EPCM(Enclave Page Cache Map)的硬件结构中维护EPC中每个页面的安全和访问控制信息。该结构体被处理器的缺页处理(PMH)硬件模块使用,PMH通过查询由系统软件、范围寄存器和EPCM维护的页表来实现对内存的访问。

4.1 Enclave页面缓存(EPC)

EPC是用于存储Enclave页面和SGX结构体的受保护内存,EPC被划分为4K字节的簇(称作EPC页)。ECP页可以处于有效或者无效状态。处于有效状态的EPC页要么包含Enclave页面、要么包含SGX结构体。每个EPC页面的安全属性保存在一个称为EPCM的内部微体系结构中,如下所述。

每个Enclave实例拥有一个Enclave控制结构体:SECS。EPC中每个有效的Enclave页面都只属于一个Enclave实例。系统软件负责将Enclave虚拟地址映射到一个有效的EPC页。

4.2Enclave页面缓存映射(EPCM)

Enclave页面缓存映射是一个受保护的结构体,处理器使用该结构体跟踪EPC内容。EPCM包含一系列条目,每个条目对应EPC中的一个页面入口。EPCM由处理器管理,作为各种SGX指令的一部分,软件或设备永远无法直接访问EPCM。EPCM的格式是微体系结构的,并且依赖于实现。但是,从逻辑上讲,每个EPCM条目都包含以下信息:

  • EPC页是否有效
  • 拥有该页的Enclave实例
  • 页类型(REG,TCS、VA、SECS)
  • Enclave访问该页面所使用的虚拟地址
  • Enclave在该页上的读/写/执行权限
  • 该页是否可以访问(BLOCKED或UNBLOCKED),见7.1节。

在Enclave页面被加载到EPC的情况下,CPU在地址转换过程中使用EPCM结构体来强制实施访问控制,逻辑上这种做法在传统的分段、分页表和扩展分页表机制之外,提供了额外的安全访问控制层。

4.3 EPC布局(EPC Layout)

EPC布局与特定的实现相关,通过CPUID指令枚举[5]。在较高层面上,如果CPU支持SGX、并且在加密保护的平台DRAM中实现了EPC,此时CPU会支持BIOS保留一系列称为处理器保留内存(PRM)的能力。BIOS通过配置一组范围寄存器(统称为PRMRR)来分配PRM。

SGX-用于独立执行的创新指令集和软件模型(翻译)-编程知识网

**图2 SGX Enclave访问检查**

SGX-用于独立执行的创新指令集和软件模型(翻译)-编程知识网

**图3 PRM(处理器保留内存)布局**

图3是一个示例布局,PRM和EPC的确切布局是特定于模型的,并且取决于bios设置。

4.4 EPC内存保护

本节描述了CPU保护EPC内存的机制。

内存加密引擎

对于很多实现来说使用主存作为EPC存储是十分理想的,挑战在于有许多已知的软件和硬件攻击可以对DRAM内存进行攻击,以密码方式保护DRAM中的EPC内容是抵御这些攻击的一种方法。
为此,内存加密引擎(MEE)是一个硬件单元,它对处理器包和主内存(DRAM)之间选定的通信进行加密和完整性保护。MEE操作的整个内存区域称为MEE区域,根据实施情况,PRM由一个或多个MEE区域覆盖。

内存访问语义

CPU内存保护机制通过将这些访问视为对不存在内存的引用,从物理上阻止所有外部代理(DMA、图形引擎等)对PRM的访问。要使用MOV和其他内存相关指令访问Enclave内的页面,硬件将按图2所述方式进行检查,具体步骤包括:

  • 逻辑处理器在Enclave模式下执行;
  • 当前页面属于逻辑处理器正在执行的Enclave;
  • 页面使用正确的虚拟地址进行访问

如果被访问的页面不是Enclave虚拟地址空间的一部分,而是EPC的一部分,那么该访问将被视作对不存在内存的引用。如果页面在Enclave虚拟地址空间之外,那么硬件允许Enclave代码访问PRM之外的内存。如果该页在Enclave的虚拟地址空间之外,并解析为一个PRM页,那么硬件通过发出故障信号来阻止这种访问。非Enclave模式的处理器对Enclave页的访问被视为对不存在的内存的引用。

5. Enclave创建过程

Enclave创建过程将Enclave二进制文件加载到EPC中,并建立Enclave标识。Enclave创建过程分为多个阶段:Enclave控制结构初始化、EPC页面分配、Enclave内容载入页面、Enclave内容度量、Enclave标识建立。这些步骤通过以下指令支持:ECREATE EADD, EEXTEND, and EINIT。

ECREATE启动Enclave创建过程并初始化包含Enclave全局信息的SGX EnclaveEnclave控制结构(SECS)。EADD向Enclave提交EPC页面,对提交行为进行记录,但不记录SECS中的内容。Enclave中的内存内容由EEXTENT指令显示度量。EINIT完成创建过程,最终确定Enclave度Enclave量并建立Enclave标识。在EINIT执行完成之前,Enclave条目禁止访问。

5.1开始创建Enclave

Enclave的创建过程从ECREATE开始,ECREATE将一个空闲的EPC页转换为SECS页(SGX EnclaveEnclave控制结构)并初始化该结构。作为ECREATE的一部分,系统软件选择将哪个EPC页面设为SECS,并指定Enclave的几个属性,包括Enclave可以访问的受保护地址范围、操作模式(32位对64位)、Enclave支持的处理器功能,以及是否允许调试访问。

5.2增加页面并对Enclave进行度量

SECS创建完成后,可以通过EADD向Enclave中增加页面,该过程会将一个空闲的EPC页面转换为一个REG或者一个TCS(线程控制结构)。当被调用时,EADD将初始化EPCM条目,以指示页面类型(REG或TCS)、Enclave将访问该页面的线性地址、该页面的Enclave RWX权限,并将该页面与作为输入提供的SECS相关联。硬件使用EPCM(Enclave页缓存映射)条目信息为页面提供SGX访问控制,如第4节所述。然后,EADD将EPCM信息记录在存储在SECS中的加密日志中,并将4K字节的数据从未保护的内存复制到分配的EPC页面。

系统软件负责选择一个空闲的EPC页面、要添加的页面类型、页面属性、页面内容以及要添加页面的SECS(enclave)。

将页面添加到Enclave后,软件可以通过调用EEXTEND来度量由开发人员确定的256字节区域。因此,要度量整个页面,系统软件必须执行EEXTEND 16次。每次调用EEXTEND都会在加密日志中添加一个头,指示正在度量哪个区域,后跟256字节的信息(译者注:被度量的数据)。

加密日志中的条目定义了Enclave的度量,由于Enclave是被不可信的系统软件构建的,度量对于确保Enclave被正确构建十分关键。不正确的构建示例包括添加具有相同Enclave线性地址的多个页面从而产生别名,将修改的内容加载到Enclave页面,或者并未对Enclave的全部内容进行度量。考虑到日志的潜在大小,实际上只有日志的摘要存储在SECS中。正确的构建会导致加密日志与SIGSTRUCT(Enclave签名结构体,即封装的标识)中Enclave所有者构建的日志相匹配。它可以由远程方验证。[2]

5.3 初始化Enclave

当系统软件完成增加和度量页面的过程后,Enclave需要被初始化。添加页面、度量页面、启用Enclave入口等操作在初始化过程中是被禁止的。初始化过程会结束加密日志,并建立Enclave标识和密封标识,这两个标识会被EGETKEY和EREPORT使用。密封标识由密封权威(sealing authority)管理,该标识是对结构体进行签名的公钥的哈希值,该结构体由EINIT进行处理。Enclave标识包含Enclave属性和Enclave度量,封装权威会为Enclave标识分配产品ID和版本号。

EINIT通过下列步骤建立封装标识:

  1. 验证SIGSTRUCT已使用SIGSTRUCT中包含的公钥签名
  2. 检查Enclave的度量值是否与SIGSTRUCT中指定的Enclave的度量值匹配
  3. 检查Enclave的属性是否与SIGSTRUCT中指定的属性兼容
  4. 完成Enclave的度量,并在SECS中记录封装标识和Enclave标识(封装权威、产品ID和安全版本号)

EINIT执行成功后将允许进入Enclave。

6. 进入和退出Enclave

保护Enclave完整性的关键是控制进出Enclave的执行转移。输入过程需要清除任何与Enclave的受保护地址区域重叠的缓存转换。这可以保证所有受保护的Enclave内存访问被正确检查。进入的进程必须识别处理器应该将控制交给Enclave内的何处并启用Enclave模式。退出Enclave必须再次清理任何指向Enclave保护地址区域的cache转换,以确保没有其他软件能够通过cache转换来访问Enclave受保护内存。

Enclave模式下可能发生中断、故障或异常,传统上,此时处理器将指向由系统软件指定的故障处理程序,由故障处理程序保存寄存器状态并为事件提供服务。一旦事件处理完成,系统处理软件回复寄存器状态并将控制返回到软件中断发生的位置。允许系统软件读取并且/或者修改Enclave的寄存器状态,使得系统软件处于Enclave信任边界之内。因此,SGX引入了一个新的例程来保护Enclave的完整性和机密性。

6.1 同步进入和退出Enclave

EENTER指令用于在程序控制下进入Enclave。要执行EENTER,软件必须提供一个TCS(Thread Control Struct)地址,该地址是要进入的Enclave的一部分。TCS指示Enclave内进行传输控制的地址,Enclave内AEX存储寄存器状态。逻辑处理器进入Enclave后,在退出之前,TCS会一直处于占用状态。为了对多线程Enclave提供支持,SGX允许一个Enclave构建者定义多个TCS结构体。

EENTER还定义异步退出指针(AEP)参数。AEP是Enclave外部的地址,用于在AEX之后转换回Enclave。AEP是使用IRET进行异常退出时的返回地址。通常该位置将包含ERESUME指令。ERESUME将控制权传输到从enclave saved状态检索到的Enclave地址。

EENTER执行的操作如下:

  1. 检查TCS是否不忙,并刷新Enclave地址的TLB条目
  2. 将操作模式转换为Enclave模式
  3. 保存栈指针RSP和帧指针RBP,以便稍后在Enclave异步退出时恢复。
  4. 保存线程的OS支持状态(XCR0),并将其替换为Enclave支持的子集(XFRM)
  5. 保存AEP(异步退出指针),将来AEX(异步退出指令)可能使用该值
  6. 将控制权从Enclave外部转移到TCS定义的Enclave内部

EEXIT指令是在程序控制下离开Enclave的方法,该指令执行如下操作:

  1. 清除Enclave模式和Enclave地址的TLB表项。
  2. 将TCS标记为不忙
  3. 经控制从Enclave内部转移到由RBX指定的外部地址

6.2 异步退出(AEX)

Enclave执行过程中可能会发生异常、中断等异步事件,这些事件被称作Enclave退出事件(EEE,Enclave Exiting Events),当EEE发生时,处理器状态被安全地保存在Enclave内,然后被模拟的(synthetic)状态替换,以防止秘密泄露,安全地保存状态、建立模拟状态的过程叫做“异步Enclave退出”(AEX,Asynchronous Enclave Exit)。

作为Enclave退出事件的一部分,AEP被推到堆栈上作为故障地址。该地址就是执行IRET后的返回地址。在返回地址可以通过执行ERESUME重新进入Enclave。

异步退出完成后,逻辑处理器不在处于Enclave模式,退出事件被正常处理。任何在AEX完成后的新事件都被看做在Enclave之外发生(e.g. a #PF in dispatching to an interrupt handler)。

6.3 AEX之后恢复执行

如果一个事件导致逻辑处理器退出Enclave模式,在系统软件处理完这类事件后,逻辑处理器可以使用ERESUME重新启动执行。与EENTER不同,ERESUME将恢复寄存器并将控制返回到中断发生的位置。如果退出的原因是异常或故障,并且没有解决,则事件将再次触发。例如,如果一个enclave执行一个“被零除”操作,则执行ERESUME将导致enclave尝试重新执行错误指令。为了处理Enclave内发生的异常,软件应使用EENTER指令在不同的位置进入Enclave并调用异常处理程序。异常处理程序可以尝试解决故障,或者简单地返回并向软件指示应终止Enclave。

7 EPC(Enclve Page Cache)页

允许系统软件超额使用EPC会增加可同时支持的受保护应用程序的数量。SGX体系提供指令,允许系统软件安全地移除和加载enclave页面和SGX结构体,通过这种方式实现对EPC的超额使用。

Enclave页面从ECP移到主存时,页面内容的完整性、机密性和防重放级别必须与页面在ECP中时保持相同。为了达成这一目标,页指令强制实施以下规则:

  1. 必须从所有逻辑处理器中清除所有转换到该页面的缓存,然后才能移除Enclave页。
  2. 移除的enclave页内容在写到外部主存之前必须加密。
  3. 当移除的Enclave页面重新加载到EPC中时,它必须具有与移除时相同的页面类型、权限、虚拟地址、内容,并且与收回时相同的Enclave关联。
  4. 只有enclave页的最后移除版本才被允许重新加载。

7.1 移除Enclave页面的准备工作

为了准备移除Enclave页面,系统软件使用EBLOCK指令将要移除的页面标记为BLOCKED。一旦EPC页面被标记为BLOCKED,处理器将禁止创建任何新的转换检测缓冲区(TLB,Translation Lookaside Buffer),TLB中的条目负责EPC页面映射。然而,引用了待移除页面的TLB条目可能在一个或多个逻辑处理器上存在,在页面从EPC中移除前这些TLB条目必须被移除。在SGX中这一机制必须通过硬件保证。 虽然只有页面的TLB条目必须删除,但我们选择了一个更简单的实现选项。 在该实现中,移除了该特定enclave的所有TLB条目。

在Enclave执行期间创建的TLB条目在离开Enclave时被移除。 因此,如果一个Enclave页面处于BLOCKED状态,并且Enclave内拥有该页面的逻辑处理器在EBLOCK指令之后,都已经至少退出过Enclave一次,那么该Enclave页面就可以被安全地移除。

ETRACK指令用于配置微架构跟踪器,以检测在执行ETRACK指令时在Enclave中执行的所有逻辑处理器何时退出该Enclave。

7.2 移除Enclave页面

Enclave页面作好移除准备(处于BLOCKED状态并且没有TLB条目指向该页面)后,系统软件使用EWB指令移除该页面,系统软件还必须分配一个VA(物理地址?)页面条目保存与该页面的版本号.EWB从EPC中移除一个页面的方式为:

  1. 为页面分配一个唯一版本号,并将其记录到由系统软件分配的VA页面中
  2. 使用页面加密秘钥加密EPC页面
  3. 对EPC页面中加密的页面内容、版本号和附加的元数据,使用密码计算其MAC值,
  4. 将加密的页面内容和元数据、以及计算得到的MAC值作为EWB的参数,写到主存中去。

为了将来能够将相关内容重新加载到EPC中,系统软件必须保管好加密的页面内容、元数据、以及与该EPC页面相关的VA条目。

7.3 重新加载已经移除的页面

系统软件使用ELDU或ELDB指令将已经移除的Enclave页面重新加载到EPC中。系统软件在EPC中分配一个空闲页面并将加密的页面内容、移除时产生的元数据、以及用于移除页面的VA条目作为参数传递给ELDU/ELDB指令。在执行成功时ELDB加载的EPC页面在EPCM中会被标记为BLOCKED状态,除此之外,其它方面ELDU和ELDB 指令是完全相同的。

ELDU/ELDB指令重新加载Enclave页面的过程如下:

  1. 将加密的Enclave页面内容拷贝到已分配的EPC页
  2. 验证MAC值,MAC计算包括元数据、特定VA条目版本号、以及加密的Enclave页面内容
  3. 如果MAC验证通过,将Enclave页面内容解密到有系统软件分配的EPC页中,同时清除VA条目以防止将来可能的重放攻击。
  4. 使用元数据中的属性值更新与EPC页面相关的EPCM(Enclave页面缓存映射)内容

7.4 移除VA(虚拟地址)页面

为了保证EPC和软件能够扩展,从而构建更大的Enclave,包含版本号的页面也必须能够分页。VA页面能够被移除,极端情况下,需要一个锚点页面来允许将VA页面加载到Enclave中。

系统软件可以使用EWB指令从EPC中移除VA页面,要移除的VA页面被赋予一个版本号,该版本号记录在第二个VA页面的一个VA条目中,在重新加载任何被移除的Enclave页面之前,系统软件必须先加载包含VA条目的VA页面。

8 内容总结及相关工作

在已有的商用处理器上对软件和秘密信息进行保护多年来一直难以实现。通过新增一层系统软件来解决这一问题的方法已经被有限地开发出来了。另外,封闭系统还经常会对加载到平台上的软件和应用进行限定。

多个研究项目已经开发出了安全的处理器架构来保护软件,这包括XOM[6],AEGIS[7],SP[8],Bastion [9], 以及 HyperWall [10]. XOM, AEGIS。Bastion是对现有体系架构的补充,用以保护操作系统中的可信软件模块。AEGIS与SGX一样不需要可信系统软件,但在内存保护方案上两者不同。XOM and Bastion都包括一个可信的虚拟机监控层,基于可信软件进行可信计算,比如,Bastion依赖可信虚拟机监控层来进行检查,确保操作系统已经将可信模块映射到受保护的内存中。HyperWall在虚拟机粒度提供保护,这意味着在可信边界内,可信应用拥有一个操作系统。

最后,文献[11]是近期工作,其理念与早期SGX工作[12]非常相近,SGX当前使用一个不同的完整性保护机制,该机制对于操作系统和虚拟机来说都更加灵活。

在一个软件和服务都通过网络部署的年代,SGX允许服务提供者远程提供应用,并能够确信他们的秘密已被保护。本文档描述了SGX指令和硬件扩展,包括:将enclave加载到受保护内存、建立Enclave标识、进入和退出Enclave、在只需要信任Enclave应用的情况下超额申请受保护内存.

9 致谢

本文作者希望感谢许多硬件和软件架构师和设计人员在开发这种创新技术方面的贡献。

Intel是 Intel 公司在美国和/或其它国家的商标。

##10 引用文档

  • [1] Ponemon Institute, “2012 Cost of Cyber Crime Study:,” Ponemon Institute, 2012.
  • [2] I. Anati, S. Gueron, S. Johnson and V. Scarlata, “Innovative Technology for CPU Based Attestation and Sealing,” in ISCA-HASP, Tel Aviv, 2013.
  • [3] M. Hoekstra, R. Lal, P. Pappachan, C. Rozas, V. Phegade and J. Del Cuvillo, “Using Innovative Instructions to Create Trustworthy Software Solutions,” in ISCA-HASP, Tel- Aviv, 2013.
  • [4] K. Brannock, P. Dewan, F. McKeen and U. Savagaonkar, “Providing a Safe Execution Environment,” Intel Technology Journal, vol. 13, no. 2, 2009.
  • [5] Intel Corp, “http://www.intel.com/content/www/us/en/processors/arc hitectures-software-developer-manuals.html,” Intel, June 2013. [Online]. Available: http://download.intel.com/products/processor/manual/325 462.pdf.
  • [6] D. Lie, M. Thekkath, M. Mitchell, P. Lincoln, D. Boneh, J. Mitchell and M. Horowitz, “Architectural Support for Copy and Tamper Resistant Software,” in Proc. of the 9th International Conference on Architectural Support for Programming Languages and Operating Systems, 2000.
  • [7] G. Suh, D. Clarke, B. Gassend, M. van Dijk and S. Devadas, “AEGIS: Architecture for Tamper-Evident and Tamper-Resistant Processing,” in Proc. of the 17th International Conference on Supercomputing, 2003.
  • [8] R. B. Lee, P. C. S. Kwan, J. P. McGregor, J. Dwoskin and Z. Wang, “Architecture for Protecting Critical Secrets in Microporcessors,” in Proc. of the 32nd annual International Symposium on Computer Architecture, 2005.
  • [9] D. Champagne and R. Lee, “Scalable architectural support for trusted software,” in 16th International Symposium on High Performance Computer Architecture (HPCA), 2010.
  • [10] J. Szefer and R. Lee, “Architectural Support for Hypervisor-Scure Virtualization,” in Proc. of the International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), 2012.
  • [11] Rick Boivie, IBM Corp, “Secure Blue++: CPU Support for Secure Execution,” IBM Watson Research Center, Yorktown Heights NY, 2012.
  • [12] F. MCKEEN, U. SAVAGAONKAR, C. ROZAS, M. GOLDSMITH, H. HERBERT, A. ALTMAN, G. GRAUNKE, D. DURHAM, S. JOHNSON, M. KOUNAVIS, V. SCARLATA, J. CIHULA, S. JEYASINGH, B. LINT, G. NEIGER, D. RODGERS, E. BRICKELL and J. LI, “METHOD AND APPARATUS TO PROVIDE SECURE APPLICATION EXECUTION”. WPO Patent WIPO Patent Application WO/2010/057065,14 November 2009.

INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL’S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT.

A “Mission Critical Application” is any application in which failure of the Intel Product could result, directly or indirectly, in personal injury or death. SHOULD YOU PURCHASE OR USE INTEL’S PRODUCTS FOR ANY SUCH MISSION CRITICAL APPLICATION, YOU SHALL INDEMNIFY AND HOLD INTEL AND ITS SUBSIDIARIES, SUBCONTRACTORS AND AFFILIATES, AND THE DIRECTORS, OFFICERS, AND EMPLOYEES OF EACH, HARMLESS AGAINST ALL CLAIMS COSTS, DAMAGES, AND EXPENSES AND REASONABLE ATTORNEYS’ FEES ARISING OUT OF, DIRECTLY OR INDIRECTLY, ANY CLAIM OF PRODUCT LIABILITY, PERSONAL INJURY, OR DEATH ARISING IN ANY WAY OUT OF SUCH MISSION CRITICAL APPLICATION, WHETHER OR NOT INTEL OR ITS SUBCONTRACTOR WAS NEGLIGENT IN THE DESIGN, MANUFACTURE, OR WARNING OF THE INTEL PRODUCT OR ANY OF ITS PARTS.

Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked “reserved” or “undefined”. Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.

No computer system can provide absolute security under all conditions. Built-in security features available on select Intel® processors may require additional software, hardware, services and/or an Internet connection. Results may vary depending upon configuration. Consult your system manufacturer for more details.
Intel®, the Intel® Logo, Intel® Inside, Intel® CoreTM , Intel® AtomTM, and Intel® Xeon® are trademarks of Intel Corporation in the U.S. and/or other countries. Other names and brands may be claimed as the property of others