实现完全 MCU 分区隔离:中断、调试和硬件

本文探讨了在MCU环境中实现安全的分区隔离,以增强系统安全。介绍了软件中断(SWI)API如何允许utask调用受限制的系统服务,以及如何通过中断服务程序(ISR)和链接服务程序(LSR)来降低攻击面。讨论了临界区保护、内存优化策略,如MpuPacker工具减少内存浪费。同时,强调了调试挑战,如内存管理故障(MMF)和野生指针问题。最后,提到了Arm平台安全架构(PSA)以及硬件抽象层(HAL)的重要性,并提出了针对Cortex-M处理器的硬件改进建议,以实现更好的安全分区。
摘要由CSDN通过智能技术生成

软件中断 (SWI) API

ptasks 可以直接调用 pmode 中的系统服务。但是,utask 需要软件中断 (SWI)接口来提供系统服务,例如发送信号量信号。SWI API 是使用 Cortex-M svc n指令实现的,这会导致 SVC 异常,从而导致切换到 pmode 并执行所需的系统服务。参数 n 选择要执行的系统服务。svc 指令是 utask 可以穿透 pmode 屏障,然后只运行允许的系统服务的唯一方法。当系统服务完成时,utask 将在 umode 中恢复,并返回服务的返回值和数据(如果有)。图 1 说明了这个过程。
在这里插入图片描述
图 1:来自两种模式的系统服务调用。

不仅系统服务而且它们使用的结构(例如任务控制块)都驻留在 pmode 中,因此黑客无法从 umode 访问。此外,utasks 不允许可能导致系统损坏的服务。尝试使用受限制的系统服务会导致权限冲突错误 (PVE),导致错误管理器运行,utask 停止,恢复软件控制,从而阻止黑客死在他的轨道上。

中断服务程序 (ISR)

不幸的是,ISR 必须在 pmode 中执行,因此它们为 pmode 提供了一个攻击面,这是非常不受欢迎的。因此,必须使用最佳安全编程技术最小化和编写 ISR 代码。不幸的是,大多数 RTOS 允许从 ISR 调用其 RTOS 服务的专门版本(例如 xSemaphoreTakeFromISR())。这增加了攻击面,因此所有这些也必须使用最好的安全编程技术编写。这可以成为一项具有里程碑意义的工作。

更好的解决方案是使用链路服务程序 (LSR)来执行延迟中断处理,其中可以进行正常的 RTOS 服务调用。在 ISR 中调用 LSR 会导致将其放入LSR 队列 lq 中。当所有嵌套的 ISR 都运行时,处理器分支到 LSR 调度程序,后者按调用的顺序运行 LSR,从而保持时间完整性。LSR 运行在所有任务之前,因此优先级反转是不可能的。通过混淆 LSR 地址,黑客无法轻易访问 LSR 代码,因此攻击面减少到 ISR 本身——一项更易于管理的任务。

临界区

关键代码部分,特别是在低级驱动程序代码中,通常由中断禁用前和中断启用后保护。当将分区从 pmode 移动到 umode 时,这两个指令都变成 NOP——即它们不提供保护。有人可能认为可以为它们创建 SVC shell 函数。这是 Catch-22 的情况——虽然中断禁用功能可以工作,但中断启用功能无法工作,因为中断(包括 SVC)被禁用!

相反,提供了 SVC 函数来屏蔽和取消屏蔽中断。允许的中断是基于任务指定的,因此黑客无法屏蔽在他感染的分区之外使用的中断。

差距和尾巴

对于 Cortex-v7M,MPU 区域的二次幂大小和对齐要求会造成严重的内存浪费。Cor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值