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

【DeepSeek】引导加载程序与系统组件的安全级别分析

引导加载程序与系统组件的安全级别分析1. 概述本文档详细分析了ARM架构下从系统加电到应用程序运行的各个阶段所运行的异常级别Exception Levels, EL。包括Trusted Firmware-A (TF-A) 的各个引导阶段、U-Boot、操作系统内核以及应用程序。2. ARM 异常级别回顾ARMv8-A 架构定义了四个异常级别从 EL0 到 EL3数字越大表示特权级别越高异常级别描述安全状态EL0应用程序级别非安全世界EL1操作系统级别非安全世界EL2虚拟化级别非安全世界EL3安全监控级别安全世界 (始终)3. Trusted Firmware-A 各阶段的安全级别3.1 BL1 (Boot Loader Stage 1)运行异常级别: EL3安全世界功能: 初始启动、基本硬件初始化、加载验证BL2说明: BL1是系统加电后执行的第一个软件从ROM或引导ROM执行始终运行在最高特权级别EL3确保初始引导的安全性。3.2 BL2 (Boot Loader Stage 2)运行异常级别: EL3安全世界功能: 加载后续阶段、更全面的硬件初始化、镜像管理说明: BL2由BL1加载并验证继续在EL3执行负责加载和验证BL31、BL32等后续阶段。3.3 BL2U (Boot Loader Stage 2 Unsecure)运行异常级别: EL2非安全世界功能: 加载非安全镜像、为非安全世界初始化做准备说明: BL2U是第一个运行在非安全世界的引导阶段在EL2执行主要负责加载非安全的引导镜像如U-Boot。3.4 BL31 (Boot Loader Stage 3-1)运行异常级别: EL3安全世界功能: 实现安全监视器、提供运行时服务、处理异常和SMC调用说明: BL31是安全监视器的实现始终运行在EL3负责处理来自非安全世界的SMC调用并管理系统的电源状态。3.5 BL32 (Boot Loader Stage 3-2)运行异常级别: EL1安全世界功能: 实现可信执行环境(TEE)、提供安全服务说明: BL32运行在安全世界的EL1作为可信执行环境提供各种安全服务如安全存储、密码学操作等。4. U-Boot 的安全级别运行异常级别: EL2非安全世界功能: 加载操作系统内核、设备初始化、环境配置说明: U-Boot作为非安全世界的引导加载程序运行在EL2负责加载和启动操作系统内核。5. 操作系统内核的安全级别运行异常级别: EL1非安全世界功能: 管理系统资源、提供系统调用、运行应用程序说明: 操作系统内核运行在EL1是应用程序的运行环境负责管理系统资源和提供各种服务。6. 应用程序的安全级别运行异常级别: EL0非安全世界功能: 执行用户代码、提供用户功能说明: 应用程序运行在最低特权级别EL0受到操作系统的保护和限制无法直接访问硬件资源。7. 启动流程与安全级别切换7.1 启动流程系统加电→BL1 (EL3)→BL2 (EL3)→BL31 (EL3)BL31初始化后加载并初始化BL32 (EL1 安全世界)跳转到BL2U (EL2 非安全世界)或直接加载U-Boot (EL2 非安全世界)U-Boot (EL2)加载并启动操作系统内核 (EL1)操作系统内核 (EL1)启动应用程序 (EL0)7.2 安全级别切换机制从非安全世界到安全世界: 通过SMC指令陷阱到EL3从安全世界到非安全世界: 通过ERET指令返回从EL0到EL1: 通过系统调用陷阱从EL1到EL2: 通过HVC指令陷阱8. 安全考虑安全隔离: 不同异常级别之间的隔离确保了系统的安全性权限控制: 高特权级别可以访问低特权级别的资源反之则不行安全监控: EL3作为安全监视器确保安全策略的执行链式验证: 引导过程中的链式验证确保了系统的完整性9. 总结组件运行异常级别安全状态主要功能BL1EL3安全世界初始启动、硬件初始化、加载BL2BL2EL3安全世界加载后续阶段、硬件初始化、镜像管理BL2UEL2非安全世界加载非安全镜像BL31EL3安全世界安全监视器、运行时服务、异常处理BL32EL1安全世界可信执行环境、安全服务U-BootEL2非安全世界加载操作系统内核、设备初始化操作系统内核EL1非安全世界系统资源管理、提供系统调用应用程序EL0非安全世界执行用户代码、提供用户功能ARM的异常级别机制为系统提供了多层次的安全架构通过不同特权级别的隔离和控制确保了系统的安全性和稳定性。Trusted Firmware-A作为EL3的参考实现为ARM系统提供了标准化的安全固件是现代ARM系统安全的基础。10. 异常级别与安全状态的关系说明10.1 异常级别与安全状态的区别需要明确的是异常级别(EL)和安全状态是两个不同的概念异常级别(EL): 定义了软件的特权级别数字越大特权越高安全状态: 定义了软件运行的安全域分为安全世界和非安全世界10.2 安全状态与异常级别的组合ARM架构中除了EL3始终运行在安全世界外其他异常级别(EL0-EL2)都可以在安全世界或非安全世界中运行异常级别安全状态描述EL0非安全世界普通应用程序EL0安全世界可信执行环境中的应用EL1非安全世界操作系统内核EL1安全世界可信执行环境(TEE)内核EL2非安全世界虚拟化hypervisorEL2安全世界安全世界的hypervisor(较少使用)EL3安全世界安全监视器(始终)10.3 为什么BL32运行在EL1安全世界而U-Boot运行在EL2非安全世界这种设计是合理的原因如下BL32 (TEE) 的设计目标:BL32作为可信执行环境(TEE)需要在安全世界中运行但它不需要EL3的最高特权只需要EL1级别的特权来提供安全服务这样可以在安全隔离的同时避免过度使用最高特权U-Boot 的设计目标:U-Boot作为非安全世界的引导加载程序运行在EL2可以更好地支持虚拟化功能同时为操作系统内核(EL1)的启动做准备安全隔离的实现:安全世界和非安全世界的隔离是通过硬件机制实现的即使U-Boot运行在更高的EL2也无法访问安全世界的资源安全世界的BL32(EL1)受到EL3的保护不受非安全世界的影响启动流程的合理性:BL31(EL3)作为安全监视器控制安全状态的切换从安全世界的EL3切换到非安全世界的EL2符合从高安全级到低安全级的过渡U-Boot在EL2准备好环境后再加载运行在EL1的操作系统内核10.4 安全状态切换的实现安全状态的切换主要通过以下机制实现SMC指令: 从非安全世界切换到安全世界(EL3)安全配置寄存器(SCR_EL3): 控制安全状态的访问权限异常向量表: 为不同安全状态和异常级别提供不同的处理程序这种设计使得系统能够在保持安全隔离的同时实现不同组件的合理分工和特权管理。11. 安全世界与非安全世界的区分机制11.1 硬件基础ARM TrustZone技术安全世界与非安全世界的区分主要基于ARM的TrustZone技术这是一种硬件级别的安全隔离机制硬件分区处理器核心、内存系统和外设都支持安全状态的区分安全总线系统总线支持安全状态的标记和隔离安全外设某些外设可以被配置为只能由安全世界访问11.2 寄存器控制机制安全状态的切换和控制主要通过以下关键寄存器实现SCR_EL3 (Secure Configuration Register)控制安全状态的访问权限管理安全和非安全世界之间的切换配置安全中断的处理方式SPSR_EL3 (Saved Program Status Register)保存从安全世界切换到非安全世界时的状态包含安全状态位指示返回时的安全状态ELR_EL3 (Exception Link Register)保存返回地址用于从安全世界返回非安全世界HCR_EL2 (Hypervisor Configuration Register)控制EL2和EL1之间的交互影响非安全世界中虚拟化的行为11.3 内存隔离机制安全世界和非安全世界拥有独立的内存空间安全内存只能由安全世界访问的内存区域非安全内存可以由非安全世界访问的内存区域内存属性通过内存管理单元(MMU)设置内存的安全属性地址空间安全世界和非安全世界可以使用相同的物理地址但访问权限由安全状态决定11.4 镜像编译与加载虽然安全世界和非安全世界的区分主要是硬件和寄存器控制的但软件层面也需要相应的支持独立编译安全世界的软件如BL1、BL2、BL31、BL32需要单独编译非安全世界的软件如U-Boot、操作系统也需要单独编译镜像验证安全世界的镜像需要经过验证确保其完整性和真实性非安全世界的镜像也可能需要安全世界的验证加载位置安全世界的镜像加载到安全内存区域非安全世界的镜像加载到非安全内存区域11.5 安全状态切换流程从非安全世界到安全世界执行SMC指令处理器自动切换到EL3安全状态安全监视器(BL31)处理请求从安全世界到非安全世界设置SPSR_EL3和ELR_EL3寄存器执行ERET指令处理器切换到指定的安全状态和异常级别11.6 实际实现示例以Trusted Firmware-A为例BL1 (EL3安全世界)初始启动时运行在EL3安全状态加载并验证BL2镜像BL2 (EL3安全世界)继续在EL3安全状态运行加载并验证BL31、BL32和非安全镜像BL31 (EL3安全世界)作为安全监视器运行通过设置SCR_EL3等寄存器控制安全状态切换BL32 (EL1安全世界)由BL31加载到安全内存运行在安全世界的EL1级别U-Boot (EL2非安全世界)由BL31或BL2U加载到非安全内存运行在非安全世界的EL2级别11.7 总结安全世界与非安全世界的区分是通过以下机制实现的硬件支持ARM TrustZone技术提供硬件级别的安全隔离寄存器控制通过SCR_EL3等寄存器控制安全状态内存隔离安全内存和非安全内存的分离软件配合独立编译和验证的镜像状态切换通过SMC指令和ERET指令实现状态切换这种多层次的安全机制确保了系统的安全性和可靠性是现代ARM系统安全的基础。

相关文章:

【DeepSeek】引导加载程序与系统组件的安全级别分析

引导加载程序与系统组件的安全级别分析 1. 概述 本文档详细分析了ARM架构下,从系统加电到应用程序运行的各个阶段所运行的异常级别(Exception Levels, EL)。包括Trusted Firmware-A (TF-A) 的各个引导阶段、U-Boot、操作系统内核以及应用程序…...

3步解决Windows 11系统臃肿问题:Win11Debloat优化指南

3步解决Windows 11系统臃肿问题:Win11Debloat优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cu…...

手把手教你用LD驱动器(激光二极管驱动板)搭建一个简易激光器原型

从零搭建激光器原型:LD驱动板实战指南 激光技术早已从实验室走向日常生活,无论是激光雕刻、测距仪还是医疗设备,都离不开核心的激光发射模块。对于硬件爱好者而言,亲手搭建一个可控激光器不仅是理解光电原理的绝佳途径&#xff0c…...

别再乱删注册表了!用InstallCleanup.exe彻底卸载VS2019的保姆级教程

彻底告别VS2019残留问题:InstallCleanup.exe专业卸载指南 每次重装Visual Studio时,你是否经历过安装失败、组件冲突或莫名其妙的报错?这些问题的罪魁祸首往往是前一次卸载不彻底留下的"幽灵文件"。许多开发者习惯直接删除安装目录…...

Pyfa终极指南:快速掌握EVE Online舰船配置工具

Pyfa终极指南:快速掌握EVE Online舰船配置工具 【免费下载链接】Pyfa Python fitting assistant, cross-platform fitting tool for EVE Online 项目地址: https://gitcode.com/gh_mirrors/py/Pyfa Pyfa是一款专为EVE Online玩家设计的免费开源舰船配置助手&…...

从零到一:用AXI DataMover在Zynq MPSoC上实现高效DMA传输(附Vitis HLS驱动示例)

从零到一:用AXI DataMover在Zynq MPSoC上实现高效DMA传输(附Vitis HLS驱动示例) 在异构计算架构中,数据搬运效率往往成为系统性能的瓶颈。Xilinx Zynq UltraScale MPSoC作为典型的异构计算平台,其PL(可编程…...

从零构建高性能Switch模拟环境:Ryujinx进阶配置完全指南

从零构建高性能Switch模拟环境:Ryujinx进阶配置完全指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 作为一款用C#编写的开源Nintendo Switch模拟器,Ryujinx…...

嵌入式LVGL实战:手把手教你用Spinner控件打造智能设备‘呼吸感’状态提示

嵌入式LVGL实战:用Spinner控件设计智能设备的呼吸感状态提示 在智能咖啡机完成研磨的等待过程中,那个缓缓转动的弧形进度指示器,远比冰冷的百分比数字更能缓解用户的焦虑——这就是动态视觉反馈的魔力。作为嵌入式设备与用户对话的第一界面&a…...

3个超实用技巧:Snap.Hutao让你告别原神数据管理烦恼

3个超实用技巧:Snap.Hutao让你告别原神数据管理烦恼 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao…...

终极Win11系统优化指南:深入解析Win11Debloat架构与技术实现

终极Win11系统优化指南:深入解析Win11Debloat架构与技术实现 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...

别再让LED捣乱!STM32/GD32上LCD驱动编写的引脚保护避坑指南

嵌入式开发实战:多设备GPIO冲突的深度防御策略 在资源受限的MCU开发中,GPIO引脚复用引发的设备冲突堪称"经典翻车现场"。我曾亲眼见证一个智能家居项目因为LED指示灯干扰温湿度传感器数据,导致空调在38℃高温天疯狂制热——而这一切…...

CIC滤波器设计避坑指南:如何平衡通带衰减与旁瓣抑制?

CIC滤波器设计避坑指南:如何平衡通带衰减与旁瓣抑制? 在数字信号处理领域,CIC(Cascaded Integrator Comb)滤波器因其结构简单、无需乘法器、适合高速处理等优势,已成为多速率信号处理系统的首选方案。然而&…...

3分钟快速掌握WindowResizer:终极免费窗口尺寸强制调整工具

3分钟快速掌握WindowResizer:终极免费窗口尺寸强制调整工具 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些无法拖拽大小的应用程序窗口而烦恼吗&#xff1f…...

手把手教你用STM32F103C8T6和ESP8266搭建温室监控(附原子云配置避坑指南)

从零构建STM32ESP8266温室监控系统的实战指南 项目背景与核心价值 在智慧农业和家庭种植场景中,环境参数的实时监控一直是刚需。传统人工记录方式效率低下,而市面上的成品监控设备往往价格昂贵且扩展性有限。基于STM32F103C8T6和ESP8266的DIY方案&#x…...

JavaQuestPlayer:告别QSP游戏运行困扰,开启跨平台游戏新体验

JavaQuestPlayer:告别QSP游戏运行困扰,开启跨平台游戏新体验 【免费下载链接】JavaQuestPlayer 项目地址: https://gitcode.com/gh_mirrors/ja/JavaQuestPlayer 你是否曾经因为找不到合适的QSP游戏播放器而烦恼?或者因为操作系统限制…...

Adobe Illustrator脚本终极指南:30个脚本让你的设计效率提升300%

Adobe Illustrator脚本终极指南:30个脚本让你的设计效率提升300% 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为重复的Illustrator操作而烦恼吗?面对…...

告别搜狗输入法后,如何在Ubuntu 16.04上快速配置ibus-pinyin或fcitx-sunpinyin

Ubuntu 16.04中文输入法深度配置指南:从框架选择到效率优化 在Linux桌面环境中,中文输入体验一直是用户关注的焦点。当Ubuntu 16.04用户告别第三方输入法后,系统自带的输入法框架往往能提供更稳定、更轻量的解决方案。本文将深入探讨如何在Ub…...

避坑指南:爬取88tingshu.com等听书网站音频时,你可能会遇到的3个反爬点及解决方案

听书网站音频爬取实战:破解三大反爬机制的深度指南 引言:当常规爬虫遇上听书网站 最近帮朋友抓取某听书网站的有声小说时,发现事情并不简单。本以为像普通网页一样直接解析HTML就能获取音频链接,结果遭遇了各种"花式拦截&q…...

用DAC0832和汇编语言生成波形:一个微机接口实验的保姆级复盘(附完整代码)

用DAC0832和汇编语言生成波形:从硬件连调到代码优化的全流程实战 记得第一次接触DAC0832芯片时,面对密密麻麻的引脚和晦涩的时序图,我完全不知道从何下手。直到在实验室熬了三个通宵,烧坏两块芯片后,才真正理解数模转换…...

独立游戏开发者的音频救星:零代码用FMOD为Unity游戏添加动态背景音乐与交互音效

独立游戏开发者的音频救星:零代码用FMOD为Unity游戏添加动态背景音乐与交互音效 当你在深夜调试游戏时,是否曾被突如其来的静默打断沉浸感?或是发现精心设计的战斗场景因为单调重复的背景音乐而失去张力?作为独立开发者&#xff…...

Cursor怎么用?2026零基础入门教程|5步学会AI编程IDE核心功能

摘要 本文解决软件开发者和 AI 应用开发者在 Windows 环境下安装和使用 AI 编程 IDE 的问题,适合想把 Cursor 用到真实开发流程中的读者。读完可以完成 Cursor 安装、模型配置、项目接入和一次真实代码生成验证。 一. 开篇引入 Cursor 是一类典型的 AI 编程 IDE&a…...

别再当老实人了!用博弈论拆解程序员薪资谈判,教你多拿20%的Offer

程序员薪资谈判实战:用博弈论思维多拿20% Offer 在技术行业,薪资谈判往往是决定职业发展速度的关键环节。许多开发者花费数月刷题准备技术面试,却在最后谈薪阶段草草收场,殊不知这个环节的博弈可能直接影响未来三年的总收入增长曲…...

高速ADC时序收不稳?聊聊用FPGA的IDELAY和IODELAYCTRL做数据对齐的那些事儿(以ADS42LB69为例)

高速ADC时序收不稳?聊聊用FPGA的IDELAY和IODELAYCTRL做数据对齐的那些事儿(以ADS42LB69为例) 在高速数据采集系统的设计中,ADC与FPGA的接口时序问题往往是工程师们最头疼的"拦路虎"。特别是当采样率突破200MSPS时&#…...

终极指南:3步免费解锁Cursor Pro完整功能,告别试用限制

终极指南:3步免费解锁Cursor Pro完整功能,告别试用限制 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reac…...

用PointNet搞定ShapeNet零件分割:手把手教你训练自己的3D模型分割器

用PointNet实现ShapeNet零件分割:从数据准备到可视化分析的完整实战指南 在3D视觉领域,点云分割技术正逐渐成为工业检测、自动驾驶和机器人抓取等场景的核心支撑。不同于传统的2D图像分割,点云数据直接保留了物体的三维几何信息,使…...

别再只盯着RCE了:Aria2 RPC接口的任意文件写入漏洞,手把手教你复现与本地环境搭建

深入解析Aria2 RPC接口的任意文件写入漏洞:从环境搭建到原理分析 在开源下载工具领域,Aria2凭借其轻量级、多协议支持的特性赢得了众多技术用户的青睐。然而,正是这样一个看似简单的工具,其RPC接口却隐藏着可能被恶意利用的安全隐…...

Ubuntu 22.04上手动安装Zabbix Agent 5.0.2:当官方源没有你需要的版本时

Ubuntu 22.04手动部署Zabbix Agent 5.0.2:精准版本控制的运维实践 当监控系统需要与特定版本的Zabbix Server对接时,官方软件源往往无法满足精确版本需求。本文将深入探讨如何在Ubuntu 22.04上手动部署Zabbix Agent 5.0.2版本,这种方案特别适…...

从模型部署反推:为什么你的GPU显存总是不够用?聊聊Params、FLOPs与显存占用的真实关系

从模型部署反推:为什么你的GPU显存总是不够用?聊聊Params、FLOPs与显存占用的真实关系 当你兴冲冲地将训练好的模型部署到生产环境时,是否经常遇到这样的场景:明明参数量(Params)看起来不大,但G…...

咸鱼淘来的树莓派3B,配上3.5寸屏和Volumio,打造桌面数播的完整避坑记录

咸鱼淘来的树莓派3B,配上3.5寸屏和Volumio,打造桌面数播的完整避坑记录 在二手市场淘硬件就像寻宝,每次成功点亮屏幕的瞬间都充满成就感。最近我以210元的价格在咸鱼收了一台树莓派3B,搭配Volumio系统和3.5寸触摸屏,打…...

Smithbox终极指南:零基础掌握魂系列游戏修改艺术 [特殊字符]

Smithbox终极指南:零基础掌握魂系列游戏修改艺术 🎮 【免费下载链接】Smithbox Smithbox is a modding tool for Elden Ring, Armored Core VI, Sekiro, Dark Souls 3, Dark Souls 2, Dark Souls, Bloodborne and Demons Souls. 项目地址: https://git…...