【TEE论文】Confidential Serverless Made Efficient with Plug-In Enclaves (2021 ISCA)

news2024/10/5 21:22:16

Confidential Serverless Made Efficient with Plug-In Enclaves

ipads.se.sjtu.edu.cn/chinasys21/vedios/Confidential Serverless Made Efficient with Plug-In Enclaves-李明煜.mp4

问题:在SGX飞地中运行现有的无服务器应用程序,并观察到性能下降可能高达5.6×甚至422.6×

观察:我们的调查发现这些减速与架构功能有关,主要来自页面安全区初始化。

方案:使用新的基元-Plug-In Enclaves扩展 SGX,该飞地可以映射到现有飞地中,以便在函数之间重用经过验证的通用状态。通过重新映射插件安全区,安全区就地处理,避免在函数链中移动昂贵的数据。

结果:将安全区函数延迟降低了94.74-99.57%,自动伸缩吞吐量提高了19-179×。

1 介绍

无服务器计算:功能即服务(FaaS)。无服务器函数是事件驱动的,通过用户请求或其他函数的调用(以链方式)。54% 的无服务器应用程序仅包含一个函数,50% 的函数执行时间不到 1 秒;因此,无服务器应用程序对服务延迟极其敏感。
TEE被认为是实现实用的隐私保护无服务器应用程序的有前途的技术。
但是,现有的 TEE 设计无法很好地适应无服务器工作负载

观察实验:将五个现实世界的隐私关键型无服务器工作负载(表 I)移植到内部飞区库操作系统中(类似于 Graphene-SGX ,但支持 SGX2 功能),并观察到性能从 5.6× 显著下降到 422.6×。

在这里插入图片描述

观察分析:部分开销源于安全区初始化,硬件安全区创建和证明测量生成都主导着安全区函数的启动,范围从 92.3% 到 99.6%。结果还表明了另一个性能下降因素,它源于函数之间的秘密数据传输,占据了端到端执行时间的 4.4% 到 29.8%;对于长链函数调用,情况会变得更糟。

得出结论:基于隔区无服务器的效率低下的根本原因是当前的 SGX 设计(SGX1 [16] 和 SGX2 [17])禁用了安全区实例之间的内存共享。这种无共享设计提供了强大的安全保证,但会产生明显的启动延迟,这不适合当今的无服务器计算

提出方法:PIE提出了一种新的硬件内存原语:共享安全区,可以不可变地映射到不同的隔离飞地中,实现安全共享。利用此硬件原语,基于 enclave 的无服务器平台可以创建两种类型的逻辑安全区:插件安全区和主机安全区。插件安全区完全由共享的飞区区域组成,并且可以容纳非敏感公共环境。主机安全区与当前的 SGX 设计一样,彼此严格隔离,但可以将插件安全区映射到自己的安全区地址空间,以便重用插件安全区加载的内容及其容易生成的度量。主机安全区可以进一步重新映射插件安全区以适应不同的应用程序逻辑,而无需迁移其机密数据

优势分析:PIE 对效率的关键改进是基于 PIE 的映射是按区域而不是按页面的,主机飞地可以通过轻量级函数调用(5~8 个周期)调用插件飞地的过程。PIE 设计与 SGX1 和 SGX2 语义完全兼容,并重用大多数现有硬件设计,以最大程度地降低其实现复杂性。

实现:PIE对SGX的架构扩展包括一个新的页面类型来指示共享安全区内存,以及两个新的指令EMAP和EUNMAP,用于将插件飞地映射到主机飞地/从主机飞地映射/取消映射。

实验:使用真正支持 SGX 的云计算机,并通过向 EMAP/EUNMAP 操作添加周期精确的延迟来模拟 PIE 指令。对常见的无服务器基础架构进行分区,例如插件飞地中的语言运行时、第三方库和用户函数,以及主机飞地中的机密数据。对于无服务器函数之间的输入/输出数据流,重新映射插件飞地以避免秘密数据移动

实验结果:PIE可以降低94.74-99.57%的函数启动时延,在函数自动伸缩方面实现19-179×的吞吐量提升,在函数链的数据传输方面实现16.6-20.7×的加速。此外,与当前的 SGX 硬件相比,基于 PIE 的无服务器可以扩展到 4-22× 个安全区实例

贡献:

  • 对无服务器应用,观察找到问题
  • 设计优化,并且实现了
  • 实验结果也很不错,性能提高很多

2 背景

A. 英特尔软件防护扩展 (SGX)

SGX CPU 将安全区与各种威胁隔离开来,包括 (1) 来自外围设备的直接内存访问 (DMA),(2) 固件、虚拟机管理程序和操作系统等特权系统软件,(3) 与安全区位于同一地址空间中的应用程序,(4) 共享同一托管应用程序的飞地,其中一个的错误或错误不会危及另一个。

安全区访问控制模型。安全区内存被命名为安全区页面缓存 (EPC),EPC 是从 DRAM 的物理连续区域分配的,称为处理器保留内存 (PRM)。一个EPC只属于一个安全区实例。每个安全区实例都有一个唯一的安全区标识符 (EID) 存储在其 SGX 安全区控制结构 (SECS) 中。EPC 页面添加到安全区时,SGX CPU 将此 EPC 页面与名为 EPC 映射 (EPCM) 的元数据相关联。任何软件都无法访问 SECS 和 EPCM 等安全区元数据。
在这里插入图片描述
远程和本地证明。

SGX 为远程安全区用户提供了一种硬件机制来证明其身份。在启动过程中,CPU 通过测量每个 EPC 页来计算 SHA-256 哈希,并在受硬件保护的寄存器中最终确定此测量值。对此过程的任何篡改都将导致不同的测量结果。SGX 为同一 CPU 上的安全区提供了另一种有效的本地证明,以相互识别,从而建立相互信任。

B. 无服务器计算

无服务器计算为开发人员提供了编写细粒度、简单和独立函数来组合复杂业务逻辑的优势。函数可以组织成一个链来处理组合。无服务器应用程序是一种事件驱动、面向请求的交互式服务,需要低延迟和高吞吐量。之前的工作已经探索了优化传统云环境中无服务器启动的延迟【“SAND: Towards High-Performance Serverless Computing”, USENIX ATC 2018.】【 “SOCK: Rapid Task Provisioning with Serverless-Optimized Containers”, USENIX ATC 2018.】

3 动机

传统的无服务器平台利用容器或虚拟将功能限制在沙箱中。 他们的威胁模型是保护云免受不受信任的函数执行的影响,并保护函数免受托管租户的影响。

SGX飞地采用反向沙箱,使用硬件来防止云检查或干扰敏感计算。英特尔 SGX 可以保护用户级工作负载免受不受信任环境的影响,适合保护机密的无服务器计算工作负载

修改函数的入口点以调用在安全区内受保护的函数映像。安全区无服务器实例的工作流如图所示。在将秘密数据发送到安全区进行安全处理之前,用户必须对安全区的环境进行认证。软件初始化包括语言运行时、框架和第三方库的加载时间。功能的执行可能涉及模块/包的动态加载。端到端延迟只包含实心箭头。

在这里插入图片描述

A. 定量评价

观察:SGX 安全区保护无服务器功能会在性能方面的问题

  • 启动引入的开销:安全区保护引入了巨大的性能开销,从 5.6×到 422.6× 不等。
    在这里插入图片描述
  • 无服务器自动缩放在安全区中受到保护时如何执行
    无服务器计算的一个有前途的功能是云供应商提供与调用速率相对应的实例自动缩放。为了实现高资源利用率,云供应商需要高吞吐量。并发安全区启动会导致极高的 EPC 争用,这甚至会降低其他并发运行的飞地的性能。性能损失可高达8.2×(从原来的39.1秒到322.07秒)。(显示了聊天机器人应用程序,其他无服务器应用程序的延迟分布相似)
    在这里插入图片描述
  • 创建过程的性能分析
    • 在SGX1中,安全区创建过程中观察到两个主要性能因素:(1)硬件安全区创建和(2)安全区测量生成
    • (1)CPU 必须使用 EADD 添加具有指定权限和虚拟地址 (VA) 的每个页面。这不仅为目标飞地分配了一个 EPC 页面,还需要更新相应的 EPCM 条目来跟踪此 EPC。EADD 不允许并发添加到同一安全区实例,因为并发模型会增加硬件形式验证的复杂性
    • (2)CPU 需要生成一个基于 SHA-256 的测量,从 ECREATE 初始化,在每个 EPC 页面上初始化到 EADD 和 EEXTEND,并由 EINIT 完成。在此过程中,最昂贵的是EEXTEND,它一次测量5字节的EPC数据块需要5.256K周期。要测量整个EPC页面,总共需要大约88K个周期
    • 在 SGX2 中,安全区允许使用 EAUG → EACCEPT 流动态增加其大小。此流程对于堆密集型工作负载特别有效。对于代码密集型工作负载,它还需要基于软件的测量,并通过 EMODPE(向右扩展“x”)和 EMODPR(限制“w”)将 EPC 页面权限从“rw-”修改为“r-x”。SGX2 不提供任意修改权限的有效方法。EMODPR 需要再有一个 EACCEPT 来验证修改后的 EPC 权限。
  • 测量 SGX 无服务器函数链
    • 进行微基准测试,在函数之间改变数据传输大小。这些过程包括 (i) 函数 A 和函数 B 之间的相互证明,(ii) A 和 B 之间的 SSL 握手,(iii) 函数 B 分配一个足够大的来容纳机密数据,(iv) 在 A 和 B 之间传输机密数据(双重复制和数据 en/decrypting)。在这里插入图片描述

    • 当数据大小达到 94MB 时,由于昂贵的 EPC 逐出开销,安全区内堆分配的开销超过 SSL 传输。

    • 对于函数之间的小消息传递,与安全区初始化时间(在 100 秒到 12 秒之间变化)相比,秘密传输的成本可以忽略不计(几乎在 29 毫秒内)。对于安全区之间的大型消息传递 (>32MB),数据移动可能是一个瓶颈。
      在这里插入图片描述

B. 软件优化

  • 基于模板的启动。启动涉及多轮加载共享库文件,这不可避免地会产生大量的 EENTER/EEXIT 开销,我们可以构建一个包含所有所需状态的模板映像,并将入口点设置为用户逻辑的第一行,库加载时间可以优化,但硬件安全区创建(在 4.2 秒到 18.2 秒之间)仍然主导着启动延迟。
  • 基于重用的启动。传统的启动延迟优化技术是重用现有实例,而不是从头开始创建新实例。这在无服务器中称为热启动,在 enclave 的上下文中,如果最后一个功能的信息泄露或环境损坏危及下一个功能,则必须重置环境;尽管基于重用的启动是一种可行的优化,但并不能解决并发请求超过预热实例时自动缩放的延迟问题,并且不可避免地会占用大量资源。
  • 基于共享的启动。共享是高效无服务器计算的关键。不幸的是,这是不可能的,因为SGX硬件设计禁止在飞地之间共享EPC。另一个优化思路是在单个地址空间中运行共享相同语言运行时的多个函数。由于不同的用户相互不信任,因此使用相同的地址空间需要安全区内隔离。先前的研究依赖于基于编译器的检测或基于运行时的限制,实现了基于软件的飞地隔离,将大量代码引入可信计算库(TCB)。基于软件的隔离可能是一个次优的解决方案,因为安全区用户更喜欢只信任硬件来保证安全

C. 吸取的教训

见解 1:硬件 EADD 和软件哈希实现最快的安全区启动。

对于代码密集型工作负载,SGX2 EAUG并不比SGX1 EADD更好。更有效的方法是使用 SGX1 EADD(强制就地“r-x”权限)和硬件/软件组合测量。英特尔 SGX SDK 使用昂贵的 EEXTEND 来测量 EADD 分配的初始堆页面,这可以在使用前通过软件清零(例如 C 库 calloc())进行安全优化,从而为 EPC 页面节省 78.8K 个周期。
在这里插入图片描述
见解 2:常见的无服务器状态是非敏感的,可以在函数之间共享。

SGX假设属于飞地的所有EPC内容都是私有的。然而,在无服务器计算的上下文中,我们发现函数环境,包括语言运行时、第三方库,甚至函数本身,通常是开源的,因此不包含任何机密。遗憾的是,当前的 SGX 硬件不支持在安全区实例之间共享 EPC;安全区函数必须始终从头开始初始化其语言运行时。通过基于软件的优化,对于 12 MB 安全区,安全区初始化和基于模板的库加载仍会产生 25.800 秒的延迟。

见解 3:在安全区函数之间传输机密数据的成本很高。

安全区功能链涉及丰富的堆分配和昂贵的数据通信。而由于额外的 EPC 逐出,安全区内堆分配对 >94MB 的机密数据产生影响。EPC 逐出涉及分页内容的硬件重新加密,并导致处理器间中断 (IPI) 用于线程间同步。理想的解决方案是在链中的不同功能之间共享相同的秘密数据,以消除这种数据传输费用,即所谓的现场处理。这在当前的 SGX 硬件中也是不可能的。

受安全保护的无服务器功能可以从安全共享中受益。当前的 SGX 硬件不支持此功能。

4 PIE设计

PIE 扩展了 SGX 设计,以支持高效灵活的飞地模型。PIE 引入硬件原语:共享 EPC。

  • 共享 EPC 组成的plug-in enclave,可以运行语言运行时、框架、共享库,或容纳可由其他 enclave 重用的初始通用状态
  • 私有 EPC 组成的host enclave 运行处理用户密钥的安全沙箱。
  • 主机 enclave 可以共享通用的插件plug-in enclave,通过重用现成加载的内容并避免昂贵的测量生成,从而提高空间和时间效率。

在这里插入图片描述

PIE 引入新指令:EMAP按区域分配的指令,允许host enclave 访问plug-in enclave 的整个虚拟地址空间。EUNMAP 回收已分配的虚拟地址空间区域。
在这里插入图片描述

通过重新映射不同应用程序的plug-in enclave 来消除昂贵的数据传输瓶颈,同时保留要就地处理的秘密数据,即所谓的原位处理。为了保留安全属性,PIE 会阻止对插件 enclave 的写入尝试,并使用硬件强制执行的写入时复制机制。当共享插件 enclave 的初始状态有助于提高性能时,需要 copy-on write。从本质上讲,PIE 通过正常的 DRAM 操作(即动态映射和写入时复制)启用飞地内存。PIE 证明此扩展对实际应用程序是实用的,并且可以使 enclave 应用程序的低延迟受益。
在这里插入图片描述

在这里插入图片描述

性能评估

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关工作

无服务器领域和其他方法的比较

  • Microkernel-like Sharing:Conclave建议使用多个服务器 enclave 在应用程序 enclave 之间共享。
    • 无服务器计算所需的低延迟属性很难实现
    • 使用类似 SSL 的安全通道跨 enclave 边界重新加密,高开销
    • 无法处理跨多个函数 enclave 共享的重量级语言运行时 (LR)
  • Unikernel-like Sharing:Occlum在许多基于软件的隔离任务之间共享库操作系统,在单个 enclave 地址空间内实现高效的多任务处理。
    • Occlum 支持快速 spawn() 系统调用,适用于无服务器自动扩缩容
    • Occlum 的 inenclave 隔离由软件保证,需要全面的代码检测和复杂的完整性检查,很难证明 Occlum 基于软件的隔离是足够的
  • Nested-library Sharing:Nested Enclave在 Enclave 中引入基于硬件的分层隔离。
    • 嵌套 Enclave 将共享库放置在可共享的外部 enclave 中,同时在独立的内部 enclave 中运行每个用户逻辑
    • 共享时,外部无法访问内部;PIE 和嵌套 Enclave 都可以通过快速实例化使无服务器自动缩放受益
    • 嵌套围圈可能不适合无服务器计算:(1)不可能在外部安全区共享 LR(例如,Node.js、Python),因为这些运行时必须访问内部安全区中的用户脚本。(2) 嵌套 Enclave 用 enclave 调用替换库调用,这需要修改代码并产生运行时上下文切换开销(6K∼15K 周期)。相比之下,PIE 允许主机 enclave 通过快速函数调用(5∼8 周期)调用插件 enclave。
      在这里插入图片描述

基于飞地的无服务器框架

Se-Lambda:利用 WebAssembly 沙盒环境作为无服务器函数的双向函数。
S-FaaS: 将硬件事务( Intel TSX)和 SGX 结合在一起,用于可信的无服务器资源帐户
T-FaaS:将 JavaScript 引擎移植到 SGX 中,以构建安全的无服务器平台。
Clemmys: 对 SGX2 EAUG 操作进行批处理,以快速创建大型堆无服务器飞地。无法优化大代码 enclave 初始化和测量引入的延迟,PIE 通过安全地重用不可变插件 enclave 解决了这个问题。

无服务场景初始化延迟优化

为了降低函数启动成本,SAND 利用细粒度沙箱和高局部消息总线,而 SOC建议使用简化容器。Catalyzer通过写入时复制和内存快照共享实现亚毫秒级函数启动。FAASM利用共享内存来避免函数之间昂贵的数据移动。通过PIE扩展,Catalyzer和FAASM的优化技术可以直接安全地应用于安全区保护功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1406519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ASOC全解析(一)】ASOC架构简介和欲解决的问题

【ASOC全解析(一)】ASOC架构简介和欲解决的问题 一、什么是ASOC以及ASOC解决的三个问题二、ASOC的组成与功能解决第一个问题解决第二个问题解决第三个问题 三、ASOC基本工作原理 /********************************************************************…

使用Sobel算子把视频转换为只剩边缘部分

效果展示 原始视频 修改后的视频 整体代码 import cv2vc cv2.VideoCapture(test.mp4)if vc.isOpened():open, frame vc.read() else:open Falsei 0 while open:ret, frame vc.read()if frame is None:breakif ret True:i 1# 转换为灰度图gray cv2.cvtColor(frame, cv…

RabbitMQ进阶篇【理解➕应用】

🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于RabbitMQ的相关操作吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 一.什么是交换机 1.概念释义 2.例…

聚观早报 | 苹果将开放第三方NFC支付;华为P70系列参数曝光

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 1月23日消息 苹果将开放第三方NFC支付 华为P70系列参数曝光 Celestiq已正式开始量产 岚图汽车官宣与华为合作 美…

LLM + RecSys 初体验(上)

最近在逛小红书的时候,发现了一个新的GPU算力租赁平台,与AutoDL和恒源云等平台类似。正巧,官网有活动,注册即送RTX 4090三个小时,CPU 5 小时。正巧最近在测试 LLM推荐系统的 OpenP5 平台,果断入手测试! 用…

力扣精选算法100道——x的平方根(二分查找专题)

x的平方根 首先看到这个题目的时候,我们需要对上一个二分查找专题的题目进行深度理解,然后了解模板,这题是完全利用的上一题的模板知识进行,如果直接看这个题目可能是有点懵的,因为我这里直接利用模板进行解题。力扣…

nexus清理docker私库

下载nexus-cli客户端,并非必须下载到服务器,理论上只要能访问到nexus就行 wget https://s3.eu-west-2.amazonaws.com/nexus-cli/1.0.0-beta/linux/nexus-cli这个链接下载不了了,末尾有资源下载,里面包含了完整包和脚本&#xff0…

Mysql主从复制、读写分离、分库分表

大数据处理 1.主从复制1.1 概述1.2 原理1.3 搭建 1.主从复制 主从复制 1.1 概述 主从复制指: 将主数据库的DDL和DML操作通过二进制日志传递到从库服务器中, 然后从库根据日志重新执行(也叫重做), 从而使从库和主库的数据保存同步 MYSQL支持一台主库同时向多台从库进行复制,…

Kafka-服务端-KafkaController

Broker能够处理来自KafkaController的LeaderAndIsrRequest、StopReplicaRequest、UpdateMetadataRequest等请求。 在Kafka集群的多个Broker中,有一个Broker会被选举为Controller Leader,负责管理整个集群中所有的分区和副本的状态。 例如:当某分区的Le…

解密.dataru被困的数据:如何应对.dataru勒索病毒威胁

导言: 在数字时代,勒索病毒如.dataru正在不断演变,威胁着用户的数据安全。本文91数据恢复将深入介绍.dataru勒索病毒的特点、被加密数据的恢复方法,以及预防措施,帮助您更好地了解并对抗这一数字威胁。当面对被勒索病…

Armv8-M的TrustZone技术之SAU寄存器总结

每个SAU寄存器是32位宽。下表显示了SAU寄存器概要。 5.1 SAU_CTRL register SAU_CTRL寄存器的特征如下图和表所示: 5.2 SAU_TYPE register 5.3 SAU_RNR register 5.4 SAU_RBAR register 5.5 SAU_RLAR register 5.6 SAU区域配置 当SAU启用时,未由已启用…

深度学习技巧应用33-零门槛实现模型在多个GPU的分布式流水线训练的应用技巧

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用33零门槛实现模型在多个GPU的分布式流水线训练的应用技巧,本文将帮助大家零门槛的实现模型在多个GPU的并行训练,如果你手头上没有GPU资源,根据本文的介绍也可实现…

Redis应用(1)缓存(1.2)------Redis三种缓存问题

三者出现的根本原因是:Redis缓存命中率下降,请求直接打到DB上了。 一、 缓存穿透: 1、定义: 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。…

C++面试宝典第24题:袋鼠过河

题目 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子。每隔一米就有一个桩子,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳得更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米;如果为0,就会陷进去无法…

《WebKit 技术内幕》学习之十一(3):多媒体

3 音频 3.1 音频元素 说完视频之后,接下来就是HTML5中对音频的支持情况。音频支持不仅指对声音的播放,还包括对音频的编辑和合成,以及对乐器数字接口(MIDI)等的支持,下面逐次介绍并分析它们。 3.1.1 H…

更改wpf原始默认按钮的样式

样式 代码 <Window x:Class"WpfApp4.Window1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/2008…

【linux】Debian挂起和休眠

一、挂起和休眠 在Debian桌面系统中&#xff0c;挂起和休眠是两种不同的状态&#xff0c;它们之间有一些区别。 挂起&#xff08;Suspend&#xff09;是将当前系统的状态保存到RAM&#xff08;内存&#xff09;中&#xff0c;然后关闭所有硬件设备&#xff0c;除了RAM之外。在…

详细分析Java中的list.foreach()和list.stream().foreach()

目录 前言1. 基本知识2. 差异之处2.1 执行顺序2.2 串行并行2.3 复杂数据处理2.4 CRUD集合2.5 迭代器 3. 总结4. 彩蛋 前言 典故来源于项目中使用了两种方式的foreach&#xff0c;后面尝试体验下有何区别&#xff01; 先看代码示例&#xff1a; 使用List的forEach&#xff1a…

风丘车辆热管理测试方案

车辆热管理是在能源危机出现、汽车排放法规日益严格以及人们对汽车舒适性要求更高的背景下应运而生的。将各个系统或部件如冷却系统、润滑系统和空调系统等集成一个有效的热管理系统&#xff1b;控制和优化车辆的热量传递过程&#xff0c;保证各关键部件和系统安全高效运行&…

麒麟系统—— openKylin 安装到虚拟机以及开放SSH通过工具连接

麒麟系统—— openKylin 安装到虚拟机以及开放SSH通过工具连接 1. 在VMware中安装openKylin麒麟系统步骤1&#xff1a;准备VMware环境步骤2&#xff1a;创建新的虚拟机步骤3&#xff1a;安装openKylin麒麟系统步骤4&#xff1a;调整分别率步骤5&#xff1a;安装SSH 2. 使用Open…