最近,AWS(Amazon Web Services)在北美开源峰会上发布了新的开源项目 Snapchange,用于查找软件漏洞的新模糊测试工具。

Snapchange 可以让开发者只要对目标二进制文件进行少量的修改,就能够开始进行模糊测试,找出系统 bug。Snapchange 依赖 KVM(Linux 核心内建的虚拟机器管理器)快照,因此需要在有 KVM 存取权限的机器上执行,并且仅支持 x64 主机,可用于 EC2 英特尔处理器的裸机执行个体。

可以说,Snapchange 是一个用来建构模糊测试工具的 Rust 框架,能够重播实体存储器快照,高效地对目标进行模糊测试。模糊测试是一种用于发现软件(尤其是开源项目)中安全问题的技术,可以监视系统在处理随机数据时的行为方式。

所谓的快照模糊测试(snapshot fuzzing),是通过将系统和应用程序的存储器状态保存下来,在后续的测试中,重复使用这些装态,使得开发者可以在相同的条件下多次执行测试,准确地找出程序发生错误的原因。Snapchange 需要利用 Linux 核心内建的虚拟机器管理器 KVM,因此 Snapchange 的快照是指正在运作的虚拟机器实体存储器转存,以及相对应的暂存器状态。

Snapchange 通过在虚拟机器中注入变异资料,对目标进行模糊测试,提供断点 Hook 机制,以及多种格式的实时覆盖率报告,还有在除错很实用的单步骤追踪功能。开发者可以同时在多个 CPU 核心上进行模糊测试,大幅提高测试的效率和速度,Snapchange 还能同时监控测试结果,当程序发生崩溃,出现象是存储器区段错误或是呼叫 Address Sanitizer 报告时,Snapchange 都能立刻侦测并且回报用户。

Snapchange 模糊测试的循环,从快照初始化 KVM 虚拟机器存储器状态开始,接着供用户在载入的访客存储器中写入变异资料,当程序出现崩溃、逾时或是重置事件发生时,虚拟机器将恢复到干净状态,并为下一次输入做准备。

Snapchange 仅会重置经过修改的存储器分页,如此便能明显减少需要恢复的存储器量,加速模糊测试周期。

Snapchange 最初是由 AWS Find and Fix 开源安全研究团队的一项实验性项目,目的是探索 KVM 快照模糊测试的潜力,而现在 Snapchange 已经成为一个可供研究人员和开发人员,试验快照模糊测试的项目。

相关链接:

https://github.com/awslabs/snapchange


↙↙↙阅读原文可查看相关链接,并与作者交流