当前位置: 代码迷 >> 综合 >> One Engine to Fuzz ’em All: Generic Language Processor Testing with Semantic V alidation
  详细解决方案

One Engine to Fuzz ’em All: Generic Language Processor Testing with Semantic V alidation

热度:71   发布时间:2023-12-14 02:34:58.0

IEEE 2021

摘要

抽象语言处理器,如编译器和解释器,在构建现代软件中是不可或缺的。语言处理器中的错误可能导致严重后果,如功能不正确,甚至恶意攻击。然而,自动测试语言处理器以发现bug并非易事。现有的测试方法(或模糊程序)要么无法生成高质量(即语义正确的)测试用例,要么只支持有限的编程语言。
在本文中,我们提出了POLYGLOT,这是一个通用的模糊框架,可以生成高质量的测试用例,用于探索不同编程语言的处理器。为了实现通用性,Polyglot通过**统一的中间表示(IR)**消除了编程语言在语法和语义上的差异。为了提高语言的有效性,Polyglot执行约束变异和语义验证,以保持语法正确性和修复语义错误。我们已经应用了9种编程语言的21种流行语言处理器POLYGLOT,并识别了173个新的bug,其中113个bug已修复,分配了18个CVE。我们的实验表明,Polyglot可以支持广泛的编程语言,并且优于现有的模糊器,代码覆盖率提高了30倍。

问题

考虑到特定语言模糊器的复杂性(例如,CSmith[74]由80k行代码组成)和大量编程语言(目前超过700种[3]),为每种语言实现特定的模糊器是不切实际的。这使当前的模糊程序陷入了两难境地:追求高语义有效性牺牲了它们的通用适用性,而保留通用适用性并不能保证测试用例的质量。

目前的模糊程序在测试语言处理器方面存在局限性。基于一般用途变异的模糊器[30,38,76,77]不知道输入结构,并随机翻转输入的位或字节,

  相关解决方案