SGX技术的分析与研究 学习笔记

2023-11-04

SGX技术的分析与研究 学习笔记

本文参考自论文:
王鹃, 樊成阳, 程越强, 赵波, 韦韬, 严飞, 张焕国, 马婧. SGX技术的分析和研究. 软件学报, 2018, 29(9): 2778-2798.http://www.jos.org.cn/1000-9825/5594.htm

SGX(software guard extensions)
2013年,Intel公司提出了新的处理器安全技术SGX,能够在计算平台上提供一个可信的隔离空间,保障用户关键代码和数据的机密性和完整性.
Intel推出SGX(software guard extensions)指令集扩展, 旨在以硬件安全为强制性保障, 不依赖于固件和软件的安全状态, 提供用户空间的可信执行环境, 通过一组新的指令集扩展与访问控制机制, 实现不同程序间的隔离运行, 保障用户关键代码和数据的机密性与完整性不受恶意软件的破坏.

安全性保障

  • 不同于其他安全技术, SGX的可信计算基(trusted computing base, 简称TCB)仅包括硬件,
  • 避免了基于软件的TCB自身存在软件安全漏洞与威胁的缺陷, 极大地提升了系统安全保障; 此外, SGX可保障运行时的可信执行环境,
  • 恶意代码无法访问与篡改其他程序运行时的保护内容, 进一步增强了系统的安全性; 基于指令集的扩展与独立的认证方式,使得应用程序可以灵活调用这一安全功能并进行验证。

1 SGX架构概述

Intel SGX[1, 2]是Intel架构新的扩展, 在原有架构上增加了一组新的指令集和内存访问机制[3].这些扩展允许应用程序实现一个被称为enclave的容器, 在应用程序的地址空间中划分出一块被保护的区域, 为容器内的代码和数据提供机密性和完整性的保护, 免受拥有特殊权限的恶意软件的破坏.

SGX整体架构
SGX的实现需要处理器、内存管理部件、BIOS、驱动程序、运行时环境等软硬件协同完成.除了提供内存隔离与保护安全属性, SGX架构还支持远程认证和密封的功能, 可用于安全软件应用和交互协议的设计.

2 SGX关键技术

2.1 Enclave安全容器

Enclave是一个被保护的内容容器, 用于存放应用程序敏感数据和代码[7].SGX允许应用程序指定需要保护的代码和数据部分, 在创建enclave之前, 不必对这些代码和数据进行检查或分析, 但加载到enclave中去的代码和数据必须被度量.当应用程序需要保护的部分加载到enclave后, SGX保护它们不被外部软件所访问.Enclave可以向远程认证者证明自己的身份, 并提供必需的功能结构用于安全地提供密钥.用户也可以请求独有的密钥, 这个密钥通过结合enclave身份和平台的身份做到独一无二, 可以用来保护存储在enclave之外的密钥或数据.

所有的enclave都驻留在EPC(enclave page cache)中, 这是系统内一块被保护的物理内存区域, 用来存放enclave和SGX数据结构[8].EPC布局由平台具体实现决定, 如果CPU支持SGX架构并在加密保护的DRAM (dynamic random access memory)中实现EPC, 那么它也支持BIOS保留一段叫PRM(processor reserved memory)的内存范围.BIOS通过配置一组范围寄存器分配PRM.具体的PRM和EPC布局和平台有关, 并取决于BIOS设置, 下图 2是一个PRM和EPC布局的例子.

图 2 PRM布局示例
Enclave的结构如图 3所示, 其中, TCS(thread control structure)保存着进入或退出enclave时恢复enclave线程的特殊信息.每一个enclave中的执行线程都和一个TCS相关联, 它需要4K字节对齐, 由多个部分组成, 例如保留位(RESERVED)、标志位(FLAGS)、状态保存区偏移量(state save area offset, 简称OSSA)等.

图 3 Enclave示意图

2.2 Enclave保护机制

针对enclave的保护机制主要包括两个部分:一是enclave内存访问语义的变化, 二是应用程序地址映射关系的保护, 这两项功能共同完成对enclave的机密性和完整性的保护.

2.2.1 内存访问语义

在系统内分配一块被保护的物理内存区域EPC, 用来存放enclave和SGX数据结构[9].必须保证内存保护机制在物理上锁住EPC内存区域, 将外部的访问请求视为引用了不存在的内存, 使得外部的实体(直接存储器访问、图像引擎等)无法访问.对于使用MOV等指令访问enclave内部的页面的情况, 硬件将执行下列的检查.

(1) 处理器当前运行在enclave mode中;

(2) 访问地址在enclave地址空间;

(3) 物理地址在EPC内存中;

(4) EPCM(enclave page cache map)检查, 请求访问的页属于正在运行的enclave(只有enclave内的代码才能访问该enclave的内容).

系统在SGX调用前, 必须处于保护模式, 且需要支持分页.SGX所提供的内存保护机制, 在保护模式所提供的段保护、页保护机制基础上进行进一步的内存保护, 访问地址由虚拟地址转换为物理地址进行访问.对内存的访问可分为如下5种类型, 如图 4所示

图4 SGX的内存访问控制
(1) 运行于非enclave模式的处理器访问PRM之外的内存, 按照保护模式下的机制进行访问;

(2) 运行于非enclave模式的处理器访问PRM内部内存, 将被视为引用了不存在的内存;

(3) 处理器运行于enclave模式, 访问的页面不在enclave的虚拟地址空间, 但是处于EPC的区域范围内, 则CPU将这次访问视为引用了不存在的内存;

(4) 处理器运行于enclave模式, 硬件允许enclave代码访问处理器保留内存(PRM)外部的地址;

(5) 如果页面在enclave的虚拟地址空间外, 且指向PRM页面, 硬件将阻止访问并且发出异常.

简而言之, enclave外部的应用程序不能访问enclave内存; enclave内部的代码在EPC范围内只能访问属于自己的内存区域, 不能访问别的enclave内存; **对于PRM以外的内存, 则按照系统中其他的保护机制进行访问.**这样的内存保护机制, 防止了enclave内部运行的程序被其他恶意软件盗取隐私信息和篡改.

2.2.2 地址映射保护

EPC内存以页为单位进行管理, 页的控制信息保存在硬件结构EPCM里, 一个页面对应一个EPCM表项, 类似于操作系统内的页表, 管理着EPC页面的基本信息, 包括页面是否已被使用、该页的拥有者、页面类型、地址映射和权限属性等[10].EPCM结构在CPU地址映射过程中用于执行enclave页面的访问控制, 逻辑上而言, 它在保护模式的段保护和页保护机制的基础上增加了一层安全的访问控制.EPCM结构由PMH(page miss handler)硬件模块访问, 这个模块通过查询页表(系统软件维护的)、范围寄存器、EPCM来进行内存访问.EPCM逻辑结构图如图 5所示.
图 5 EPCM逻辑结构

2.2.3 Enclave机密性和完整性保护

应用程序在申请创建一个enclave时, 需要进行页面分配、复制程序代码与数据和度量操作, 创建过程的最后一步需要对enclave的完整性进行验证, 判断特权软件在创建过程中是否篡改了程序数据, 如分配了多余的页、将恶意代码复制进来, 或是篡改了复制的数据等.通过对每个添加的页面内容进行度量, 最终得到一个创建序列的度量结果, 保存在enclave的控制结构中.然后, SGX通过一条初始化指令将这个结果与enclave所有者签名的证书中的完整性值进行比较:如果匹配, 则将证书中的所有者公钥进行哈希, 作为密封身份保存在enclave控制结构中; 如果不匹配, 则说明创建过程存在问题, 指令返回失败结果.

成功进行了初始化指令之后, 才能进入enclave执行程序, 此后SGX提供的内存保护和地址映射保护使得外界无法访问enclave内存, 从而保证了enclave的机密性和完整性, 远程的认证者可以通过enclave的完整性度量值和其密封身份, 确保其正确地创建.图 6对这个过程进行了描述, 其中, 较粗箭头表示请求的操作, 细箭头表示具体步骤.

图6 Enclave建立保护的过程

2.3 SGX认证

SGX提出了两种类型的身份认证方式:一种是平台内部enclave间的认证, 用来认证进行报告的enclave和自己是否运行在同一个平台上; 另一种是平台间的远程认证, 用于远程的认证者认证enclave的身份信息.

当enclave向平台上其他enclave报告身份时, 先获取当前的enclave的身份信息和属性、平台硬件TCB信息, 附加上用户希望交互的数据, 生成报告结构; 然后获取目标enclave的报告密钥, 对报告结构生成一个MAC标签, 形成最终的报告结构, 传递给目标enclave, 由目标enclave验证请求报告身份的enclave跟自己是否运行于同一平台.

为了实现远程认证, 需要引入一个特殊的引用(quoting)enclave.同一平台enclave之间的验证使用的是对称密钥, 不适用于远程认证, 因此, 平台间的认证采用非对称密钥机制.由引用enclave创建平台认证的签名密钥EPID(enhanced privacy identification), 这个密钥不仅代表平台, 还代表着底层硬件的可信度, 并且绑定处理器固件的版本, 当enclave系统运行时, 只有引用enclave才能访问到EPID密钥.

远程认证的过程中, 假设远程认证方B要认证enclaveA, A先执行EREPORT指令, 将A的身份和附加信息组合生成REPORT结构, 利用引用enclave(称其为Q)的报告密钥生成一个MAC, 连同报告结构一起发给Q, Q通过该结构验证A是否运行于同一平台, 然后将它封装为一个引用结构体QUOTE, 并使用EPID进行签名, 将QUOTE和签名一同发给远程认证者.报告结构还需提供额外的用户数据域, 可用来传递用户自定义的信息, 以支持更复杂的交互方式.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SGX技术的分析与研究 学习笔记 的相关文章

  • SourceTree解决冲突的三种情形

    SourceTree解决冲突的三种情形 解决冲突的时候 操作已暂存文件 不操作未暂存文件 开始的时候 这两个区域的文件是一样的 并且都带有感叹号提示 使用他人版本解决冲突 会自动将当前分支对应文档更改成他人文档内容 此时该文档从未暂存文件中
  • anaconda在虚拟环境中安装jupyter notebook

    目录 在虚拟环境中安装jupyter notebook 解决jupyter notebook中不存在虚拟环境的问题 修改jupyter notebook的启动路径 在虚拟环境中安装jupyter notebook 在安装anaconda的时
  • 黑马程序员node.js学习笔记

    1 初识 Node js 1 1 Node js 简介 Node js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 Node js 的官网地址 https nodejs org zh cn 1 2 Node js
  • C语言中unsigned long long数据类型

    unsigned long long类型是目前C语言中精度最高的数据类型 可以用来表示20以内的阶乘数据 20以外的自测 还有是unsigned long long的精度64位 double或者long double 虽然也占有8个字节 但
  • java中子类可以继承父类的私有属性

    1 父类的私有属性可以被子类继承 父类的私有属性i1和i2 子类的对象中父类的私有属性i1和i2 2 子类虽然可以继承父类的私有属性 但是不能直接访问私有属性 除非父类开放了私有属性的访问接口
  • linux安装php-fpm,安装php(php-fpm)

    这里安装php7 2版本 首先到php官网下载安装包 下载到 usr local src 目录下 wget http jp2 php net get php 7 2 13 tar gz from this mirror 解压下载好的文件包
  • 地区查询python

    def file to dict area file 接收一个表示文件名的字符串为参数 将文件中的数据保存到字典中 返回字典 area in dict with open area file r encoding utf 8 as data
  • Failed to execute ‘createObjectURL‘ on ‘URL‘: Overload resolution failed.

    vue使用二进制流下载文件 使用 link href window URL createObjectURL blob 报错 Failed to execute createObjectURL on URL Overload resoluti
  • 关于分布式websocket踩的坑及解决方案

    关于websocket知识点 首先了解下websocket与http协议 1 WebSocket是HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 使得客户端和服务器之间的数据交换变得更加简单 允许服务端主动向客户端推送
  • python绘制网络关系图

    import networkx as nx 数据准备 G nx DiGraph 单边有向图 G add edges from 1 2 x y 2 3 一次性添加多条边 nx draw G 简单画一下 改变样式 一次性画 pos nx spr
  • 安装eclipse出现Failed to load the JNIshared library---我的解决

    在安装eclipse时如果出现Failed to load the JNIshared library这句话 可能是你安装的eclipse的位数和JDK的位数不匹配 首先 我们来查看电脑JDK是多少位的 在搜索框 或windows R 中输
  • Python数据分析实战(2)使用Pandas进行数据分析

    文章目录 一 Pandas的使用 1 Pandas介绍 2 Pandas基本操作 Series的操作 创建DataFrame 常见列操作 常见行操作 DateFrame的基本操作 时间操作 3 Pandas进行数据分析 读取数据 选择数据子
  • 阿里云oss图片缩放

    您可以通过文件URL SDK API方式设置参数 处理图片 本文以文件URL为例进行介绍 关于如何使用SDK和REST API处理图片 请参见图片处理操作方式 本文示例使用的Bucket为杭州地域名为oss console img demo
  • 申请堆区空间

    malloc void malloc size t size 功能 申请 size 个字节的堆区空间 返回值 成功返回堆区空间首地址 失败返回 NULL free void free void ptr 功能 释放堆区空间 memset 对空
  • IPSec 专栏目录锦集(openswan)

    为了方便查阅现有的文章 特准备一个目录页供后续查询使用 专栏序言 1 IPsec理论知识 openswan任务调度基础知识之信号 IPSec协议详细介绍 pdf 一本书 IPSec技术理论介绍 pdf IBM手册 包括IKE协商commit

随机推荐

  • 图像型火灾探测系统

    图像型火灾探测系统是基于视频图像处理 人工智能处理分析 物联网通讯 大数据平台等先进技术实现的可视化早期 火灾探测报警系统 可探测物质燃烧产生的烟雾 火焰 温度等光谱特性 系统主要由图像型火焰火灾探测器 图像型线型 光束感烟火灾探测器 图像
  • hive 调优记录

    数据倾斜总结 在做Shuffle阶段的优化过程中 遇到了数据倾斜的问题 造成了对一些情况下优化效果不明显 主要是因为在Job完成后的所得到的Counters是整个Job的总和 优化是基于这些Counters得出的平均值 而由于数据倾斜的原因
  • Centos7配置samba

    Centos7 配置 SAMBA Centos7 配置 SAMBA步骤 一 关闭selinux和firewall 关闭selinx SELINUX enforcing 改为 SELINUX disabled 关闭firewall syste
  • msvcp140.dll是什么东西,msvcp140.dll丢失的修复方案

    在我们打开游戏或者软件的时候 电脑提示由于找不到msvcp140 dll 无法继续执行此代码 重新安装程序可能会解决问题 那么msvcp140 dll是什么东西 msvcp140 dll丢失有什么修复方案 msvcp140 dll是什么东西
  • 微信小程序 如何把小程序页面保存至用户相册

    思路 canvas绘制出页面 将canvas转化成图片 获取到临时路径 用临时路径将图片保存至相册 组件及API canvas 画布 官方文档链接 wx canvasToTempFilePath 将canvas转换为临时文件路径 官方文档链
  • 用C语言实现贪吃蛇(基于Linux系统 ubuntu 环境,调用curses库实现)

    前言 这是一个基于C语言链表开发的贪吃蛇游戏 其实贪吃蛇游戏要解决的主要问题就是 1 这个游戏的基本组成元素和数据结构 2 如何初始化贪吃蛇并正常行走 如何判断事件发生 游戏说明 按方向键上下左右 可以实现蛇移动方向的改变 超出边界或者蛇头
  • 实现文件秒传

    实现文件秒传 文件的校验值计算 校验算法类型 校验码长度 1 CRC 4 8字节 计算效率高但安全性较低 传输数据的校验 2 MD5 16个字节 中等 文件校验和数据签名 3 SHA1 20个字节 安全性高 文件校验和数据签名 秒传原理 场
  • PCL 半径滤波器——高级用法

    目录 一 概述 1 不足 2 改进 二 代码实现 三 结果展示 一 概述 1 不足 传统半径滤波的算法原理及使用方法见 PCL 半径滤波器 传统方法有一个弊端就是会损失点云的一些信息 如原始点云数据中包含回波次数 扫描时间 扫描角度等属性信
  • Spring 使用指南 ~ 1、Spring 的 IOC 和 DI 简介

    一 IOC DI 1 概念介绍 IOC 控制反转 即把类的实例化交给 Spring 来管理 DI 依赖注入 即通过 Spring 为应用中被 Spring 管理的类实例注入其依赖的实例和其他信息 2 使用 XML 形式 1 构造函数注入 p
  • ReactiveUI MVVM框架(1)-Collections

    ReactiveUI MVVM框架 1 Collections ReactiveUI使用动态数据 DynamicData 用于集合的操作 当对动态数据集合进行更改时 会产生更改通知 通知表示为ChangeSet 里面包含了更改信息 多个更改
  • QML的语法——样式表QSS

    一 QSS介绍 如果学过前端的话 QSS Qt style sheet 就很好理解了 QSS 是一个非常强大的用于自定义控件外观的机制 它的概念 术语以及语法都是受到了 HTML CSS 的启发 QSS是用来设置界面样式的 设置的方法就是类
  • Excel修改日期格式,改变日期的筛选方式

    我们有两列日期数据 左边这一列筛选会显示 右边这一列筛选会显示 修改格式 将 日期1 改为 日期2 将 日期1 的格式修改为文本格式即可 修改格式 将 日期2 改为 日期1 选中日期2 点击 数据 gt 分列 然后什么都不用操作直接点击完成
  • Unity单元测试笔记

    Unity单元测试 在项目中安装NUnit 在unity面板中打开单元测试面板 在项目中安装NUnit 比如对测试用例代码中对缺乏引用的SetUp字段 按下快捷键Alt Enter 选择安装最新版本的NUnit using UnityEng
  • 11010序列检测器Verilog代码及仿真测试文件

    1 11010序列检测器 状态转移图 2 Verilog代码 module fsm x z clk rst data input clk rst x input 20 0 data output reg z reg 2 0 state ns
  • 作为程序员,赚取额外收入的 4个简单副业!

    对于程序员来说 可不是只有赚死工资这一条道路 好学编程给大家总结一下有哪些兼职渠道 以供大家参考 1 知识变现 一些问答平台比如微博 知乎 悟空问答 芝麻问答 饭团 知识星球 付费QQ群 付费社群等等 我们都可以挑选自己专业领域的问题选择回
  • 立体渲染(Stereo Rendering)

    首发于 GPU架构浅析 写文章 Multi View与Multi Viewport xiaocai Junio
  • spark学习9:sparkStreaming

    1 sparkStreaming是什么 sparkStreaming 其实是对RDD进行微批量处理 核心还是对RDD的操作 只不过spark是线程级的应用 实现秒级的运算是可以的 所以sparkStreaming并不是真正意义上的流处理 最
  • QT 发布打包 缺少依赖dll问题解决

    QT 在开发环境中测试时 开发环境会自动连接需要的依赖dll库 在产品发布时 需要将自己的exe和依赖的dll库 整体打包分发 避免其他设备缺少依赖的dll QT windeployqt exe 就是为了解决产品发布 打包问题的 有很多博客
  • python xlwt生成excel,列数大于256,分表

    usr bin python coding utf8 import xlwt def write data to excel print 开始生成 wbk xlwt Workbook sheets sheet wbk add sheet S
  • SGX技术的分析与研究 学习笔记

    SGX技术的分析与研究 学习笔记 SGX技术的分析与研究 学习笔记 1 SGX架构概述 2 SGX关键技术 2 1 Enclave安全容器 2 2 Enclave保护机制 2 2 1 内存访问语义 2 2 2 地址映射保护 2 2 3 En