VeriSMo 的可信基只包括硬件和它自己(VM),剔除了对于 Hypervisor 的信任。传统的 VM 的安全服务是由 Hypervisor 负责的,如果认为 Hypervisor 是不可信的,那么就不能由它来提供安全服务。AMD 提供了新的安全架构 SEV-SNP,它为在 VM 中独立实现安全服务提供了支持,VeriSMO 就利用了这个硬件特性。
除了利用新的硬件安全特性外,VeriSMo 在开发时完成了形式化验证来确保安全性。VeriSMo 的开发语言是 Rust,已经确保了部分的内存安全性(也就是 Rust Checker 承担了部分形式化验证的任务),距离完全的形式化验证还有两个挑战:
- 因为 Hypervisor 不可信任,所以 Hypervisor 可以打断 VM 的执行并修改硬件状态,这种并行无法简单验证。
- 开发 VeriSMo 需要使用 Unsafe Rust,Rust Checker 无法验证这种情况。
为了解决挑战 1,VeriSMo 将验证拆分成了 2 层,上层为机器模型层(Machine Model),用 model verify 专门约束 Hypervisor 的行为,下层为实现层(Implement),用于解决排除了 Hypervisor 干扰后的 VeriSMo 本身的验证问题。