这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Shield-XS Bitmap 基础知识

本文档介绍了bitmap 安全隔离的基础设计思想,通过阅读本文档,你可以知道为什么需要bitmap, 以及其应用场景

本节将介绍 bitmap 的一些基础知识,有助于理解为什么我们需要 bitmap,本节包含:

  • 背景描述
  • 威胁模型
  • 防御原理
  • 工作流程
  • 应用场景

术语描述

缩写 全名 含义
TCB Trusted Computing Base 可信计算基,负责底层硬件的安全可信操作
TEE Trusted Execution Environment 可信执行环境
MMU Memory Management Unit 内存管理单元
RDSM Root Domain Security Mananger 根域权限管理器
C-SDSM Confidencial Supervisor Domain Security Manager 可信监督域 权限管理器
APLIC advanced platform level interrupt controller 平台级中断控制器
LLC Last Lavel Cache 末级缓存
DMA Direct Memory Access 直接内存访问
CVM Confidencial Virtual Machine 可信虚拟机
TLB Translation Lookaside Buffer 页表缓存
MBMC machine level bitmap check bitmap CSR 特殊状态寄存器
BMA Bitmap Adress Shield Bitmap 专属内存区域基地址
CMODE Confidencial Mode 开启bitmap后当前模式是否是可信
BME Bitmap Enable 是否开启 Bitmap
PTW Page Table Walker 页表遍历器
HPTW Hypervisor PTW 监督域页表遍历器
LLPTW Last Level PTW 末级页表遍历器

1 - 背景描述

解释下为什么需要bitmap 进行隔离

背景描述

自计算机问世以来,数据安全始终是至关重要的议题。在个人计算机时代,数据安全主要集中在单机硬盘等存储设备的安全性上。随着互联网时代的到来,数据安全的范畴扩展到了计算机之间数据传输的安全性,促使了安全传输协议的设计与发展。如今,在云计算时代,用户的大量数据被存储和处理在云端。在云环境中存储、共享和计算的数据面临着多重安全威胁。在云计算环境下,不同类型的负载面临各自的威胁模型包括但不限于:

计算型负载:恶意软件可能侵入操作系统或固件,攻击 CPU 和内存资源,导致数据泄露或系统性能下降。

内存型负载:恶意软件或进程可能试图访问内存型负载使用的内存区域,导致数据泄露或篡改。

存储型负载:存储设备及其 DMA 功能可能被攻击者利用,直接访问或篡改存储设备内存,绕过传统安全检查。

网络型负载:网络攻击可能利用网络接口控制器(NIC)等网络设备漏洞入侵系统,通过 DMA 功能访问或篡改内存中的敏感数据。

不同工作负载面临的安全威胁

不同工作负载面临的安全威胁

威胁模型


类别 安全准则 描述
内存分配 动态分配安全/非安全内存的能力 安全内存应根据需求动态分配或释放。
内存机密性 内存隔离 防止非可信计算基(non-TCB)组件读取可信执行环境(TEE)的内存。
抵御软件攻击的内存完整性 防止软件攻击(如内存重映射、别名攻击、重放攻击、数据破坏等)。
共享内存 TEE控制与非TCB组件的数据共享 防止非TCB代码在未经TEE同意的情况下泄露信息。
TEE控制与其他TEE的数据共DUT 享 支持TEE之间安全共享内存的能力。
I/O保护 防止非TCB设备通过DMA访问TEE内存 禁止未被TCB接纳的外设设备访问TEE内存。
来自TCB内设备的可信I/O 通过准入控制将设备绑定到TEE。

2 - 香山 bitmap 防御原理

本节介绍了bitmap 的基础思想和工作原理

防御原理

针对日益复杂的负载的安全威胁,香山轻量动态隔离模型为经典负载机密虚拟机和容器设计了一种动态隔离机制,用来保护正在使用中的数据的机密性和完整性。依据不同的应用场景,将负载从安全的维度进行划分,分为安全敏感型负载和非安全敏感型负载。

安全敏感型负载需要运行在可信执行环境下,用来保护正在使用中数据和代码的机密性和完整性。非安全敏感型负载对数据没有安全性保护需求,执行在开放的执行环境下,保证执行的效率。

基于bitmap的安全隔离的防御机制,其核心原理是通过可信根在软件层面的标记(Shield-bit)来隔离和保护敏感工作负载(Sensitive Workloads)与普通工作负载(Normal Workloads),从而增强系统的安全性。以下是其防御原理的详细描述:

1. 分类与标记

工作负载分类:系统将工作负载分为两类:

  • 敏感工作负载(Sensitive Workloads):需要高安全级别的任务,如机密虚拟机、安全容器的任务(隐私数据的访问、处理)等。

  • 普通工作负载(Normal Workloads):常规任务,代表系统中普通的应用程序或进程,安全要求较低。

Shield-bit 标记:通过 “Shield-bit”(每比特代表 4KB)对敏感工作负载使用的资源进行标记,依据需此标记动态调整资源访问权限:

  • Shield-bit = 1 表示安全敏感资源

  • Shield-bit = 0 表示非安全敏感资源

2. 资源隔离

资源池划分图中显示资源池中包含混合的敏感和普通工作负载,但通过 Shield-bit 实现逻辑隔离。

资源类型保护:敏感工作负载访问特定资源(如内存、IO设备、中断等)时,Shield-bit 会触发保护机制,防止普通工作负载或恶意程序越权访问。例如:

  1. 内存隔离:敏感数据的内存区域仅对标记为敏感的工作负载可访问。

  2. 设备与中断保护:关键外设或中断仅允许敏感工作负载调用。

3. Bypass 机制

Bypass Shield-bit:在单向隔离的情况下(仅对普通负载的资源访问作限制),安全敏感负载可绕过 Shield-bit 的机制直接访问资源提升性能。

4. 防御目标

防止横向渗透:攻击者通过普通工作负载漏洞无法访问敏感资源。

最小权限原则:每个工作负载仅能访问其必需的资源,降低攻击面。

动态安全调整:根据工作负载的敏感程度动态切换保护状态。

5. 技术实现

硬件支持:依赖内存管理单元(MMU)的扩展功能。

软件协同:由可信计算基负责标记管理和资源调度。

香山Shield-XS 轻量隔离模型

香山Shield-XS 轻量隔离模型

6. 核心工作流程

Shield-XS 隔离模型工作流程

Shield-XS 隔离模型工作流程

A. 启动

系统初始化,加载固件(Firmware TCB)和可信执行环境(TEE TCB)。

开启Bitmap安全检测功能。

B. 配置

设定安全策略,例如定义受保护资源(内存、IO、中断等)访问权限。

TEE-TCB 依据应用需求配置不同资源的安全/非安全属性。

C. 检测

硬件监控访问行为,识别异常或非法访问请求。

通过 Bitmap 或其他机制标记不信任的访问行为。

D. 故障处理

当检测到违规操作(如未授权的内存访问)时,触发安全机制。

7. 关键安全机制

支持对所有地址映射类资源(内存、I/O、中断)的动态隔离。

资源隔离支持按需分配的,而非静态划分(区别于PMP)。

使用位图(Bitmap)标记资源的信任状态,快速过滤不信任的访问请求。

8. 技术特点

灵活性
动态隔离允许根据运行时需求调整安全策略,适应不同场景。

细粒度控制
支持多种资源类型(内存、I/O、中断)的精细化权限管理。

轻量级检测
通过Bitmap等高效数据结构实现低开销的安全监控。

3 - bitmap的工作流程

bitmap的工作流程是怎样的?

bitmap的工作流程是怎样的?

1. 识别负载类型

根据应用场景和安全需求,将负载分为安全敏感型负载和非安全敏感型负载:

  • 安全敏感型负载:需要在可信执行环境中运行,以保护数据和代码的机密性和完整性。

  • 非安全敏感型负载:可以在开放的执行环境中运行,主要关注执行效率。

2. 设置隔离属性

定义隔离属性:为不同类型负载设置隔离属性,包括单向隔离和双向隔离。

  • 单向隔离:允许安全敏感型负载访问非安全敏感型负载的资源,但不允许反向访问。

  • 双向隔离:安全敏感型负载和非安全敏感型负载之间互相不能访问对方的资源。

3. 划分资源池

划分物理内存资源:将物理内存划分为不同的资源池以支持不同负载的隔离需求。

  • 安全资源池:分配给安全敏感型负载。

  • 非安全资源池:分配给非安全敏感型负载。

4. 配置安全属性

设置内存页安全状态:使用Bitmap数据结构标记每个物理内存页的安全状态。

  • 安全页:标记为1,表示该页属于安全资源池。

  • 非安全页:标记为0,表示该页属于非安全资源池。

5. 动态分配资源

按需分配内存:根据负载的启动和运行时需求,动态分配相应的内存资源。

  • 安全敏感型负载:从安全资源池分配内存,并确保其访问受限于安全页。

  • 非安全敏感型负载:从非安全资源池分配内存,允许其访问非安全页。

6. 隔离检测判断

判断隔离类型:判断当前负载是否需要单向隔离或者双向隔离。

  • 单向隔离:仅对非安全敏感型负载进行安全性检测,确保其不访问安全资源。

  • 双向隔离:对所有负载类型进行隔离检测,确保不同负载之间互不干扰。

7. 安全性检测

执行访问控制检查

  • 对于单向隔离情况,检查非安全敏感型负载是否试图访问安全资源。

  • 对于双向隔离情况,检查所有负载类型是否试图越界访问其他类型的资源。

8. 动态回收资源

释放不再使用的资源:负载执行完毕后,其占用的内存资源被回收并返回到相应的资源池中,以便后续其他负载的使用。

4 - 香山bitmap 应用场景

香山bitmap 应用场景

应用场景

1. 机密虚拟机

应用场景-机密虚拟机

Shield-XS用于普通虚拟机和机密虚拟机的隔离。在机密虚拟机(Confidential VM, CVM)环境中,bitmap 用于标记和隔离安全内存区域。

普通虚拟机在访问内存时,硬件通过 bitmap 检查机制确保其只能访问被授权的内存区域,从而实现虚拟机之间的内存隔离。

注:机密虚拟机之间的隔离通过MMU 完成,不需要经过Bitmap 的检查机制。

CVM Bitmap 的资源的标记和分配由C-SDSM (Confidential Supervisor Domain Security Manager) 完成,Hypervisor 和 CVM 通过TEECall 和 TEEResume 进行安全世界的交互。

安全世界接口

TEECall

  • 从普通世界(Normal World)切换到安全世界(TEE),进入敏感工作负载执行流程。

TEEResume

  • 从 TEE 返回普通世界,恢复 Normal Workloads 的执行。

2. 安全增强容器

应用场景-容器

上图显示了bitmap在容器中的应用场景。安全容器和普通容器都位于可信计算基的保护范围内。在安全容器中运行的应用程序可能包含敏感数据或关键业务逻辑。为了防止这些数据被普通容器或恶意软件访问,采用通过 bitmap 机制进行隔离。

Bitmap 数据结构用于标记哪些物理页属于安全容器的存储空间,通过将对应该容器内存区域的位图数据写为1,确保普通容器无法访问这些存储空间。只有安全容器内的应用程可以访问这些被标记为安全的内存页。

普通容器中的应用程序可能来自不可信的来源。通过 bitmap 机制,普通容器的内存访问被限制在非安全内存区域。任何试图访问安全内存的请求都会被硬件拦截,并触发Access Fault。

在上述场景的具体的实施细节中,软件模块负责Bitmap管理和配置 , 硬件机制负责Bitmap检查和同步。