- 吞吐量低
+ AFL
- 可以通过用户模式QEMU支持纯二进制模糊测试
- 由于缺乏特殊的硬件支持,用户模式QEMU无法成功模拟大多数物联网程序。
+ 总结
- 现有的物联网固件模糊测试工具不能提供令人满意的代码覆盖率。(前面一直提吞吐量,最后总结的时候提代码覆盖率???)
- 最先进的模糊器(如,AFL)无法轻松应用于物联网程序模糊测试。
动机
- 我们决定基于仿真来构建模糊器
- 由于大多数IOT固件只有二进制程序,因此最好是基于仿真进行插桩。
- 仿真比直接在IOT设备上fuzz吞吐量更高。
- 导致全系统仿真吞吐量低的原因
- 内存地址转换
- 在系统模式仿真中,QEMU使用软件MMU为每次内存访问执行地址转换。
- 动态代码翻译
- 在系统模式仿真中,块链接限制于同一物理页面的基本块,那意味着翻译器的调用频率高于用户模式仿真。
- 系统调用仿真
- 在系统模式仿真中,系统调用交给仿真的操作系统和硬件,速度较慢。并不是所有的系统调用都需要仿真的操作系统和硬件来支持。
增强进程仿真
概述
问题陈述
- 增强进程仿真的目标是在满足以下要求的情况下,在用户模式仿真中正确执行物联网固件的程序:
- 固件可以在系统仿真器(如系统模式QEMU)中被正确仿真。
- 固件运行POSIX兼容的操作系统。
- 通过增强进程仿真,实现以下设计目标:
- 透明度(解决挑战一:兼容性)在增强进程仿真中运行的用户级程序应该表现地像在系统模式仿真中运行一样。
- 高效率(解决挑战二:性能)理想情况下,它应该近似与纯用户模式仿真的性能。
解决方案概述

- 固件在系统模式仿真器中启动,用户级程序(包括要模糊测试的程序)在仿真器中正确启动。
- 当要模糊测试的程序达到预定点(如主函数入口点),进程执行将迁移到用户模式仿真,以获得较高执行速度。只有在极少情况下,才会将执行迁移回系统模式执行,以确保执行的正确性。
- 为最小化迁移成本,两种仿真模式通过RAM文件实现内存共享。系统模式仿真将RAM文件视为物理内存&