• 论文阅读 fuzzing 综述 Fuzzing: State of the art


    文章

    Liang H, Pei X, Jia X, et al. Fuzzing: State of the art[J]. IEEE Transactions on Reliability, 2018, 67(3): 1199-1218.

    综述

    Fuzzing技术可以概括为通过自动化生成并执行大量的随机测试用例,来发现目标程序的未知漏洞。

    Fuzzing的一般过程如图:

    Target program可以为binary或source code;

    monitor利用符号执行、taint analysis等技术获取目标程序的useful runtime information;

    Test case generator用于生成测试用例,可分为基于变异的和基于语法的两种;

    Bug detector检测、收集潜在的bugs。当目标程序崩溃或报告一些错误时,收集并分析相关的信息(例如stack traces),以判断是否存在一个bug。

    Bug filter从Bug detector检测到的bug中提取可利用的bugs。

    黑盒、白盒、灰盒fuzzing

    根据需要目标程序运行时信息的多少,fuzzer可分为黑盒、白盒、灰盒三种。如白盒fuzzer需要完整的程序内部逻辑信息,使用动态符号执行和覆盖率最大化的启发式搜索算法可以explore all execution paths;灰盒利用code instrumentation与污点分析技术,尽量使得测试用例可以覆盖更多的路径。

    漏洞可分为导致目标程序崩溃的shallow bugs与存在于程序逻辑深处且难以触发的hidden bugs(如复杂的分支语句)。通常黑盒fuzzer适用于发现shallow bugs而白/灰盒适用于hidden bugs。在工业界黑灰盒更常用而白盒开销高不常用。

    Fuzzing主要的问题:

    1)如何生成或选择seed test case,如何生成其他test case:如从补丁中提取

    2) 如何使这些test case可以通过目标程序的输入验证:如通过hash验证

    3)如何处理引起crash的test case:比如区分、提取不同执行路径的test case

    4)如何更好的利用运行时信息:如使用动态符号执行时,如何解决路径爆炸问题

    5)如何提高fuzzing的可扩展性

    现有的fuzzer根据应用领域分类:

    General Purpose Fuzzers、Fuzzers for Compilers and Interpreters、Fuzzers for Application Software、Fuzzers for Network Protocols、Fuzzers for OS Kernels、Fuzzers for Embedded Devices, Drivers and Components

    汇总表如下:

     

    Fuzzing的研究方向:

    Input Validation and Coverage、Smart Fuzzing(program analysis techniques、scalable and efficient)、Filtering Fuzzing Outputs、Seed/Input Generation and Selection、Combining Different Testing Methods、Combining Other Techniques With Fuzzing

  • 相关阅读:
    Spring Cloud的小改进(五)
    国内最火的10款Java开源项目,都是国人开发,CMS居多
    创建服务的注册与发现 Eureka (四)
    Eureka的的概述(三)
    sourcetree 跳过首次登录
    基于IDEA工具 lombok 的使用
    面试总结
    Spring Cloud的概述(二)
    微服务的概述(一)
    原子性 CAS算法
  • 原文地址:https://www.cnblogs.com/lqerio/p/15954062.html
Copyright © 2020-2023  润新知