题目: Isolating Operating System Components with Intel SGX
作者: Lars Richter, Johannes Götzfried, Tilo Müller
单位: Department of Computer Science, FAU Erlangen-Nuremberg
出版: SysTEX ‘16
解决的问题:
- 硬件辅助技术不仅可以保护用户态程序,还可用于保护内核模块。
- 该工作用SGX实现内核模块的隔离。
假设:
- 传统方案假定攻击来自外部,如借助网络或设备驱动;同时假定操作系统是可信的。
- 而本工作的TCB只有支持SGX的CPU。SGX的保护对象(称为enclave)并不保证数据的输入和输出不会被恶意系统篡改,即对外可用性无法保证。
挑战:
- Intel SGX 目前只能保护应用,不针对内核。
相关工作:
1) 常用的进程隔离技术是由MMU/MPU和特权ring等硬件来支持的。 2) TPM技术是专用芯片,不仅要相信CPU,还要有总线、TPM芯片等,TCB更大。该技术通常在启动时用于验证TCB的完整性。 3) TXT可信执行技术允许软件在运行时挂起操作系统和其他进程,但在系统性能和中断响应实时性上大打折扣。
设计细节:
- SGX有针对Linux内核的SDK,在内核态创建enclave,在用户态进出enclave。
- 由于将部分内核功能挪到了用户态实现,访问关键资源依旧要借助内核才能实现(更多指令特权),使用了netlink实现可靠双向管道。
- 在磁盘加密功能上实现了此原型,由于salt与设备相关,所以哪怕流量被监控,也无法解密。文章提到,在几乎所有全盘加密方案中,密码和密钥都是存在于主存中,而该方案转移到了更加安全的enclave中。
- 避免物理攻击:TRESOR和ARMORED使用x86架构的调试寄存器存储密钥和加解密算法的所有中间状态值,避免恶意代码通过访存窃取。该做法对于冷启动攻击是有效的(不在内存中),但对于DMA攻击无效,攻击人员依旧可以借助火线或USB转接线拿到寄存器的值。而本文的方法杜绝二者攻击,因为任何外围总线都无法访问enclave保护的内存区域。
贡献点:
- 第一个借助SGX硬件辅助技术,实现内核功能隔离的工作。旨在保护当内核某个模块崩溃后,内核仍能维持基本工作。 1) 用硬件辅助手段,实现类似微内核的组件隔离; 2) 解决了SGX无法在内核态使用的问题,将部分内核功能移到用户态,整体更倾向于微内核架构; 3) 实现磁盘加密的POC,验证其受保护模块的完整性和保密性不会被软件攻破; 4) 增强加密能力:相比于传统方式,加密措施不仅有密钥保障,还有硬件支持; 5) 进行了实验,对正确性、安全性和性能开销上都做了评估和讨论。性能有待提高,开销增加了2个量级。
我们可以学习如何书写自己的贡献点,从问题解决、方案设计和工程实现与性能测试等,突出的话均可列为贡献点。
评估:
- 性能:由于需要在内核和用户态来回传递数据(借助netlink),同时进出enclave会发生上下文切换,因此开销还是很大的。本文图看不是很懂,到底有多大延迟。或者作者可以使用别的内核模块来做保护,用计算密集型代替数据密集型计算模式。
- 正确性和安全性:作者进行了理论论述,强调了和同类工作相比的优越点,并给出了更多的安全建议。
未来工作:
- 主要集中在如何提高通信的效率上。加密的安全性由硬件来保证,引入的类微内核处理导致通信的开销增加,因此选择合适的通信渠道成为该工作的未来关注点。
个人评价:
- 本文短小精悍,叙述思路清晰明了,结构完整,属短篇上作。
- 源代码链接:https://github.com/ayeks/TresorSGX。