[Genode] ARM TrustZone

news2024/10/6 1:58:33

这是关于读文章ARM TrustZone的记录,原文是英文,刚开始会有点反应不过来,这里大部分是对文章的翻译与提取。

ARM信任区技术

ARM信任区是在 热烈讨论关于X86平台上的可信平台模块(TPM) 时引入的。。

就像TPM芯片神奇的使个人电脑变得值得信赖一样,信任区的目标是建立基于ARM平台的信任。

与被设计成具有预定义固定功能的TPM不同,TrustZone请添加图片描述
代表了一种更加灵活的方式,利用CPU作为一个可自由编程的可信平台模块。

为了完成这一点,ARM除了常规的正常模式外,还引入了一种叫做“安全模式”的特殊的CPU模式,从而建立了“安全世界”和“正常世界”的概念。这两个世界的区别完全正交于用户级和内核级代码之间的正常环保护,并且隐藏在正常世界中运行的操作系统之外。此外,它不局限于CPU,而是通过系统总线传播到外围设备和内存控制器。

通过这种方式,这种基于ARM的平台有效的成为了一种划分特性。

当安全模式处于活动状态时,运行在CPU的软件在整个系统中的视角于运行在非安全模式下的软件不同。通过这种方式,系统功能,特别是安全功能个加密凭证,可以在正常情况下隐藏起来。

不用说,这个概念比TPM芯片灵活得多,因为安全世界的功能是系统软件定义的,热不是硬连接的。

正常世界和安全世界的例子
这张图片是一个关于正常世界和安全世界的例子。
当前,正常世界是活跃状态(因为non-secure位=1),操作系统运行在一个只能接触到一部分物理资源的平台。当所处的world发生改变时,secure world生效,运行在SW(secure world简写,下同)的系统软件可以接触到那些在NW(normal world简写,下同)中隐藏的硬件设备。

  • 关于下面内容的概述
    • 第一部分:出发点,列出考虑采取的可能路线
    • 第二部分:定制内核平台的设计和创建,给出了创建定制内核以支持这项工作的基本原理
    • 第三部分:详细介绍了在构建原型时遇到的特定于TrustZone的挑战
    • 第四部分:以常见问题部分的问答形式总结发现

出发点

在开始实验的时候,我们对ARM Cortex-A9-based SoCs(Security Operations Center,安全运行中心)较感兴趣。所有All Cortex-A9被装配在ARM安全扩展中(经常被视为TrustZone特性)。原则上,任何基于 Cortex-A9的平台都适合我们。不过,即使市场上有很多低功耗的ARM开发板,但是我们发现,他们都没有提供对TrustZone安全方式的访问。
在几乎所有情况下,在启动引导加载程序之前,存储在ROM中的引导代码转换为非安全模式,这可能是为了防止访问Soc中不打算公开使用的那些部分。这将潜在的基础平台缩小到FreeScale的i.MX开发板和ARM Versatile Express平台。
FreeScale i.MX 平台对安全模式的使用没有限制。但在我们开始的时候,还没有基于 Cortex-A9的电路板可用。最新的 i.MX53电路板采用了单核 Cortex-A8处理器,ARM 多功能快速 Cortex-A9板是 ARM 的官方参考板,支持 ARM TrustZone。正如预期的那样,官方参考委员会的价格标签远远高于你通常的低成本开发委员会。这并不是说它的数量级更贵。其实是两份!尽管如此,我们还是很高兴能够得到其中的一个,并且可以在官方参考平台上开始我们的实验

请添加图片描述
我们进行了两个实验: 使用现有的微内核进行原型设计和创建自定义内核平台。以前的工作的主要动机是有一个低风险的路径,使参考硬件和熟悉 ARM Cortex-A9的原则使用。通过获取和修改已知在这个 CPU 核上工作的现有内核平台,我们有了一个很好的起点。然而,为了彻底理解 TrustZone 的机制,我们需要解决内核范围内的问题。此外,我们希望完全控制引导过程,特别是解决有关安全引导的问题。我们决定创造一个定制的能够使我们自由的探索这个平台而不需要考虑现有内核实现的复杂性的内核平台,而不是修补现有的内核并继承他的设计选择。

对于这两种工作,我们都使用 Genode 操作系统框架(Genode)作为基础。Genode 是一个用于构建专用操作系统的构建工具包。它是一个小的构建模块的集合,从中可以组成复杂的系统。这些构建块不仅包括应用程序,还包括所有经典的操作系统功能,如内核、设备驱动程序和协议栈。目前,Genode 支持8种不同的内核,并为基于 x86和基于 ARM 的平台提供超过100个可重用组件。我们认为其低可信计算基础(TCB)复杂性和高灵活性将使其成为指定在 TrustZone 安全端运行的操作系统的有吸引力的基础。

对于第一项的工作,支持多功能 Express 平台,其中一个内核 L4/Fiasco、 Fiasco.OC 或 Codezero 基本上是合适的。在这些候选者中,Fiasco.OC 为最新的 ARM 系统芯片提供了最广泛的支持。因此,我们决定使用 Genode 和 fiasco.OC 的结合作为起点,以便在该平台上主要使用 Genode。这需要我们为基本的外围设备如 PL110显示器、 PL011 UART、定时器和 PS/2实现低级驱动程序支持。尽管与驱动程序相关的工作是使用 Fiasco.OC 内核进行的,但其结果对 Fiasco.OC 和我们的定制内核都是有益的,因为 Genode 的驱动程序组件独立于底层内核。

在我们的第二项工作中,我们用一个新的基础平台来补充 Genode,我们称之为“ base-hw”(“ hw”表示在裸硬件上运行的 Genode)。与已经支持的内核不同,这个新平台与 Genode 的核心紧密集成。因此,与使用离散内核相比,我们的目标是显著降低基本系统的 TCB 复杂度。在我们的 TrustZone 实验环境中,自定义内核平台最大的好处是在使用 Cortex-A9和 TrustZone 时对内核级问题的深入了解。

我们定制的基于 hw 内核平台的设计与实现

与经典的 L4微内核不同,Genode 的核心进程作为用户级的根任务在内核之上运行,base-hw 直接在硬件上执行 Genode 的核心,而在硬件之下没有独立的内核。将内核和内核融合为一种新型的内核/用户界面混合程序。只有少数代码路径在特权模式下执行,但大多数代码在用户模式下运行。
这种设计有几个好处。首先,内核部分变得更加简单。例如,内核部分不需要分配器,因为分配器是由内核的用户级部分管理的。第二,基本程序侧步处理长期存在的硬内核级问题,特别是内核资源的管理。对于内核对象的分配,我们可以简单地使用 Genode 的用户级资源交易概念。然而,最后也是最重要的一点是,将内核与 root 任务合并可以消除两个程序之间的大量冗余。传统上,内核和根任务都执行物理资源分配的簿记以及地址空间和线程等内核对象的存在。在 base-hw 中,这些数据结构只存在一次。组合内核/核的复杂度显著低于传统自足内核和顶部独特根任务的复杂度之和。这样,base-hw 有助于使 Genode 的 TCB 变得不那么复杂。
新设计对 Genode 进程树根 TCB 的影响
该图说明了新设计对 Genode 进程树根 TCB 的影响。

左侧描述了 L4内核家族的一个传统成员。蓝色标记的 TCB 包括内核、 sigma0根内存管理器、 root 任务(Genode 的核心)和 Genode 的 init 进程,这些组件累计大约有6万行代码。右侧说明了 base-hw 的核/核混合方法。通过合并内核和 root 任务,在基础上运行的系统需要信任更少的代码才能避免 bug。

为了实现基础 hw 内核平台,我们进行了以下步骤。
首先,我们设计并实现了引导一个基于 Genode 的系统的概念,该系统可能由多个模块组成,作为一个单独的引导映像。这是第一个在stock Fiasco.OC 内核上使用自定义平台变得有益的地方,因为与 Fiasco.OC 中已知的过程相比,我们的引导概念非常简单。

内核的执行模型可以粗略地描述为单堆栈内核。与每个用户线程维护一个内核线程的传统 L4内核不同,base-hw 内核只是一个状态机,从不在内核中阻塞。这与 seL4内核和 NOVA 微管理程序的操作方式类似。

下一步是添加对中断处理和抢占式多线程的支持。因此,我们实现了 PL390中断控制器和 Cortex-A9核心定时器的驱动程序。结合实现的内核入口代码路径和中断控制器,Genode 的用户级核心可以处理定时器中断。

  • Genode 的核心组件使用多个执行线程:
    • 初始化平台并产生名为 init 的第一个用户级进程的主线程,
    • 接收和处理页错误的寻呼机线程,
    • 每个设备中断一个线程,
    • 一个所谓的 RPC 入口点,它处理对 core 提供的服务的请求,
    • Init 进程的父线程,它通过父接口响应 init 进程的请求。

(未完待续……)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

◢Django 分页+搜索

1、搜索数据 从数据库中获取数据,并进行筛选,xx__contains q作为条件,查找的是xx列中有q的所有数据条 当有多个筛选条件时,将条件变成一个字典,传入 **字典 ,ORM会自行翻译并查找。 筛选电话号码这一列…

【Java】volatile-内存可见性问题

1、什么是内存可见性问题? (1)实例 要明白什么是内存可见性,我们首先来看一段代码 public class demo1 {public static int isQuit 0;public static void main(String[] args) {Thread thread1 new Thread(()->{while (is…

【每日刷题——语音信号篇】

思考与练习 练习2.1 语音信号在产生的过程中,以及被感知的过程中,分别要经过人体的哪些器官? 1.产生过程: 肺部空气 → \rightarrow →冲击声带 → \rightarrow →通过声道(可以调节) → \rightarrow →…

【小呆的力学笔记】有限元专题之循环对称结构有限元原理

文章目录 1. 循环对称问题的提出2. 循环对称条件2.1 节点位移的循环对称关系2.2 节点内力的循环对称关系 3. 在平衡方程中引入循环对称条件 1. 循环对称问题的提出 许多工程结构都是其中某一扇面的n次周向重复,也就是是周期循环对称结构。如果弹性体的几何形状、约…

【洛谷 P3743】kotori的设备 题解(二分答案+递归)

kotori的设备 题目背景 kotori 有 n n n 个可同时使用的设备。 题目描述 第 i i i 个设备每秒消耗 a i a_i ai​ 个单位能量。能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗。也就是说,对于任意实数,…

java学习part06数组工具类

1比较内容 2输出信息 3值填充 4快速排序 5二分查找 负数没找到,其他表示下标

SVG圆形 <circle>的示例代码

本专栏是汇集了一些HTML常常被遗忘的知识,这里算是温故而知新,往往这些零碎的知识点,在你开发中能起到炸惊效果。我们每个人都没有过目不忘,过久不忘的本事,就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…

【MySql】13- 实践篇(十一)

文章目录 1. 自增主键为什么不是连续的?1.1 自增值保存在哪儿?1.2 自增值修改机制1.2.1 自增值的修改时机1.2.2 自增值为什么不能回退? 1.3 自增锁的优化1.3.1 自增锁设计历史 2. Insert语句为何很多锁?2.1 insert … select 语句2.2 insert 循环写入2…

记录--alova组件使用方法(区别axios)

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在我们写项目代码时,应该更加专注于业务逻辑的实现,而把定式代码交给js库或工程化自动处理,而我想说的是,请求逻辑其实也是可以继续简化的。 你可能会说…

npm install 下载不下来依赖解决方案

背景 最近在构建 前端自动化部署 的方案中发现了一个问题,就是我在npm install的时候,有时候成功,有时候不成功,而且什么代码也没发生更改,报错也就是那么几个错,所以在此也整理了一下遇到这种情况&#xf…

音视频同步笔记 - 以音频时间为基

音视频同步 - 以音频时间为基 上图介绍: 该图是以音频的时间为基,对视频播放时间的延迟控制方案,只调整视频的播放延时。delayTime是视频播放的延迟时间,初始值是1 / FPS * 1000 (ms),如果FPS为25帧率,初始…

MySQL 备份和恢复

目录 一.MySQL数据库的备份的分类 1.1.数据备份的重要性 1.2.数据库备份的分类和备份策略 1.3.常见的备份方法 二.MySQL完全备份 2.1.什么是完全备份 2.2.完全备份的优缺点 2.3.实现物理冷备份与恢复 1)实现流程 2)前置准备 3)实现…

Shell判断:模式匹配:case(一)

一、前言 shell编程中if和case都是用来做流控的。 二、case语法结构 case 变量 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; 模式3) 命令序列3 ;; *) 无匹配…

共享内存和信号量的配合机制

进程之间共享内存的机制,有了这个机制,两个进程可以像访问自己内存中的变量一样,访问共享内存的变量。但是同时问题也来了,当两个进程共享内存了,就会存在同时读写的问题,就需要对于共享的内存进行保护&…

数据结构--串的基本概念

目录 串的基本概念 串的定义 串与线性表对比 ​串的基本操作​ 串的比较 字符集编码 乱码问题​编辑 总结 ​串的存储结构 ​串的顺序存储​编辑 串的链式存储 串的基本操作 1、求字串 2、比较 3、定位操作 总结 串的基本概念 串的定义 串与线性表对比 串的…

无障碍功能更新,帮助残障人士轻松快捷完成日常事务

作者 / Google Products for All 团队高级总监 Eve Andersson 我们将与您分享一些全新的无障碍功能和部分更新,帮助您更轻松快捷地完成日常任务,让您不费吹灰之力就能自拍、查询步行路线或上网搜索等。我们最近在 Android 14 和 Wear OS 4 中推出了 Look…

软件测试/测试开发/人工智能丨基于Spark的分布式造数工具:加速大规模测试数据构建

随着软件开发规模的扩大,测试数据的构建变得越来越复杂,传统的造数方法难以应对大规模数据需求。本文将介绍如何使用Apache Spark构建分布式造数工具,以提升测试数据构建的效率和规模。 为什么选择Spark? 分布式计算:…

clickhouse分布式之弹性扩缩容的故事

现状 社区不支持喔,以后也不会有了。曾经尝试过,难道是是太难了,无法实现吗?因为他们企业版支持了,可能是利益相关吧,谁知道呢,毕竟开源也要赚钱,谁乐意一直付出没有回报呢。 社区…

60 权限提升-MYMSORA等SQL数据库提权

目录 数据库应用提权在权限提升中的意义WEB或本地环境如何探针数据库应用数据库提权权限用户密码收集等方法目前数据库提权对应的技术及方法等 演示案例Mysql数据库提权演示-脚本&MSF1.UDF提权知识点: (基于MYSQL调用命令执行函数)读取数据库存储或备份文件 (了…

ubuntu20.04蓝牙连接airpods

ubuntu20.04蓝牙连接airpods 解禁蓝牙安装blueman设置模式连接上没有声音的问题 解禁蓝牙 sudo rmmod btusb sleep 1 sudo modprobe btusb sudo /etc/init.d/bluetooth restart安装blueman sudo apt install blueman sudo apt-get install pulseaudio-module-bluetooth sudo …