一、系统虚拟化平台现有安全性分析

(一)安全优势(隔离机制)

  1. CPU虚拟化安全:通过CPU硬件运行级别(Ring 0-3)实现特权指令隔离,虚拟机只能在受限环境中执行。
  2. 内存虚拟化安全:每个虚拟机拥有独立的虚拟内存空间,通过影子页表或硬件辅助(EPT/NPT)实现内存隔离。
  3. I/O虚拟化安全:虚拟I/O接口控制多个虚拟设备复用同一物理设备,通过前端驱动/后端驱动模型实现I/O隔离。
  4. 域间通信控制
    • 事件通道(Event Channel):Xen中Dom与Dom之间异步事件通知机制,需双方端口绑定。
    • 授权表(Grant Tables):提供dom间内存共享的安全方法,每个内存页面有特定域访问权限。

(二)现有防护框架

虚拟化平台利用VMM(虚拟机监控器)为上层VM提供“沙箱”安全环境,实现:

  • 应用隔离
  • 资源隔离
  • 故障隔离

二、虚拟化平台面临的新安全威胁

(一)与传统计算模式不同的安全问题

  1. 虚拟机标识问题

    • 虚拟机MAC地址易伪造,难以建立唯一身份标识。
    • 导致责任追溯困难。
  2. 虚拟机短暂存在性问题

    • 虚拟机可快速创建/销毁,网络上瞬间出现/消失大量主机。
    • 被利用可加速病毒传播。
  3. 虚拟机多样性问题

    • 虚拟机状态可被修改、伪造(如快照被篡改)。
    • 攻击源头难以追踪。

(二)具体攻击向量

  1. 管理域攻击:攻击者利用设备管理模型或管理程序缺陷,控制整个平台。
  2. 跨虚拟机攻击:通过完全控制一个客户机,攻击VMM或同一平台上的其他虚拟机。
  3. 隐蔽通道信息泄露:利用CPU负载、缓存响应时间、多核状态等探测其他虚拟机的秘密信息。
  4. 网络攻击:在没有保护措施下拦截、修改、丢弃网络流量。

三、虚拟化平台安全体系结构XSM的主要目标

XSM(Xen Security Module)是Xen的通用安全框架,其核心目标如下:

(一)架构设计目标

  1. 模块化安全功能定制:允许按需加载安全模块,无需修改Xen核心。
  2. 通用安全接口:提供统一钩子(hooks)接口供安全模块调用。
  3. 核心与策略分离:将特定安全代码从Xen核心移除,降低TCB(可信计算基)。

(二)功能目标

  1. 支持主流安全模型:可支持RBAC、TE、MLS、CW等多种模型。
  2. 减少对Xen的影响:钩子设计尽量使用现有错误返回路径,避免直接引用Xen对象。
  3. 动态配置能力:可设置是否开启安全框架,安全目标可动态配置。
  4. 不影响现有机制:新安全功能不对Xen内部机制造成影响。

(三)应用场景目标

  1. 分解Dom0权限:移除权限过大的dom0,实现最小权限原则。
  2. 资源划分控制:允许特定域控制资源分配,安全模块仲裁资源访问。
  3. 保护平台免受第三方攻击:通过设备驱动隔离、沙箱技术保护平台。
  4. 保护平台核心服务:安全创建平台服务(如加密、IP过滤),隔离并仲裁服务访问。

四、虚拟化平台安全模块实例分析(ACM)

(一)ACM(Access Control Module)概述

ACM是Xen的早期安全模块,基于IBM sHype架构,实现两种主要策略:

(二)STE(Simplified Type Enforcement)策略

  1. 核心概念

    • 定义type(类型)和label(标签)
    • 每个虚拟机/资源被打上label,label由一组types组成
  2. 访问规则

    • 资源访问:虚拟机X的label与资源Y的label至少有一个相同type时,允许访问。
    • 虚拟机通信:虚拟机A和B的label至少有一个相同type时,允许通信。
    • 示例:Label-d0={t1,t2,t3},Label-d1={t2,t4},则d0和d1可通过t2通信。

(三)中国墙(Chinese Wall,CW)策略

  1. 设计目的:防止利益冲突的虚拟机同时运行在同一平台。
  2. 实现方式
    • 定义“冲突集”(如{Bank-A, Bank-B})
    • 每个虚拟机被打上Chinese Wall Type标签
    • 规则:新虚拟机启动前检查,若与已运行虚拟机在同一冲突集中,则拒绝启动。
  3. 应用场景:银行A和银行B的虚拟机不能同时运行,防止数据泄露。

(四)ACM的局限性

  1. 钩子覆盖不全:只实现了XSM 73个钩子中的7个。
  2. 策略与执行混淆:决策逻辑和执行逻辑未清晰分离。
  3. 灵活性不足:催生了更完善的Flask架构。

五、虚拟机监控VMI技术实例(XenAccess安全API)

(一)VMI(Virtual Machine Introspection)技术原理

  1. 基本概念:在Hypervisor层面监控虚拟机内部状态,无需进入虚拟机内部。
  2. 必要性:虚拟机对文件的访问在传递到Dom0时已转化为磁盘块、内存地址等底层形式,需要VMI解析。

(二)XenAccess架构详解

  1. 组成结构

    Monitor App(监控应用)
         ↓
    XenAccess Library(API库)
         ↓
    XenControl Library + XenStore Library + BlkTap
         ↓
    Domain 0 Kernel + Drivers
         ↓
    Xen VMM
    
  2. 两大监控能力

    • 内存监控:通过libxc的内存访问函数映射虚拟机内存页。
    • 磁盘I/O监控:通过BlkTap能力拦截磁盘I/O操作。
  3. 工作流程

    • XenAccess在Dom0中运行,与BlkTap和XenCtrl库通信。
    • 监控应用通过API获取虚拟机内存和磁盘操作信息。
    • 无需修改被监控虚拟机,实现透明监控。

(三)与VMSafe对比

  • VMSafe(VMware):整合Hypervisor和第三方安全软件的虚拟层,过滤所有进出虚拟机的流量。
  • XenAccess(Xen):提供API供第三方监控软件使用,侧重内存和磁盘监控。

六、虚拟机之间的隐蔽通道实例分析

(一)隐蔽通道基本概念

隐蔽通道:违反系统安全策略的非法信息传输通道,在虚拟化平台中尤为危险,因为:

  1. 虚拟机理论上应完全隔离。
  2. 共享物理资源(CPU、内存、缓存)可能成为信息载体。

(二)三类隐蔽通道实例

1. XenCC - 基于mfn2pfn映射表的存储通道
  • 原理:机器地址-伪物理地址映射表(mfn2pfn)对所有Guest可读,拥有者可写。
  • 利用方式
    • 发送方在表中写入标签(tag)和数据。
    • 接收方遍历表寻找标签,读取数据。
    • 通过ack机制同步传输。
  • 本质:利用地址映射表作为共享存储介质。
2. 基于CPU负载的定时通道
  • 原理:Xen调度算法允许为domain设置weight和cap参数,影响CPU分配。
  • 利用方式
    • 发送方通过制造/不制造CPU负载改变调度。
    • 接收方通过测量运行固定代码的时间差异判断负载状态。
    • 编码规则:独立运行与调度运行时间比>90%为“0”,否则为“1”。
  • 数据率:较低,但足以传输密钥等少量敏感信息。
3. 基于共享内存的定时通道
  • 原理:利用对共享内存读写的时间差传递信息。
  • 实施步骤
    1. Pi将信息编码为二进制(T0表示0,T1表示1,T0<T1)
    2. 建立共享内存结构,通过授权表共享
    3. Pi按编码时间间隔发送数据
    4. Pj测量到达时间间隔,解码为二进制
    5. 通信结束解除映射
    
  • 特点:隐蔽性高,难以检测。

(三)隐蔽通道防御思路

  1. 资源隔离强化:减少共享资源,或严格限制共享方式。
  2. 噪声注入:在共享资源中注入随机噪声,干扰信号传输。
  3. 行为监控:检测异常的CPU使用模式或内存访问模式。
  4. 调度算法改进:使用公平调度,减少因调度差异导致的信息泄露。

七、扩展知识

(一)虚拟机安全迁移关键技术

  1. vTPM迁移协议

    • 保护vTPM实例数据的机密性和完整性。
    • 重新建立新平台上的信任链。
    • 流程:源vTPM→加密传输→目标vTPM解密重建。
  2. 基于可信第三方的迁移

    • MA(Migration Authority)验证源和目标平台的完整性。
    • 策略匹配检查通过后才允许迁移。

(二)XSM钩子机制

  1. 钩子类型

    • PRE-Hooks:操作前检查
    • POST-Hooks:操作后处理
    • FAIL-Hooks:操作失败处理
  2. 钩子放置原则

    • 关键位置(dom0_ops.c、domain.c、grant_table.c等)
    • 兼顾安全性和可维护性

(三)Flask模块(ACM的演进)

  1. 优势

    • 更完整的钩子实现(73个全部支持)
    • 策略决策与执行逻辑分离
    • 支持RBAC/TE和MLS/MCS多种模型
  2. 应用场景

    • 细粒度控制物理中断分配
    • 细粒度控制domain间内存共享
    • 细粒度控制IO资源分配
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐