[Genode] ARM TrustZone

这是关于读文章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 进程的请求。

(未完待续……)

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

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

相关文章

nginx学习(3)Nginx 负载均衡

Nginx 负载均衡 实战案例 实现效果 浏览器地址栏输入地址 http://172.31.0.99/oa/a.html,负载均衡效果,平均在 8083 和 8084 端口中,刷新浏览器,显示不同 一、配置 1、先创建2个文件夹,并将apache-tomcat-8.5.87解…

简化业务流程——通知短信API在企业中的应用

引言 通知短信API是一种可以帮助企业简化业务流程的通讯工具。随着移动互联网技术的不断发展,移动通讯已经成为了我们日常生活和企业运营中不可或缺的一部分。通知短信API是一种可以在企业中将移动通讯应用到极致的工具,它可以为企业提供高效便捷的通讯…

[qemu逃逸] XNUCA2019-vexx

前言 这题没有去符合, 题目本身不算难. 用户名: root 密码: goodluck 设备逆向 题目没有去符合, 所以其实没啥好讲了, 就列一些笔者认为关键的地方 这里的定义了两块 mmio 内存区. 然后看下设备实例结构体: 可以看到 QEMUTimer, 所以多半就是劫持 dma_timer 了. 漏洞点在…

【日常总结】java JSON 转 实体类 (含多层嵌套)

一、场景 二、问题 三、解决方案 四、实战 1. 引入maven依赖 2. IEDA 安装lombok 插件 3. 安装 GsonFormPlu 插件 4. 使用 Stage 1:新建类,右键 选择 Generate Stage 2:选择 GsonFormatPlus Stage 3:将json复制其中&…

Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)

Linux 软件包管理器 yum 什么是软件包: 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通…

图片地址GPS经纬度查询

先打开exif图片查询的网站: 改图宝的:https://www.gaitubao.com/exif图虫de的:EXIF信息查看器 (tuchong.com) 将这个地点:51 deg 30 51.90" N, 0 deg 5 38.73" W 修改为:5130 51.90" N, 05 38.73" W 到谷…

Java JSON字符串替换其中对应的值

代码: public static void main(String[] args) { // String theData crmScene.getData();String theData "[{\"type\":1,\"values\":[\"审批中\",\"未交付\"],\"name\":\"status\"}]"…

听懂未来:AI语音识别技术的进步与实战

目录 一、引言语音识别技术的魅力与挑战语音识别的基本概念技术的进步与应用实际应用的影响 二、语音识别技术的历史1. 初期探索(1950s - 1970s)早期的实验 2. 隐马尔可夫模型的兴起(1980s)算法创新 3. 深度神经网络的应用&#x…

php 时区查看和设置

php的时区&#xff0c;关系到相关时间函数的结果 其他相关&#xff1a; linux时区设置&#xff1a;链接 pgsql时区设置&#xff1a; 一、查看可以用的时区列表 新建一个php文件&#xff0c;输入下面程序即可 <?php echo "<pre>"; var_dump(timezone_id…

Linux系统编程 day03 Makefile、gdb、文件IO

Linux系统编程 day03 Makefile、gdb、文件IO 1. Makefile2. gdb3. 文件IO 1. Makefile Makefile文件中定义了一系列规则来指定哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重新编译&#xff0c;甚至更加复杂的功能操作。Makefile就像一个shell脚…

阿里云ack集群升级流程

最近一直在升级过期的ack 集群版本 从1.22升级到1.24.。 参考&#xff1a; 升级流程、方式及所需时间

vue.js 短连接 动态连接

有这么一种场景&#xff0c;我们实现了某个业务&#xff0c;现在需要将这个业务连接对外推广以期实现我们的运营、推广、佣金目的&#xff0c;那么我们如何实现呢&#xff1f; 比如这个页面连接为&#xff1a; https://mp.domain.com/user/creation/editor?spm1&userno12…

如何使用 WPF 应用程序连接 FastReport报表

随着期待已久的FastReport WPF的发布&#xff0c;您不再需要使用 FastReport .NET 来处理基于 WPF 的项目。 不久前&#xff0c;在 FastReport .NET 中使用 WPF 还相当不方便。并非一切都进展顺利&#xff1b;连接 FastReport.dll 和许多其他问题存在问题。我们重新思考了该方…

Linux+qt:创建动态库so,以及如何使用(详细步骤)

目录 1、根据安装Qt Creator的向导进行创建 2、开发动态库注意的一些细节 3、给动态库添加一个对外开放的接口文件 4、了解下Qt的 .pri文件&#xff08;非常实用&#xff09; 5、如何调用动态库.so 1、根据安装Qt Creator的向导进行创建 &#xff08;1&#xff09;选择“…

15篇MyBatis-Plus系列集合篇「值得收藏学习」

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…

网络渗透测试(TCP/IP)理论篇

TCP/IP体系 垂直服务&#xff1a;底层为高层服务 TCP/IP体系结构是一个分层的协议体系&#xff0c;由多个层次组成&#xff0c;每个层次都负责不同的功能。以下是TCP/IP体系结构的主要层次&#xff1a; 物理层&#xff08;Physical Layer&#xff09;&#xff1a;该层负责传输…

milvus采坑一:启动服务就会挂掉

原因一 硬盘满了&#xff0c;Eric数据文件存储在硬盘上&#xff0c;当硬盘不足&#xff0c;它就会启动后就挂掉。 此时pymilvus连接一直是timeout。 解决方法&#xff1a;更换存储路径。

(十二)Flask重点之session

session 自我介绍&基本使用&#xff1a; 在Flask中&#xff0c;Session是一种用于在客户端和服务器之间存储和传输数据的机制。它允许您在用户与应用程序之间保持状态&#xff0c;并且可以存储和检索有关特定用户的信息。 Flask使用Werkzeug库提供的SecureCookie来实现S…