Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >System|隔离|Enclave&TEE&Attack

System|隔离|Enclave&TEE&Attack

作者头像
朝闻君
发布于 2021-11-22 03:43:33
发布于 2021-11-22 03:43:33
47200
代码可运行
举报
运行总次数:0
代码可运行

ref: CSE,IPADS,SE,SJTU

尽管虚拟化技术确保了VM之间的相互隔离,然而VMM的重要性变得更高了。如果能够破解VMM,那么通过VM就能影响到VMM上运行的所有VM。而随着虚拟化技术的发展,VMM的代码量大小越来越大,其中的bug也越来越多。(用VMM代替hypervisor,因为字数少)

然而,VMM的bug是不可避免的,我们无法防止VMM被破解,只能想办法减少VMM被破解后的代价。最重要的部分就是内存隔离。

Xen Bugs

Software - 嵌套虚拟化

方法1:降低VMM优先级(从而无法随意访问VM的内存)

VMM不再运行在root mode中,而是和VM的kernel一样,运行在non-root mode的ring 0

root mode下运行cloudvisor,充当一个中间人,VM对VMM的访问都通过虚拟机接口,由cloudvisor转交给VMM。

cloudvisor对于页标记所有权,如果VMM想要访问VM的页,那么就会被拒绝。因为cloudvisor本身的代码量相对很少,bug也会更少,更容易验证。

方法2:拆分VMM(从而每个VMM slice只能访问自己的内存)

VMM拆分成多个slice(代码相同,不同实例),无法拆分的则作为shared service。

无需将VMM放进non-root mode,而只是先在root mode下运行security monitor。为了防止VM能破解VMM来攻击其他的VM,我们只需要把VMM slice之间隔离即可。每个slice除了一开始可见的页表之外

  • 禁止修改CR3(source code)
  • 禁止修改页表(readonly)

Hardware - Enclave & TEE

TEE是相对于REE而言的,其中运行独立的操作系统,独立的加密机制,独立的硬件,以确保绝对的安全性。当然后文依然有很多TEE的漏洞

Counter-mode encryption

保护内存的最好办法就是加密,这里每个内存块都有独一无二的Pad(最后和数据做异或),通过seed和秘钥共同生成。在我们的内存中存储的是密文,每次读写都需要通过pad进行解密或者加密

AISE [Rogers, Micro'07]

seed如果使用地址,会有很多缺陷,

如果是物理地址,一旦发生页表的交换,就会导致seed改变

如果是虚拟地址,在pad重用方面也会有很大问题(比如多程序访问同一块)

而使用计数器,则只需要增加一块存储区域。

每个chunk的种子通过counter+逻辑页表ID+chunk的PPO+chunk ID组成,因此和地址是独立的。(因为Page Offset是不参与页表映射的)

加密

Merkle-tree based integrity check

每一个block的MAC包含counter、address等信息,通过对MAC分层计算hash,最终得到1个值,一旦内存被恶意篡改了,显然上层的hash值就错误了。

Enclave

Enclave的作用就是,提供一个严格的加密内存,这个内存只有持有秘钥的应用能访问,里面存放代码或者数据,而OS/VMM即使拥有更高的权限,依然被阻挡在外。其唯一的操作便是内存的读写。最新的Enclave都有着各种分区隔离机制,有的是用chunk实现,还有的使用Page Table实现,这里略。

Attack Example

TEE并非万能

Boomerang

TEE比REE更高优先级,一旦在TEE中执行某些程序(例如把当前时间写到指定地址),那么地址是不会被检查的,

[NDSS'17] BOOMERANG: Exploiting the Semantic Gap in Trusted Execution Environments

Rowhammer

DRAM在频繁访问的情况下,周边的bit可能会发生丢失(因为DRAM是用电刷新的)。那么问题在于,如何既频繁访问,又不会命中缓存。下面的代码就是一段rowhammer的攻击

由于dram本身不存在良好的纠错机制,会造成极大的破坏。

Meltdown

这个问题出在CPU的乱序执行上,因为权限控制可能阻挡了僭越指令的执行,但是在CPU的流水线时期,产生的内存访问的影响却不会消失。即使指令回滚,黑客仍然有办法通过cache的hit/miss来判断。例如下面的代码,通过buf数组中到底谁被hit,就能判断出key的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Load key, %rax
Load buf[%rax], %rbx

因此隔离kernel和user很重要。目前已经存在的方式是为kernel态和user态提供不同的页表,从源头上杜绝访问,而不是单纯的权限控制,进程切换时增加额外的开销。

Side channel

尽管数据本身是加密的,问题在于数据访问的模式是无法掩盖的。如果我们知道一个图像的处理算法,通过算法本身的内存访问(如page fault)就能近似反推出算法的输入。这类攻击目前基本没有抵御手段。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
System|隔离|虚拟化
因此,我们在传统的OS的位置放置一个支持虚拟化的系统,称为VMM(VM Monitor) or Host. 每一个其上运行的虚拟机成为一个Guest。(当然也可以在传统OS和VM之间加入一层VMM,但是这样性能会比较差)
朝闻君
2021/11/22
4830
System|隔离|虚拟化
Linux对机密计算的支持
Author: Wenhui Zhang, Yibo Zhou, Yuan Zhu, Guixiong Wei, Zhe Li, Chenyu Jiang, Sam Han,Yizheng Jiao, Hou Yu, Zefan Li, Wei Xu,
Linux阅码场
2023/08/21
1.3K1
Linux对机密计算的支持
Intel 虚拟化技术(Intel® VT):CPU 虚拟化与内存虚拟化
目前主要的 CPU 虚拟化技术是 Intel 的 VT-x/VT-i 和 AMD 的 AMD-V 这两种技术。
Flowlet
2023/08/11
4.2K0
Intel 虚拟化技术(Intel® VT):CPU 虚拟化与内存虚拟化
虚拟化技术发展编年史
我已经想不起来是从什么时候开始的,突然就对计算机历史产生了浓厚的兴趣。于是我想着,要不以后所有系列文章的开篇都先和大家聊聊历史吧。其实说来挺有意思,看过去到底是为了看未来,因为历史总是惊人的相似,几乎所有的问题都能够在历史长河中寻得答案。可惜的是,但凡历史,最是难写,笔者碍于能力有限,还望大家多指点一二。
SammyLiu
2019/09/02
6.7K0
虚拟化技术发展编年史
KVM最初的2小时——KVM从入门到放弃
那些不能铭记过去的人注定要重蹈覆辙。你还记得当年用Windows隐藏文件夹藏片吗? 作为一个屌丝,虚拟化技术确实意义非常重大。这个最显著的作用显然就是藏片,作为一个程序员,如果还用Windows文件隐藏功能来藏片,这实在是污辱自己和女朋友的智商,让广大码农抬不起头来做人。最早可以帮你实质藏片的手段来自VMware。 VMware这个名字就是一种牛逼,VM就是virtual machine,ware是取自Software中的ware,1999年VMware发布了它的第一款产品VMware Workstation,在那个赛扬333和白衣飘飘的时代。
Linux阅码场
2019/09/30
1.3K0
KVM最初的2小时——KVM从入门到放弃
KVM之CPU虚拟化
虚拟化技术是指在x86的系统中,一个或以上的客操作系统(Guest Operating System,简称:Guest OS)在一个主操作系统(Host Operating System,简称:Host OS)下运行的一种技术。这种技术只要求对客操作系统有很少的修改或甚至根本没有修改。x86处理器架构起先并不满足波佩克与戈德堡虚拟化需求(Popek and Goldberg virtualization requirements),这使得在x86处理器下对普通虚拟机的操作变得十分复杂。在2005年与2006年,英特尔与AMD分别在它们的x86架构上解决了这个问题以及其他的虚拟化困难。
惨绿少年
2018/12/28
3.1K0
【重识云原生】计算第2.4节——主流虚拟化技术之KVM
KVM:Kernel-based Virtual Machine,是基于Linux内核的开源虚拟化解决方案,从2.6.20版本开始被合入kernel主分支维护。最初只支持X86平台的上支持VMX或者SVM的CPU,不久后被确认为标准Linux内核的虚拟化方案并逐步支持S390、IA64和PowerPC等体系架构;KVM本身只提供部分的虚拟化功能(虚拟CPU和内存),而由经过特殊改造后的Qemu(Qemu-kvm)来帮助下提供完整的平台虚拟化功能。
江中散人_Jun
2022/04/08
3.1K0
【重识云原生】计算第2.4节——主流虚拟化技术之KVM
【重识云原生】第二章第一节——计算虚拟化技术总述
楔子:计算虚拟化技术算是云计算技术的擎天之柱,其前两代技术的演进一直引领着云计算的发展,即便到了云原生时代,其作用依然举足轻重。
江中散人_Jun
2022/03/13
1.8K0
【重识云原生】第二章第一节——计算虚拟化技术总述
内核级虚拟化技术
这篇可能讲的有一点点的无聊,因为基本上是概念性的东西,我也是理解了很久才慢慢的搞懂的。 一、虚拟化与虚拟化技术   1.1、虚拟化的定义   虚拟化主要指的是特殊的技术,通过隐藏特定计算平台的实际物理
用户1195962
2018/01/18
2.1K0
内核级虚拟化技术
容器技术创新漫谈
Kubernetes在2017年赢得了容器编排之战,使得基于容器+Kubernetes来构建PaaS平台成为了云计算的主流方式。在人们把关注的目光都聚焦在Kubernetes上时,容器技术领域在2018年也发生了很多创新,包括amazon最近开源的轻量级虚拟机管理器 Firecracker,Google在今年5月份开源的基于用户态操作系统内核的 gVisor 容器,还有更早开源的虚拟化容器项目 KataContainers,可谓百花齐放。一般的开发者可能认为容器就等于Docker,没想到容器领域还在发生着这么多创新。我在了解这些项目时,发现如果没有一些背景知识,很难get到它们的创新点。我试着通过这篇文章进行一次背景知识的梳理。让我们先从最基本的问题开始:操作系统是怎么工作的?
mazhen
2023/11/24
4160
容器技术创新漫谈
内存虚拟化
虚拟内存 我们知道,早期的计算机内存,只有物理内存,而且空间是极其有限的,每个应用或进程在使用内存时都得小心翼翼,不能覆盖别的进程的内存区。 为了避免这些问题,就提出了虚拟内存的概念,其抽象了物理内存,相当于对物理内存进行了虚拟化,保证每个进程都被赋予一块连续的,超大的(根据系统结构来定,32 位系统寻址空间为 2^32,64 位系统为 2^64)虚拟内存空间,进程可以毫无顾忌地使用内存,不用担心申请内存会和别的进程冲突,因为底层有机制帮忙处理这种冲突,能够将虚拟地址根据一个页表映射成相应的物理地址。 这种
Linux云计算网络
2018/01/11
1.8K0
内存虚拟化
也谈Intel的cpu虚拟化
讲到intel的cpu虚拟化,就不得不提到vt-x。vt-x是intel的CPU硬件虚拟化技术,但是在操作系统内部查看cpu的flag时,是否支持硬件虚拟化的的判断标准是是否有vmx,vmx是什么,它和虚拟化有什么关系,本文将会涉及到。
虚拟化云计算
2018/04/08
2.7K0
也谈Intel的cpu虚拟化
KubeTEE = Kubernetes + TEE
云原生的概念这两年逐渐深入人心,越来越多的应用从设计之初就是面向云环境的。但是,据统计,仍然有很大一部分应用由于各种原因没有上云,尤其是那些较为重要、敏感的应用。我们认为,用户不上云的一个重要原因是对云平台的信任不足,不确定自己的重要应用跑在云上是否有安全保证。为了解决这个问题,我们提出来可信原生的概念,让基础设施更加可信。
CNCF
2021/01/12
1.7K0
KubeTEE = Kubernetes + TEE
CPU硬件辅助虚拟化技术
目前主要有Intel的VT-x和AMD的AMD-V这两种技术。其核心思想都是通过引入新的指令和运行模式,使VMM(Virtual-machine monitor)和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。通常情况下,Guest OS的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。 1、Intel VT-x技术
孙杰
2019/10/29
3.7K0
CPU硬件辅助虚拟化技术
IC芯片 trustzone学习
ARM TrustZone® 技术是一种系统级的安全方法,专为高性能计算平台上的各种应用而设计,包括安全支付、数字版权管理(DRM)、企业服务和基于Web的服务。该技术与Cortex™-A处理器紧密集成,并通过AMBA® AXI总线和特定的TrustZone系统IP块在系统中进行扩展。
天天Lotay
2023/10/15
6730
IC芯片 trustzone学习
虚拟化技术概述(一)1. 虚拟化概述2. 虚拟化分类3. 虚拟化的实现
区别与直接调度片上资源/使用物理平台,使用虚拟化技术对于资源的调度会更加灵活和高效,而且可以达到硬隔离的目的;
战神伽罗
2021/01/06
16.4K0
[Virtualization] Peach VM - 基于Intel VMX的简易虚拟机实例分析
前言 基本概念 架构 工作关系 MSR Register VMXON Region VMCS Region 技术 Intel EPT 影子页表 EPT Intel VMX 指令集 测试环境 宿主机 虚拟机 代码分析 目录 用户态部分 内核模块 一些数据结构 模块初始化 ioctl - PROBE ioctl - PEACH_RUN init_ept handle_vmexit 总结 ---- 前言 之前在看VMX相关的东西的时候基本都是从比较抽象的文档入手,对于概念的理解还是比较模糊的。而且像kvm这种项目
赤道企鹅
2022/08/01
2.4K0
[Virtualization] Peach VM - 基于Intel VMX的简易虚拟机实例分析
机密Kubernetes:使用机密虚拟机和隔离环境来提升您的集群安全性
作者:Fabian Kammel (Edgeless Systems), Mikko Ylinen (Intel), Tobin Feldman-Fitzthum (IBM)
灵雀云
2023/08/09
8230
机密Kubernetes:使用机密虚拟机和隔离环境来提升您的集群安全性
隐私计算之TEE的双操作系统支撑
在关于隐私计算的系列文字中,《从隐私到隐私计算》一文提到了实现隐私计算的三种主要技术路径,包括:多方安全加密、联邦学习和可信执行环境。其中,在《隐私计算中可信执行环境的一知半解》中,可信执行环境(TEE)也有两种主流的实现方式,即物理隔离TrustZone 和虚拟化隔离。
半吊子全栈工匠
2023/09/02
8970
隐私计算之TEE的双操作系统支撑
TEE相关专利信息 (中篇,涵盖TEE各个方面)
[061] [发明公布] 双执行环境之间双向访问应用的方法 申请公布号:CN105592019A 申请公布日:2016.05.18 申请号:2014106135483 申请日:2014.11.05 申请人:中国银联股份有限公司 发明人:鲁志军; 地址:200135上海市浦东新区含笑路36号银联大厦 分类号:H04L29/06(2006.01)I; H04L29/08(2006.01) 摘要: 本发明涉及一种双执行环境之间双向访问应用的方法,包括:第一客户应用通过第一通信
安智客
2018/02/24
1.8K0
TEE相关专利信息 (中篇,涵盖TEE各个方面)
相关推荐
System|隔离|虚拟化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验