【ARM架构】ARMv8-A 系统中的安全架构概述

news2025/3/15 3:56:52

一个安全或可信的操作系统保护着系统中敏感的信息,例如,可以保护用户存储的密码,信用卡等认证信息免受攻击。

安全由以下原则定义:

  • 保密性:保护设备上的敏感信息,防止未经授权的访问。有以下几种方法可以做到,比如密码和加密密钥。

  • 完整性:使用公钥来保护敏感信息防止被修改。

  • 可用性:确保对敏感信息的访问一定是经过授权的,利用固件更新来检测未经授权的访问。

举一个生活中的例子,可信系统存储了移动支付的密码,数字证书等

在开放的系统中,很难实现绝对安全,因为用户可能会下载各种各样的软件到移动设备上,同时也会下载一些恶意代码,这可能会篡改你的系统。

软件和硬件攻击可分为以下几类:

  • 软件攻击:恶意软件攻击通常不需要访问实际的设备,可以利用操作系统或应用程序的漏洞实现远程攻击。

  • 简单的硬件攻击:硬件攻击大部分是非破坏性的攻击,需要拿到实际的物理设备,并使用常见的工具,例如jtag和逻辑探针。

  • 专业的硬件攻击:这种攻击需要复杂而昂贵的工具,如聚焦离子束(FIB)技术或功率分析技术,而且更常用于对付智能卡设备。

TrustZone技术就是专门用来对抗软件攻击的。TrustZone也可以抵御一些简单的硬件攻击。

TrustZone的硬件架构

TrustZone架构为系统设计者提供了一种帮助保护系统的方法。

即使是低级别的程序员也应该理解TrustZone的架构设计。

ARM 安全扩展模型允许系统开发人员对硬件设备和软件资源进行分区,以便他们既可以存在于安全子系统的Secure world,也可以存在于其他子系统的Normal world。

ARM 手册中使用 Secure World 和 Non-secure World来指示系统的安全状态。

Non-secure World并不意味着有安全漏洞,而是指正常运行的系统,即Normal world。

通常情况下,Secure World 和 Non-secure World存在着主从关系。

Secure World 的代码只有操作系统通过SMC(Secure Monitor Call )指令调用才可以执行。

SMC是不会主动发生的。

Non-secure World 的内存和功能也可以被Secure World 访问

但是不是绝对的,这部分实际上在有些业务中是做了完全的隔离的,具体还是要看业务的实现。

Secure monitor 管理着Secure World 和Non-secure World的切换,类似于操作系统中的上下文环境。

确保离开Secure World 时 当前环境被完整保存下来,当处理器再次切换到Secure World 时可以被正确 恢复。

和上下文切换异曲同工之妙

TrustZone是对ARM架构的补充扩展,这意味着一个处理器可以同时运行Secure World 和Non-secure World的代码。

如果Secure World 配置了中断外设可用,那么Secure World 和Non-secure World 的代码可以相互调用。

Secure monitor提供了Secure World 和Non-secure World的接口。出于程序的健壮性考虑, Secure monitor的代码应该在禁用中断的上下文执行。

编写一个可重入的 Secure monitor会很复杂,而且并不会带来太多的好处。

另外,Secure World 和Non-secure World 程序的执行也可以像操作系统那样执行多任务并行。

虽然Secure World 的程序执行时可访问的资源是完全独立于Non-secure World 的,但是两个世界也可以互相让步,以实现多任务并行的效果。

时分复用的效果

像固件或任何其他系统软件一样,Secure World 的软件必须尽量减少对系统其他部分的影响。

例如,Secure World的 代码执行时应避免消耗大量的时间。

Non-secure World 中的中断应尽可能快的传递给Normal World,这有助于确保Normal World软件良好的响应性。

内存系统由一个额外的位来划分,这个位叫做NS位。它表示访问的内存是Secure World 还是Non-secure World 。

这个位被添加到所有内存系统事务中,包括高速缓存标签和对系统内存和外设的访问。NS位可以为Secure World和Non-secure World 提供不同的物理地址空间。

这部分是访问实现在硬件上需要总线、CPU访问请求标识位、内存控制器标识位一一匹配。

在Normal World 中运行的软件只能对内存进行Non-secure 的访问。因为在由Normal World产生 的内存事务中,总是把NS位设置为1,而不考虑Normal World 中翻译表中的设置。

在Secure World 中运行的软件只进行Secure 的内存访问,但也可以使用翻译表中的NS和NSTable标志对特定的内存进行Non-secure 的访问。

如果对标记为安全的缓存数据进行非安全访问会导致缓存缺失。

如果对标记为安全的外部存储器进行非安全访问,通常会向内核返回一个错误响应。

EL3有自己的翻译表,由TTBR0_EL3(Translation Table Base Register )和TCR_EL3(Translation Control Register ) 管理。

在安全状态下,只允许stage 1的翻译,没有TTBR1_EL3寄存器。

EL1翻译表寄存器在安全状态之间不会被存储,因此TTBR0_EL1、TTBR1_EL1和TCR_EL1的值必须作为Secure monitor上下文切换操作的一部分为每个世界保存和恢复。

这就使得每个世界都有一套本地的转换表。 Secure World的映射会被隐藏起来,并受到Normal World 的保护。

Secure World 翻译表中包括NS和NSTable位,这决定了是否可以对Secure World 和 Non-secure World的物理地址空间。

Secure 和 Non-secure 的entries 可以在缓存和TLB中共存。在不同的世界之间切换时,缓存不会失效。

Normal World只能进行 Non-secure的访问,所以只能命中标记为 Non-secure 的缓存。而Secure World可以产生Secure 和 Non-secure的访问,如果安全状态在访问时发生变化,可能还会有缓存管理。

TLB中的entries 记录了是由那个世界产生的entries 。尽管Non-secure状态永远不能对Secure 的数据进行操作,但Secure World 可以将NS行分配到缓冲区。

另外,缓存的启用和禁用在每个异常级别都是不同的。

缓存控制对于两个世界来说都是独立的,但对所有的异常级别来说并不是独立的。

所以,EL0不能直接启用或禁用缓存,而EL2可以覆盖Non-secure EL1的行为。

Secure World和Non-secure World 的交互

如果你在包含安全服务的系统中编写代码,了解Secure World和Non-secure World 的交互方式对你很有用。

一个典型的操作系统都会包含一个轻量的内核或者可信执行环境(TEE)。

例如,在Secure World运行加密服务。它可以与Normal World 中的操作系统进行交互,Normal World 可以通过SMC调用访问Secure World。

通过这种方式,Normal World 既可以访问Secure World,又不会担心暴露加密的密钥。

一般来讲,开发人员不会与安全扩展组件,TEE,或者可信服务直接交互,而是通过Normal world 提供的API(例如authenticate())访问Secure World。

下图以应用程序调用API的形式展示了Normal world 和Secure World 的交互。API通过系统调用到TrustZone Driver,然后经过 Secure monitor传递给TEE。

这种调用方式会在Secure World和Normal World间频繁传递数据。

例如,在 Secure world 中有一个签名检查器。Normal world可以请求Secure World使用SMC调用来验证下载更新的签名。

如果Secure World需要访问Normal world所使用的内存,Secure World可以使用其翻译表描述符中的NS位,以确保它使用Non-secure方式访问来读取数据。

这一点很重要,因为与请求数据相关的内容可能已经在缓存中了,因为Secure World执行的访问都会标记为Non-secure的地址。安全属性可以被认为是一个额外的地址位

如果内核使用安全内存访问来尝试读取数据,它就不会命中已经在缓存中的Non-secure数据。

如果你是一个平时只会和Normal world打交道的程序员,你可以忽略Secure World中发生的事情,因为它的操作对你来说是隐藏的。

一个副作用是,中断延迟可能会略有增加。Secure World可以是完全阻塞的,所以如果一个中断发生Secure World中时,这可能会阻塞Normal world的中断。

但与一般操作系统的整体延迟相比,可以忽略不计。这种问题给Normal world带来的影响取决于Secure World操作系统的架构设计。

Secure 和Normal worlds 的切换

在ARMv7的安全扩展中,软件使用Monitor mode在Secure 和Non-secure state切换。该模式和Secure state 中其他特权模式是一样的。

在ARMv8-A处理器中,AArch32相当于ARMv7-A。

对于ARMv8架构,当EL3使用AArch32时,ARMv8架构相当于ARMv7,以确保完全兼容,安全状态下的所有特权模式被视为处于EL3。

AArch32的安全模型如下图所示。在这种情况下,EL3是AArch32,以提供一个安全的操作系统和监视器。

下图显示了当EL3执行AArch64以提供安全监视器时的安全模型。EL1用于安全操作系统。当EL3使用AArch64时,EL3被用来执行负责在Non-secure state和Secure state之间切换的代码。

为了与AArch32保持一致,Secure state的EL1和EL0具有和Non-secure state的EL1和EL0不同的虚拟地址空间。
这使得AArch32 32位架构的运行在Secure state的代码可以在Non-secure state运行的64位操作系统中使用。

当Normal World 执行停止而Secure World的执行开始时,通过执行 Secure Monitor(SMC)指令或通过硬件异常机制(如中断或异步中止)在它们之间进行上下文切换。

ARM处理器有两种中断类型:FIQ和IRQ。

在Secure World中也是支持中断的,其原理是将Secure World产生的中断重定向到EL3,并且 和当前的DAIF 字段无关。

然而,这些控制只区分了主要的中断类型。IRQ, FIQ, and asynchronous aborts。更详细的控制需要将中断分为 Secure 和Non-secure组。

如果要做到这一点,需要GIC的支持,在GIC中有一些特性来支持划分为不同的组。

一个典型的例子是FIQ被用作Secure interrupts,通过在中断控制器内将安全中断源映射为FIQ。同时,相关的外设和中断控制器寄存器必须被标记为只能被安全访问,以防止Normal World重新配置这些中断。

使用安全扩展的实现通常有一个轻量级的可信内核,在Secure World中托管安全服务(例如加密)。

一个完整的操作系统在Normal World中运行,并能够使用SMC指令访问安全服务。

通过这种方式,Normal World可以访问服务功能,在普通世界中执行的任意代码不会有敏感数据暴露的风险。

集群中的安全问题

集群系统中的每个内核都具有相同的安全特性。

集群中任何数量的核心都可以在任何时间点上在Secure World中执行,并且核心能够在世界之间独立过渡。

寄存器控制Normal World代码是否可以修改Snoop控制单元(SCU)的设置。同样,在整个集群中分配优先级中断的GIC必须被配置为安全状态。

调试安全性

安全系统还控制调试规定的可用性。你可以为 Normal worlds 和Secure worlds配置独立的硬件调试,如JTAG调试和跟踪控制,这样就不会有关于受信任系统的信息泄露了。

你可以通过一个安全外设来控制硬件配置选项,或者你可以硬件连接它们,并使用以下信号来控制它们。

  • Secure Privileged Invasive Debug Enable (SPIDEN): JTAG debug.
  • Secure Privileged Non-Invasive Debug Enable (SPNIDEN): Trace and Performance Monitor.

总结

  • TrustZone 是ARM 架构的一个安全扩展模型,可以用在任何ARM处理器中。

  • Normal world 通过SMC指令访问Secure world。Secure monitor 管理着Normal World和Secure World 的切换。Secure monitor 的代码在禁用中断的上下文执行。

  • 内存系统事务中的NS位表示访问的是Secure World 的内存还是Normal World的内存。Normal World只能对内存进行非安全访问,Secure World 既可以进行安全访问,也可以进行非安全访问,只需要更改NS位即可。

  • Secure World的翻译表和Non-Secure World的翻译表是独立的,Secure World的翻译表受到Normal World的保护。

  • ARMv8-A 可以兼容32位和64位TrustZone。当ARMv8-A运行AArch32 TrustZone 时,相当于ARMv7-A。二者区别主要在于EL3的不同,ARMv7-A中EL3 提供Secure Monitor 和Srcure OS,而ARMV8 中,EL3只提供Secure Monitor 。

获取security_in_an_armv8_system_100935_0100_en文档请关注文末名片,私信trustzone01

参考资料

  • security_in_an_armv8_system_100935_0100_en
  • documentation:https://developer.arm.com/documentation
  • Arm TrustZone explained:https://www.microcontrollertips.com/embedded-security-brief-arm-trustzone-explained/
  • trustedfirmware:https://www.trustedfirmware.org/
  • ARMv8-A TrustZone:https://blog.csdn.net/qq_24835087/article/details/122636928
  • 【ARM架构】armv8:https://www.cnblogs.com/dongxb/p/17149702.html

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

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

相关文章

算法详解:滑动窗口-- 最大连续1的个数 III

题目来源:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 本期讲解滑动窗口经典例题,我会从三个点开始讲解题目1.题目解析2.算法原理 3.编写代码 1.题目解析 这道题目理解起来还是比较简单的,我们简单分析一下,也就是给定一个数组,数组是由1和0组成…

PLC-Recorder的延伸分析功能说明

目录 一、缘起 二、如何从PLC-Recorder获取数据 1、在线获取 2、全自主打开数据文件 3、延伸分析 三、设置方法 四、效果展示 一、缘起 在各个行业,在不同的场景中,朋友们拿到数据后,想做的事情五花八门,有做宏观分析的、…

ABC341 A-G

Toyota Programming Contest 2024#2(AtCoder Beginner Contest 341) - AtCoder B读不懂题卡了,F读假题卡了,开题开慢了rank了 A - Print 341 题意: 打印一串交替出现的包含N个0,N1个1的01串 代码&…

OpenCV-40 绘制直方图

一、使用matplotlib画直方图 可以利用matplotlib把OpenCV统计得到的直方图绘制出来 示例代码如下: import cv2 import matplotlib.pyplot as pltlena cv2.imread("beautiful women.png") # 变为黑白图片 gray cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY…

视觉设计师的项目评审复盘攻略:如何提升设计质量与效率

视觉设计师的角色是至关重要的,以确保设计项目满足预期的质量和结果。作为一名视觉设计师,有必要进行定期的项目审查,以确保项目在正轨上进行,并尽早解决任何问题。在本文中我们将讨论可视化设计人员如何做好项目评审,…

HarmonyOS—@State装饰器:组件内状态

State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变。 在状态变量相关装饰器中,State是最基础的,使变量拥有状态属性的装饰器&a…

永久禁止windows自动更新方法

文章目录 前言一、打开本地组策略编辑器二、禁用windows更新总结 前言 每次打开电脑,右下角就会弹出设备更新提示,看着令人烦恼,并且更新可能导致电脑设置发生改变甚至是卡顿,所以为了自己方便于是出了禁用电脑更新的办法&#x…

「算法」二分查找1:理论细节

🎇个人主页:Ice_Sugar_7 🎇所属专栏:算法详解 🎇欢迎点赞收藏加关注哦! 二分查找算法简介 这个算法的特点就是:细节多,出错率高,很容易就写成死循环有模板,但…

Day46 300最长递增子序列 674最长连续递增子序列 718最长重复子数组 1143最长公共子序列

300 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序…

CV | Segment Anything论文详解及代码实现

本文主要是详解解释了SAM的论文部分以及代码实现~ 论文:2023.04.05_Segment Anything 论文地址:2304.02643.pdf (arxiv.org) 代码地址:facebookresearch/segment-anything: The repository provides code for running inference with the Seg…

【C语言】长篇详解,字符系列篇1-----“混杂”的各种字符类型字符转换和strlen的模拟实现【图文详解】

欢迎来CILMY23的博客喔,本期系列为【C语言】长篇详解,字符系列篇1-----“混杂”的各种字符函数……,图文讲解各种字符函数,带大家更深刻理解C语言中各种字符函数的应用,感谢观看,支持的可以给个赞哇。 前言…

SpringCloud-Nacos集群搭建

本文详细介绍了如何在SpringCloud环境中搭建Nacos集群,为读者提供了一份清晰而详尽的指南。通过逐步演示每个关键步骤,包括安装、配置以及Nginx的负载均衡设置,读者能够轻松理解并操作整个搭建过程。 一、Nacos集群示意图 Nacos&#xff0…

ClickHouse--12-可视化工具操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 可视化工具操作1 tabixhttp://ui.tabix.io/ 2 DBeaverhttps://dbeaver.io/download/ 可视化工具操作 1 tabix tabix 支持通过浏览器直接连接 ClickHouse&#xff…

2023年程序员观察报告

春节假期已过,2023年悄然过去,2024年已经到来,无论2023年是快乐的、成长的、积极的,亦或是痛苦的、寂寥的、迷茫的,都要恭喜在座的各位程序员又熬过了一年! ①加班篇 2023年,你完成了 132个需求…

【DDD】学习笔记-聚合之间的关系

聚合之间的关系 无论聚合是否表达了领域概念的完整性,我们都要清醒地认识到这种所谓的“完整”必然是相对的。如果说在领域分析模型中,每个体现了领域概念的类是模型的最小单元,那么在领域设计模型中,聚合才是模型的最小单元。我…

基于ORB-SLAM2与YOLOv8剔除动态特征点

基于ORB-SLAM2与YOLOv8剔除动态特征点 以下方法以https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download#freiburg3_walking_xyz数据集进行实验测试APE 首先在不剔除动态特征点的情况下进行测试: 方法1:segment坐标点集合逐一排查剔除 利用YOLOv8的segm…

Kubernetes 元信息与控制器模型

一、资源元信息: Kubernetes 的资源对象组成:主要包括了 Spec、Status 和元数据。其中 Spec 部分用来描述期望的状态,Status 部分用来描述观测到的状态。 元数据主要包括了:Labels 用来识别资源的标签;Annotations 用…

术前皮肤大面积消毒杀菌工具耗材:PP手柄+海绵头洗必泰CHG涂药器

PP手柄海绵头洗必泰CHG消毒涂药器是一种常用于手术前皮肤消毒杀菌的工具。它由PP手柄和海绵头组成,海绵头上涂有必泰CHG消毒液。 这种消毒涂药器被广泛应用于医疗领域,特别是在手术前的皮肤消毒过程中。PP手柄是一种轻便且易于握持的材料,方便…

Vue练习3:组件开发3(页面切换)

预览 ——————————————————————————————————————————— 组件文档 Pager组件 属性 属性名含义类型必填默认值current当前页码(总数据量/单页容量)Number否1total总数据量Number否0limit单页容量Number否10vis…

Aster实现一台电脑当两台使——副屏使用独立win账号

前言:笔者每年回家,都面临着想要和小伙伴一起玩游戏,但小伙伴没有电脑/只有低配电脑的问题。与此同时,笔者自身的电脑是高配置的电脑,因此笔者想到,能否在自己的电脑上运行游戏,在小伙伴的电脑上…