内存保护与安全合规¶
1. 内存隔离与保护方案对比¶
随着嵌入式设备越来越多地连接互联网,针对固件的逆向工程、缓冲区溢出攻击(Buffer Overflow)与权限越权攻击已成为严重的工业威胁。
flowchart TD
subgraph FreeRTOS_Security["FreeRTOS 体系安全实践"]
F1["标准版: 全系统特权运行 (零特权隔离)"]
F2["FreeRTOS-MPU: 支持非特权任务"]
F3["注意: 需手工声明每个任务的 MPU Region 数组,配置与审查成本较高"]
end
subgraph Zephyr_Security["Zephyr 体系安全实践"]
Z1["CONFIG_USERSPACE: 自动化代码生成工具链"]
Z2["特权与非特权天然分离,系统调用严格白名单校验"]
Z3["集成 ARM TrustZone / TF-M (Trusted Firmware-M) 安全固件"]
Z4["内置硬件堆栈 Canary 水印与 MPU Stack Guard"]
end
1.1 版本与接口边界¶
FreeRTOS-MPU 端口自带包装与 SVC 路径,不要求应用从零实现系统调用。较新的 MPU wrappers v2 还提供系统调用栈和可选对象访问控制,不能将所有版本概括为“只有地址隔离”。本文其他 FreeRTOS 源码笔记采用 V10.5.1,涉及 v2 的设计需单独核对版本。
Zephyr 3.7 的内存域与内核对象授权是两套相关但不同的机制:分区约束用户内存访问,对象元数据用于验证 syscall 的对象类型与权限。gen_kobject_list.py 不负责自动计算所有 MPU 区域。
--- | :--- | :--- |
| MPU 区域配置方式 | 开发者在 C 代码中手动计算并硬编码 Region 大小与对齐 | 编译器与 gen_kobject_list.py 全自动静态计算生成 |
| 内核对象访问控制 | 缺乏细粒度权限控制,仅能按地址段粗暴隔离 | 对象级权限掩码(Thread 必须获得特定句柄才可操作) |
| 系统调用安全性 | 开发者自行封装 SVC 中断 | 官方自带严密的参数有效性验证(z_vrfy 校验层) |
| TrustZone / 安全域隔离 | 需另配安全固件(如 TF-M/PSA 服务) | 可集成 TF-M,安全世界与非安全世界之间仍需按目标芯片配置和验证 |
2. 行业功能安全与合规认证(Functional Safety)¶
在涉及人身与生命财产安全的高危行业(如轨道交通、汽车动力总成、医疗起搏器、航空电子),实时系统的认证门槛至关重要。
graph TD
Cert["功能安全与行业合规认证体系"]
Cert --> Auto["汽车工业: ISO 26262 (ASIL-D 最高等级)"]
Cert --> Ind["工业自动化: IEC 61508 (SIL 3 / SIL 4)"]
Cert --> Med["医疗设备: IEC 62304 (Class C)"]
Cert --> Aero["航空航天: DO-178C (DAL A)"]
2.1 FreeRTOS 与 SafeRTOS¶
- 开源版 FreeRTOS:本身不具备官方出具的功能安全认证包。
- 商业衍生版 SafeRTOS:由 WITTENSTEIN high integrity systems(WHIS)维护的商业闭源产品,面向需要功能安全证据链的项目。其认证范围、版本和适用条件应以供应商当前资料为准,项目仍需自行完成系统级安全论证与授权评估。
2.2 Zephyr Safety Scope 与开源安全认证¶
- Zephyr Safety Working Group:由社区成员推动安全相关工作,目标是补充面向 IEC 61508、ISO 26262 等标准的工程证据;这不等同于开源发行版已经取得对应认证。
- LTS(长期支持版本)机制:Zephyr 会发布维护周期较长的 LTS 分支。具体支持期限、补丁范围和工程文档以当前版本公告为准,不能替代项目自己的 V-Model 和安全评估。
3. 需要验证的隔离配置¶
- 目标处理器提供多少 MPU 区域,栈保护和内核保留区占用多少。
- 应用线程可访问哪些内存分区、设备与内核对象。
- 系统调用是否验证对象授权、用户缓冲区长度和读写权限。
- 无效访问是否按预期触发故障,以及故障后的线程或系统恢复策略。
Zephyr 的 Object Core 主要用于对象追踪和统计,不等同于 userspace 的对象权限表。动态内核对象也可通过对应的分配和授权接口使用。
4. TrustZone 双世界与安全启动¶
4.1 ARMv8-M TrustZone 上的两种姿态¶
- Zephyr + TF-M(PSA 参考实现):Zephyr 运行于非安全侧(NSPE)作为 Rich Application,安全侧由 TF-M 承载 PSA Functional API(Crypto/Secure Storage/Internal Trusted Storage/Initial Attestation)。跨世界调用走 SG/BXNS 门禁函数,Zephyr 侧有配套的 TF-M 集成样例与集成构建(
sysbuild)。安全资产(密钥)由安全世界独占,NSPE 代码漏洞无法直读。 - FreeRTOS on Cortex-M33:端口提供安全上下文原语(如
portALLOCATE_SECURE_CONTEXT/portRAISE_PRIVILEGE类机制),可将任务栈与上下文分配进安全世界管理;但「安全侧固件」本身(PSA 服务、密钥管理)需另配 TF-M 或第三方安全固件,官方集成样例较 Zephyr 生态稀疏。
4.2 安全启动(Secure Boot)与 OTA¶
| 环节 | FreeRTOS 生态 | Zephyr 生态 |
|---|---|---|
| Bootloader | MCUboot 可集成(开源,Apache 2.0),需自行接适配层与 flash 驱动 | MCUboot 为事实默认(CONFIG_BOOTLOADER_MCUBOOT),签名/加密/swap 或 direct-xip 升级策略现成 |
| 镜像签名验证 | ECDSA/RSA 验签由 MCUboot 提供,密钥与产线灌装流程自理 | 同左,且与 Zephyr 的 build 系统(west sign)一键衔接 |
| OTA 传输 | 第三方(AWS OTA 服务、自研) | 原生 sysbuild 多镜像 + SMP(MCUmgr)蓝牙/串口传输管理 |
| 防回滚 | MCUboot 版本计数器 | 同左 |
Note
PSA Certified 认证状态为动态生态(芯片与软件组合逐案认证),立项时应查证目标组合的当期认证清单,而非引用任何静态表格结论。
5. 安全需求分层判定(选型前的自查顺序)¶
- 是否有人身安全(功能安全)?→ 走 ISO 26262/IEC 61508 路径:不要由 LTS 标签推断认证状态;FreeRTOS 系考虑 SafeRTOS 商业版,Zephyr 系评估 Safety 工作组交付物与 LTS + V 模型文档。
- 是否有可提取资产(密钥/证书/算法)?→ 需要 TrustZone/TF-M 或独立安全核;按目标平台核对两种系统的集成支持。
- 是否暴露物理攻击面(调试口/旁路)?→ 无论选谁,锁 RDP/调试口、开 MPU guard、Canary 与签名启动是通用基线。
- 是否只需「防御性编程」级别?→ 评估静态分配、栈检查与 MPU guard 是否覆盖已识别故障,不能据此保证全部安全需求。