《SGX初始化》汇总

目录

目录

《Intel SGX Enclave初始化》简介

《再回顾SGX初始化(一)——环境检查》简介

《再回顾SGX初始化(二)——uRTS端构建Enclave》

《再回顾SGX初始化(三)——uRTS维护Enclave、tRTS完成Enclave构建收尾确认工作》简介

《再回顾SGX初始化(四)》简介


目录

Intel SGX Enclave初始化

再回顾SGX初始化(一)——环境检查

再回顾SGX初始化(二)——uRTS端构建Enclave

再回顾SGX初始化(三)——uRTS维护Enclave、tRTS完成Enclave构建收尾确认工作

再回顾SGX初始化(四)

Intel SGX Enclave初始化》简介

下图是《Intel SGX Enclave初始化》中的Enclave初始化时硬件间关系图,Enclave初始化大致经历了(1)申请Enclave内存,(2)创建SECS数据结构,(3)加载Enclave代码进Enclave内存,(4)度量Enclave代码,(5)完成初始化。

这张图代表了SGX初始化中最重要的环节。所经历的过程是位于《再回顾SGX初始化(二)——uRTS端构建Enclave》,其他环节主要是针对这个环节进行扩展工作。

下面这张图也放在《Intel SGX Enclave初始化》中,是对SGX初始化所有流程的关键内容的简化提取,从这也可以看到《再回顾SGX初始化(二)——uRTS端构建Enclave》占据了各个环节中最重要的地位。

再回顾SGX初始化(一)——环境检查》简介

SGX初始化过程中部分扩展特性的声明、验证和配置(Switchless特性、PCL特性、KSS特性)。

ex_features_p数组项说明
0

pointer to an Intel® SGX PCL sealed key

1pointer to the sgx_uswitchless_config_t structure
2pointer to the sgx_kss_config_t structure
3:31reserved, must be NULL

将Enclave文件映射到进程的虚拟地址空间。这个映射的位置就是下图Enclave虚拟内存视图的虚框部分。

将Enclave文件这个ELF文件进行全面的ELF格式解析,验证Enclave文件格式的正确性,以及对Enclave文件中关键信息(关键符号、动态Section、元数据【其中包括重要的Enclave布局信息等】)进行记录,后续在构建Enclave时经常会用到这些信息。比如布局直接填充到ELRANGE,起ELRANGE结构性(堆、栈、TCS等)格局作用,比如动态Section中的REL、PLT用于重定位过程,比如关键符号用于进出Enclave时提供出入口。

对当前软件栈平台进行验证,尤其是版本情况进行匹配验证。

对当前CPU的X扩展特性进行验证、分析和记录,后续构建Enclave过程中,需要依据X特性对细节进行指定,比如根据X特性支持情况,在进出Enclave时候针对X特性,额外保存X特性相关的上下文环境(比如SSE、AVX、MPX等CPU扩展特性的上下文内容,并且值得提醒的是Enclave内外是两套不同的上下文环境)。一切的目的是为了让SGX和CPU扩展特性有更好地兼容,并且不会引入任何安全问题。

再回顾SGX初始化(二)——uRTS端构建Enclave

包括部分扩展特性的声明、验证和配置(Switchless特性、PCL特性、KSS特性)。

SGX元数据的验证,后面会用到。

将SGX驱动绑定的设备作为Enclave或者说ELRANGE的基址,构建SECS(管理并代表一个Enclave的数据结构),并加载到EPC中。

对Enclave文件映射打补丁,将一些全局变量等信息更新到Enclave文件映射,后续会使用Enclave文件映射构建ELRANGE。

将PT_LOAD、PT_TLS等类型的Segment加载到ELRANGE和对应的EPC中。

将元数据中堆、线程上下文等布局信息加载到ELRANGE和对应的EPC中。

布局情况可以参考下图

上面提到SECS的构建会涉及到ECREATE硬件指令,并且任何页加载到EPC的过程都会涉及到EADD、EEXTEND硬件指令。并且ECREATE、EADD、EEXTEND都是Ring0权限的ENCLS硬件指令,需要SGX驱动来完成。

之后EINIT硬件指令判断Enclave加载过程是否可信,是否是一个可信启动过程。

再回顾SGX初始化(三)——uRTS维护Enclave、tRTS完成Enclave构建收尾确认工作》简介

uRTS维护一个CEnclave类用来管理使用Enclave。

如果开启了调试模式,那么就对调试模式的相关功能进行初始化,比如VTune。

uRTS请求裁剪敏感的或者动态的EPC页。

进入tRTS完成Enclave初始化相关的配套工作,比如ELRANGE的符号、地址重定位过程,比如字符串库、加密库的优选过程,比如保留内存、线程栈保护机制的初始化,比如初始化或调整线程栈、TCS等线程相关信息。此外还有就是对之前敏感或动态页的裁剪申请进行批准接受(调用EACCEPT硬件指令,Ring3权限的ENCLU硬件指令)。

这里进出Enclave都是通过上下文切换的方式。

再回顾SGX初始化(四)》简介

将通过裁剪申请的裁剪页重新放入到可用EPC页中。

mprotect设置ELRANGE中各个Section的访问属性以及各个Segment对应的访问属性

如果元数据版本较新,并且当前环境支持EDMM,那么对PT_GNU_RELRO、PT_LOAD的Segment,用Ring0权限的EMODPR硬件指令来设置这些页的访问权限为RX,Ring0权限的EMODPR硬件指令会对管理EPC属性的EPCM进行调整设置。rsrv内存用EMODPR改为RW。不支持EDMM等情况,就不进行改动。

针对上下文相关的内存,内存访问控制属性用mprotect设置为RW。rsrv内存在不支持EDMM情况下,不要用mprotect改变它的属性。

针对EREMOVE掉的页,需要用mprotect设置为PROT_NONE,不然这个页一旦被访问,会发生总线异常(sigbus exception),因为这个EPC页已经被EREMOVE硬件指令给从当前Enclave中去除,EPCM也没有再维护EREMOVE掉的页的信息。

上面所涉及到的ELRANGE的页本身在ECREATE、EADD、EREMOVE时就设置或更改了基本的EPCM项,这里主要是进行调整,以及在进程虚拟地址空间用mprotect进行访问控制设置。

填充TCS最小池,使得TCS最小池现有的TCS数量达到最低要求。

Switchless模式的初始化。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值