SGX技术的分析与研究 学习笔记

SGX技术的分析与研究 学习笔记

本文参考自论文:
王鹃, 樊成阳, 程越强, 赵波, 韦韬, 严飞, 张焕国, 马婧. SGX技术的分析和研究. 软件学报, 2018, 29(9): 2778-2798.http://www.jos.org.cn/1000-9825/5594.htm

SGX(software guard extensions)
2013年,Intel公司提出了新的处理器安全技术SGX,能够在计算平台上提供一个可信的隔离空间,保障用户关键代码和数据的机密性和完整性.
Intel推出SGX(software guard extensions)指令集扩展, 旨在以硬件安全为强制性保障, 不依赖于固件和软件的安全状态, 提供用户空间的可信执行环境, 通过一组新的指令集扩展与访问控制机制, 实现不同程序间的隔离运行, 保障用户关键代码和数据的机密性与完整性不受恶意软件的破坏.

安全性保障

  • 不同于其他安全技术, SGX的可信计算基(trusted computing base, 简称TCB)仅包括硬件,
  • 避免了基于软件的TCB自身存在软件安全漏洞与威胁的缺陷, 极大地提升了系统安全保障; 此外, SGX可保障运行时的可信执行环境,
  • 恶意代码无法访问与篡改其他程序运行时的保护内容, 进一步增强了系统的安全性; 基于指令集的扩展与独立的认证方式,使得应用程序可以灵活调用这一安全功能并进行验证。

1 SGX架构概述

Intel SGX[1, 2]是Intel架构新的扩展, 在原有架构上增加了一组新的指令集和内存访问机制[3].这些扩展允许应用程序实现一个被称为enclave的容器, 在应用程序的地址空间中划分出一块被保护的区域, 为容器内的代码和数据提供机密性和完整性的保护, 免受拥有特殊权限的恶意软件的破坏.

SGX整体架构
SGX的实现需要处理器、内存管理部件、BIOS、驱动程序、运行时环境等软硬件协同完成.除了提供内存隔离与保护安全属性, SGX架构还支持远程认证和密封的功能, 可用于安全软件应用和交互协议的设计.

2 SGX关键技术

2.1 Enclave安全容器

Enclave是一个被保护的内容容器, 用于存放应用程序敏感数据和代码[7].SGX允许应用程序指定需要保护的代码和数据部分, 在创建enclave之前, 不必对这些代码和数据进行检查或分析, 但加载到enclave中去的代码和数据必须被度量.当应用程序需要保护的部分加载到enclave后, SGX保护它们不被外部软件所访问.Enclave可以向远程认证者证明自己的身份, 并提供必需的功能结构用于安全地提供密钥.用户也可以请求独有的密钥, 这个密钥通过结合enclave身份和平台的身份做到独一无二, 可以用来保护存储在enclave之外的密钥或数据.

所有的enclave都驻留在EPC(enclave page cache)中, 这是系统内一块被保护的物理内存区域, 用来存放enclave和SGX数据结构[8].EPC布局由平台具体实现决定, 如果CPU支持SGX架构并在加密保护的DRAM (dynamic random access memory)中实现EPC, 那么它也支持BIOS保留一段叫PRM(processor reserved memory)的内存范围.BIOS通过配置一组范围寄存器分配PRM.具体的PRM和EPC布局和平台有关, 并取决于BIOS设置, 下图 2是一个PRM和EPC布局的例子.

图 2 PRM布局示例
Enclave的结构如图 3所示, 其中, TCS(thread control structure)保存着进入或退出enclave时恢复enclave线程的特殊信息.每一个enclave中的执行线程都和一个TCS相关联, 它需要4K字节对齐, 由多个部分组成, 例如保留位(RESERVED)、标志位(FLAGS)、状态保存区偏移量(state save area offset, 简称OSSA)等.

图 3 Enclave示意图

2.2 Enclave保护机制

针对enclave的保护机制主要包括两个部分:一是enclave内存访问语义的变化, 二是应用程序地址映射关系的保护, 这两项功能共同完成对enclave的机密性和完整性的保护.

2.2.1 内存访问语义

在系统内分配一块被保护的物理内存区域EPC, 用来存放enclave和SGX数据结构[9].必须保证内存保护机制在物理上锁住EPC内存区域, 将外部的访问请求视为引用了不存在的内存, 使得外部的实体(直接存储器访问、图像引擎等)无法访问.对于使用MOV等指令访问enclave内部的页面的情况, 硬件将执行下列的检查.

(1) 处理器当前运行在enclave mode中;

(2) 访问地址在enclave地址空间;

(3) 物理地址在EPC内存中;

(4) EPCM(enclave page cache map)检查, 请求访问的页属于正在运行的enclave(只有enclave内的代码才能访问该enclave的内容).

系统在SGX调用前, 必须处于保护模式, 且需要支持分页.SGX所提供的内存保护机制, 在保护模式所提供的段保护、页保护机制基础上进行进一步的内存保护, 访问地址由虚拟地址转换为物理地址进行访问.对内存的访问可分为如下5种类型, 如图 4所示

图4 SGX的内存访问控制
(1) 运行于非enclave模式的处理器访问PRM之外的内存, 按照保护模式下的机制进行访问;

(2) 运行于非enclave模式的处理器访问PRM内部内存, 将被视为引用了不存在的内存;

(3) 处理器运行于enclave模式, 访问的页面不在enclave的虚拟地址空间, 但是处于EPC的区域范围内, 则CPU将这次访问视为引用了不存在的内存;

(4) 处理器运行于enclave模式, 硬件允许enclave代码访问处理器保留内存(PRM)外部的地址;

(5) 如果页面在enclave的虚拟地址空间外, 且指向PRM页面, 硬件将阻止访问并且发出异常.

简而言之, enclave外部的应用程序不能访问enclave内存; enclave内部的代码在EPC范围内只能访问属于自己的内存区域, 不能访问别的enclave内存; **对于PRM以外的内存, 则按照系统中其他的保护机制进行访问.**这样的内存保护机制, 防止了enclave内部运行的程序被其他恶意软件盗取隐私信息和篡改.

2.2.2 地址映射保护

EPC内存以页为单位进行管理, 页的控制信息保存在硬件结构EPCM里, 一个页面对应一个EPCM表项, 类似于操作系统内的页表, 管理着EPC页面的基本信息, 包括页面是否已被使用、该页的拥有者、页面类型、地址映射和权限属性等[10].EPCM结构在CPU地址映射过程中用于执行enclave页面的访问控制, 逻辑上而言, 它在保护模式的段保护和页保护机制的基础上增加了一层安全的访问控制.EPCM结构由PMH(page miss handler)硬件模块访问, 这个模块通过查询页表(系统软件维护的)、范围寄存器、EPCM来进行内存访问.EPCM逻辑结构图如图 5所示.
图 5 EPCM逻辑结构

2.2.3 Enclave机密性和完整性保护

应用程序在申请创建一个enclave时, 需要进行页面分配、复制程序代码与数据和度量操作, 创建过程的最后一步需要对enclave的完整性进行验证, 判断特权软件在创建过程中是否篡改了程序数据, 如分配了多余的页、将恶意代码复制进来, 或是篡改了复制的数据等.通过对每个添加的页面内容进行度量, 最终得到一个创建序列的度量结果, 保存在enclave的控制结构中.然后, SGX通过一条初始化指令将这个结果与enclave所有者签名的证书中的完整性值进行比较:如果匹配, 则将证书中的所有者公钥进行哈希, 作为密封身份保存在enclave控制结构中; 如果不匹配, 则说明创建过程存在问题, 指令返回失败结果.

成功进行了初始化指令之后, 才能进入enclave执行程序, 此后SGX提供的内存保护和地址映射保护使得外界无法访问enclave内存, 从而保证了enclave的机密性和完整性, 远程的认证者可以通过enclave的完整性度量值和其密封身份, 确保其正确地创建.图 6对这个过程进行了描述, 其中, 较粗箭头表示请求的操作, 细箭头表示具体步骤.

图6 Enclave建立保护的过程

2.3 SGX认证

SGX提出了两种类型的身份认证方式:一种是平台内部enclave间的认证, 用来认证进行报告的enclave和自己是否运行在同一个平台上; 另一种是平台间的远程认证, 用于远程的认证者认证enclave的身份信息.

当enclave向平台上其他enclave报告身份时, 先获取当前的enclave的身份信息和属性、平台硬件TCB信息, 附加上用户希望交互的数据, 生成报告结构; 然后获取目标enclave的报告密钥, 对报告结构生成一个MAC标签, 形成最终的报告结构, 传递给目标enclave, 由目标enclave验证请求报告身份的enclave跟自己是否运行于同一平台.

为了实现远程认证, 需要引入一个特殊的引用(quoting)enclave.同一平台enclave之间的验证使用的是对称密钥, 不适用于远程认证, 因此, 平台间的认证采用非对称密钥机制.由引用enclave创建平台认证的签名密钥EPID(enhanced privacy identification), 这个密钥不仅代表平台, 还代表着底层硬件的可信度, 并且绑定处理器固件的版本, 当enclave系统运行时, 只有引用enclave才能访问到EPID密钥.

远程认证的过程中, 假设远程认证方B要认证enclaveA, A先执行EREPORT指令, 将A的身份和附加信息组合生成REPORT结构, 利用引用enclave(称其为Q)的报告密钥生成一个MAC, 连同报告结构一起发给Q, Q通过该结构验证A是否运行于同一平台, 然后将它封装为一个引用结构体QUOTE, 并使用EPID进行签名, 将QUOTE和签名一同发给远程认证者.报告结构还需提供额外的用户数据域, 可用来传递用户自定义的信息, 以支持更复杂的交互方式.

猜你喜欢

转载自blog.csdn.net/weixin_42305039/article/details/113107080