ARM-V9 RME(Realm Management Extension)系统架构之系统能力的内存隔离和保护

本文主要是介绍ARM-V9 RME(Realm Management Extension)系统架构之系统能力的内存隔离和保护,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

安全之安全(security²)博客目录导读

目录

一、内存隔离和保护

1、颗粒PAS过滤Granular PAS filtering

2、Cache的一致性维护

2.1 物理别名点 Point of Physical Aliasing (PoPA)

2.2 加密点

3、内存(DRAM)保护

3.1 内存加密和完整性

3.2 DRAM scrubbing


本博客探讨 RME 所需的系统能力,以保证 Arm CCA 对于 Realms 的安全性和隔离特性。

一、内存隔离和保护

架构上独立的物理地址空间的概念使得形成强大的内存保护隔离边界成为可能。

本节定义了使用物理地址空间保证内存隔离的规则,以及通过这些空间将资源映射到安全状态的方法。

可以从每个安全状态访问的物理地址空间在下表中定义,即 PAS 访问表:

资源是一个可寻址物理实体。RME 系统中的资源仅在与资源物理地址空间 (Resource PAS) 关联时才可访问。

资源与资源 PAS 的关联由 SSD 或 MSD 控制。

资源与资源 PAS 的关联可以由隔离硬件静态设置,也可以在运行时由 MSD 固件更改

对资源的访问与以下内容相关联:

  • 根据 PAS 访问表,访问 PAS。
  • MECID。

对于通过第一级或第二级 MMU 访问资源的请求者,根据 PAS 访问表分配访问 PAS 由 MMU SSD 硬件强制执行。 对于不通过第一级或第二级 MMU 访问资源的请求者,例如通用中断控制器 (GIC) 或调试访问端口,分配访问 PAS 和 MECID 并符合上述要求由请求者端的 SSD 硬件强制执行。

SSD 硬件是不可变的或由 SSD 组件专门控制的硬件,例如受信任子系统。

附加到请求的 PAS 标签传达其相关的访问 PAS。

ARM架构参考手册和ARM SMMU架构规范定义了从每个安全状态设置访问 PAS 的编程模型。

通过非第一级或第二级 MMU/SMMU 访问内存映射资源的请求者必须支持一种方法,该方法由 SSD 硬件强制执行,以根据 PAS 访问表标记访问的访问 PAS。

例如:

  • 调试访问端口 (DAP) 可以向外部调试器暴露一个编程寄存器,允许为任何访问主内存或 APB 外设的操作设置一个访问 PAS 到一个允许的值,这取决于调试认证接口的状态。
  • 如果调试认证接口允许 RMSD 外部调试但不允许安全外部调试,则 DAP 硬件会拒绝将寄存器编程为访问 PAS == Secure 的尝试。
    • 此外,如果调试认证接口允许 RMSD 外部调试,则 DAP 硬件可以允许访问 PAS == Realm 的访问来指定编程的 MECID。

一旦分配,访问 PAS 的值不能更改。

系统不得暴露任何允许覆盖访问 PAS 值的寄存器或调试机制。

PAS 过滤器通过仅允许访问与该资源关联的资源 PAS 匹配的访问 PAS 来强制执行 PAS 保护检查。

系统中的每个请求者都必须接受 PAS 保护检查。

在此上下文中,请求者包括以下任何一种:

  • 处理单元(PEs),由主操作系统或管理程序用来执行用户应用程序或内核线程。
    • 本规范中还使用术语“应用 PEs”来区分主机软件可见的处理单元和嵌入系统设备中的处理单元。
  • 非 PE 请求者,可能是完全一致的、IO 一致的或非一致的(fully coherent, IO-coherent, or Non-coherent)。
    • 这包括任何支持发起内存访问的设备,如缓存预取器(cache prefetchers)、通用中断控制器 (GIC) 或调试访问端口(DAP)。
    • 其他示例包括外围设备,包括 PCIe 设备或可能包含非应用 PEs 的控制处理器。

某些受信任的请求者遵循 PAS 保护检查,而无需经过 PAS 过滤器。

  • PAS 过滤器可以直接访问根 PAS 中的资源,如存储在 DRAM 中的保护表。
  • 内存保护引擎 (MPE) 可以直接访问根 PAS 中的资源,如存储在 DRAM 中的完整性标签。
  • 受信任的子系统可以使用硬连线映射直接访问外围寄存器或 SMEM,将资源与根 PAS 关联。

术语“completer ”指包含资源并响应访问的组件。

对于某些资源,如外围设备或 SMEM,PAS 过滤器可以位于completer侧。对于其他资源,如 DRAM,PAS 过滤器必须附加到所有访问该资源的请求者上。RME 系统架构规则保证无论哪种结构,都能保持隔离。

MSD 资源位于根 PAS 中,由在 EL3 运行的软件管理。

对根 PAS 的访问仅允许受信任的请求者进行。

受信任的请求者包括:

  • 在根安全状态 (EL3) 下执行的 PE。
  • 受信任的子系统。例如,受信任的 SCP 或托管 HES 的子系统。
  • 内存保护引擎。
  • PAS 过滤器。

RMSD 资源位于 Realm PAS 中(RMSD Resources are in the Realm PAS),由在 Realm 安全状态下 EL2 运行的软件管理。

术语“资源 X 位于 PAS Y”表示资源 X 仅在 PAS Y 中可访问,除非明确允许资源在多个 PAS 中可访问。

1、颗粒PAS过滤Granular PAS filtering

颗粒 PAS 过滤是以页面(物理粒度)的粒度将资源与 PAS 进行可编程关联。

颗粒 PAS 过滤器根据颗粒保护表(GPT)指定的物理粒度资源 PAS 检查访问 PAS。如果检查失败,则访问将被中止,并报告粒度保护错误(GPF)。

在满足以下条件时,可以使用颗粒保护表将资源与 PAS 关联:

  • 每个 PAS 中只有一个物理地址(PA)可以访问资源,并且该 PA 的值在所有物理地址空间中相同。
  • 资源可以以页面粒度分配给 PAS。

术语粒度保护检查(GPC)指代请求者侧的颗粒 PAS 过滤器,此类过滤器可以附加到 MMU 或 SMMU 上。

GPC 是请求者侧的 PAS 过滤器。在系统构建中,来自应用 PE 或附加到 SMMU 的请求者的任何访问首先经过请求者侧的 PAS 过滤器,然后才能到达完成者侧的 PAS 过滤器。因此,GPT 的编程必须考虑特定资源的完成者侧 PAS 过滤器的潜在存在。

对于由完成者侧 PAS 过滤器保护的资源,可以省略粒度保护检查,在这种情况下,资源在 GPT 中标记为“允许所有访问”。

MSD 保证所有受粒度保护检查约束的请求者看到的一致的粒度保护表视图。

内存加密规则意味着当粒度的 PAS 关联更改时,粒度内容不会被保留。然而,软件不能依赖粒度过渡到新 PAS 作为隐式清除事件,必须在将粒度过渡到非安全 PAS 之前显式清除粒度内容。

片上资源的粒度保护检查只能依赖于存储在片上或存储在具有同等级别的完整性和重放保护的片外粒度保护表。

适用于非幂等位置的粒度保护检查不允许在访问的粒度保护检查完成之前对非幂等位置进行任何推测性访问。

一个非幂等位置的例子是读取敏感的内存映射外围寄存器。对非幂等内存的推测性读取访问可能导致不可预测的行为。因此,使用 GPC 将非幂等位置分配给 Realm、安全或根 PAS 的系统必须在允许访问非幂等位置之前完成对其的 GPC。

如果请求者侧的颗粒 PAS 过滤器处于复位状态,则与其关联的任何请求者都处于复位状态或被阻止访问内存。

这允许在初始化系统时实现可预测的访问控制行为。

2、Cache的一致性维护

2.1 物理别名点 Point of Physical Aliasing (PoPA)

物理别名点(PoPA)是cache维护操作的参考位置。

以可以缓存的内存为目标的PA与PAS相关联,直到到达PoPA。(A PA that targets memory that can be cached is associated with a PAS until reaching the PoPA. )

当 PA 与 PAS 关联时,任何 PA 比较操作都包括 PAS。这适用于系统的任何层次结构级别(包括L1数据和指令缓存)上位于PoPA之前(在请求者和PoPA之间)的任何缓存或snoop filter。这是维护将分离的物理地址空间作为系统全局安全属性的原则所必需的。

RME系统支持按照ARM架构参考手册对PoPA进行缓存维护操作。对PoPA (PoPA CMO)的缓存维护操作的范围是Outer Shareable可共享域。

PoPA CMO 影响系统中具有指定 {PAS, PA} 的任何缓存副本,无论以下条件如何:

  • 缓存时的共享域。
  • 系统支持单个还是多个外部共享性域。
  • 在具有 MEC 的系统中缓存时的 MECID。

例如,实现必须保证从一个PE发送的PoPA CMO会影响被其他PE分配为不可共享的缓存行。这种保证通常需要snoop过滤器注册任何分配到位于颗粒保护检查之后的完全一致缓存的分配,而不管导致分配的访问的可共享性属性。

实现可以通过让应用 PE 人为地将非共享可缓存访问转换为内部共享可缓存或外部共享可缓存来支持这一点,但必须保证当其他请求者继续使用非共享属性访问相同位置时,内存一致性和连贯性语义得以保留。

非 PE 请求者在分配到粒度保护检查之前的缓存时,可以继续使用非共享可缓存属性,因为这种缓存的后续回写总是通过 PAS 保护检查。

2.2 加密点

加密点(PoE)是缓存维护操作的参考位置。带有 MEC 的 RME 系统支持PoE 缓存维护操作。

对可缓存内存位置的访问与 MECID 关联,直到达到 PoE。

当一个位置的副本分配到缓存中时,它将存储分配访问的 MECID。

缓存清理操作(由于缓存维护操作和自然清除)导致的内存访问使用缓存条目的MECID。

3、内存(DRAM)保护

3.1 内存加密和完整性

有几种内存加密和完整性方案适用于RME系统。

基本的加密要求是支持对外部内存进行加密,对于每个PAS使用单独的加密密钥或tweak,并使用地址tweak提供空间隔离。RME防止运行时软件访问外部内存中的密文。

加密内存的完整性和新鲜度是额外的、依赖于威胁模型的能力,用于ARM机密计算安全模型中规定的Arm CCA安全保证。

使用术语Memory Protection Engine(MPE)来描述提供外部内存加密和完整性服务的组件。 在ARM机密计算安全模型中定义了一种可用于Arm CCA系统的内存保护方案分类方法。

分配给安全PAS、领域PAS或根PAS的外部内存必须使用提供至少以下全部内容的方法进行加密

  • 对于每个PAS的唯一加密上下文。
  • 对于每个加密数据块(如128位内存块)的唯一地址tweak调整。
  • 如果不支持加密内存完整性,则使用确保加密数据块上的比特扩散的加密模式。
  • 在具有MEC的系统中,在领域PAS中为每个MECID使用不同的加密上下文。

在写入外部内存或位于PoPA之后的任何共享缓存之前对数据进行加密。

在具有MEC的系统中,在写入外部内存或位于PoE之后的任何共享缓存之前对数据进行加密。

在具有MEC的系统中,MECID用于标识加密上下文,例如加密密钥或调整值,这些可能存储在MECID索引表或MECID标记的缓存中。

存储加密上下文的内存映射数据结构必须位于根PAS中的SMEM中,例如MSD SMEM。

3.2 DRAM scrubbing

使用术语“scrubbing”来描述一种操作,保证了先前的内存位置的内容不再可读。

术语“ECC-scrubbing”用于描述刷新DRAM ECC状态的操作。

在系统启动时,可能已经被分配给安全PAS、领域PAS或根PAS的内存必须在非受信任的请求者被授予对该内存的访问权限之前进行擦除。因为RME系统支持内存加密,所以在RME系统重置时,通过重置所有存储的内存加密密钥来隐式执行擦除。

位于PoPA之后的ECC-scrubbing引擎不能通过错误记录寄存器等途径泄露机密信息。

这篇关于ARM-V9 RME(Realm Management Extension)系统架构之系统能力的内存隔离和保护的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015663

相关文章

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20