题目: Glamdring: Automatic Application Partitioning for Intel SGX
作者: Joshua Lind, Christian Priebe, Divya Muthukumaran, Dan O’Keeffe, Pierre-Louis Aublin, Florian Kelbert, Tobias Reiher, David Goltzsche, David M. Eyers, Rüdiger Kapitza, Christof Fetzer, Peter R. Pietzuch
单位: Imperial College London, TU Dresden, TU Braunschweig, University of Otago, TU Braunschweig
出版: USENIX Annual Technical Conference 2017
导读:
- 该工作借助静态分析手段,根据用户标记的隐私数据自动找出安全相关代码。 (笔者注:这本是数据流分析中常见做法,本工作将其与SGX结合,找到新的用武之地。)
解决问题:
- 之前使用CPU硬件保护数据中心隐私数据的工作的TCB都太大;
- 作者认为,之前有些工作(VC3、Moat)对enclave内的代码和外界交互做了太多限制,不通用不方便(limits the applicability of trusted execution mechanisms for arbitrary applications);
- 作者洞见(observation),人工找出的安全相关代码并不见得是最小集,旨在最小化TCB;
- 笔者认为,根据Intel给出的SDK和工具链,需要人工标注可信和不可信接口,对现有大型程序的移植是个难题。本工作的创新和贡献点很棒。
方案:
见原文图2。
- 用户标注好自己要保护的数据,Glamdring自动将程序分成可信/不可信两组:
- 根据数据流分析找出相关函数;
- 使用逆向切片(backward slicing)保证数据完整性;
- 基于 LLVM/Clang,Glamdring将找到的安全相关函数放入enclave中,自动生成entry/exit点,添加内存检查代码和运行时检查(不变式),用加密保证安全,该步会增加TCB。
注:静态分析得出程序依赖图,人工标注类似污点分析。
威胁模型:
- 和之前针对不可信云的工作假设一致。
设计: 见原文图1。
- 第一类是在Enclave内的全系统级别:Haven、SCONE以及Graphene,包含了安全无关代码,TCB太大;另外,SGX自身的限制无法克服,SCONE容器无法支持fork系统调用。
- 第二类是预定义好交互接口的,TCB很小,如VC3。但使用场景有限,不及第一类通用。
- 第三类是想针对不同应用或使用场景进行合理划分,同时省去人工编写EDL(Intel工具链提供的针对安全接口声明的DSL)的成本。
攻击场景:
这里主要考虑静态工具作用:
- 接口攻击:函数不变式等;
- Enclave调用重排攻击:数据流与控制流依赖关系;
- Iago攻击:返回值不变式;
- 重放攻击:加密与版本校验(freshness);
- Enclave代码漏洞:静态检查与预防。
实验:
- Memcached
- LibreSSL
- Digital Bitbox bitcoin wallet
- TCB增加:22%–40%
- 开销引入: 0.3×–0.8×
体会:
- 强烈推荐给PL组精读。思路和行文非常值得借鉴。文中给出不少代码片段,很有启发作用。