SGX是Intel software guard extensions的缩写。旨在以硬件安全为强制性保障,不依赖于固件和软件的安全状态,提供用户空间的可信执行环境,可以增强软件的安全性。通过一组新的指令集扩展与访问控制机制,实现不同程序间的隔离运行,保障用户关键代码和数据的机密性与完整性不受恶意软件的破坏。这种方式并不是识别和隔离平台上的所有恶意软件,而是将合法软件的安全操作封装在一个enclave中,保护其不受恶意软件的攻击,特权或者非特权的软件都无法访问enclave,也就是说,一旦软件和数据位于enclave中,即便操作系统或者和VMM(Hypervisor)也无法影响enclave里面的代码和数据。Enclave的安全边界只包含CPU和它自身。SGX创建的enclave也可以理解为一个可信执行环境TEE(Trusted Execution Environment)。SGX中一个CPU可以运行多个安全enclaves,并发执行亦可。
借助Intel处理器的SGX技术,通过CPU的硬件模式切换,系统进入可信模式执行,只使用必需的硬件构成一个完全隔离的特权模式,加载一个极小的微内核操作系统支持任务调度,完成身份认证,并根据认证后的用户身份.
通过使用Intel SGX技术,构建Enclave作为完全隔离的特权模式的具体实现方案如下:
(1)将需要运行的虚拟机镜像加载到磁盘中。
(2)生成加密应用程序代码和数据的秘钥凭证,SGX技术提供了一种较为先进的秘钥加密方法,其秘钥由SGX版本秘钥、CPU机器秘钥和Intel官方分配给用户的秘钥在秘钥生成算法下生成的全新秘钥,使用此秘钥对需要加载的应用程序的代码和数据进行加密。
(3)将需要加载的应用程序或镜像的代码和数据首先加载到SGX Loader加载器中,为将其加载至Enclave做准备。
(4)在Intel SGX 可信模式下动态申请构建一个Enclave。
(5)将需要加载的程序和数据以EPC(Enclave Page Cache)的形式首先通过秘钥凭证解密。
(6)通过SGX指令证明解密后的程序和数据可信,并将其加载进Enclave中,然后对加载进Enclave中的每个EPC内容进行复制。
(7)由于使用了硬件隔离,进一步保障Enclave的机密性和完整性,保障了不同的Enclave之间不会发生冲突更不会允许其互相访问。
(8)启动Enclave初始化程序,禁止继续加载和验证EPC,生成Enclave身份凭证,并对此凭证进行加密,并作为Enclave标示存入Enclave的TCS(Thread Control Structure)中,用以恢复和验证其身份。
(9)SGX的隔离完成,通过硬件隔离的Enclave中的镜像程序开始执行,构建基于SGX技术的硬件隔离完成。
SGX Enclave的启动和销毁
在完成构建Enclave后,为保护Enclave在运行结束或挂起后,Enclave中的信息不被泄露,而Enclave中的应用程序可能会因为系统出现中断、异常等出现非正常情况下的退出,为解决此类问题使用SGX技术对可能出现的同步退出和异步退出设置不同的处理方式,在同步退出时,Enclave中运行的数据和代码将会根据自定义的EEE(Enclave Exiting Events) 设置的处理方式进行处理。而如果时异步退出的情况下,Enclave中的数据和运行状态等信息将会秘钥凭证进行加密,并存储到Enclave之外,在下一次启动系统时有选择的恢复中断的Enclave。
SGX 创建Enclave可信通信通道
对于SGX Enclave的访问请求,构建检测机制进行限制,首先判断是否启动了Enclave模式,然后判断访问请求是否来源于Enclave内部,如果是则继续判断,如果不是则返回访问失败,然后根据给予生成Enclave前的身份凭证用于检验此访问请求是否来源于同一个Enclave,如果是则通过访问检测,若不是则根据Enclave的身份凭证记录表,更换下一个Enclave身份凭证进行匹配,知道所有的正在运行的Enclave全部匹配完成,若还无法匹配成功,返回访问失败。
https://www.php.cn/faq/479769.html
http://www.jos.org.cn/html/2018/9/5594.htm#b18