0%

WADIFF

Zhou S, Jiang M, Chen W, et al. WADIFF: A Differential Testing Framework for WebAssembly Runtimes[C]//2023 38th IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE, 2023: 939-950.

Introduction

Wasm运行时的准确率和可靠性很重要

现有工作的不足:

  • 测试用例非法,无法通过有效性测试
  • 合法测试用例是随机生成的,无法探索复杂的runtime实现
  • 无法系统的建模运行时的状态,语义相关的未触发crash的漏洞可能不会被报告

挑战

  • 如何生成测试用例,尽可能多地覆盖spec的内容
    • 使用wasm-spec来生成有效的测试用例:设计了DSL transformer将自然语言转化为DSL,基于转化的DSL,设计了符号执行引擎来生成测试用例
    • 为了达到非法的测试用例,对测试用例进行变异
  • 确定性的差分模糊测试框架:确定需要比对执行结果的哪些内容
    • 增加了prologue语句来设置前置状态
    • 建模wasm运行时,手动插桩哪些属性需要被丢弃,如果被丢弃的属性有difference,怎么存在不一致的指令

生成了1,395,091个测试用例,124,157触发了异常,417个指令触发了异常;仅发现了21个问题,8个被确认或修复了

贡献

  • spec的transformer,将原来的语言转化为DSL,基于dsl进行程序分析
  • 测试用例生成器:基于dsl采用符号执行生成wasm程序,设计了变异器对wasm进行变异
  • wasm运行时的学习和建模
  • 差分测试框架:测试用例生成+确定性测试引擎

Background

wasm运行时包括三个步骤

  • decoding:字节码被翻译为模块module
  • validation:wasm运行时检查module是否有效
  • execution:有效后初始化模块,创建模块的实例,调用开始函数

Wasm操作码会有不同的控制流,需要生成可以覆盖到各个流的测试用例,方法是将SPEC转化为DSL

image-20240523170838410

Methodlogy

image-20240523180245843

测试用例生成器

image-20240523180921117

差分测试引擎

比较变量的值来确定是否存在不一致性

差分测试的形式化定义

其他材料

开源仓库:https://github.com/erxiaozhou/WaDiff

展望

  • 生成调用多个指令的测试用例
  • 覆盖率不高
  • 生成测试用例的模板较为单一

问题