G.O.S.S.I.P 阅读推荐 2022-12-27 ​VDom

admin 2022年12月28日00:07:24评论140 views字数 2764阅读9分12秒阅读模式

2022年倒数第四篇论文推荐是来自浙大网安投稿的关于进程内隔离的最新研究工作VDom: Fast and Unlimited Virtual Domains on Multiple Architectures,目前该工作已被ASPLOS 2023录用。

G.O.S.S.I.P 阅读推荐 2022-12-27  ​VDom

进程内隔离为软件提供了细粒度的安全边界。然而,大型软件中的组件数量众多,且大多是互不信任的,如何为软件提供足够数量的隔离域,以达到更强的安全性呢?在VDom这篇文章中,作者提出了一种虚拟化硬件内存域原语的方案,能够满足软件对更多隔离域的需求,同时保持了底层硬件原语所提供的高效性。VDom基于内存域(Memory Domain)这一硬件原语,屏蔽了该原语提供的物理内存域的数量限制,能够为应用提供无限数量的Virtual Domains。首先,作者对隔离域的数量需求与实际可使用的隔离域数量进行了全面分析与对比。应用对隔离域的数量需求主要体现在3个方面:

  1. 应用依赖于大量的第三方库,有许多第三方库存在CVE或敏感数据,使得这些依赖组件之间是互不信任的关系;

  2. 服务器应用中往往存在大量线程,每个线程中可能存在私有的敏感数据。例如Apache httpd中每个线程中都存在SSL连接所需的密钥;

  3. 持久化内存让大量的文件可以像内存一样访问,这需要大量的隔离域以避免内存损害造成的持久化影响。


然而,目前用于进程内隔离的内存域原语(如Intel MPK、ARM Memory Domain)仅能提供16个隔离域,不足以满足上述需求。尽管目前存在虚拟化有限数量物理内存域的工作,但作者发现已有的解决方案会为应用带来很高的性能开销,丧失了内存域原语本身的高效性。其开销主要来源于两个方面:在驱逐物理域时修改页表造成大量TLB冲刷;等待空闲的物理内存域(忙等)。如何克服这两种开销,在对数量虚拟化的同时仅带来很小的性能开销,成为了虚拟化内存域数量所面临的挑战。

为此,作者在论文中提出了一种新的进程内存架构,每个进程可以拥有多个地址空间。其核心思想是,将进程中的线程划分到不同的地址空间中,每个地址空间独立维护私有的虚拟域(vdom)到物理域(pdom)的映射。VDom的整体架构如下图:

G.O.S.S.I.P 阅读推荐 2022-12-27  ​VDom

图中的进程拥有3个地址空间(AS0-AS2),其中线程1和线程2共享同一个地址空间,线程3则独占两个地址空间。图中假设底层硬件提供4个物理内存域。每个地址空间共享进程从虚拟地址到物理地址的翻译,但独立维护虚拟域到物理域的映射表,从而每个地址空间都能够额外提供物理内存域。这种设计可以提供无限数量的虚拟域,同时避免线程对空闲物理内存域的忙等。作者还提出了域虚拟化算法,该算法自动管理线程和地址空间,其具体流程如下图:

G.O.S.S.I.P 阅读推荐 2022-12-27  ​VDom

VDom会为线程创建尽可能少的地址空间以提高性能,使用线程迁移的方式维护线程和地址空间。当一个线程所在的地址空间没有空闲的物理域时,VDom提供了VDS switch和vdom eviction两种策略。VDS switch即切换地址空间。如架构图中所示,线程3拥有2个地址空间,当线程需要访问位于该线程其它地址空间的虚拟域时,通过切换页表基地址切换到该虚拟域所在的地址空间。Vdom eviction的实现与已有工作类似,即通过修改页表驱逐一个虚拟域,再映射新的虚拟域。

可能有读者会疑惑,这样切换、修改页表不是仍会带来频繁的TLB冲刷吗?针对这个问题,VDom使用了ASID特性减少相应的性能开销。VDom为每一个地址空间分配一个ASID,当一个线程独占的地址空间发生vdom eviction操作时,仅需要local TLB invalidation。在切换地址空间时也不需要高开销的TLB冲刷指令。VDom还对于2MB内存的页表操作进行了优化,节省了更新大量PTE的时间。VDom通过平衡两种策略的使用,最大程度地保持了内存域原语的高效性,为应用提供高效的虚拟化内存域。

在X86上,VDom在用户态维护相关元数据,如用于记录虚拟域权限的VDR等,以利用X86提供的快速PKRU更新指令实现虚拟域的快速切换。为了保护用户态元数据和PKRU的更新,VDom利用不可访问物理域(pdom1)来防止内存破坏和控制流劫持。VDom用户态库引入了secure call gate(如下图),以保护用户态元数据和用户态库栈上数据。Secure call gate利用pdom1保护用户态栈和用户态元数据,内核通过只读的方式向用户态映射per-core的元数据,用户态通过读取核号获得相应的地址。在更新PKRU后,VDom通过检查eax寄存器防止控制流劫持攻击。

G.O.S.S.I.P 阅读推荐 2022-12-27  ​VDom

作者在Intel和ARM架构上实现了基于Linux 5.17.0的VDom原型系统,并在真实平台上进行测试。VDom与其它Linux子系统兼容,并能够适配现有的MPK沙箱。

微观测试。作者测试了顺序访问和跨地址空间访问(每次访问都会触发地址空间的切换)两种模式下VDom的周期数,结果如下图所示。

G.O.S.S.I.P 阅读推荐 2022-12-27  ​VDom

应用测试。作者在3个应用上进行了性能评估:

  1. 保护OpenSSL中的密钥结构(如EVP_PKEY)。VDom为每个密钥结构分配一个单独的虚拟域。使用Apache httpd进行测试,在X86和ARM上分别带来小于2.18%和2.65%的性能开销。

  2. 保护MySQL的连接处理线程。VDom为每个线程的栈分配单独的虚拟域,同时还使用一个虚拟域保护in-memory data。VDom在X86和ARM上分别带来0.47%和2.59%的性能开销。

  3. 保护持久化内存对象。测试程序随机访问64个2MB的PMO(Persistent memory object),每个PMO由一个虚拟域保护。每次访问搜索PMO中某个512B字符串子串,模拟对于512B文本的查找功能。Vdom eviction策略在两个架构上分别带来16.21%和13.31%的开销,VDS switch策略仅带来7.03%和6.15%的开销。


最后总结一下,作者针对目前软件对大量隔离域的需求,实现了一个高效、可扩展的内存域虚拟化系统,能够为应用程序提供无限的隔离域,并与现有操作系统和MPK沙箱兼容。作者提出了多地址空间的进程架构,利用域虚拟化算法实现线程和地址空间的自动化管理,并针对TLB和页表操作进行了性能优化,在真实平台上实际应用的测试结果,表明了VDom的可扩展性和高效性。VDom目前已经在Intel和ARM架构上实现,未来也有望扩展到AMD和IBM Power。


论文pdf获取请邮件联系[email protected]


投稿作者:

苑子琦、洪斯谕,浙江大学网络空间安全学院21级和22级硕士生,导师是常瑞老师,研究方向是体系结构安全和操作系统安全。

原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2022-12-27 ​VDom

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月28日00:07:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2022-12-27 ​VDomhttp://cn-sec.com/archives/1483024.html

发表评论

匿名网友 填写信息