Proj. THUDFuzzVis: VisFuzz: Understanding and Intervening Fuzzing with Interactive Visualization

Source codehttps://github.com/ChijinZ/VisFuzz

Abstract

传统上模糊测试的一个瓶颈在于很难覆盖到被复杂的条件-比如magic number, 嵌套的条件所引导的程序支线,为此人们提出了白盒测试,然而即使这样,对复杂的条件的支持还是不够,比如array sort,virtual function, tree set queries还是覆盖不到。所以本文提出了visfuzz。

VisFuzz用可视化的方式实时展示程序测试情况和程序支线覆盖情况,主要是从源码中抽取call graph(函数调用图)和control flow(函数内基本块流程图),并且将每个函数,基本块,源码和实际执行信息联系起来呈现在图上,从而允许测试工程师定位一直没法访问到的限制,这样工程师就可以人工调研语义环境,构造特殊种子或者升级测试driver了。

本文的实验对象是Google的fuzzer-test-suite,实验方法是比较用/不用15分钟时间通过visfuzz理解改进测试,模糊测试12h,效果是提升了10.84%到150.58%的效果。

Introduction

黑盒技术有AFL,libFuzzer,这些技术覆盖率不太够,于是灰盒测试比如AFLFast和FairFuzz让能够覆盖到低频次的路径有更多的变异机会。但是还是不够,于是白盒测试也登场。Driller提出了当AFL遇到瓶颈就转换到符号执行模式的方法。HaCRS则把整个fuzz拆成多个子任务,让人协助。明显,人力能够协助测试进入复杂条件的潜力,所以提出VisFuzz。

VisFuzz由三个部件组成:

a) LLVM plugin:用于获取call graph,覆盖率和其他统计信息

b) modified AFL: AFL+实时统计

c) python supported visualization

Demonstration

覆盖率进入瓶颈,就召唤测试工程师人工分析。

 

 

 

VisFuzz Design

链接时通过vis-clang++(clang++加上plugin)来获取call graph,control flow graph等,并使用AFL类似的方法做插桩。运行时静态库libVisFuzz.so可以自动让被编译的文件执行时进行register和early initilization并且连上与fuzzer公用的shared memory。

 

posted @ 2020-10-31 19:50  雪溯  阅读(246)  评论(6编辑  收藏  举报