SGX软硬件栈(零)——基本介绍

背景知识

1. Intel SGX

Intel SGX狭义上是指一组CPU指令,该组指令增强应用程序代码和数据的安全性,为它们提供更强的保护以防泄漏或修改。开发人员可将敏感信息放入Enclave中,Enclave是内存中具有更强安全保护性的执行区域。

Intel SGX广义上是指以SGX指令为基础所构建的包括Intel CPU等硬件、CPU提供的硬件指令、驱动、Platform Software(用于构建不可信运行时环境uRTS)、SDK(用于构建可信运行时环境tRTS)等在内的一种新的安全机制,既Intel SGX软硬件栈。

SGX平台需要Intel 6代及以上处理器,并且BIOS支持并开启了SGX选项。

2. 常用名词

Intel  SGX:Intel Software Guard Extensions的简称。

Enclave:下述条目针对Enclave不同的角度来表述,实际表述中不太加以区分,并且更侧重于指Enclave实例。

Enclave内存:Enclave是内存中具有更强安全保护性的执行区域。

Encalve环境:通过Enclave内存及硬件保护机制、可信运行时共同来保护敏感代码数据的环境,或者说安全世界。

Enclave代码:希望放在Enclave中执行的敏感代码数据。

Enclave文件:保存着Enclave代码数据的镜像文件。与实例的区别好比程序代码与进程的区别,一个静态,一个动态。

Enclave实例:指从Enclave文件具体执行起来的进程。

EPC:Enclave Page Cache。Enclave的物理内存是一种抽象的表示,Enclave物理内存会最终落实到一个个具体的物理页,这些页就是来自于EPC。也就是说EPC是一块加密的处于系统保留内存的物理内存区域,用来存放Enclave的页和SGX数据结构。

EP:Enclave Page。EPC中一个个具体的页。为了方便读者理解,也可称为EPC页

SGX世界观:SGX将软硬件资源等划分成安全世界和不安全世界

安全世界:包括可信运行时和用户的Enclave实例,安全世界中Enclave实例会利用可信运行时提供的API完成敏感功能等。而每个开发者进程都有自己的独立的Enclave环境,不同Enclave的安全世界相互隔离。

不安全世界:包括不可信运行时和用户的非敏感代码以及具有内核权限的驱动。

uRTS:Untrusted Runtime Service,不可信运行时环境,不安全世界、普通世界的一部分。

tRTS:Trusted Runtime Service,可信运行时环境,安全世界、Enclave环境的一部分。

AE:Architectural Enclave。由SGX平台提供完成特定功能的特殊的Enclave,包括:Launch Enclave,用于决定在当前SGX平台上运行哪些其他Enclave(主要指用户的Enclave实例);Provisioning Enclave,提供长期平台证明密钥;Quoting Enclave,使用非对称平台证明密钥,用于为远程使用者签署本地证明报告;Platform Service Enclave,平台服务Enclave,用于提供如可信的时间等安全功能。

OCALL:从安全世界进入不安全世界所用到的桥函数。

ECALL:从不安全世界进入安全世界所用到的桥函数。

ISV:Individual Software Vendor个体软件厂商

SgxEdger8r:SGX Edge Routine,主要用于在编译过程中对.edl文件中的ecall和ocall重新封装编写,即将用户编写的e/ocall改写成实际执行的e/ocall

3. 常用结构体

SECS:SGX Enclave Control Structure。每个Enclave实例都具有一个该结构体,用于保存关于该实例的信息,如Enclave的线性基址(对于整个程序而言)和大小。保存在EPC中该Enclave的内存空间,只能由CPU访问。

TCS:Thread Control Structure。每个Enclave实例可以拥有很多个具体执行Enclave函数的Worker Thread,每个线程都对应一个TCS,用于描述这个线程的信息,如线程执行flag、SSA的位置、当前使用的SSA(若干个SSA组成一个栈)。存储在EPC中,只能由处理器访问。

SIGSTRUCT:ENCLAVE SIGNATURE STRUCTURE。每个Enclave文件具有一个SIGSTRUCT来证明它是被某个SGX平台签署的。(见后续“EINIT指令过程”章节)

EINITTOKEN:EINIT TOKEN STRUCTURE。从Enclave文件创建Enclave实例时,需要向AE申请一个令牌,后续EINIT指令使用EINITTOKEN结构来检查是否允许执行Enclave。(见后续“EINIT指令过程”章节)

EPCM:ENCLAVE PAGE CACHE MAP。被硬件用来跟踪EPC内容,每一个Entry对应一个EP。软件不可访问。每个Entry会说明EPC页的线性地址等。

SGX的可信保障及优点

  1. Enclave这块特殊内存采用加密技术,保障内存代码、数据的机密性和完整性。
  2. 任何对Enclave进行的访问都需要经过严格地访问控制。
  3. 可信计算基础(TCB)缩小到CPU的SGX Enclave这一硬件保障设施,而不再要求操作系统和特权程序是可信的。
  4. 支持虚拟化技术和容器技术。

SGX不足

  1. Enclave处于用户态,如果Enclave中的代码数据依赖于Enclave外部数据,则存在安全隐患,需要Enclave代码对传入的外部数据检查。
  2. SGX 本身无法抵御侧信道攻击,因为不是为侧信道防御而设计的,但是可以在程序开发过程中进行设计防御。
  3. Enclave 需要对原程序进行改造,通过特殊的.edl文件声明将敏感代码放入Enclave中执行,将不敏感代码放在普通内存中执行。
  4. Enclave所支持的特殊加密内存的大小很小,因此开发者应该只将至关重要的敏感的代码数据放入其中。
  5. SGX会产生一定程度的系统开销。

SGX与TrustZone区别

TrustZone将系统划分为安全世界和普通世界,实现了执行环境以及存储、网络和屏幕等设备的安全隔离,敏感代码放入安全世界执行。TrustZone里面程序是直面硬件资源的,并且TrustZone内部的多个程序间并没有安全隔离,直到有相关工作在TrustZone里面安置了一个安全内核,如T6安全微内核(上海瓶钵主导的工作,在Trustzone里实现了安全操作系统的功能,实现了敏感应用之间的隔离,还可以让开发者更好地使用物理硬件,安全微内核只有六千行代码,非常轻量级,同时经过安全审计)。【SecTEE】等工作也试图在TrustZone内部提供Enclave的概念(包括了SGX所提供的可信度量、加密、访问控制、密封、本地认证、远程认证中的部分功能),之前也听到有相关工作在ARM芯片的普通世界构建Enclave,而不是在TrustZone内部,似乎硬件实现机制有一些区别,忘记了。

SGX中,对于每一个进程,可以创建多个类似于“安全世界”的Enclave,并且不同进程之间的Enclave是互相硬件隔离的——通过MEE使用独立的密钥加密Enclave内存进行保障。

SGX内存布局及访问控制

这一块很多资料来源于:

王鹃, 樊成阳, 程越强, 等. SGX 技术的分析和研究[J]. Journal of Software, 2018, 9: 2778-2798.

1. SGX结构简介

每个进程可以创建若干个Enclave实例(不过比较常见的情况是一个实例),Enclave执行程序的敏感代码,保护敏感数据。Enclave之间、Enclave与普通世界之间都存在访问控制(后续“SGX访问控制”章节会讲述)。基本结构如图4所示(详细的软件栈构造会在后续“SGX软件栈”章节中描述)。

  • 硬件暴露的功能。硬件向外暴露Enclave Page Cache(EPC是一块加密的处于系统保留内存的物理内存区域,用来存放 Enclave的页和SGX数据结构,也就是说Enclave的物理内存会最终落实到EPC)和EPCM(用于管理EPC页的访问控制,EPCM只能由硬件访问)及硬件指令。
  • 内核权限环境(既驱动)的功能。内核权限环境有一个管理分配给Enclave的EPC页的页表,此外还能利用内核权限硬件指令管理Enclave的生命周期,并把生命周期管理的功能向上提供给不可信运行时环境。
  • 用户权限环境的功能。用户权限下的不可信运行时可以管理Enclave生命周期。用户权限下的可信运行时帮助Enclave环境执行敏感代码以及调用用户权限硬件指令,所提供的库必须是经过安全审计的库,而且只能通过静态链接。

图1:SGX基本结构

2. Processor Reserved Memory布局

如图2所示,BIOS通过配置一组范围寄存器分配Processor Reserved Memory(PRM)。其中包括EPC和其他保留给硬件使用的内存。EPC中会分配Page给SGX数据结构供Enclave使用。

图2:Processor Reserved Memory布局

3. Enclave内存结构

如图3所示,每个Enclave内存由EPC中分出的若干Page构成,用于存储Enclave代码、Enclave数据——比如涉及金融等敏感操作的代码数据、TCS。

线程控制信息TCS。Enclave代码的执行是由某个具体线程(进程只有一个线程时就是指进程对应的主线程,或者说进程)来执行,那么这个线程在Enclave中需要保存一份描述其针对于Enclave管理用的相关控制信息,既Thread Control Structure(TCS),换句话说,TCS保存着进出Enclave时候所恢复或保存的Enclave线程信息。举个例子就是,线程1从普通世界进入安全世界,需要佩戴安全世界的工作证,当离开安全世界,需要放下安全世界工作证,拿上linux环境的工作证。

图3:Enclave结构

4. Enclave Page Cache Map结构

如图4所示。Enclave Page Cache Map(EPCM)是一个硬件结构,保存着分配给Enclave的Page的控制信息,一个Page对应一个 EPCM 表项,控制信息包括页面是否已被使用、该页的拥有者、页面类型、地址映射和权限属性等。EPCM 结构由 PMH(Page Miss Handler)硬件模块访问,这个模块通过查询页表、范围寄存器、EPCM 进行内存访问。

图4:Enclave Page Cache Map结构

5.  SGX访问控制

Enclave基本访问控制如图5所示。

  • Enclave 外部的应用程序按照段页保护机制访问PRM外部内存(普通内存)。
  • Enclave 外部的应用程序不能访问 Enclave 内存
  • Enclave 内部的代码在EPC范围内只能访问属于自己的内存区域,不能访问别的Enclave内存。
  • Enclave 内部的代码按照段、页保护机制访问PRM外的内存。
  • Enclave 内部的代码不能访问其他PRM内存。

图5:Enclave基本访问控制

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值