文章目录
- 前言
- 一、SGX介绍
- 1.1 指令介绍
- 1.2 数据结构
- 二、内存保护过程
- 2.1 enclave页面缓存(EPC)
- 2.2 Enclave页面缓存映射(EPCM)
- 三、部署SGX
- 参考资料
前言
SGX是Intel开发的新的处理器技术,可以在计算平台上提供一个可信的空间,保障用户关键代码和数据的机密性和完整性。SGX全称Intel Software Guard Extensions,顾名思义,其是对因特尔体系(IA)的一个扩展,用于增强软件的安全性。
一、SGX介绍
SGX是Intel开发的新的处理器技术,可以在计算平台上提供一个可信的空间,保障用户关键代码和数据的机密性和完整性。SGX全称Intel Software Guard Extensions,顾名思义,其是对因特尔体系(IA)的一个扩展,用于增强软件的安全性。
SGX是在2015年推出的第六代英特尔酷睿处理器,基于Skylake微架构。可以通过执行带有结构化扩展功能叶(Structured Extended Feature Leaf)标志的CPUID指令来检查SGX支持,并检查EBX寄存器的第二位是否已设置。为了能够使用SGX,它必须由BIOS启动,并且目前,只有少数BIOS支持该技术,这是它没有被广泛使用的原因之一。
SGX的保护方式并不是识别和隔离平台上的所有恶意软件,而是将合法软件的安全操作封装在一个enclave中,保护其不受恶意软件的攻击。而且执行SGX的权限非常高,特权或者非特权的软件都无法访问enclave,也就是说,一旦软件和数据位于enclave中,即便操作系统管理员和VMM(Hypervisor)也无法影响enclave里面的代码和数据。Enclave的安全边界只包含CPU和它自身。SGX创建的enclave也可以理解为一个可信执行环境TEE(Trusted Execution Environment)。不过其与ARM TrustZone(TZ)还是有一点小区别的,TZ中通过CPU划分为两个隔离环境(安全的环境和正常的环境),两者之间通过SMC指令通信;而SGX中一个CPU可以运行多个安全enclaves,并发执行亦可。当然,在TZ的安全的环境内部实现多个相互隔离的安全服务亦可达到同样的效果。另外,SGX是针对桌面和服务器平台的。
总结来说,Intel SGX的安全性能有以下3点:
- 把应用程序分为两部分:安全应用程序和非安全应用程序;
- 将合法软件的安全操作封装在一个enclave中;
- 当调用enclave函数时,只有enclave内部的代码才能查看其数据,并始终拒绝外部访问;当调用结束时,enclave的数据会留在受保护的内存中。
安全执行环境是主机进程的一部分,这意味着:
- 应用程序包含自己的代码,数据和enclave;
- enclave也包含自己的代码和自己的数据;
- SGX保护enclave代码和数据的机密性和完整性;
- Enclave接入点是在编译期间预先定义的;
- 支持多线程(但不能轻易实现);
- enclave可以访问其应用程序的内存,但应用程序的内存则无法访问enclave。
1.1 指令介绍
Intel SGX定义了18条新指令,其中13条由管理者使用,5条由用户使用。所有这些指令都以微代码实现,以便可以修改指令的具体行为。以下是18条新指令的完整说明:
- EADD:添加页面;
- EENTER:进入enclave;
- EBLOCK:阻止EPC页面;
- EEXIT:退出enclave;
- ECREATE:创建安全区;
- EGETKEY:创建加密密钥;
- EDBGRD:通过调试器读取数据;
- EREPORT:创建加密报告;
- EBDGWR:通过调试器写入数据;
- ERESUME:重新进入安全区;
- EINIT:初始化enclave;
- ELDB:加载EPC页面为已阻止;
- ELDU:加载EPC页面为未阻止;
- EPA:添加版本数组(version array);
- EREMOVE:从EPC中删除页面;
- ETRACE:激活EBLOCK检查;
- EWB:回写或是让EPC页面无效;
其中EENTER, EEXIT, EGETKEY, EREPORT,ERESUME为用户使用的指令。
1.2 数据结构
另外,Intel SGX还定义了13种新的数据结构,其中8种用于enclave管理,3种用于内存页面管理,2种用于资源管理。以下是13种新的数据结构的完整说明:
- SGX Enclave控制结构(SECS);
- 线程控制结构(TCS);
- 存储状态区(SSA);
- 页面信息(PAGEINFO);
- 安全信息(SECINFO);
- 分页加密元数据(PCMD);
- 版本数组(VA);
- Enclave页面缓存映射(EPCM);
- Enclave签名结构(SIGSTRUCT);
- EINIT令牌结构(EINITTOKEN);
- 报告(REPORT);
- 报告目标信息(TARGETINFO)
- 密钥请求(KEYREQUEST)
我会在以下详细介绍相关的这写指令和数据结构,然后对它们如何实现哪种安全功能进行详细解释。
二、内存保护过程
2.1 enclave页面缓存(EPC)
Enclave代码和数据放置在被称为Enclave Page Cache(EPC)的特殊内存区域中,该内存区域使用内存加密引擎(MEE)进行加密,该内存区域只存在于一种专用的芯片上。内存总线上的外部读取只能观察到加密数据。而页面只会在处理器内核中才能被解密,这个密钥只会在enclave页面缓存启动时生成并存储在CPU中。
此时传统页面检查已被扩展,以防止外部访问EPC页面。
2.2 Enclave页面缓存映射(EPCM)
Enclave页面缓存映射(EPCM)结构用于存储页面状态,它位于受保护的内存中,其大小限制了EPC的大小(由BIOS设置,最大128MB)。EPCM包含了每个页面的配置、权限和类型。
三、部署SGX
- Ubuntu安装SGX
- Linux ubuntu20.04 安装使用 Intel sgx
- Linux 编写SGX Hello_World
参考资料
- SGX技术的分析和研究 --SGX的综述论文
- SGX的内部组件概述(一)
- SGX的内部组件概述(二)
- SGX可能遇到的攻击
- Intel 的 SGX 技术小知识