许多嵌入式设备有着很强的安全要求,因为他们需要处理机密性的数据或者支持安全事务。一个原型实例是付款终端,为了确保敏感数据,比如说加密密码不被泄漏,系统的安全部分当成一个隔离的芯片进行实现,从而与系统的其他部分进行隔离。
但是隔离也能通过软件进行实现,高端的计算平台有一些硬件来指出实现虚拟内存与VMM,然而,许多的嵌入式系统缺少这些硬件特征。
本文设计了一个普遍的、轻量级的硬件机制,能够支持共享同一个处理器与内存空间的多个子系统之间进行隔离。一个原型就是支持保护密钥的加密系统的软件实现。
贡献:
- 一个新的内存访问控制模型,访问内存依赖于程序计数器的值
- 基于这个内存访问控制模型的自我保护模块的设计:一个软件模块能够为模块处理的数据、如何被其他模块所调用提供很强的安全保证
- 对这个设计的一个粗略证明
- 几个应用场景的讨论
威胁模型:
攻击者能够向系统的内存空间注入代码,不能进行物理攻击。
安全属性:
- entry point的约束:软件模块能够安全地约束他们如何被调用。也就是说,软件模块的entry point是由模块提供者定义的,攻击者不能够随便跳转到模块的任意位置。
- 模块数据的安全:模块的敏感信息仅能够被这个模块读写
- 模块认证:模块能够认证其他模块的内存
- 模块之间的安全通信:模块能够有效的与他们认证的其他模块交互。消息的完整性与机密性必须能够保证。
- 最小化TCB
忽略程序本身的逻辑错误引起的攻击、忽略拒绝服务攻击
自我保护模块SPM:
- 三个段:SEntry(可以调用SPM的入口点)、SPulic(其他模块可读)、SSecret(敏感数据,不可信模块不可访问)
- 内存访问控制策略
SPM的创建与销毁如下图所示。创建:OS加载SPublic与Sentry;一个新的硬件指令setProtected创建SPM,定义三个段的边界,开启内存访问控制策略,清空SSecret;一个称为vault的模块初始化SSecret。Vault在boot后安装,并且不允许卸载。
内存访问控制矩阵如表一所示:
硬件上的修改:
- setProtected
- isProtected:返回SPM的layout
- resetProtected
安全报告:
- Hash(SEntry || SPublic)
- SPM的layout
- CA的签名
验证过程:验证安全报告的签名,验证Sentry与SPublic的hash,使用isProteced验证SPM的layout
两个模块之间的认证协议:
- 单向
- 双向
- 双向,事件通信
缺陷:
- 中断
- 交换
- DMA
- 分页
- 并发执行