前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Xen的敏感指令陷入-《Xen虚拟化技术》学习

Xen的敏感指令陷入-《Xen虚拟化技术》学习

作者头像
Linux阅码场
发布于 2019-10-08 07:46:25
发布于 2019-10-08 07:46:25
1.7K0
举报
文章被收录于专栏:LINUX阅码场LINUX阅码场

没有虚拟化基础的童鞋可先阅读Linux阅码场前几天刊发的《KVM最初的2小时——KVM从入门到放弃(修订版) 》入门。

Xen虚拟机系统所采用的半虚拟化技术通过软件方法实现了x86架构的虚拟化,解决了x86架构所固有的虚拟化缺陷,即敏感和特权指令无法被VMM所捕获的缺陷。

G.Popek和R.Goldberg在1974年发表的论文中提到,作为向上层VM提供底层硬件抽象的一层轻量级的软件,VMM必须满足以下3个条件:

1.等价性(Equivalence) :应用程序在VMM 上的虚拟机执行,应与物理硬件上的执行行为相同。

2.资源控制(Resource Control) :物理硬件由VMM全权控,VM 及VM上的应用程序不得直接访问硬件。

3.有效性(Efficiency) :在虚拟执行环境中应用程序的绝大多数指令能够在VMM不干预的情况下,直接在物理硬件上执行。

CPU的指令按照运行级别的不同,可以划分为两类:

1.特权指令 :只能在最高级别上运行,在低级别状态下执行会产生trap。例如:LIDT只能在系统模式下执行,在其他模式下都会产生trap,中止执行。

2.非特权指令 :可以在各个级别的状态下执行。

引入虚拟化后,Guest OS就不能运行在Ring 0上。因此,原本需要在最高级别下执行的指令就不能够直接执行,而是交由VMM处理执行。这部分指令称为敏感指令 。当执行这些指令时,理论上都要产生trap被VMM捕获执行。敏感指令:Guest OS中必须由VMM处理的指令,因为这些指令必须工作在0环。

敏感指令包括:

  1. 企图访问或修改虚拟机模式或机器状态的指令。
  2. 企图访问或修改敏感寄存器或存储单元,如时钟寄存器、中断寄存器等的指令。
  3. 企图访问存储保护系统或内存、地址分配系统的指令。
  4. 所有I/O指令。

根据Popek和Goldberg的理论,如果指令集支持虚拟化就必须满足所有的敏感指令都是特权指令 。这样,当Guest OS运行在非最高特权级时,执行任意特权指令都能产生trap。该条件保证了任何影响VMM或VM正确运行的指令在VM上执行时都能被VMM捕获并将控制权转移到VMM上,从而保证了虚拟机环境的等价性和资源可控制性,保证虚拟机正确运行。

但是,x86架构并不满足这个条件。由于有些敏感指令不属于特权指令,从而阻碍了指令的虚拟化。(x86不满足的原因:有些必须由VMM处理的0环指令,工作在1环也不会产生trap,即敏感指令包含非特权指令。但是敏感指令必须工作在0环,所以这些非特权指令也必须陷入。)x86结构上的这些不是特权指令的敏感指令,称为临界指令 (Critical Instructions)。这些临界指令在x86架构下有17个,主要包含敏感指令的两类:敏感寄存器指令和保护系统指令(上面的2,3类)。

敏感寄存器指令:SGDT,SIDT,SLDT ;SMSW; PUSHF,POPF;

保护系统指令:LAR,LSL,VERR,VERW;POP ;PUSH ;CALL,JMP,INT n,RET ;STR ;MOV;

1.SGDT,SIDT,SLDT

三个指令分别表示:存全局描述符表(store GDT),存中断描述符表(store IDT),存本地描述符表(store LDT)。其中,SGDT和SIDT是将寄存器的值保存到一个6字节的存储单元中,SLDT是存到一个16或32位的寄存器中或存储单元中。

使用如下:SGDT m; SIDT m;SLDT r/m16

三个指令只能被操作系统使用,但没有被设为特权指令,当处于低级别的客户操作系统执行它们时,能够直接获得寄存器的值。但是,由于在硬件平台上的寄存器都只有一个,因而位于不同虚拟机中的Guest OS所获得的值只有一个。这显然是不正确的,因此VMM会为每个虚拟机配备一套虚拟的GDTR,IDTR, LDTR,以便客户操作系统访问寄存器的操作被VMM捕获,并重新定向访问相应的虚拟寄存器。

2.SMSW

SMSW表示存机器状态字(store machine status word),即将机器状态字的值(CR0中低16位的值)保存到一个寄存器或存储单元中,设置该指令是为了向下兼容286处理器,而之后的处理器都使用MOV指令读取机器状态字的值。

使用如下: SMSW r/m16

同样,该指令没有被设定为特权指令。当Guest OS查询机器状态时,其得到的是实际物理寄存器的状态,即VMM的状态,并非是Guest OS的状态。所以也需要设置相应的虚拟寄存器CR0。

3.PUSHF,POPF

POPF(pop stack into EFLAGS register)和PUSHF(push EFLAGS register onto the stack)是一对相反的指令。PUSHF是将EFLAGS的寄存器的低16位压栈,并将栈指针减2。 POPF是从栈顶弹出一个字到EFLAGS的寄存器中,并将栈指针加2。对应的32位指令为:PUSHFD和POPFD。

4.LAR,LSL,VERR,VERW

四个指令分别表示:加载访问权限(load access rights byte),加载段界限(load segment limit),验证段可读(Verify a segment for reading)、验证段可写(verify a segment for writing)。其中,LAR指令是从指定的段描述符中加载访问权限到另一个寄存器,并设置EFLAGS寄存器中的ZF标志位;LSL指令从指定的段描述符中加载段界限到另一个寄存器中,并设置ZF标志位;VERR/VERW指令是在当前的特权级下验证指定的段是否可读/可写。若是,则设置ZF标志位。

使用如下:

LAR r16,r16/m16 LSL r16,r16/m16

VERR r/m16 VERW r/m16

需要访问段描述符,但是Guest OS不处于最高级别,访问不能正确被执行。与CPL相关。

5.POP

同样,与CPL相关。当POP到段寄存器时,需要比较CPL。由Guest OS运行在ring 3上引起。

6.PUSH

同POP类似,PUSH不能应用于CS,DS 段寄存器,也与CPL相关。

7.Call,JMP,Int n,Ret

8.STR

Store Task Register,将当前任务寄存器的段选择符存入通用寄存器或存储单元中,这个段选择符指向TSS段。

9.MOV

本文来源于:

https://blog.csdn.net/handw/article/details/5770554

(完)

"Linux阅码场"是专业的Linux及系统软件技术交流社区,Linux系统人才培养基地,企业和Linux人才的连接枢纽。

查看我们精华技术文章请移步:

Linux阅码场精华文章汇总

求职招聘请移步:

Linuxer: 连接企业和Linux人才的platform总线

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux阅码场 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
System|隔离|虚拟化
因此,我们在传统的OS的位置放置一个支持虚拟化的系统,称为VMM(VM Monitor) or Host. 每一个其上运行的虚拟机成为一个Guest。(当然也可以在传统OS和VM之间加入一层VMM,但是这样性能会比较差)
朝闻君
2021/11/22
4830
System|隔离|虚拟化
虚拟化技术概述(一)1. 虚拟化概述2. 虚拟化分类3. 虚拟化的实现
区别与直接调度片上资源/使用物理平台,使用虚拟化技术对于资源的调度会更加灵活和高效,而且可以达到硬隔离的目的;
战神伽罗
2021/01/06
16.4K0
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硬件辅助虚拟化技术
虚拟化与云计算硬核技术内幕 (5) —— 把特权关进笼子
在上期,德国哲学家马克斯韦伯指出,通过在大型分布式计算系统中,引入中间管理层Hypervisor,并将CPU的内核视为计算资源,进行资源池化,建设科层制的分布式计算,是解决海量处理器并发计算问题的唯一可行的方法。在Hypervisor之下,每台虚拟机内部也有一个中间管理层Guest OS,管理虚拟机内部的计算、存储和网络资源,调度虚拟机内的计算任务,如下图所示:
用户8289326
2022/09/08
7100
虚拟化与云计算硬核技术内幕 (5) —— 把特权关进笼子
虚拟化技术发展编年史
我已经想不起来是从什么时候开始的,突然就对计算机历史产生了浓厚的兴趣。于是我想着,要不以后所有系列文章的开篇都先和大家聊聊历史吧。其实说来挺有意思,看过去到底是为了看未来,因为历史总是惊人的相似,几乎所有的问题都能够在历史长河中寻得答案。可惜的是,但凡历史,最是难写,笔者碍于能力有限,还望大家多指点一二。
SammyLiu
2019/09/02
6.7K0
虚拟化技术发展编年史
Intel 虚拟化技术(Intel® VT):CPU 虚拟化与内存虚拟化
目前主要的 CPU 虚拟化技术是 Intel 的 VT-x/VT-i 和 AMD 的 AMD-V 这两种技术。
Flowlet
2023/08/11
4.2K0
Intel 虚拟化技术(Intel® VT):CPU 虚拟化与内存虚拟化
【重识云原生】计算第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.2K0
【重识云原生】计算第2.4节——主流虚拟化技术之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
反作弊如何检测系统仿真(3)
作为对标准定时攻击的反对,我们提供了一种更新颖的方法,该方法不依赖时间戳计数器,并且需要进行更多的欺骗工作。在这里的帖子中已经简要提到了这一点,我们决定进一步详细介绍。
franket
2021/01/05
8K0
服务器虚拟化技术演进
服务器虚拟化技术是云计算的基石,在最大化利用硬件资源的同时,又降低了使用成本,让系统具备弹性伸缩能力,促使现代系统的架构出现了革命性的变化。无论是微服务架构还是服务网格架构,都是在服务器虚拟化技术日渐成熟后才得以大规模使用。本文主要介绍 CPU 虚拟化技术的演进过程,以英特尔的 x86 平台为主,为掌握云计算相关知识打好基础。
Dickensl
2022/06/14
4.7K0
服务器虚拟化技术演进
CPU 虚拟化
前面 虚拟化技术总览 中从虚拟平台 VMM 的角度,将虚拟化分为 Hypervisor 模型和宿主模型,如果根据虚拟的对象(资源类型)来划分,虚拟化又可以分为计算虚拟化、存储虚拟化和网络虚拟化,再细一些,又有中断虚拟化,内存虚拟化,字符/块设备虚拟化,网络功能虚拟化等。 我会将此作为一个系列来写,本文先看 CPU 虚拟化。在这之前,我们先来笼统看下虚拟化的本质是什么,它到底是如何做到将 Host 的硬件资源虚拟化给 Guest 用,我这里用两个词来定义,intercept 和 virtualize,中文翻译
Linux云计算网络
2018/01/11
2.2K0
CPU  虚拟化
反虚拟机技术总结
恶意代码编写者经常使用反虚拟机技术逃避分析,这种技术可以检测自己是否运行在虚拟机中。如果恶意代码探测到自己在虚拟机中运行,它会执行与其本身行为不同的行为,其中最简单的行为是停止自身运行。
战神伽罗
2019/07/24
7120
反虚拟机技术总结
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从入门到放弃
也谈Intel的cpu虚拟化
讲到intel的cpu虚拟化,就不得不提到vt-x。vt-x是intel的CPU硬件虚拟化技术,但是在操作系统内部查看cpu的flag时,是否支持硬件虚拟化的的判断标准是是否有vmx,vmx是什么,它和虚拟化有什么关系,本文将会涉及到。
虚拟化云计算
2018/04/08
2.7K0
也谈Intel的cpu虚拟化
x86 kvm和qemu虚拟化介绍
简单说一下自己对x86平台虚拟化的理解,intel有SDM手册,代码都是公开的,难度比较大,理解起来困难,网上有大量优秀博客讲解虚拟化,引用了大量手册和代码,还是很难看懂。个人觉得理解虚拟化不能一上来就看很详细的手册和代码,虚拟化有点绕,先闭上眼睛想想大的道理,掌握了大的道理,再看手册和代码加深理解,否则很容易迷失,对虚拟化的理解只流于表面。
惠伟
2021/02/24
1.1K0
x86 kvm和qemu虚拟化介绍
详解反虚拟机技术
恶意代码编写者经常使用反虚拟机技术逃避分析,这种技术可以检测自己是否运行在虚拟机中。如果恶意代码探测到自己在虚拟机中运行,它会执行与其本身行为不同的行为,其中最简单的行为是停止自身运行。近年来,随着虚拟化技术的使用不断增加,采用反虚拟机技术的恶意代码数量逐渐下降。恶意代码编写者已经开始意识到,目标主机是虚拟机,也并不意味着它就没有攻击价值。随着虚拟化技术的不断发展和普通应用,反虚拟机技术可能变得更加少见。这里研究最常见的反虚拟机技术(包括VMware、virtualbox和virtualpc,重点是最常用的VMware),并且介绍一些如何防御它们的办法。 一、检测虚拟机痕迹 1.根据MAC地址 通常,MAC地址的前三个字节标识一个提供商。以00:05:69、00:0c:29和00:50:56开始的MAC地址与VMware相对应;以00:03:ff开始的MAC地址与virtualpc对应;以08:00:27开始的MAC地址与virtualbox对应。
战神伽罗
2019/07/24
1.4K1
详解反虚拟机技术
16位汇编第五讲各种指令详解第一讲
汇编指令详解 8080指令详解 1.8086系统下,Inter指令系统共有117条指令(看似很多,分一下类) 1.数据传送类指令(专门传送数据的) 2.算术运算类指令(加减乘除的运算的) 3.位操作类
IBinary
2018/01/05
1.2K0
16位汇编第五讲各种指令详解第一讲
保护模式究竟“保护”了什么
经过一系列的文章,我们通过汇编语言,体验了保护模式下分段、分页、特权级跳转、中断、异常等机制。 那么,事到如今,你是否已经深谙保护模式的设计之道了呢?究竟什么是保护模式,保护模式又在“保护”什么呢?他为了什么诞生,又和实模式有什么区别呢? 本文我们就来详细总结一下。
用户3147702
2022/06/27
1.2K0
保护模式究竟“保护”了什么
Virtualization-Cpu/Memory/IO虚拟化详解
一、定义 虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 二、虚拟化的类别 虚拟化的类别有很多,定义也很宽泛;无法做到全面详
小小科
2018/05/03
1.4K0
Virtualization-Cpu/Memory/IO虚拟化详解
初识虚拟化技术「建议收藏」
虚拟化技术可针对详细应用目的创建特定目的的虚拟环境,安全、效率高,快照、克隆、备份、迁移等方便。系统虚拟化是将一台物理计算机虚拟成一台或多台虚拟计算机系统,每一个都有自己的虚拟硬件,其上的操作系统任觉得自己执行在一台独立的主机上,计算机软件在一个虚拟的平台上而不是真实的硬件平台上执行。虚拟化技术能够扩大硬件的容量。简化软件的又一次配置过程。当中CPU的虚拟化能够单CPU模拟多CPU并行执行,同意一个平台同一时候执行多个操作系统,而且应用程序能够在相互独立的空间内执行而互不影响。
全栈程序员站长
2022/07/08
7580
初识虚拟化技术「建议收藏」
相关推荐
System|隔离|虚拟化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档