源:https://www.cs.umd.edu/class/spring2019/cmsc414/slides/program-analysis.pdf
本周大家都关注到,上海划江而治,成立了浦东封锁区,这样做到底意义何在?其实程序分析课程中经常会提到的soundness和completeness概念(上图)可以很好地在这里回答这个问题:如果你追求极致的soundness,那么只需要假定一切都不安全,然后采取相关措施即可。可这样做会带来什么后果呢?显然,我们很少在系统安全领域见到有人这么激进,那么让我们去今年的EuroSys会议上看看系统安全研究人员怎么开展相关设计。
我们介绍的这篇论文来自比利时天主教鲁汶大学,作者在这里讨论的是基于PKU的沙盒隔离如何做到更实际更安全。PKU,也就是Memory Protection Keys for Userspace,在现实中最为人熟悉的就是Intel MPK技术。这项内存细粒度保护(通常可以针对单个页面)技术,在硬件支持的加速下,可以保证隔离对正常代码执行和内存访问的影响最小化,因而受到了很多沙盒方案的青睐。然而,PKU作为一项部署于userspace的防护措施,并不保证控制流安全,攻击者可以利用漏洞进行代码劫持,执行权限切换指令来获取相关内存页面的访问和执行权限,绕过隔离。
你可能会说,设计一个隔离方案很简单啊,我们把trusted code和untrusted code(下图)分为浦东和浦西,完全隔绝,不就完事了吗。可是计算机程序这么简单的对象中尚且存在复杂的关联,不论是可信代码生成的数据需要为不可信代码服务,还是不可信代码的运行结果会为可信代码的执行提供上下文,这些情况都注定一个粗暴的隔离方案并不work,真正的研究人员需要考虑非常多的场景,并且往往需要权衡利弊,一定程度上牺牲绝对的安全,保证代码的正确性。
在过去几年中,研究人员已经在MPK的基础上设计了很多相关的隔离沙盒,最有名的当属ERIM
和Hodor
(论文分别发表在2019年的USENIX Security和USENIX ATC会议上)两个方案。当然,在2020年就有研究人员在当年的USENIX Security上发表论文指出已有方案的缺陷,而本文作者进一步分析了ERIM
和Hodor
的缺陷,提出了两种新的针对性攻击,同时在本文中提出了名为Cerberus
的PKU沙盒,实现了更为安全且实际的隔离(对Cerberus
这个名字陌生吗?你听说过Kerberos吧,这两个单词都是希腊神话里面冥王Hades那只长了三个脑袋的地狱看门犬的名字)。
简单地说,ERIM
和Hodor
两个沙盒隔离方案的防护措施一方面包括对代码中可能被利用的PKU权限切换指令进行了重写,加入相关防护,另一方面动态监控可能被利用的PKU权限切换指令(例如Hodor
会利用CPU的硬件断点来监控相关指令是否被执行)。然而现实系统中存在非常多的可绕过攻击界面。在本文中,作者指出了两种新的安全威胁,第一种是利用mremap
system call将权限指令的代码进行重定位,使其逃离监控范围,第二种是利用硬件断点寄存器在不同线程的上下文不一致的情况,通过两个攻击线程配合来完成攻击。
Cerberus
沙盒在前人工作的基础上改进了代码静态重写(消除特权指令gadget),并增强了动态监控(虽然感觉还是有点ad hoc)
实测环节,Cerberus
的性能在实际中开销很小
防护能力方面,Cerberus
作为新一代产品,能防御的攻击也最多
好了,今天的论文推荐就介绍到这里,本周我们还会继续在封锁区为大家介绍另一篇关于PKU和隔离机制相关的EuroSys论文,敬请期待!
代码:
https://github.com/ku-leuven-msec/The-Cerberus-Project
论文PDF:
https://people.cs.kuleuven.be/~stijn.volckaert/papers/2022_EuroSys_Cerberus.pdf