CTF-虚拟机——【前置知识二】

文章目录

  • CPU虚拟化
  • 特权级压缩
  • 权限
  • 系统虚拟化
  • 解决方法
    • 模拟&解释执行(VMware)
    • 扫描&修补
    • 二进制翻译(Binary Translation)
    • 二进制代码翻译技术与扫描修补技术区别
    • 硬件辅助虚拟化技术(VT)
      • VMX操作模式(Virtual Machine eXtensions)
      • **模式切换行为的定义**
      • 分级保护
      • VMCS(Virtual-Machine Control Structure)
      • MSR
      • VMX操作模式整体流程
  • KVM&QEMU-KVM (Kernel-based Virtual Machine )

CPU虚拟化

CPU 是计算机中最核心的组件,直接控制着整个系统的运行,同时内存访问(内存虚拟化)与 I/O 操作(I/O 虚拟化)也都直接依赖于 CPU,因此 CPU 虚拟化是系统虚拟化技术中的核心

特权级压缩

VMM为最高权级,Guest VM在低权级,当Guest VM执行非敏感指令时是直接在硬件上执行的,当执行敏感指令时,会陷入最高权级的VMM,然后又VMM执行敏感指令的行为

权限

内核在ring 0,用户进程在ring3
在这里插入图片描述

系统虚拟化

在系统虚拟化的「Trap & Emulate」架构中,Gust OS全部运行在ring3。当VM涉及到特权指令时,VM触发General Protection 异常,然后VMM介入处理。
但并不是所有敏感指令都是特权指令,所以部分敏感指令虽然不是特权指令,而这些指令不会触发General Protection 异常从而让VMM介入,此时就比较危险了。

解决方法

模拟&解释执行(VMware)

模拟本质:实现被模拟对象相同行为但在不同平台的效果
模拟技术:模拟器不断从内存中读取指令,并模拟处每条指令的效果,然后再决定是否改变状态 (即解释执行)

QEMU(Quick Emulator )模拟器:完整模拟了一套包括各种硬件在内的计算机系统

模拟技术缺点:性能极差,每条指令都要模拟,模拟步骤繁琐

扫描&修补

虚拟机和物理机指令系统基本相同,没有必要纯模拟。
只是对于特权和敏感指令,通过某种方式转换到VMM
扫描&修补:让所有敏感指令替换为跳转指令等能陷入VMM的命令
基本流程:

  1. VMM在VM执行每段代码之前对其扫描,解析每条指令,查找敏感指令和特权指令
  2. VMM动态生成对应指令的补丁代码,将敏感指令和特权指令替换为外跳转以进入VMM,VMM执行补丁代码
  3. VMM执行补丁代码后,再跳转回VM继续执行下一条代码

二进制翻译(Binary Translation)

类似扫描&修补技术,二进制翻译技术同样会动态地修改代码,不过不同的时BT技术以基本块(只有一个入口和一个出口的代码块)作为翻译的单位

  1. 模拟器此时会对二进制代码翻译输出为不包含特权指令和敏感指令的指令集所构成的代码,该代码可以在VM下安全运行
  2. 模拟器动态地为当前基本块开辟一块空间,称为翻译缓存(translation cache),该空间存放着翻译后的代码,每一块翻译缓存与原代码存在某种映射关系

翻译方法

  1. 简单翻译:用其他代码实现等效的功能。但指令数量会增加(少数)
  2. 等值翻译:原代码和翻译后的代码一样。(大多数)

二进制代码翻译技术与扫描修补技术区别

二进制代码翻译技术:对所有代码翻译

硬件辅助虚拟化技术(VT)

这个是Intel为虚拟化提供的一个硬件支持,其中复制CPU虚拟化的叫做VT-x技术。

VMX操作模式(Virtual Machine eXtensions)

  • VMX Root Operation:VMM的工作模式,能访问
    所有资源,并调度VM
  • VMX Non-Root Operation:VM的工作模式,在这个模式下仅能访问非敏感资源,对于敏感资源访问会使得CPU退出Non-Root模式并进入VMX Root Operation模式中,在该模式下处理完后再重新进入VMX Non-Root Operation模式

模式切换行为的定义

  • VM-Entry:VMM保存自身状态的信息,切换到VMX Non-Root Operation模式,加载VM的状态信息,恢复VM执行流
  • VM-Exit:VM运行停止并保存自身状态的信息,切换到VMX Root Operation模式,加载VMM状态信息,执行相应的处理函数

分级保护

VMX Root Operation和VMX Non-Root Operation都有各自的分级保护, Host OS 与 Guest OS可以在自己对应的模式下直接在硬件上运行,仅仅当Guest OS涉及到敏感资源的访问及HOST OS对VM调度时会切换。
在这里插入图片描述

VMCS(Virtual-Machine Control Structure)

VMCS是保存虚拟机的虚拟CPU的相关状态的一块内存,每个virtual CPU都有一个VMCS,同一时刻物理CPU只能和一个VMCS绑定,即一个物理CPU对应一个虚拟CPU,但不同时刻可以将VMCS绑定到不同物理CPU上,即一个虚拟CPU可以选择对应的物理CPU,称为VMCS的迁移

VMCS与物理CPU的绑定与解绑
在这里插入图片描述

VT-x中将VMCS结构体定义为一个最大不超过的4KB的内存块,且与4KB对齐(即对应十六进制地址的低三位为0)

struct VMCS {
    /* 版本号,4字节 */
    uint32_t vmcs_revision_identifier:31, shadow_vmcs_indicator:1;

    /* 中止标识,4字节
     * 当 VM-Exit 失败时便会产生 VMX 中止,并在此处存放原因
     */
    uint32_t    vmx_abort_indicator;

    /* 数据域 */
    struct VMCSData vmcs_data;
};

数据域 struct VMCSData vmcs_data 存放着VMCS的主要信息,可分为以下几个部分

数据域的内容分布图

  • Guest-state area:保存着VM模式寄存器状态,在VM-Entry时加载,在VM-Exit时保存
  • Host-state area:保存着VMM模式寄存器状态,在VM-Exit时加载,在VM-Entry时保存
  • VM-execution control fileds:控制VM模式下的处理器行为
  • VM-entry control fileds:控制VM-Entry过程的某些行为
  • VM-exit contro fileds:控制VM-Exit过程中的某些行为
  • VM-exit information field:保存VM-Exit的基本原因及其他详细信息,在一些处理器该域为只读域

读写VMCS
在这里插入图片描述

这里的索引不是偏移值,而是Intel为数据域中每一个字段都定义了一个独特的索引值。

MSR

Model Specific Register,简称 MSR,是 x86 下的一组寄存器,里面有的寄存器用来控制 CPU 运行、有的记录功能开关、有的负责调试、有的监测 CPU 性能等等,但总体分为两类。如图
在这里插入图片描述

VMX操作模式整体流程

VMX模式默认时关闭的,只有当VMM需要使用硬件辅助虚拟化功能的时候才会打开,打开后才会有VM-root-operation和VM-no-root-operation这两种模式。

VMXON:开启VMX操作模式
VMXOFF:关闭VMX操作模式

resume和launch
在这里插入图片描述

在这里插入图片描述

KVM&QEMU-KVM (Kernel-based Virtual Machine )

本质相当于QEMU是主机,VMM在内核中
KVM负责CPU和内存的虚拟化,QEMU则负责模拟IO设备等硬件
在 linux 中可以使用 ioctl() 函数实现用户程序与内核模块通信

  • QEMU通过ioctl系统调用发送某种请求使得进入内核态并将控制权给KVM然后运行VM
  • 运行虚拟机代码时产生VM-Exit,随后KVM接管处理判断原因,处理完后决定是继续运行还是交由QEMU处理
  • 如果需要IO操作,则需要退出KVM,由QEMU处理
    QEMU-KVM详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/160235.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在线 sha1 加密

ttmd5 http://www.ttmd5.com/hash.php?type5 qqxiuzi https://www.qqxiuzi.cn/bianma/sha-1.htm jb51 http://tools.jb51.net/password/sha_encode

vue3安装vue-router

环境 node 18.14.2 yarn 1.22.19 windows 11 vite快速创建vue项目 参考 安装vue-touter 官网 yarn add vue-router4src下新建router文件夹,该文件夹下新建index.ts // router/index.ts 文件 import { createRouter, createWebHashHistory, RouterOptions, Ro…

浅谈霍尔电流传感器在UPS蓄电池浮充电流远程监测方案的应用-安科瑞 蒋静

摘要:针对无人平台UPS蓄电池多次出现浮充电流过高的现象,介绍了UPS系统的结构和工作原理,通过应用霍尔电流传感器,DCS组态,实现UPS蓄电池浮充电流远程监控,异常电流故障报警,推动了无人平台的自…

《向量数据库指南》——TruLens + Milvus Cloud构建RAG深入了解性能

深入了解性能 索引类型 本例中,索引类型对查询速度、token 用量或评估没有明显影响。这可能是因为数据量较小的关系。索引类型对较大语料库可能更重要。 Embedding 模型 text-embedding-ada-002 在准确性(0.72,平均 0.60)和答案相关度(0.82,平均0.62)上优于 MiniLM Embeddin…

BUUCTF [GXYCTF2019]佛系青年 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 密文: 下载附件,解压得到ZIP压缩包。 解题思路: 1、压缩包内有一张png图片和一个txt文本,解压zip压缩包,解压出图片,但txt文本提示需要输入密…

ElementUI及ElementUI Plus Axure RP高保真交互元件库及模板库

基于ElementUI2.0及ElementUI Plus3.0二次创作的ElementUI 元件库。2个版本的原型图内容会有所不同,ElementUI Plus3.0的交互更加丰富和高级。你可以同时使用这两个版本。 不仅包含Element UI 2.0版,还包含Element Plus 3版本。Element 2版支持Axure 8&…

vue+element实现多级表头加树结构

标题两种展示方式 方式一 完整代码: <template><div class"box"><el-tableref"areaPointTable":data"tableData"border:span-method"objectSpanMethod":header-cell-style"tableHeaderMerge"><el-ta…

Nacos 配置中心底层原理(1.X版本)

前言 Nacos 1.X版本 是长轮询 Nacos 2.X版本 是GRPC 长轮询 概念 客户端会轮询向服务端发出一个长连接请求&#xff0c;这个长连接最多30s就会超时&#xff0c;服务端收到客户端的请求会先判断当前是否有配置更新&#xff0c;有则立即返回&#xff0c;如果没有服务端会将这个…

第三方付支付-聚合支付系统设计方案

第三方付支付-聚合支付系统设计方案 阅读须知&#xff1a;本文仅针对聚合支付平台的核心功能架构基本概要,不涉及技术方案 目录&#xff1a;渠道管理&#xff0c;订单管理&#xff0c;对账管理&#xff0c;商家管理&#xff0c;代理管理&#xff0c;账号管理&#xff0c;风控…

LTD.com再度荣获“2023中国产业数字化技术赋能先锋”

2023年11月17日&#xff0c;由托比网主办的“第十届中国产业数字化大会”在江苏南京顺利召开。作为国内产业数字化领域的年度盛会&#xff0c;会议得到了江苏省商务厅、南京市政府的支持&#xff0c;由南京市商务局主办&#xff0c;南京鼓楼区政府提供特别支持。 会议在精彩的议…

vite vue3 配置pinia

准备 https://blog.csdn.net/qq_36437991/article/details/134474050 安装pinia 官网 yarn add piniasrc下新建store文件夹&#xff0c;该文件夹下新建index.ts import { createPinia } from "pinia"; const store createPinia(); export default store;修改ma…

挑战单芯片NOA,这款“All in one”方案或将改变主流市场走向

随着降本增效、电子架构升级&#xff08;尤其是跨域计算、多域融合等概念&#xff09;以及供应链减复&#xff08;降低电子物料的SKU&#xff09;的需求愈加明确&#xff0c;对于车载计算赛道&#xff0c;也带来新的变化。 比如&#xff0c;去年9月&#xff0c;英伟达率先发布下…

每天一点python——day69

#字符串的比较操作使用的符号&#xff1a; >[大于]&#xff0c;>[大于等于]&#xff0c;<[小于]&#xff0c;<[小于等于]&#xff0c;[等于]&#xff0c;![不等于]#如图&#xff1a; #例子&#xff1a;比较原理释义&#xff1a;每个字符在计算机里面都有一个原始值…

一次显著的接口性能优化,从10s优化到0.9s

最近在登录项目后台的时候&#xff0c;发现当我输入账号和密码后&#xff0c;竟然就卡在了 Loading 页面。。 加载了10S才进后台 等了足足 10S 才进去后台&#xff01; 通过 F12&#xff0c;打开 Network 网络请求一看&#xff0c;竟然是因为有两个接口返回的数据太慢了&#…

echarts双轴刻度线y轴刻度线对齐

splitNumber属性主要用于设置坐标轴分割的段数。例如&#xff0c;在类目轴&#xff08;category&#xff09;中&#xff0c;可以通过设置splitNumber属性来控制坐标轴被分割成的段数。需要注意的是&#xff0c;这个分割段数只是一个预估值&#xff0c;最终实际显示的段数会在这…

【cpolar】Ubuntu本地快速搭建web小游戏网站,公网用户远程访问

&#x1f3a5; 个人主页&#xff1a;深鱼~&#x1f525;收录专栏&#xff1a;cpolar&#x1f304;欢迎 &#x1f44d;点赞✍评论⭐收藏 目录 前言 1. 本地环境服务搭建 2. 局域网测试访问 3. 内网穿透 3.1 ubuntu本地安装cpolar 3.2 创建隧道 3.3 测试公网访问 4. 配置…

【SAP-QUERY】QUERY报表的创建

SQ03&#xff1a;创建用户组 环境-》查询区域-》选择标准区域 创建用户组和用户组描述 可选分配权限&#xff08;授权当前用户组下人员可以修改该query报表&#xff09; SQ02&#xff1a;创建信息集 确认区域是否为标准区域 选择创建的用户组 创建信息集&#xff1a;输入描述&a…

MaxScale读写分离

文章目录 项目背景读写分离读写分离简介环境准备配置虚拟机环境部署主从同步master主机slave主机 MaxScale简介部署MaxScale服务器授权用户master主机操作slave主机操作启动服务 测试读写分离服务 总结 项目背景 之前无论是Wordpress博客项目还是HIS医疗项目&#xff0c;我们都…

二、程序员指南:数据平面开发套件

MEMPOOL库 内存池是固定大小对象的分配器。在DPDK中&#xff0c;它由名称标识&#xff0c;并使用环形结构来存储空闲对象。它提供一些其他可选服务&#xff0c;例如每个核心的对象缓存和一个对齐辅助工具&#xff0c;以确保对象填充以将它们均匀分布在所有DRAM或DDR3通道上。 …

视频会议设备如何安装?

视频会议设备如何安装&#xff1f; 注意&#xff1a; 建议在干燥通风常温环境下使用 使用接地稳压电源 通电次序&#xff1a;先插网线&#xff0c;再插电源&#xff0c;再上电 IP地址的设置 有两种方式访问并设置连通宝服务器&#xff1a;即插即用和网线直连。 即插即用 …