【论文阅读】Speicher: Securing LSM-based Key-Value Stores using Shielded Execution


本文提出了一个安全的存储系统-speicher,提供了强大的机密性,数据的完整性,来防止rollback(回滚)、folk(分支)攻击。

introduction

在大数据时代,存储在数据中心的在线数据在以很快的速度进行增长。目前,主要使用持久化的KVS系统来支持这种服务。与之同时,存储系统中安全违规问题也显著增加,对系统本身构成极大的威胁。
为了实现一个安全的存储系统,我们希望系统使用屏蔽执行针对数据存储和查询操作有下面三个特性

  • 机密性-未授权的身份不能读取数据。
  • 完整性-可以检测到未尽授权的数据更改
  • 新鲜度 -检测到数据的过时状态。

因此在本文中,完成了下面工作:

  • I/O library for shielded execution:基于英特尔SPDK。执行IO操作的时候不需要退出安全区域(sevure enclave)。减少系统调用。
  • ** Asynchronous trusted monotonic counter**-异步可信单调计数器。用来保持数据的新鲜度。
  • Secure LSM data structure-存在于安全内存之外,克服intel SGX的内存以及IO限制。
  • 算法:提供了存储中所有操作的设计和实现:get、put、range queries、iterators(迭代器)、comapction、restore。

background& motivation

1.Intel SGX & shielded execution(屏蔽执行)

  • intel SGX - intel software guard extension
    这是对于可信任执行环节(trusted execution evironment)的X86 ISA的拓展技术。他提供了一个secure enclave抽象-硬件保护的内存区域。CPU会保护enclave 内存中数据和代码的机密性与完整性。

注意:enclave memory在enclave 页面缓存(EPC)中。EPC是由片上内存加密引擎(on-chip memory encryption engine)保护的专用内存区域,分别对EPC中对读写进行加密解密。
同时,SGX支持call-gate mechanism控制进出TEE。

  • shielded execution
    基于SGX的屏蔽执行部署在不可信的计算设备上为应用程序提供机密性和完整性保护。
    我们的工作建立在 Scone上。该模型讲应用程序的地址空间限制在enclave内存中,并通过系统调用接口和不可信内存进行交互。同时拥有异步系统调用机制,enclave外的线程异步执行操作。Scone保证了运行在SGX enclave中应用程序的内存安全。并提供了Docker集成,无线地部署容器。

2.threat model

除了标准的SGX threat模型,我们还要考虑可以使用不可信任存储介质的攻击。我们旨在

  • 防止回滚攻击。可以任意关闭系统,并回到过时的状态。
  • 防止分支攻击。可以创建多个存储系统分支(创建多个副本)
  • 保证数据的完整,机密以及新鲜(freshness)。以及奔溃一致性(crash consistency)

注意:这里我们假设从物理层面打开包装提取机密或者破坏CPU系统状态。
并且不考虑拒绝服务攻击。(这种攻击微不足道)


design&implementation

1.设计实现的挑战

这种挑战主要源于要解决intel SGX的四个架构限制

  • Limited EPC size
    自然SGX提供了安全的分页机制。可以将EPC放到不受保护的内存中(在进行加密之后,收回时将会解密并且检查其完整性)。这种机制会导致非常高的开销。因此我们重新设计了shielded storage engine,在不受信任的内存中设计实现了新的memtable数据结构保证数据的安全。
  • :Untrusted storage medium
    重新设计了LSM的数据结构,将信任拓展到不可信的存储介质中。
  • Expensive I/O syscall
    scone拥有一部系统调用接口是的enclave外部线程的系统调用不需要强制enclave线程退出enclave。但是仍然不适合构建需要频繁调用的存储系统。因此设计了新的IO库,利用SPDK进行shielded execution(屏蔽执行)。
  • trusted counter
    保护数据的新鲜新(防止回滚攻击)

2.overview

speicher是一个安全的持久性KVS,设计在不受信任的主机上运行。提供了数据存储和查询的全部操作。在本文中通过拓展RocksDB来实现Speicher,当然依然可以将这种架构借鉴到其他KVS中。

【论文阅读】Speicher: Securing LSM-based Key-Value Stores using Shielded Execution

3.design

3.1 SPEICHER controller

controller提供基于SGX的可信执行环境。客户端通过相互验证的加密通道与控制器进行通信。

  • 基于scone的屏蔽执行框架来构建控制器。其中利用scone的容器支持在不受信任的主机上部署speicher。
  • 控制器还提供远程证明服务来检测用户身份,从而给予访问控制权限。
  • 控制器利用control path IO上的异步系统调用接口SCONE libc来进行系统配置。对于data path IO构建了一个direct IO library。
    3.2 Shielded direct I/O library(?)
    该IO库允许存储引擎从SGX enclave内部访问SSD或者HDD。通过基于SPDK的dorect IO library来实现。

SPDK是基于数据平面开发工具包(DPDK)的高性能用户模式存储库。

3.3 Trusted counter.

用于克服回滚攻击。SGX本身提供单调计数器,但他们的更新频率在每秒10次内,无法满足需求。

因此我们设计了单调计数器(AMC:asynchronous monotonic counter),达到每秒70k次更新。由于计数器在递增到稳定需要一定的时间,这意味着在计数器值没有被检测到的情况下无法被回滚。在递增的时候,AMC提供三条信息:

  • 当前的稳定值
  • 递增的计数器值
  • 该值稳定所需的时间
    综上,我们可以为WAL何manifest设置一个具有确定性增量的计数器从而讨论每个记录的新鲜度。

3.4 MemTable

由于内存限制,我们需要将MemTable存储在主机内存中。由于主机内存是不可信的,我们需要设计一种机制来确保MemTable的机密性、完整性和新鲜性

本文使用三种方法来设计memtable。最终采用下面方案:
重用RocksDB中MemTable的现有skip list数据结构。下图显示了SPEICHER的MemTable格式。特别地,我们将现有的MemTable分为两部分:key pathvalue path。在**路径中,我们将**作为skip list的一部分存储在enclave中。然而,MemTable中的加密值作为值路径的一部分存储在不受信任的主机内存中。**这种分区允许SPEICHER通过加密值来提供机密信息,同时仍然能够在enclave内进行快速**查找。**为了防止对值的完整性或新鲜性的攻击,SPEICHER在每个skip list节点中存储该值的加密哈希值以及该值的主机内存位置
【论文阅读】Speicher: Securing LSM-based Key-Value Stores using Shielded Execution

3.5 SSTables.

通过调整SSTable文件格式来保证器安全属性。

【论文阅读】Speicher: Securing LSM-based Key-Value Stores using Shielded Execution

  • 通过在SSTable文件写入持久性存储介质之前加密SSTable文件的每个块来确保机密性
  • SPEICHER计算每个块上的加密哈希。这些散列然后被分组到一个散列块中,并附加到SSTable文件的末尾。

在读取时,SPEICHER可以通过计算块的哈希值并将其与存储在页脚中的相应哈希值进行比较来检查每个块的完整性。
上述页脚上的哈希值使用额外哈希保存manifest中。由于manifest使用trusted counter保证不会受到回滚攻击。因页脚上的哈希值也不会受到回滚攻击。从而保证SSTable文件的新鲜度。

3.6 log files
【论文阅读】Speicher: Securing LSM-based Key-Value Stores using Shielded Execution
该记录由加密的KV对和插入时WAL的加密可信计数器值以及两者的加密哈希组成。


evaluation&conclusion

 SPEICHER的设计基于利用Intel SGX的硬件辅助屏蔽执行。然而,SPEICHER的设计将屏蔽执行的信任扩展到安全的enclave内存区域之外,以确保安全属性也在不可信存储介质的有状态设置中被保留。为了在克服Intel SGX的体系结构限制的同时实现这些安全特性,我们设计了一个用于屏蔽执行的直接I/O库一个可信的单调计数器一个安全的LSM数据结构以及用于存储操作的相关算法。我们基于RocksDB实现了一个功能齐全的SPEICHER原型,并使用RocksDB基准测试对系统进行了评估。我们的实验评估表明,SPEICHER在提供强大的安全保证的同时实现了合理的性能开销