2 背景

2.2 SGX Software Design Space

为了把传统应用放到SGX中,Graphene-SGX等Shielding Framework面临的一个问题是把多少功能给塞进Enclave中。为了确保性能开销小,两个重要的考量指标是:

  1. 由于Enclave切换环境开销大,应尽量减少进出Enclave。
  2. 由于Enclave物理内存(EPC)有限,应避免过度使用内存导致EPC出现Swap,从而影响性能。

具体实施起来应该考虑的点如下:

Shielding复杂性 应用放到Enclave后,有时候必须要一些内核功能,对此需要开放接口使用不可信的内核并检查返回值(Shield)。此时接口开放得越少,接口的逻辑复杂性越低,实现所需代码越少,防范Iago Attack越轻松。

应用代码复杂性 传统应用代码逻辑复杂度不尽相同,移植到Enclave的做法也不尽相同。

  1. 移植到Enclave中的应用的逻辑尽可能简单纯粹,避免涉及Runtime,避免频繁跨越Enclave边界。
  2. 有些移植到Enclave的应用还是需要一些Enclave内无法实现的功能,对此需要开放一些Enclave接口,OCALL到Enclave外实现某些功能并检查返回值。
  3. 在Encalve内塞全功能的LibOS/Shim,如此能很好地兼容传统应用,还支持系统调用等。

应用拆分 待移植的应用可以将功能拆分,分别放入不同Enclave实例中,这能提升安全。为此Shielding Framework应该能够支持较小的代码如Library,并确保Enclave间能共享状态。

3 设计

3.1 威胁模型

我们可以相信CPU、Enclave代码以及AESMD(Intel签名的Architectural Enclave)。(注:如果能找到AE的漏洞,那感觉影响挺大)

我们会用到SGX驱动,但并不相信它,但我们可以通过CPU硬件指令验证SGX驱动没干坏事。

我们不相信其它任何东西。

3.2 用户策略配置

扩展了Enclave Manifest文件(如这里),需要开发者先验地指明配置。

  1. 要求开发者在Manifest中事先声明好要用的系统资源(如fs、network),保护Host避免Enclave滥用资源;
  2. 在Manifest中指定Enclave信任的外部文件的hash,确保该文件未被修改(完整性保护);
  3. 在Manifest中指定Enclave会往外写的文件,但无法确保机密不外泄(无机密性保护)。

3.3 多进程应用

实现了用户态Enclave Fork(如何实现的?),每个进程的Enclave内的LibOS实例间通过消息传递来复制父Enclave内容并同步状态,存在如父子等协作关系的Enclaves同属于Enclave Group。

4 保护Linux抽象(以防不可信Host OS)

4.1 保护动态加载

PAL让SGX驱动初始化Enclave,从Shield开始动态加载、运行时链接,形成图3的架构。

内存权限 ELF加载、链接时需要动态地改变Page的权限。但是SGXv1 Enclave内存权限在初始化时就确定了,因此需要事先将所有Page权限标记为RWX,虽然存在安全风险及功能不兼容的情况。

位置相关可执行文件 往往从0x400000地址起始,为了包含0x400000地址并满足SGX要求(EnclaveSize=2xEnclaveSize=2^xEnclaveSize=2x,起址对齐到EnclaveSize,即ELRANGE=n⋅2x∼(n+1)⋅2xELRANGE=n\cdot2^x\sim(n+1)\cdot2^xELRANGE=n⋅2x∼(n+1)⋅2x),ELRANGE 势必包含0地址。ELRANGE包含0地址并将其Unmap,能避免不可信OS操控0地址破坏Enclave完整性。

4.2 保护单进程抽象

LibOS基于PicoProcess及PAL。PAL实现了36个函数。Enclave接口缩减至28个以向外调用不可信OS。(细节尚需看一下源码)


文件认证 通过构建Merkel Tree与Manifest中的Hash比对验证。

内存映射 Manifest事先声明预留多少堆内存,确保能缓存文件等。(感觉还方便有足够空间进行自定义的内存布局)

线程模型 未来基于支持动态创建线程的SGXv2,可以实现m:n的线程模型,方便异步调用提升性能(多个网络请求的场景)

异常处理 SGX硬件AEX返回后,利用SSA传递信号让LibOS模拟异常。(能够变相地在SGX内提供本不支持的硬件指令,如cpuid和rdtsc)

4.3 保护多进程抽象

Enclave间不能共享内存,Graphene-SGX通过消息传递而非共享内存实现多进程支持、Signal、System V IPC。

Enclave fork 流程如图4,父进程基于加密信道传递上下文快照给子进程以初始化。

Enclave execve 由于实现时的安全性考虑,只能执行Manifest中指定的可信程序。

Enclave IPC 通过Enclave间RPC消息传递实现。

5 评估

测量应用移植到Graphene-SGX上的吞吐量或延迟。

5.1 服务器应用

应用 开销要因
Aphene IPC密集型遇到加密RPC导致表现变差
NGINX 主要因为事件驱动单线程型遇到Graphene-SGX只支持同步IO导致表现变差
其他原因包括SGX固有开销

5.2 命令行应用

应用 开销要因
R 内存分配和垃圾回收会造成明显性能开销。因为现有实现假设内存很大,布局稀疏,而SGX1要求Enclave内存创建时映射。
GCC Enclave初始化
CURL I/O延迟

5.3 性能开销分析

操作 开销要因
打开文件 第一次打开文件时预加载文件内容构建Merkel Tree并计算Root Hash和Manifest比对
读文件 验证读取的文件块
fork 创建新Enclave、本地认证、上下文复制时无法批量IPC(Graphene-SGX不支持m:n线程模型及异步调用)

5.4 TCB大小和功能性比较

6 相关工作(总结地挺好)

《Graphene-SGX: A Practical Library OS for UnmodifiedApplications on SGX (ATC‘17)》笔记相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 解释型和编译型编程语言_解释型和编译型编程语言:有什么区别?
  2. 【开发者的精进】 数据驱动下的程序设计
  3. 物联网在水位监测中的应用
  4. Delta DVP 系列 PLC 各装置 Modbus 地址
  5. js进阶正则表达式14验证邮编(input的pattern属性)(正则表达式加起^始$)
  6. Windows10下python3.5的sklearn库安装
  7. OCR文字识别技术总结(二)
  8. 在Windows下使用安装并启动HDFView踩坑记录
  9. 高等数学(第七版)同济大学 习题2-4 个人解答
  10. 考研强化阶段选书怎么选
  11. TCL学习心得(2)Tcl语言的语法
  12. 2009年考研数学一解析pdf
  13. 2017又是新的一年
  14. 详解开关电源RCD钳位电路工作过程
  15. 对Word文档中的指定内容进行替换
  16. RiskCloud干货 | 对LOPA分析软件的深入研究
  17. 2016年互联网面试总结
  18. CCF A类会议或期刊----多视图,多模态近两年论文
  19. JAVA中的集合的概念
  20. 蚂蚁 Service Mesh 大规模落地实践与展望

热门文章

  1. python电影名称词云_python爬虫——词云分析最热门电影《后来的我们》
  2. 小米蓝牙耳机airdots青春版双耳模式
  3. 关于电视剧评价指标的描述性分析
  4. 使用 Elasticsearch ik分词实现同义词搜索
  5. 外省职称计算机,外地职称在当地是否可以用?
  6. Python笔记001-类的特殊方法
  7. 计算机缓存怎样更改,计算机的缓存大小在哪设置?
  8. 有道云笔记linux使用教程,巧妙地使用typora编辑有道云笔记
  9. linux虚拟内存满了怎么办,解决linux虚拟内存不够用的方法
  10. 《第一篇》二进制部署高可用K8S集群v1.24.2及运维(亲测无坑)