zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    代码题(22)— 二叉树镜像、相同的树 、对称二叉树
    代码题(26)— 不同路径
    代码题(25)— 最大子序和、最长上升子序列
    Linux 基本命令总结
    C++(五)— 控制保留小数位数
    C++(四)— 字符串、数字翻转3种方法
    代码题(24)— 寻找重复数、数组中重复的数据、找到所有数组中消失的数字
    代码题(23)— 数组中的最长山脉
    【vue】vue +element 搭建项目,将js函数变成vue的函数
    【vue】vue +element 搭建项目,$createElement使用
  • 原文地址:https://www.cnblogs.com/xuesu/p/13907292.html
Copyright © 2011-2022 走看看