题目: Hardware is the new software
作者: Andrew Baumann
单位: Microsoft Research
出版: HotOS 2017
综述
Intel的x86 ISA近年来增长速度飞快。
过去都是针对性能提升的,如针对数据处理的向量扩展、虚拟化支持等,最近都是针对安全考量的。
最早的x86指令共96条,包括分页/分段、16位模式、多任务支持、异常支持、协处理器和调试特性。后来有了浮点支持、向量、加密加速器、64位模式以及硬件虚拟化扩展。
插曲:TSX用于保证内存操作的事务性。第一代被证实存在bug,patch使用microcode将其关闭。
SGX:
实实在在的复杂度提升(substantial complexity),一二代共26条指令,200页说明。
雄心:尽量不修改OS(如保留页表)情况下,保护应用程序不受特权软件的攻击,同时不用软件保障。MMU的TLB保证EPC的映射合法性。EPC页的metadata作为反向页表也保留在EPC中,称之为EPC Map (EPCM)。
注1:EADD除了将现有的free EPC页给应用外,还在EPCM添加了映射。如果可以修改EPCM的映射思路,提供更灵活的管理机制,是工作的一个方向。答案:不行,只能由硬件控制。SGX的初衷就是要尽量使用纯硬件方式实现,避免对软件的依赖。2代虽然提供了动态内存支持,允许实现动态加载,但仍旧不支持moving pages or sharing mappings。
注2:动态加载技术本该是OS来完成的。由于SGX旨在移除软件TCB,因此使用硬件来实现,但牺牲了灵活度。复杂度的增加:原本TLB的一致性依靠OS来完成,OS可以借助锁结构或核间中断;但现在ISA并不能等待锁,也不能通知对应核。目前SGX是借助AES异步退出来实现,实时性不好,内存回收能力弱。
CET:Control-flow Enforcement Technology
ROP攻击可以破坏CFI,Intel的CET包含两个机制:a shadow stack, and indirect branch tracking。
- 影子栈:函数调用时返回地址保留两份。影子那份用户态不可访问(对页表属性里进行标记),在返回时比较二者差别,不同则发生ROP攻击。Intel是借助修改CALL和RET指令的语义实现的。优点:高效、兼容与安全。
- 间接跳转跟踪:编译器(-mcet)对间接JMP后追加NOP,OS对其进行验证,限制可用的gadget。
新闻:http://mudongliang.github.io/2016/08/04/intel-release-new-technology-specifications-to-protect-against-rop-attacks-zh.html
影响:
- 可持续性:中游开发工具(编译器、调试器、剖析器、虚拟器、动态翻译器等)需要完善特性支持;
- 时间周期:以SGX为例,2代发布周期未可知,服务器端的CPU还未出现;
- 硬件依然成为新的软件:SGX不是用晶体管实现的,其加密逻辑和映射保护(地址翻译)都是借助Microcode实现的,因此出现错误也容易patch;
- 安全性:Microcode本质上也是“软件”,英特尔在发布前会进行大量测试,其可靠性比软件要强。针对SGX,英特尔已用SMT对其进行形式化验证。
总结:
- 软硬件间的界限正在模糊。