机器代码类型状态检查:提升安全性与效率
1. 引言
在软件开发中,将不可信的外部机器代码加载到可信的主机系统中是一个常见但充满风险的操作。这里的“安全”意味着程序要遵守主机端提供的内存访问策略。我们的目标是静态检查这种加载操作是否安全,从普通的机器代码入手,机械地合成并验证安全证明。
早期的工作基于类似 C 的类型系统,但对于源自 C++ 源代码的机器代码,这种系统并不足够。在本文中,我们解决了这一局限性,并引入了几种新技术,使安全检查分析更加精确和可扩展:
1. 改进的类型状态检查系统 :允许对通过物理子类型实现继承多态的不可信机器代码进行安全检查,引入了一种在可变指针存在的情况下处理子类型的新方法。
2. 函数调用效果总结机制 :通过安全前置和后置条件总结函数调用的效果,使分析能在可信边界停止,朝着模块化检查不可信代码迈出了第一步,提高了安全检查技术的可扩展性。
3. 栈分配数组信息推断技术 :推断栈分配数组(局部数组)的大小和类型,这在之前的工作中是一个未解决的问题。
4. 符号范围分析 :用于传播数组边界信息,使安全检查算法减少对昂贵程序验证技术的依赖。
这些改进让我们能够以更高的精度和效率处理更广泛的实际代码序列。例如,允许结构和指针之间的子类型化,使我们能够分析源自面向对象源代码的代码。符号范围分析在有数组访问的 11 个测试程序中,消除了 55% 的循环不变式合成尝试,在 4 个程序中完全消除了合成循环不变式的需求,全局验证的加速范围从 -4% 到 53%(中位数为 29%)。
超级会员免费看
订阅专栏 解锁全文

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



