背景知识

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基本访问控制

SGX软硬件栈(零)——基本介绍相关推荐

  1. 全栈开发-IDE介绍与设置、字符串格式化、数据类型、for循环

    全栈开发-IDE介绍与设置.字符串格式化.数据类型.for循环 本篇内容 IDE介绍与设置 字符串格式化 数据类型 for循环.break语句.while循环 一.IDE介绍与设置 集成开发环境(ID ...

  2. Android/Linux 子系统Graphics图形栈入门普法介绍

        Android/Linux 子系统Graphics图形栈入门普法介绍 写在最前面   由于工作原因,最近在公司做了一个关于Android/Linux 子系统Graphics图形栈入门相关知识的 ...

  3. 零信任-Cisco思科零信任介绍(10)

    ​目录 ​思科零信任介绍 思科零信任所涉及产品 思科零信任架构拓扑介绍 ​思科零信任框架VS零信任安全框架 思科零信任架构的应用场景 思科零信任解决方案的优势 思科零信任的未来发展展望 思科零信任介绍 ...

  4. 零信任-Akamai零信任介绍(6)

    ​Akamai零信任介绍 Akamai是一家专注于分布式网络服务的公司,它提供了一系列的互联网内容和应用加速服务.关于Akamai的零信任,它指的是Akamai的安全架构中不存在任何一个环节是可以被单 ...

  5. 【FPGA创新设计竞赛——2022紫光同创杯】1、“基于 RISC-V 处理器的软硬件系统设计”赛题介绍

    文章目录 一. 开发方向 基于 RISC-V 处理器的软硬件系统设计 设计要求 设计指标 作品提交注意事项 二. 考核标准 三. 平台借用 四. 竞赛支持 一. 开发方向 基于 RISC-V 处理器的 ...

  6. STM32 (零)--------STM32介绍

    STM32介绍 什么是 STM32 CMSIS构架 时钟 STM32诞生的背景 STM32 能做什么 STM32选型 容量大小 STM32分类 STM32 命名方法 选择合适的MCU 如何分配原理图 ...

  7. 零信任-易安联零信任介绍(11)

    ​目录 ​易安联零信任公司介绍 易安联零信任发展路线 易安联零信任产品介绍 易安联零信任架构 易安联零信任解决方案 易安联零信任发展展望 易安联零信任公司介绍 易安联是一家专业从事网络信息安全产品研发 ...

  8. java 栈的基本介绍

    介绍 栈是一个先入后出(FILO-First In Last Out)的有序列表. 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表.允许插入和删除的一端,为变化 ...

  9. 八电极脂肪秤方案软硬件与APP功能介绍

    八电极脂肪秤软硬件端功能说明: LED显示: 1.3 个超白光 LED 2.显示数字: 188.8.8(两个小数点) 3.显示符号: ble.kg 指示符 4.不显示体脂率(由APP端显示) 电源:4 ...

  10. 零信任-Google谷歌零信任介绍(3)

    目录 谷歌零信任的介绍? 谷歌零信任发展时间线及关键时间节点 谷歌零信任所涉及产品 谷歌零信任架构拓扑介绍 谷歌零信任架构的应用场景 谷歌零信任的未来发展展望 谷歌零信任的介绍? "Zero ...

最新文章

  1. java awt canvas_JavaFX AWT Canvas
  2. .net oa 用到那些技术_一起来看看选择免费OA办公系统的难点
  3. mtk一键usb驱动_6寸三防手持终端 Windows系统 安卓系统,高通 MTK 条码扫描 NFC
  4. CTS ( 9)---CTS 源码分析
  5. 孙正义在比特币上栽了?传其亏损超过1.3亿美元...
  6. matlab画2fsk频谱,2fsk信号调制解调频谱的matlab仿真
  7. python工资一般多少-Python开发的工资一般多少
  8. 区块链 女巫攻击是什么 Sybil Attack 为什么POW可以抵御女巫攻击 一文看懂
  9. [转]Using Named Pipes (FIFOs) with Bash
  10. 基于python的网易云音乐下载器
  11. PS CS4抽出滤镜抠图小技巧
  12. Win7启动慢,元凶竟是闲置eSATA接口,快下补丁
  13. Photoshop 快捷键大全
  14. word中插入公式2010和2016两个版本)
  15. excel单元格的合并与计算
  16. 微信开发者工具和gitee实现多人协作
  17. Redis源码分析之PSYNC同步
  18. GeoServer操作文档
  19. 加热不燃烧app调温加热烟弹- 安装与调温
  20. beautyEye输入框中文输入法白屏bug

热门文章

  1. python画指数函数图像_如何使用python的matplotlib模块画指数函数图像
  2. 人工智能现状和发展趋势
  3. 研究生学习生活日记——第五次组会
  4. 生成mysql.sock_mysql.sock不在了,怎么手工创建一个,并设置相应属性
  5. 编程基础巩固——英语单词记忆技巧
  6. 游戏美术资源网站推荐
  7. vuepress+github+versel部署免费个人博客
  8. 抖音小程序支付开发流程和实现
  9. 在计算机编程里pi是什么意思,编程中的术语“钩子”是什么意思?
  10. 无线通信网络学习笔记-1