当前位置: 首页 > news >正文

可信执行环境简介:ARM 的 TrustZone

目录

  • 可信执行环境
  • 安全世界与普通世界 - 上下文切换机制
    • ARMv7 中的异常处理
    • ARMv8 中的异常处理
  • 信任区商业实施
  • TrustZone 本身的漏洞
    • 高通
    • Trustonic
  • 信任区强化的弱点
  • 结论
  • 声明

可信执行环境

具有信任区的 ARM 处理器实现了架构安全性每个物理处理器内核提供两个虚拟的扩展 核心,一个被认为是不安全的,称为不安全的世界,另一个被认为是安全的 称为安全世界,以及两者之间的上下文切换机制,称为监视模式。

来自 ARM 的架构:
在这里插入图片描述
如图所示,TrustZone 由监视器、可选操作系统和可选应用程序组成,所有这些都在安全世界中运行。 Trustzone实现可以是所有这些组件,例如在Qualcomm或Trustonic实现上, 或者像Nintendo Switch实现那样仅是一个监视器。

实施 TrustZone 操作系统为添加可信功能提供了一个更灵活的模型,这些功能旨在为普通世界提供额外的安全服务。

这些功能可作为签名的第三方应用程序(称为trustlet)提供,并由在TrustZone(SecureOS)中运行的操作系统在Secure World中安全地加载和执行。

这些安全加载功能之一(即高通)在高通公开之前由Gal Beniamini完全复古设计。

trustlet完整性检查过程是相对标准的,由一个哈希表组成,每个哈希代表ELF二进制文件一段的哈希。然后,此哈希表由 trustlet 颁发者签名,并且可以通过直接放置在签名之后的证书链来验证此签名。由于将 SHA256 放置在保险丝 (QFuse) 中的根证书,可以验证此信任链,从而确保其完整性。
在这里插入图片描述
TrustZone 用于多种用途,包括 DRM、访问平台硬件功能,例如在 eFuse 中存储的 RSA 公钥哈希、硬件凭据存储、安全启动、安全元件仿真等。

安全世界与普通世界 - 上下文切换机制

处理器当前运行的世界可以是由安全配置寄存器中可用的非安全位确定。 物理处理器可以从非安全世界可以通过执行名为安全监视器呼叫(SMC),它可以被视为监视器模式的例外软件。 此外,主存储器也标有非安全位,允许内存安全和非安全世界之间的隔离。

ARMv7 中的异常处理

ARMv7 中的异常处理要求安全世界注册遇到 SMC 指令时处理器将跳转到的向量。 此处理程序位于与存储在监视器矢量中的地址的偏移量0x8 ARMv7 中的基址寄存器 (MVBAR)。

ARMv8 中的异常处理

在 ARMv8 中,引入了一个新的异常模型,该模型定义了异常级别的概念。例外级别确定权限级别(PL0 到 PL3) 在哪些软件组件运行以及哪些处理器模式(不安全和安全) 应用于运行它。在 ELn 处执行对应于特权 PLn,并且 n 越大, 执行级别具有的权限越多。 发生异常时,处理器分支到异常向量表 并运行相应的处理程序。在 ARMv8 中,每个异常级别都有自己的异常级别异常向量表。
在这里插入图片描述
安全监视器调用 (SMC) 生成由存储在 VBAR_EL3 + 0x600 的处理程序(同步 EL3 异常处理程序)

信任区商业实施

已经开发了几种商业实现,其中三种最普遍 在移动平台上:

1、来自Trustonic的Kinibi
2、来自高通的QSEE公司
3、可信核心(华为TEE操作系统)

在TrustZone的不同实现中发现了许多漏洞, 但在多个平台的安全启动中也发现了几个, 允许在信任区中获取代码执行。下面讨论其中一些漏洞及其影响。

TrustZone 本身的漏洞

高通

Gal Beniamini 发现了几个漏洞,包括安全世界用户空间权限提升中的代码执行,以通过 SMC 处理程序在安全世界内核中获得代码执行或通过SVC(ARM中的系统调用)处理程序允许KeyMaster Keys从TrustZone提取Linux内核劫持,和引导加载程序解锁

Azimuth Security发现了两个漏洞,包括在Qualcomm Trustzone中写入原语和任意代码执行

一个漏洞允许将零字写入信任区内核中的任何地址。它可用于禁用 TrustZone 内存边界验证函数, 制作任意写入基元。

正如本文所示,高通TrustZone遭受单点故障,存在许多个人 TrustZone中的参与者,但其中一个玩家的一个错误会影响所有其他组件。 单个任意内存写入漏洞(尤其是在安全世界内核中)可使整个安全模型崩溃。

最后,使用有符号比较而不是无符号比较会导致信息从安全世界泄漏到正常世界

正如本文所示,高通TrustZone遭受单点故障,存在许多个人 TrustZone中的参与者,但其中一个玩家的一个错误会影响所有其他组件。 单个任意内存写入漏洞(尤其是在安全世界内核中)可使整个安全模型崩溃。

最后,使用有符号比较而不是无符号比较会导致信息从安全世界泄漏到正常世界

Trustonic

与QSEE不同,由Trustonic开发的TrustZone以前称为t-base,然后更名为Kinibi,具有微内核,这意味着不再有单点故障。 尽管关于Trustonic的TrustZone的公开研究较少,但仍有一些文章详细介绍了t-base内部结构和在Secure World用户空间中发现的一些漏洞。

从Qualcomm TrustZone收购TEE OS比从Trustonic TrustZone更容易。例如,Qualcomm TrustZone 可以直接从 /dev/block 下的块中获取,而 Trustonic TrustZone 必须通过反向启动来获取。

信任区强化的弱点

TrustZone 强化是获得良好安全属性并减缓逆向工程和利用过程的关键点。 尽管如此,下面列出的几个经典硬化点并未应用:

这两种实现在生产中都存在许多调试字符串。
Kinibi上没有ASLR,QSEE上只有9个ASLR位。
Kinibi上没有Stack Cookie。相反,QSEE上有Stack Cookie。
有趣的是,一些TrustZone实现,例如为Nintendo Switch开发的实现,是加密存储的,并在启动过程中解密,这给攻击者增加了额外的难度。

结论

一方面,使用 TrustZone 技术实施的安全模型通过分离安全世界和正常世界提供了额外的分段,例如,允许 DRM 解决方案来防止敌对环境,例如用户土地和内核土地上的受感染系统。

另一方面,整个操作系统的开发是一项艰巨的任务,通常涉及许多错误。运行TrustZone的操作系统也不例外。导致安全世界内核内存损坏的开发错误会导致安全世界中的系统完全损坏,从而使其安全性过时。它还完全损害了可以从安全世界访问的正常世界。

最后,如果在安全启动链中发现漏洞,则可以在执行TEE操作系统之前对其进行破坏,例如多次

声明

本博客源于https://blog.quarkslab.com/introduction-to-trusted-execution-environment-arms-trustzone.html,仅供笔记参考。

相关文章:

可信执行环境简介:ARM 的 TrustZone

目录 可信执行环境安全世界与普通世界 - 上下文切换机制ARMv7 中的异常处理ARMv8 中的异常处理 信任区商业实施TrustZone 本身的漏洞高通Trustonic 信任区强化的弱点结论声明 可信执行环境 具有信任区的 ARM 处理器实现了架构安全性每个物理处理器内核提供两个虚拟的扩展 核心…...

【音视频流媒体】 3、ffmpeg、ffplay、ffprobe 超详细介绍

文章目录 一、ffmpeg1.1 安装1.2 基本参数 二、ffprobe2.1 查编码格式2.2 查视频时长 五、视频转流5.1 MP4转H2645.2 H264转MP45.3 AVI转MP45.4 MP4转H265 六、视频文件6.1 播放6.2 filter 过滤器6.2.1 crop 6.3 视频截取6.4 视频拼接6.5 获取分辨率 七、视频和图7.1 视频抽帧7…...

解决kong部署自定义插件报 helloworld plugin is enabled but not installed

背景 我使用的是docker环境部署,使用的是自定义挂载plugins路径 -e "KONG_LUA_PACKAGE_PATH/plugins/?.lua" \ -v "/plugins:/plugins" \ -e "KONG_PLUGINSbundled,helloworld" \但是当我只需docker run的时候就报错 [error] 1#0:…...

动态数据源自定义SqlSessionFactoryBean时mybatis plus配置失效

环境: 动态数据源spring-boot 2.7.15mybatis-plus 3.5.2 yaml配置: spring:datasource:db100:username: xxxpassword: xxxjdbc-url: jdbc:kingbase8://xxx.xxx.xxx.xxx:54321/100driver-class-name: com.kingbase8.Driver# url: jdbc:postgresql://xxx…...

【Qt控件之QDialogButtonBox】概述及使用

概述 QDialogButtonBox类是一个小部件,它以适合当前小部件样式的布局呈现按钮。 对话框和消息框通常以符合该台界面指南的布局呈现按钮。不同的平台会有不同的对话框布局。QDialogButtonBox允许发人员向其添加按钮,并将自使用用户的桌面环境所适合的布局…...

IPv6知识概述 - ND协议

IPv6知识概述 - ND协议 参考文章:https://blog.csdn.net/Gina_wj/article/details/106708770 IPv6基础篇(四):邻居发现协议NDP ND协议功能概述 ND(Neighbor Discovery,邻居发现)协议是IPv6的…...

react-redux的connect函数实现

react-redux对store订阅的实现原理: storeContext.js import { createContext } from "react";export const StoreContext createContext() connect.js import React, { PureComponent } from react // import store from ../../store; import {Stor…...

Vue3使用Vite创建项目

node版本:node -v v18.16.0 npm版本: npm -v 9.5.1 Vite Vite:是一种新型前端构建工具,能够显著提升前端开发体验 脚手架,创建Vue项目,替代 Vue-cli 基于Vite创建vue项目: 1.npm create vitelatest 2.完…...

NCV7724DQBR2G车规级半桥电机驱动芯片-专为汽车,工业自动化应用提供完美解决方案

车规级半桥电机驱动芯片是一种用于驱动直流电机的芯片,常用于电动汽车、电动自行车等领域。它可以控制电机的转速和方向,并且具有过流保护、过温保护等功能,可以保证电机的安全运行。 NCV7724DQBR2G是一款车规级八通道半桥驱动器,…...

NSS [GWCTF 2019]枯燥的抽奖

NSS [GWCTF 2019]枯燥的抽奖 开题让我猜字符串,这种题目肯定不是猜,应该是类似于php伪随机数。 dirsearch扫他一下。 访问/check.php得到源码。 分析一下代码。 通过PHP伪随机数从字符库$str_long1中选取20个字符组成字符串,返回给我们前十…...

微信小程序会议OA系统

Flex弹性布局 Flex弹性布局是一种 CSS3 的布局模式,也叫Flexbox。它可以让容器中的元素按一定比例自动分配空间,使得它们在不同宽度、高度等情况下仍能保持整齐和密集不间隙地排列。 在使用Flexbox弹性布局时,首先需要创建一个容器和若干个…...

CICD:Circle CI 实现CICD

持续集成解决什么问题 提高软件质量效率迭代便捷部署快速交付、便于管理 持续集成(CI) 集成,就是一些孤立的事物或元素通过某种方式集中在一起,产生联系,从而构建一个有机整体的过程。 持续,就是指长期…...

竞赛 深度学习YOLO安检管制物品识别与检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov55 模型训练6 实现效果7 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLO安检管制误判识别与检测 ** 该项目较为新颖,适合作为竞赛课题方向&…...

【华为OD机试python】斗地主之顺子【2023 B卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 在斗地主扑克牌游戏中, 扑克牌由小到大的顺序为:3,4,5,6,7,8,9,10,J,Q,K,A,2, 玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。 其中顺子的出牌规则为:由至少5张由小到大…...

ant design DatePicker禁用之前的时间

1、代码 <DatePicker fieldProps{disabledDate: (current: any) > {return current < moment().startOf(day);}}/>2、效果...

C语言---预处理详解

1.预定义符号 在C语言中有一些内置的预定义符号 __FILE__ __LINE__ __DATE__ __TIME__ __STDC__//进行编译的源文件 //文件当前的行号 //文件被编译的日期 //文件被编译的时间 //如果编译器遵循ANSI C&#xff0c;其值为1&#xff0c;否则未定义 编译器在__STDC__报错,说明,v…...

数组和对象有什么区别?

数组&#xff08;Array&#xff09;和对象&#xff08;Object&#xff09;是两种不同的数据结构&#xff0c;它们在使用和表示数据上有一些区别。 1&#xff1a;数组&#xff08;Array&#xff09;&#xff1a; 有序集合&#xff1a;数组是一个有序的数据集合&#xff0c;每个…...

顺序表(第二节)实现和解析

目录 1.顺序表中的头文件 &#xff08;每一种函数方法&#xff09; 2.关于typedef 的用法 3.初始化和销毁表 3.1初始化表 3.2销毁表 4.打印表 5.自动扩容表&#xff01;&#xff01;&#xff01;&#xff08;重点&#xff09; 6.头部插入表和尾部插入表 6.1尾部插入表 …...

Hadoop3教程(二十一):MapReduce中的压缩

文章目录 &#xff08;123&#xff09;压缩概述在Map阶段启用在Reduce阶段启用 &#xff08;124&#xff09;压缩案例实操如何在Map输出端启用压缩如何在Reduce端启用压缩 参考文献 &#xff08;123&#xff09;压缩概述 压缩也是MR中比较重要的一环&#xff0c;其可以应用于M…...

04、RocketMQ -- 核心基础使用

目录 核心基础使用1、入门案例生产者消费者 2、消息发送方式方式1&#xff1a;同步消息方式2&#xff1a;异步消息方式3&#xff1a;一次性消息管控台使用过程中可能出现的问题 3、消息消费方式集群模式&#xff08;默认&#xff09;广播模式 4、顺序消息分析图&#xff1a;代码…...

国产OK镜靠谱品牌怎么选?欧普康视硬核资质与全维度实力详解

导读&#xff1a;当下国民近视问题愈发普遍&#xff0c;大众对安全、高效的非手术视力矫正需求持续攀升。角膜塑形镜&#xff08;OK镜&#xff09;凭借非手术、可逆、日间高清裸眼视力的核心优势&#xff0c;成为青少年近视防控、成年人视力矫正的主流选择。但市面上OK镜品牌繁…...

18V/4A同步降压转换器:MPQ8632GLE-4的COT控制与快速瞬态响应解析

MPQ8632GLE-4&#xff1a;4A/18V 同步降压转换器的紧凑型电源解决方案在通信设备、分布式电源系统以及服务器主板等应用中&#xff0c;电源管理单元需要在小面积内实现高效率的电压转换&#xff0c;同时保持良好的瞬态响应。传统的 PWM 控制器往往需要复杂的环路补偿设计&#…...

告别丢帧!用CANoe 12+和VN5610A搞定CSM ECAT模块高速采集(附100kHz采样率避坑要点)

突破100kHz采样率瓶颈&#xff1a;CANoe 12与VN5610A高速数据采集全攻略 在汽车电子测试领域&#xff0c;高速数据采集一直是工程师面临的重大挑战。当采样率超过100kHz时&#xff0c;传统配置方式往往会出现数据丢帧、时间戳错乱等问题。本文将深入解析CANoe 12与VN5610A硬件组…...

告别if/else地狱:从表驱动到设计模式的代码重构实战

1. 项目概述&#xff1a;从“屎山”到“优雅”的代码重构之旅“优雅地优化掉这些多余的if/else”&#xff0c;这几乎是每个有一定经验的开发者&#xff0c;在接手或维护一个项目时&#xff0c;内心最常响起的呐喊。我见过太多代码&#xff0c;它们最初可能只是几个简单的条件判…...

科研学术篇---文献引用格式

面对五花八门的引用格式&#xff0c;你只需要记住一个核心&#xff1a;不同的学科&#xff0c;就像不同的“方言区”&#xff0c;各自有一套约定俗成的引用“语法”。学会识别和使用它们&#xff0c;是学术写作的基本功。下面通俗地介绍最常见的几种格式&#xff0c;帮你一眼看…...

别再死记硬背GitFlow命令了!用SourceTree图形化工具5分钟搞定团队协作流程

告别GitFlow命令行恐惧&#xff1a;用SourceTree可视化工具高效管理团队协作 在中小型技术团队中&#xff0c;版本控制是日常开发不可或缺的环节&#xff0c;但传统的GitFlow工作流常常让非命令行爱好者望而生畏。当团队成员水平参差不齐时&#xff0c;频繁的git merge --no-ff…...

人工智能导论:模型与算法(未来发展与趋势)

9 人工智能未来发展和趋势 人工智能作为引领新一轮科技革命和产业变革的战略性技术&#xff0c;正在深刻改变人类社会。本章从类脑计算、自动化机器学习、神经网络压缩、人工智能芯片、量子机器学习、人工智能伦理与治理、人工智能算法开发框架等方面&#xff0c;简要总结人工智…...

HDLbits奇偶校验坑点复盘:我如何被Fsm serialdp“折磨”到发邮件问作者?

HDLbits奇偶校验坑点复盘&#xff1a;从状态机类型差异到调试方法论 凌晨三点&#xff0c;显示器上的波形依然和预期不符。这是我第七次重写Fsm serialdp的状态机代码&#xff0c;仿真结果中done信号始终在错误的时间点跳变。作为HDLbits的终极挑战之一&#xff0c;这道串口接收…...

别再为Gurobi学术许可发愁了!手把手教你从申请到激活(附学信网报告攻略)

Gurobi学术许可全流程实战指南&#xff1a;从申请到Python集成 第一次接触Gurobi优化求解器时&#xff0c;我被它强大的性能所吸引&#xff0c;但随即陷入了学术许可申请的迷茫中。和许多研究生同学一样&#xff0c;我在学信网报告下载、邮件沟通、命令行激活等环节屡屡碰壁。本…...

从STEMA风车题看Scratch画笔模块:如何用‘自制积木+不刷新’优化动画性能

从STEMA风车题看Scratch画笔模块&#xff1a;如何用‘自制积木不刷新’优化动画性能 在Scratch编程竞赛中&#xff0c;流畅的动画效果往往是评分的关键因素之一。以第15届蓝桥杯STEMA测评中的"绘制风车"真题为例&#xff0c;许多参赛者虽然能够实现基本功能&#xff…...