思考🤔
很扎实的一篇工作,作者提出要在 image 和 syscall 两个维度来测试文件系统,在变异 image 时只变异对系统影响较大的 metadata,提升 fuzz 效果的同时还减少了需要变异的数据大小;在变异 syscall 时采用了和 syzkaller 类似的策略,区别是作者利用了文件系统的状态信息(例如文件、路径、权限等)并且追踪了每个 syscall 对系统的影响,遗憾的是,由于未能在执行 syscall 时与系统进行交互,部分会导致文件系统状态变化的 syscall 不会进行变异(例如 unlink() 这类可能会删除文件的 syscall),理论来说还是会有部分状态空间是探索不到的。
同时作者还在 LKL 上实现了较新版本的 Linux 内核,从而可以以毫秒级的速度重置系统状态,这一点确实是其他模拟执行方式无法企及的,LKL 带来的加速对整体 fuzzing 速度和可复现性的提升非常明显,然而,LKL 自身已经不在支持新版本的 Linux 内核了,如果想用 LKL 测试 v6.0 以上版本的话,适配的工作量可能会非常巨大。
有关于文件系统 fuzz 的工作并不是很多,这篇论文及其后续的两篇论文(Finding Semantic Bugs in File Systems with an Extensible Fuzzing Framework)的成果都非常好,值得认真分析研究,同时 Related Work 中的一些工作也非常有意思,可以多看看。