Demystifying the Dependency Challenge in Kernel Fuzzing

Demystifying the Dependency Challenge in Kernel Fuzzing

作者:Yu Hao, Hang Zhang, Guoren Li, Xingyun Du, Zhiyun Qian, Ardalan Amiri Sani 会议:ICSE’ 22

关键词:Kernel Dependency, Fuzzing

背景介绍

在软件测试领域,模糊测试(Fuzz Testing)已经成为一种流行且有效的方法,用于发现程序中的错误和安全漏洞。尽管模糊测试技术不断进步,但对于复杂的状态相关软件(例如操作系统内核)进行模糊测试仍然是一个巨大的挑战。尤其是内核代码中的许多部分只有在特定的内核状态下才能被执行,这使得现有的内核模糊测试工具难以有效探索如此庞大的状态空间。在本文中,我们将介绍《Demystifying the Dependency Challenge in Kernel Fuzzing》该论文深入探讨了内核模糊测试中的“依赖性挑战”,并提出了新的研究方向。

技术设计

为了系统地理解依赖性挑战,作者们开展了大量的测量研究。他们首先开发了一个包含自动化组件(模糊测试和静态分析)的测量流程,并通过手动调查来确定未解决依赖(Unresolved Dependencies, UDs)的根本原因。

测量流程

  1. 收集覆盖率数据:使用模糊测试工具对特定的内核模块进行长时间的测试,收集测试用例和相应的代码覆盖率数据。
  2. 确定未解决的依赖:通过静态污点分析(Static Taint Analysis),确定哪些未执行的分支是由于依赖性问题而未被执行。
  3. 识别影响依赖的写入语句:使用静态分析来识别可能影响依赖条件的全局内存写入语句。
  4. 分析根原因:手动检查每个依赖,确定为什么模糊测试工具未能解决这些依赖。
Demystifying the Dependency Challenge in Kernel Fuzzing

结果

通过深入的测量研究,作者们发现即使在经过充分模糊测试的内核模块中,未解决的依赖性问题仍然占据了未覆盖分支的59% – 88%。这一发现表明,依赖性挑战普遍存在,并且是限制模糊测试覆盖率的主要障碍。

此外,作者们还发现,依赖性挑战只是问题的表象,而非根本原因。他们通过分析,提出了多种可能的解决方案,并指出了未来研究的新方向。

根原因分析

根原因分析 作者们将未解决的依赖性问题归结为以下几个根本原因:

  1. 死代码:一些代码路径由于永远不会被执行,因此无法通过模糊测试覆盖。
  2. 环境依赖:某些依赖性问题需要特定的硬件环境或配置才能解决。
  3. 未观察到的依赖:有些依赖性问题在模块初始化或退出时被解决,但模糊测试工具并未观察到这些情况。
  4. 模板不完整:模糊测试工具使用的模板不完整或不准确,导致无法生成正确的测试用例。
  5. 特殊的搜索:某些依赖性问题需要特殊的搜索算法或策略才能解决。


原文始发于微信公众号(COMPASS Lab):Demystifying the Dependency Challenge in Kernel Fuzzing

版权声明:admin 发表于 2024年9月26日 下午6:03。
转载请注明:Demystifying the Dependency Challenge in Kernel Fuzzing | CTF导航

相关文章