ARMv8 - 安全机制(TrustZone) - 异常等级

这篇具有很好参考价值的文章主要介绍了ARMv8 - 安全机制(TrustZone) - 异常等级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

  • ARMv8架构处理器有一套异常等级(Exception level)机制,分成4个等级(EL0 ~ EL3)。
  • 处理器运行时会处于其中的某个等级并且可以进行等级切换。

资源差异

  • 每个异常等级都拥有一些自己版本的特殊寄存器,例如:system ctrl 寄存器(sctlr_el1,sctlr_el2 …),程序状态寄存器(SPSR_EL1,SPSR_EL3,…)。
  • 一些异常等级有些独有的特殊寄存器,例如:EL3 安全配置寄存器(Secure Configuration Register)(SCR_EL3),EL2 虚拟化配置寄存器(Hypervisor Configuration Register)(HCR_EL2)。
  • 处理器一般会使用当前异常等级的特殊寄存器来实现不同等级之间的物理隔离。

权限差异

  • 随着异常等级的提高,软件的访问权限也相应增加,因此异常等级又被称为安全等级。
  • 当处理器在某个异常级别执行的时候,处理器能够访问下面的资源:
  1. 可用于当前异常级别和当前安全状态的资源集。
  2. 在当前的安全状态下,所有更低异常级别上可用的资源。
  • 这意味着,异常等级为EL3时,处理器可以访问任何资源(包括安全状态和非安全状态下)。

初始等级

  • 处理器上电之后运行在最高的异常等级EL3,即bl1处于EL3。

异常等级切换

  • 该机制被命名为异常等级,是因为等级的切换只能通过同步异常实现,注意:不是通过中断实现的。
  • 异常级别切换只能通过软件触发同步异常,或者同步异常处理返回后。
  1. 软件触发同步异常时,异常级别增加或者保持不变。
  2. 同步异常处理返回时,异常级别减小或者保持不变。
  • 在发生异常即将进入或者从异常处理返回到另一个异常级别(包括异常级别不变的情况)时,待进入/返回的异常级别称之为目标异常级别。每个异常级别都有一个明确的目标异常级别,这个目标异常级别要么是默认定义的,要么是通过系统寄存器的相应bit定义的(注意没有异常级别的目标异常级别是EL0)。

软件触发同步异常

  • 软件想要进入更高的异常等级时就需要使用ARM提供的以下3个汇编指令触发同步异常。
  1. SVC(Supervisor Call)
  • 允许用户模式(EL0)下的程序请求os(EL1)服务,当用户空间程序通过系统调用陷入到内核空间的时候,最终是通过SVC指令进入到内核空间,即处理器异常等级从EL0切换成EL1。
  • 汇编指令
svc 
  1. HVC(Hypervisor Call)
  • 允许操作系统(EL1)请求虚拟化(EL2)服务
  • 当在ARMv8-A架构下,normal world, EL1尝试去访问EL2的时候,则会陷入到虚拟化层的,其中是通过HVC指令
  • HVC指令用于生成同步异常,该异常由EL2中运行的管理程序处理。
  • 参数和返回值通过寄存器传递,虚拟机监控程序还可以捕获住操作系统(EL1中的guest os)发出的SMC call,并且支持SMC call被模仿、传递给下一级或拒绝通过。
  • 汇编指令
hvc 
  1. SMC(Secure Moniter Call)
  • 允许EL1/EL2程序请求安全(EL3)服务
  • SMC 指令用于生成由EL3中运行的安全监视器代码处理的同步异常。
  • 参数和返回值都通过寄存器中传递,
  • 由安全监视器处理后指令可以传递给可信OS或安全软件堆栈中的某个其他实体。
  • 汇编指令
smc 
切换限制
  • 当处理器在EL0(运行应用程序)等级时,不能直接切换到EL2(管理程序)或EL3(安全监视器),只能先切换到EL1,调用内核处理再切换到更高等级。
  • 在操作系统内核(EL1),软件可以用HVC指令调用管理程序(EL2),或用SMC指令调用安全监视器(EL3),如果处理器有EL3(secure monitor)实现,EL3就能捕获到EL1的SMC请求,如果没有EL3实现,现象待确认。
  • 管理程序代码(EL2)中,程序可以用SMC指令调用安全监视器(EL3)。

armv8安全,安全机制,安全机制,arm文章来源地址https://www.toymoban.com/news/detail-792318.html

异常处理返回

  • 处于高异常等级的软件处理完低异常等级软件的请求后,可通过 eret 切换到低异常等级。
  1. eret
  • 例如:bl31固件(secure monitor)处于EL3 收到其它异常等级的请求,处理完后, 可通过 eret 返回原有异常等级。
  • 汇编指令
eret 

默认软件模型

ELn 应用范围
EL0 运行普通用户程序
EL1 操作系统或者一些特权函数
EL2 运行虚拟化扩展的虚拟监控程序(Hypervisor Monitor)
EL3 运行安全监控器(Secure Monitor)
  • EL0和EL1是必须实现的,EL2和EL3是可选的,而且实现的EL可以不连续,例如只实现了EL0、EL1和EL3。
  • 疑问:是否可以只实现EL1?例如:跑RTOS。

到了这里,关于ARMv8 - 安全机制(TrustZone) - 异常等级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ARMv8的异常等级(Exception Level)以及执行状态(AArch64/AArch32)

    目录 1,异常等级(Exception Level) 2,Execution states,执行状态 AArch64的异常等级 AArch32的异常等级: 3,异常等级切换  4,执行状态切换(AArch64 = AArch32) 5,状态切换后的寄存器状态 Registers at AArch32 PSTATE at AArch32 6,指令集的切换:Switching between the instruction sets 在ARMv8中,存在

    2024年02月13日
    浏览(42)
  • TrustZone for Armv8-A

    快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 — 适合小白入门 【目录】ARMv8/ARMv9架构高级进阶-[目录]👈👈👈 — 高级进阶、小白勿买 【加群】ARM/TEE/ATF/SOC/芯片/安全-学习交

    2024年02月04日
    浏览(30)
  • Armv8-M的TrustZone技术简介

    TrustZone技术是适用于Armv8-M的可选安全扩展,旨在为各种嵌入式应用提供改进的系统安全基础。 TrustZone技术的概念并不新鲜。该技术已经在Arm Cortex-A系列处理器上使用了几年,现在已经扩展到Armv8-M处理器。 在high level上,TrustZone技术适用于Armv8-M的概念与Arm Cortex-A处理器上的

    2024年01月22日
    浏览(37)
  • Armv8-M的TrustZone技术之内存属性单元

    如果处理器包含Armv8-M安全扩展,则内存区域的安全状态由内部安全属性单元(SAU, Secure Attribution Unit )或外部实现定义的属性单元(IDAU, Implementation Defined Attribution Unit )的组合控制。SAU区域的数量在处理器实现期间定义。在复位时,SAU处于禁用状态。 如果未定义任何SAU区

    2024年01月23日
    浏览(31)
  • ARMv8-A 与异常相关的指令

    最近一直在学习 ARMv8-A 的东西,记录一下与异常相关的指令。下面的内容基于AArch64讨论,暂不考虑 AArch32。 与异常生成相关的指令如下所示。下面主要学习 SVC 和 HVC 。 1. SVC SVC (Supervisor Call) 产生一个路由到 EL1 的异常,可以调用系统服务这些。此时, ESR_ELx.EC = 0x15 。 2. HVC

    2024年02月21日
    浏览(36)
  • ARMv8-AArch64 的异常处理模型详解之异常类型 Exception types

    异常(Exception)通俗点来讲,就是系统在正常运行的时候出现的非正常事件,这个非正常事件会导致系统状态更改或者其他错误,为了确保系统功能能正常运行,需要一些带有特权的软件代码(exception handler)来采取一些补救措施或者更新系统状态,这个过程被称为异常处理

    2024年01月21日
    浏览(28)
  • ARMv8-AArch64 的异常处理模型详解之异常处理概述Handling exceptions

    在介绍异常处理之前,有必要了解一些关于异常处理状态的术语: 当处理器响应一个异常时,我们称该异常被获取了( taken )。 处理器响应异常之前的状态被称为 taken from 。 处理器响应异常之后的状态被称为 taken to 。 因此,当处理器识别到异常时,此时处理器处于 taken

    2024年02月20日
    浏览(35)
  • ARMv8-AArch64 的异常处理模型详解之异常向量表vector tables

    目录 一,AArch64 异常向量表  二,栈指针以及SP寄存器的选择 三,从异常返回   异常向量表 (vector tables) 是一组存放于普通内存( normal memory) 空间的,用于处理不同类型异常的指令(exception handler)。 当异常发生时,处理器需要跳转到对应的异常处理器(exception handler)

    2024年02月22日
    浏览(42)
  • ARMv8-AArch64 的异常处理模型详解之异常处理详解(同步异常和异步异常的分析和处理)

    在文章ARMv8-AArch64 的异常处理模型详解之异常类型 Exception types中提到过,同步异常是处理器在执行指令时产生的异常,是一种精确的,可以具体定位到是哪条指令导致异常的产生。下面笔者将介绍三个用于定位并分析同步异常产生的寄存器。 在文章ARMv8-AArch64 的异常处理模型

    2024年03月27日
    浏览(33)
  • 【ARM架构】ARMv8-A 系统中的安全架构概述

    一个安全或可信的操作系统保护着系统中敏感的信息,例如,可以保护用户存储的密码,信用卡等认证信息免受攻击。 安全由以下原则定义: 保密性:保护设备上的敏感信息,防止未经授权的访问。有以下几种方法可以做到,比如密码和加密密钥。 完整性:使用公钥来保护

    2024年02月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包