整体安全嵌入式ISA扩展的推荐方案
1. 指针保护机制
ARM的PAC(指针认证码)仅适用于存在未使用地址位的系统。但在嵌入式系统中,主流的32位架构几乎所有位都被占用。不过,我们可以结合两种方法的元素,创建一种可像ARM的PAC那样使用的机制。
1.1 地址加密与解密
当进入一个函数时,我们使用由使用位置的预期哈希值和内部秘密(可能是微控制器启动过程中生成的随机数)组成的密钥,对链接寄存器中的返回地址进行加密。在预期的使用位置(如函数结束处),我们使用当前位置的哈希值和内部秘密对返回地址进行解密。只有当哈希值匹配时,才能生成正确的解密密钥,这样攻击者就无法直接控制指针。
1.2 指针信息编码
在只允许字对齐访问的架构中,指针的两个最低有效位始终为零。我们可以利用这一点,将更多信息编码到指针中。其中一位可用于指示指针指向的是代码还是数据,另一位可用于进行简单的奇偶校验。这使得程序能够区分指针类型,创建仅在预期位置可用的安全数据和代码指针。
1.3 强化CFI规则
通过有限状态机(FSM)和CHECK指令中的额外信息,我们可以实施更严格的控制流完整性(CFI)规则。使用一位来编码基本块是否为函数入口,防止使用调用指令瞄准任意基本块;标记所有作为返回目标的基本块,禁止返回到非实际返回位置的基本块。
2. 概念验证
为了验证我们方法的可行性,我们为RISC - V实现了提议的指令集扩展设计,并使用周期精确的gem5模拟器进行评估。
2.1 ISA实现与模拟
我们选择RISC - V 32位标准作为目标ISA,
超级会员免费看
订阅专栏 解锁全文
2397

被折叠的 条评论
为什么被折叠?



