G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault

admin 2022年7月21日22:51:17评论61 views字数 3158阅读10分31秒阅读模式

今天给大家推荐文章是来自浙大网安软件与系统安全研究组投稿的,关于内存安全的工作RegVault: Hardware Assisted Selective Data Randomization for Operating System Kernels,目前该工作已被DAC 2022录用。 


G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault


背景介绍

内存安全仍然是目前最常见且最具威胁的安全问题之一。敏感数据,包括决定程序执行流的控制数据以及敏感的非控制数据(如struct cred)被直接存储在内存中。攻击者可以借助越界写漏洞来篡改控制数据来构造ROP/JOP攻击,或者篡改敏感的非控制数据,进行权限提升或者隐私泄露。当前几乎所有的软件和系统均将敏感数据和非敏感数据进行混杂存储,因此无法将敏感数据进行分离,施行统一保护。例如在Linux内核中,函数指针和其他数据均保存在struct cgroup_subsys中,导致整个cgroup_subsys无法被保护。


G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault


另一方面,当前系统内存保护基于分页机制(paging),保护粒度是4KB、16KB或者更大,无法实现细粒度的内存保护。而针对控制数据和非控制数据的攻击,攻击目标往往是函数指针、返回地址或者UID,GID等数据,粒度为4B或者8B。因此,当前的分页机制无法为指针、控制变量等寄存器粒度敏感数据提供细粒度的保护。被保护的数据和保护机制之间存在一道鸿沟。


G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault


为了对敏感数据进行有效保护,本文提出了RegVault,一种细粒度的selective数据随机化保护方案。因为数据混杂存储,无法物理分离,RegVault对数据进行加密,使用不同的密钥,实现逻辑分离;为了实现细粒度保护,RegVault设计了一系列的针对寄存器粒度数据的硬件加密原语,可对4B或者 8B数据进行加密保护。RegVault同时实现机密性和完整性保护,与ARMv8.3 Pointer Authentication相比,既增加了通用数据的保护范围,又增加了对数据机密性的保护。

RegVault核心思路是在敏感数据存储到内存之前对其进行加密,从内存中加载后再进行解密。但是受限于目前加解密原语的缺乏,现有工作只能使用XOR或者AES指令扩展来进行加解密。XOR密码学保护效果非常弱,在已知明文的情况下非常容易被攻击者绕过,而使用AES又会带来非常大的性能损耗。因此,RegVault选用Tweakable加密算法对寄存器粒度数据进行加密,同时使用tweak防止重放攻击。

RegVault实现了完整的保护系统,包含硬件实现,操作系统内核实现和编译器实现,同时可扩展到多种CPU硬件架构。在硬件实现方面,RegVault扩展RISC-V指令,提供了细粒度的强密码学敏感数据机密性和完整性保护的原语。在操作系统内核层面,RegVault支持对敏感数据的标注;在编译器层面,RegVault扩展编译器对敏感数据的标注进行自动识别、自动插桩保护。

作者在Xilinx VC707开发板实现了RegVault硬件原语,并保护Linux v5.8内核的6种敏感数据,系统调用性能损耗为2.5%,用户程序性能损耗接近0,证明了RegVault的实用性。


设计与实现

RegVault的整体架构如下,可以分为硬件和软件两部分:硬件方面,作者在处理器流水线中集成了一个QARMA密码引擎来提供基本的密码学操作以及完整性校验的相关单元,同时为了加速部分频繁访问的敏感数据,作者缓存了部分密文与明文的映射关系;软件方面,作者对编译器进行了扩展,可以自动对控制流数据以及用户指定的非控制流数据插桩使用扩展的密码学原语进行保护。


G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault


为了能供对机密性和完整性同时提供保护,文章的核心思路是:为待保护内容添加标记构造特殊的格式,在内存中只保存经过加密的特殊格式的敏感数据,使用时只需校验解密后的结果中特殊标记是否被损毁来完成完整性的校验。因此,作者对指令集接口进行了扩展,指令除了接受待保护的敏感数据外,还接受需要完整性保护的起始字节位,具体来说文章中提供了两类指令:cre[x]k rd, rs[e:s], rt 用于加密敏感数据,首先根据[e:s]选择的范围为选中之外的字节替换为特殊标记,然后使用rt中的调柄以及密钥k对整体进行加密;crd[x]k rd, rs, rt, [e:s] 用于解密数据,是加密操作的逆操作,但最后会对特殊标记进行校验,如果发现特殊标记发生了篡改会抛出异常状态。


G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault


并且作者使用了对易于硬件实现的QARMA算法作为密码学操作的核心算法,QARMA算法是一组轻量级的可调分组密码学算法,它可以提供比XOR更强的密码学保护,但比AES更加轻量,可以在更短的延时内就返回运算结果。并且,可调分组密码在加解密时还可以输入一个额外的可公开的调柄。在作者的设计中,使用敏感数据的地址信息作为调柄来抵御空间范围上的替换攻击。

为了减轻实现上的负担,RegVault没有选择实现原子的访存操作,为了避免可能发生的泄露,作者还设计了中断处理保护和寄存器溢出保护。

异常或者中断时,内核会将全部的寄存器内容保存到内存中,作者设计了链式中断上下文保护方案,对于每个寄存器,使用上一个寄存器的明文作为tweak进行加密,加密完全部上下文内容后,作者再对一个常数0进行加密作为该中断上下文的最终签名;使用时通过校验最终的解密结果是否为0即可判断上下文内容是否发生了篡改。


G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault


此外作者对寄存器溢出的情况也进行了保护,并根据加解密指令追踪保存着敏感数据明文的寄存器,当检测这些敏感寄存器溢出时作者会进行加密操作进行保护。另外,当发生函数调用时,作者也会检测当前寄存器中是否存在敏感寄存器,如果存在,作者也会对这些寄存器进行保护,从而避免在被调用的函数中发生泄露。


应用场景与评估

有了保护敏感信息的基本原语后,接下来就是在编译的过程中进行插桩从而施展保护了,作者的基本使用模式是当敏感数据需要要存到内存中时,作者首先对其进行随机化,当敏感数据从内存中加载回来后,在使用前先对其进行去随机化。

文章以Linux内核为目标,选取了六类不同长度的敏感数据进行了保护:对于控制流数据作者选取了返回地址、函数指针作为目标,对于非控制流数据,作者选取了内核密码学运算密钥、内对cred结构的uid/gid信息,SElinux安全控制变量以及内核页表基地址指针。

对于控制流信息,作者通过编译器的扩展可以自动追踪、识别函数指针以及返回地址信息并对其插桩进行保护;对于非控制流信息,作者按照内核中已有__randomize_layout标注提供了__rand和__rand_integrity给用户用于标记待保护敏感数据,扩展后的编译器可以自动对标记的数据进行插桩保护。

作者在Rocket-chip、LLVM 11上实现了RegVault,并且在Xilinx VC707开发板上使用Linux 5.8.18对RegVault进行了评估。


G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault


作者使用Unixbench和LMbench测试了RegVault对内核系统调用的性能影响(约2.5%),使用SPEC2017测试了RegVault在真实应用场景中的性能损耗(接近为0)。


G.O.S.S.I.P 阅读推荐 2022-07-21 RegVault


论文下载:https://wenboshen.org/papers/regvault-dac22.pdf







投稿团队介绍:

浙大网安软件与系统安全方向包含周亚金、申文博、常瑞、赵永望、吴磊等多名教授和数十名博士、硕士研究生,主要研究方向为形式化安全验证,软件供应链安全,软硬件协同保护,新型硬件安全机制等。已发表计算机安全顶会论文50余篇。多项研究成果被应用于超过亿部设备,并获得人民日报专题报道。目前招收多名推免直博、硕士研究生,欢迎大家联系报名!


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

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

发表评论

匿名网友 填写信息