• [论文笔记] SecPod:一个基于虚拟化安全系统的框架


    论文信息

    论文:SecPod: A Framework for Virtualization-based Security Systems

    链接:https://www.usenix.org/conference/atc15/technical-session/presentation/wang-xiaoguang

    会议:usenix security 2015

    摘要

    操作系统内核对于一个计算机系统的安全是关键的。许多系统都被提出提高他的安全性。那些系统的一个基础的脆弱点就是页表,页表的数据结构控制了内存保护,它并没有从脆弱的内核中隔离出来,因此容易收到篡改。为了解决这个问题,研究人员依赖于虚拟化来实现可靠的内核内存保护。不幸的是,这样的内存保护需要监视客户页表的每次更新。这从根本上与硬件虚拟化支持的最新进展相冲突。在本文中,我们提出了一个可扩展的基于虚拟化的安全系统框架SecPod,它可以提供强隔离和与现代硬件的兼容性。SecPod有两种关键技术,页委托来审核内核对安全空间的分页操作当内核通过滥用特权指令来企图推翻SecPod时进行捕获拦截。我们已经基于KVM实现一个SecPod的原型。我们的实现表明SecPod是有效高效的。

    研究背景

    如今的内核都内置了一些防止攻击的措施,比如地址空间分布随机化和写执行抑或操作。 尽管很大程度上提高了攻击的门槛,但是这些系统都是建立在一个薄弱的基础上,即页表在内核中总是可写的。这就导致任何内核内存保护都可以通过操控页表来绕过。

    许多安全工具需要拦截和响应虚拟机中的关键事件,每个截获的事件都会导致虚拟机和虚拟机管理程序之间比较大的代价的切换。另外,嵌套分页允许客户自由的更新他们的表而不涉及虚拟机管理程序,然而来宾页表GPT更新是许多安全工具感兴趣的一个关键事件,这就迫使hypervisor运行在一个低效的影子页模式,只有这样才能捕获和验证来宾页表的更新。为了解决这个冲突,需要做到既满足虚拟化安全工具的需求,又能充分利用硬件虚拟化的支持。

    SecPod的两个关键技术是分页委托执行陷阱。它可以将一个安全工具封装在可信的执行环境中,这个环境和易受攻击的内核共存,即一个专用的地址空间和内核地址空间并行。内核将所有的分页操作委托给安全空间,这样内核就被剥夺了直接修改有效页表的特权,安全空间通过对来宾页表更新进行消毒来实施不可绕过的内存隔离。执行陷阱阻止攻击者通过滥用特权指令破坏安全空间的企图。

    问题描述

    早期x86的hypervisor使用影子分页来虚拟化来宾内存,这样使得来宾页表GPT被他的影子页表SPT所代替,也就是通过SPT将虚拟内存映射到物理内存。任何GPT的更新必须通过SPT同步才能发挥作用。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AGkffivq-1667211569913)(images/image-20221031162940091.png)]

    现在的x86有硬件虚拟化支持,嵌套分页就是对内存虚拟化的硬件支持,其中处理器使用两级页表NPT来转换来宾内存访问。guest完全控制其GPTS,而hypervisor管理NPTS,并且不知道对GPTS的更改。因此,可以通过重新映射GPTS中(受保护的)来宾虚拟内存来规避NPTS中强制的内存保护。例如,NPT中强制的数据执行预防(DEP)可以通过将客户内核代码重新映射到可写可执行物理内存来绕过。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qXtmtzLA-1667211569918)(images/image-20221031163416964.png)]

    SecPod架构下的地址转换

    将地址分为了普通空间和安全空间,内核和用户地址范围都在普通空间,而内核的特权请求必须通过entry门和exit门进出安全空间.

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0vgIeGIa-1667211569918)(images/image-20221031164131829.png)]

    除此之外,地址映射采用guest virtual address=>GPT(normal space)=>SPT(security space)=>NPT(hypervisor)=>physical address

    SecPod页委托

    对内核页表的任何更新都必须合并到SPT才能生效,因为SPT是CPU使用的唯一页表,内核可能保留自己的页表以方便实现,但它们从不加载到CPU以进行地址转换。这在技术上类似于传统虚拟化系统中的影子分页。

    安全空间通过入口门为这些操作中的每个操作公开服务。 为了委派这些操作,我们可以用对安全空间中相应服务的调用来替换内核中的每个分页操作。而这些狗子已经被设计在内核中,比如pvops接口。

    在这里利用Linux内核的PVOPS接口将分页请求转发到安全空间。 pvops接口源于Xen项目为了创建一个通用的半虚拟化内核而出现的接口,此内核可以适应不同的虚拟机管理程序以及本地的非虚拟化平台。PVOPS将关键的准虚拟化操作分成几个结构,pv_time_ops,。pv_cpu_opspv_mmu_opspv_lock_opspv_irq_ops和代替PV的操作。比如原生的x86系统使用mov to cr3加载页表,而pvops使用pv_mmu_ops->write_cr3

    SecPod地址空间布局

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w2rhDCf7-1667211569920)(images/image-20221031165956255.png)]

    上下文切换

    Secpod实现了基于页表的隔离。 要切换空间,我们需要将下一个空间的页表加载到CR3中。 安全空间只有一个页表,即Secpod页表,而普通空间有许多影子页表,每个用户进程一个。

    SecPod执行陷阱

    将虚拟化硬件配置为捕获这些指令(内核的一些特权指令,比如mov to cr3),不管它们是良性的或者无意的。我们的设计保证合法的上下文切换不会被硬件捕获。在系统管理程序截获由guest执行的敏感指令后,它将事件通知安全空间。

  • 相关阅读:
    Windows高效开发环境配置(一)
    【hbuilder】运行不了部分项目 , 打开终端 无法输入指令
    docker部署 spring-boot 项目,验证码获取报错的解决方法
    ​UWA报告使用技巧小视频,你get了么?(第六弹)
    5.zigbee的开发,串口putchar重定向(使用print),单播实验,usb抓包实验
    08_Express框架
    计算机毕业设计Java在线问诊系统的设计与实现(源码+系统+mysql数据库+Lw文档)
    DigestUtils
    【FNN回归预测】基于matlab粒子群优化前馈神经网络婚姻和离婚数据回归预测【含Matlab源码 2069期】
    ajax教程
  • 原文地址:https://blog.csdn.net/weixin_42172261/article/details/127620798