SCONE: Secure Linux Containers with Intel SGX

IoT 1周前 admin
42 0 0

SCONE: Secure Linux Containers with Intel SGX

SCONE: Secure Linux Containers with Intel SGX

Introduction

近年来,基于容器的虚拟化越来越流行,多租户的服务器往往会使用 docker 来托管容器。容器级别的虚拟化相比于 Hypervisors 级别的虚拟化,可以提供更小的启动时间、更好的 I/O 性能,但是这同样意味着 OS 需要为其提供更多的保护和隔离。现有的隔离工作更多关注在如何在容器不可信的情况下保护主机不受容器非法访问,但是在多租户系统里,租户更加关注他们部署的容器内的数据如何不被具有更高权限的人员或者程序访问,比如 Kernel 或者 Hypervisor、被攻击者劫持的系统管理员等。

在2015年,Intel 在他们的 CPU 产品上发布了 Software Guard eXtensions (SGX),提供了 enclave 的支持。在 Enclave 里运行的应用、数据将不能被另外的软件所访问,即使这个软件拥有更高的权限。Enclave 里的内存页也将有 enclave page cache (EPC)这样的机制保护,无法被外界的代码访问。

于是作者想到,能否利用 SGX enclave 来运行 docker,为docker用户提供可信的执行环境。这有两个主要挑战,维持小的 trusted computing base(TCB)以及保持低性能开销。这是因为,之前的工作已经证明,TCB越大越有可能出现能被攻击者利用的漏洞;以及为了维持 SGX enclave 的可信环境,在 enclave 中进行系统调用必须对内存硬拷贝之后离开 enclave,这会带来很大的上下文切换开销,而且在 EPC 未命中的情况下,EPC 需要从内存中获取加密的内存页并解密,这会带来昂贵的访问开销。

作者观察发现,在容器中跑的服务通常都是像 Memcached、Apache、NGINX 这样的只使用少量系统接口以及通过标准输入输出流或者套接字而不是直接访问其他 I/O 设备的服务,这刚好是适应了小 TCB 的场景。同时因为 enclave 里的程序访问非 enclave 所拥有的内存是没有性能开销的。这样就刚好避开了之前提到的两个主要问题,虽然需要大量系统调用的容器还是会遭受很重的性能开销。

Threat Model

类似于之前的工作,作者假设一个攻击者拥有系统的最高权限以及物理硬件的访问能力。他们可以控制整个软件堆栈,包括特权代码,如容器引擎、操作系统内核等。这使得攻击者能够重播、记录、修改和丢弃任何网络数据包或文件系统访问。另外假设容器服务在设计时并未考虑到这种攻击者模型,容器服务可能会因信任 OS 等底层软件而危及数据的机密性或完整性。此外应用程序中的任何编程错误或设计缺陷都在我们的威胁模型之外(那是软工范畴的东西)。同时也不涉及 DoS 和 侧信道攻击(这些在实践中很难利用)。

Design

于是,作者提出了 SCONE,Secure CONtainer Environment,其特性为:1. TCB小 2. 开销低 3. 对 Docker 透明。SCONE 的整体架构如下:

SCONE: Secure Linux Containers with Intel SGX

1. SCONE 通过对主机的系统调用暴露了自身的接口。类似于操作系统内核为保护自己免受用户空间攻击所做的工作,SCONE 在将参数传递给应用程序之前执行健全性检查,并将所有基于内存的返回值复制到 enclave 内。为了保护通过文件描述符处理的数据的完整性和机密性,SCONE 支持通过屏蔽对数据进行透明加密和身份验证。

2. SCONE 实现 M:N 线程以避免不必要的 enclave 转换成本,M:N 指 M 个 enclave 内的用户线程将会在 N 个 OS 线程中复用。当应用程序线程发出系统调用时,SCONE 检查是否有另一个应用程序线程可以唤醒并执行,直到系统调用的结果可用。

3. SCONE 为容器进程到 Host 的系统调用提供了一套同步机制。它使用共享内存来传递系统调用参数和返回值,并发出执行系统调用的信号。系统调用由运行在 SCONE 内核模块中的独立线程执行。因此,enclave 内的线程在执行系统调用时不必退出,从而提高了吞吐量。

4. SCONE 与现有的 Docker 容器环境集成,确保安全容器与标准 Linux 容器兼容。Host OS 必须包括一个 Linux SGX 驱动程序和一个 SCONE 内核模块以提高性能。同时除了 Linux SGX 驱动程序之外,SCONE 不使用英特尔 Linux SDK 中的任何功能。

Evaluation

Methodology

作者使用了 Apache,NGINX,Memcached,Redis 和 SQLite 容器作为测试对象,分别评估了其在 glibc、使用同步系统调用的 SCONE 和 使用异步系统调用的 SCONE 上的运行表现。另外为线程数量设置了多组配置(glibc中worker thread将直接由 OS 线程执行,同步系统调用因为需要退出 enclave 再执行所以没有设置)

SCONE: Secure Linux Containers with Intel SGX

以下是实验结果:

SCONE: Secure Linux Containers with Intel SGX

SCONE: Secure Linux Containers with Intel SGX

SCONE: Secure Linux Containers with Intel SGX

SCONE: Secure Linux Containers with Intel SGX

根据以上结果可以看出,相比于使用 glic,除了 Memcached 略有提升外,SCONE 运行时下应用的吞吐量下降到了大约 0.6x~0.8x。

SCONE: Secure Linux Containers with Intel SGX

根据对二进制大小的表格可以看出,SCONE具有较小的 TCB (相比于 native 二进制,SCONE 的二进制大小大约 0.6x-2x)。





原文始发于微信公众号(COMPASS Lab):SCONE: Secure Linux Containers with Intel SGX

版权声明:admin 发表于 2022年11月24日 下午11:11。
转载请注明:SCONE: Secure Linux Containers with Intel SGX | CTF导航

相关文章

暂无评论

暂无评论...