管理程序(VMM)在虚拟机和物理机之间提供了一个安全边界。VMM暴露了很多攻击面,一个恶意用户可以通过恶意内核进行攻击,获得权限之后就可以获得同一宿主机上的所有虚拟机,因此有效检测VMM漏洞对于云基础设施来说是至关重要的。由于高吞吐量,最近的研究展示模糊测试是比较有效的方法。
本文提出了NYX,一个优化的、覆盖率导向的fuzzer.一个快速的快照恢复机制是性能的关键,它允许一秒之内重新加载几千次系统。本文还介绍了一种基于自定义字节码的新的变换引擎,编码为有向无环图(DAG)和仿射类型,有表达复杂交互的能力。结果显示,虽然和最先进的VMM fuzzer相比吞吐量更低,但是很有竞争力。简单目标:只需要多一点时间就可以达到相同代码覆盖率;复杂目标:大幅度超越已有方法。找到了44个新bug,其中22个赋予了新CVE.结果显示覆盖率导向是非常有价值的,相比盲fuzzer也可以明显更快。
最先进的VMM fuzzer是VDF和Hyber Cube,但是现有的方法没有覆盖率反馈。
已有的方法存在以下缺点
本文提出了NYX,能够使用覆盖率导向fuzz测试VMM的漏洞。覆盖率导向和盲fuzz相比有巨大优势,即使吞吐率稍微降低。
挑战:无法通过自定义编译器编译所有组件获取覆盖率;即使是内存错误时,也需要运行目标程序;需要和很多接口交互
运行目标VMM在自定义的VMM内,具体来说,以下组件同时运行:宿主OS,上面运行宿主VMM,上面运行目标OS,上面运行目标VMM,里面运行agent OS。即启动时包含三个不同的OS和两个不同的VMM。这会导致一些不确定性,例如时间中断。
为了解决以上挑战,本文提出了一种心得设计,和KAFL类似,通过使用Intel-PT获取运行在宿主VM上的代码覆盖率。使用一个改动的Hyber-CUBE用户OS运行在目标VMM内。基于这种设计,设计了NYX,依赖于两种特性。
依赖这些特性,本文实现了fuzzer,测试了很多目标。而且为更多目标建立了规则,以便展示可扩展性和灵活性。
结果显示超出了已有的代码覆盖率导向测试和盲fuzz,找到了44个新bug,其中22个赋予了CVE