【论文阅读NO.00001】Fuzzing: A Survey for Roadmap

  • 0x00.一切开始之前
    • Abstract
  • 0x01. INTRODUCTION
  • 0x02. OVERVIEW OF FUZZING
  • 0x03. FUZZING THEORY
    • 3.1 Seed Set Selection
    • 3.2 Seed Schedule
      • _3.2.1 Fitness by \#Bugs_
      • _3.2.2 Fitness by State Transition(Markov Chain)_
      • _3.2.3 Fitness by State Transition(Multi-Armed Bandit)_
      • _3.2.4 Fitness by State Discovery_
    • 3.3 Byte Schedule
    • 3.4 Mutation Operator Schedule
    • 3.5 Diverse Information For Fitness
      • 3.5.1 Sensitive Code Coverage
      • 3.5.2 Diverse Fitness
    • 3.6 Evaluation Theory
  • 0x04. SEARCH SPACE OF INPUTS
    • 4.1 Byte-constraint Relation
      • 4.1.1 Dynamic Taint Analysis
      • 4.1.2 Relation Inference
    • 4.2 Concolic Execution
    • 4.3 Program Transformation
    • 4.4 Input Model
      • 4.4.1 Accessible Models or Tools
      • 4.4.2 Integration of Implementations
      • 4.4.3 Intermediate Representation
    • 4.5 Fragment Recombination
    • 4.6 Format Inference
      • 4.6.1 Corpus-based
      • 4.6.2 Coverage-based
      • 4.6.3 Encoding Function
    • 4.7 Dependency Inference
      • 4.7.1 Documents or Source Code
      • 4.7.2 Real-world Programs
  • 0x05. AUTOMATION
    • 5.1 Automatic Execution of PUTs
      • 5.1.1 Command-line Programs
      • 5.1.2 Deep Learning Systems
      • 5.1.3 Operating System Kernels
      • 5.1.4 Cyber-Physical Systems
      • 5.1.5 Internet of Things
      • 5.1.6 Applications with Graphical User Interface
      • 5.1.7 Applications with Network
    • 5.2 Automatic Detection of Bugs
      • 5.2.1 Memory-violation Bugs
      • 5.2.2 Concurrency Bugs
      • 5.2.3 Algorithmic Complexity
      • 5.2.4 Spectre-type Bugs
      • 5.2.5 Side channels
      • 5.2.6 Integer Bugs
    • 5.3 Improvement of Execution Speed
      • 5.3.1 Binary Analysis
      • 5.3.2 Execution Process
      • 5.3.3 Various Applications
  • 0x06. DIRECTIONS OF FUTURE RESEARCH

模糊测试为什么是神

Github Blog Link

0x00.一切开始之前

Fuzzing: A Survey for Roadmap 是关于模糊测试领域的比较好的一篇综述,而恰巧笔者想要开始接触一些学术上的东西,所以决定从这篇综述性论文开始入手去了解模糊测试这一领域:)

这篇博客便是笔者的一个读书笔记,不过笔者不会将论文全部人工翻译后原样照搬过来,而只会选择比较精髓的部分,并按笔者的意思进行排版(笑)

当然现在看来好像大部分其实还是照搬笔者人工翻译后的论文原文,笔者做的额外工作好像仅仅是排版优化…

Abstract

Fuzz testing(fuzzing,即模糊测试)在检测安全漏洞中大放异彩,其通过生成大量的测试用例(test cases)并观测执行结果来寻找漏洞,且已在大量的应用中发现了上千个漏洞。虽然非常高效,fuzz 仍缺乏系统化的对其缺陷的分析:

  • fuzz 需要缩小输入空间(input space)与缺陷空间(defect space,触发缺陷的输入)间的差距;在一个应用当中,漏洞(defects)的存在是分散的(spare),这意味着 defects space 要比 input space 小得多
  • fuzzing 生成大量的测试用例进行重复测试——这需要一种自动化的方法;由于程序与漏洞的复杂性,自动化地执行不同的程序会是一个挑战

本篇论文系统化地回顾并评估了 fuzz 的缺陷机器解决办法

0x01. INTRODUCTION

软件漏洞是计算机系统中的一个严重的问题,而 Fuzz testing 已经成为最成功的检测程序漏洞的方法之一,其通过生成大量的测试用例来重复测试目标程序并观察其异常(exception)——安全漏洞的标志(indicator)

Fuzzing 通常有着一组种子(seeds):interesting inputs,新的输入的生成则基于这组种子进行无限的变异(mutate)

虽然 fuzzing 在发现安全漏洞上获得了巨大的成功,在开发高效的漏洞检测解决方案上仍存在着缺陷,如 Fig.1 所示,三个主要的缺陷是:输入中分散的漏洞空间,严格的有效输入空间,多目标的自动化执行

  • Gap 1: spare defect space of inputs. 在应用程序中的漏洞分布是分散的,而仅有部分特定的输入能够触发漏洞;浅显的漏洞可以在短时间内被 fuzz 到,但许多安全漏洞需要测试复杂的执行路径并解决严格的路径约束,因此一个高效的 fuzzing 算法需要同时对 待测试程序 (program under test, PUTs)与 安全缺陷 (security flaws)足够精通,以在一个更有可能存在漏洞的代码区域驱动计算资源
  • Gap 2: strict valid input space. 大部分程序有着自己的输入空间,而现代程序都相当复杂,需要更复杂的特化输入空间,因此如何生成有效输入同样是个挑战;此外,为了提高 fuzzing 的效率,生成的输入应当使用不同的执行状态(例如 代码覆盖率 ),这需要更先进的方案来生成有效输入;若缺乏对 PUTs 的系统化分析,几乎不可能精确地限制输入空间(例如 PDF 文件的变异生成可能会违反 PDF 规范)
  • Gap 3: various target. 由于 fuzzing 大量重复地测试 PUTs,这需要高效的自动化方法。PUTs 与漏洞都是多种多样的,有的程序可以简单直接地被自动化地 fuzz(例如命令行程序),但许多程序在自动化测试前都需要做大量的工作(例如硬件);此外,安全缺陷同样需要自动化的 indicator 以记录潜在的真正漏洞,程序崩溃是一个常用的 indicator 因为其可以被 OS 自动捕获,但有的安全缺陷并不会表现出崩溃(例如条件竞争),这需要精心设计的 indicator

业界在缩小这些缺陷上做出了许多努力。在本篇论文中,研究者系统化地回顾与分析了 fuzzing 的缺陷与解决方案,同时考虑了广度与深度

本篇论文目录如下:

  • §2:overview of fuzzing
  • §3:depicts fuzzing processes and various fuzzing theories to formulate he processes
  • §4:analyzes diverse solutions to reduce the search space of inputs
  • §5:analyzes how to automatize the execution of various PUTs and the detection of different bugs.
  • §6:other some directions for future research

0x02. OVERVIEW OF FUZZING

我们首先介绍一些术语( Terminologies. ),如 Fig2 所示:

  • seed:被保留的能完成更好的 fitness 的输入(例如提供新的覆盖率)
  • fitness:对一个 input/seed 的质量的测量
  • power schedule:决定了分配给 seeds 的 energy
  • energy:分配给当前 fuzzing round 的变异数量
  • fuzzer:fuzzing 算法的实现

这里论文还讲了一段历史,不抄了

如 Fig2 所示,fuzzing 由三部分组成:

  • input generator:负责向 executor 提供输入
  • executor:负责执行输入
  • defect monitor:负责检查是否发现了新的执行状态或缺陷(例如 crashes)

基于输入的生成方式,fuzzing 可以分为:

  • 基于生成的 (generation-based):基于 文法 (grammars)或 有效语料库 (valid corpus)从头开始生成;如 Fig2 所示,其从一组种子中直接获得输入
  • 基于变异的(mutation-based):对现有的种子进行 变异 (mutate)以获得新的输入;对给定的一组种子,基于变异的模糊测试通过 seed schedule、byte schedule、mutation schedule 以获得输入

需要注意的是,fuzzing 并不需要经历 Fig2 中的所有步骤,例如基于生成的模糊测试并不执行 byte schedule 或 mutation schedule,但关注于从初始输入文件中选择最优的种子组

基于执行时观测到的信息量,fuzzing 可以分为:

  • 黑盒(blackbox):黑盒模糊测试并不知道每次执行的内部状态,通过使用输入格式化或不同的输出状态来进行优化
  • 白盒(whitebox):白盒模糊测试对每次执行的内部状态是全部得知的,这使其能系统化地探索目标程序的状态空间;其通常使用 concolic execution(例如 dynamic symbolic execution,即动态符号执行 )来分析目标程序
  • 灰盒(greybox):灰盒模糊测试获得的执行状态信息在黑盒与白盒之间,例如许多 fuzzer 都使用 边界覆盖率 (edge coverage)作为内部执行状态

最通用的执行状态便是代码覆盖率(code coverage,例如 CFGs(control flow graphs) 中的基本块(basic block、边(edges)),覆盖率的基本假设用法是:发现更多的执行状态(例如新的覆盖率)能提高发现漏洞的概率。因此 覆盖率指导 (coverage-guided)的模糊测试的目标便是覆盖更多的代码

但执行状态并不限制于代码覆盖率,对面向对象程序(object-oriented programs)而言也可以是执行的合法性(legality),对协议实现(protocol implementations)可以是状态机(state machine),对并发实现(concurrency)可以是 alias coverage,对深度学习模型(deep learning models)可以是神经覆盖率(neuron coverage),对安卓智能电视则可以是执行日志(execution logs)

Fuzzer 通常使用 崩溃 (crashes)作为安全漏洞的指示器,因为 crashes 提供了直接的自动记录(OS 会自动发出信号告知程序崩溃),然而有的缺陷并不会显示出 crashes,因此 fuzzer 使用其他的指示器,例如 physical safety violation

但 indicators 仅显示了可能的安全问题,还需要安全工具或人工确认这是一个 漏洞 (vulnerability)

0x03. FUZZING THEORY

为了提高发现漏洞的概率,fuzzer 在执行过程中使用反馈(feedback)机制,例如以执行状态或结果作为 fitnes,一个典型的 fitness 便是基于代码覆盖率(例如基本块或边)进行输入生成,但仅有代码覆盖率并非一直都是可靠的,就算可靠也可能收益不高(例如指数型数量的输入生成可能只带来线性的漏洞发现),因此一种常见的改进方法是优化模糊测试的过程或是为 fitness 丰富信息,Table 1 展示了不同的 fuzzer 的优化方法:

3.1 Seed Set Selection

对种子集的优化关注于最小化种子集的大小,例如选择能覆盖所有已发现代码覆盖的一组最少的种子,因为过于富集的种子会在检验已探测代码区域上浪费计算资源

在 UESIX 的一篇论文 中其被表述为 最小覆盖集问题 (minimal set coverage problem,MSCP)

3.2 Seed Schedule

种子调度(seed schedule)期望解决如下问题:

  • 在下一轮中选择哪个种子
  • 为该种子分配的时间预算(time budget);大部分 fuzzer 实际上选择优化对被选取种子的变异次数

由于 PUTs 与漏洞的复杂性,未发现代码覆盖率与未发现漏洞是不可知的,我们无法知道一个输入是否能触发漏洞,类似地在检索代码之前我们也不能获得程序行为的概率分布,因此数学上我们几乎不可能找到一个全面的优化解法,因此研究人员基于多种优化方法来近似地解决这个问题

3.2.1 Fitness by #Bugs

通常而言在模糊测试过程中使用两种 fitness 进行优化:1)基于漏洞 2)基于执行状态(例如代码覆盖率)

由于 fuzzing 的目的是发现漏洞,发现漏洞的数量便是一种最简单的 fitness,一种方法便是在随机/顺序选择种子的时候调度每个种子的时间预算,在不考虑执行状态的情况下, 最大化漏洞数量问题 可以被简化为一个 整数线性规划(Integer Linear Programming,ILP)问题,即在线性约束下最大化漏洞数量——以解决这样的 ILP 问题来自动计算每个种子的时间预算

另外一种认知是将漏洞发现的过程视作 带权奖券收集问题(Weighted Coupon Collector’s Problem,不懂的建议翻概率论课本虽然

【论文阅读NO.00001】Fuzzing: A Survey for Roadmap相关推荐

  1. 论文阅读:Knowledge Distillation: A Survey 知识蒸馏综述(2021)

    论文阅读:Knowledge Distillation: A Survey 知识蒸馏综述2021 目录 摘要 Introduction Background 知识 基于响应的知识 基于特征的知识 基于 ...

  2. 模型量化论文阅读#1----综述:A Survey of Quantization Methods for Efficient Neural Network Inference

    1. 量化的基本概念 A. 问题设置和符号表示 假设网络有L层,其每层的参数表示为:{W1,W2,-,WL}\left\{W_{1}, W_{2}, \ldots, W_{L}\right\}{W1​ ...

  3. 论文阅读:multimodal remote sensing survey 遥感多模态综述

    遥感多模态 参考:From Single- to Multi-modal Remote Sensing Imagery Interpretation: A Survey and Taxonomy Ke ...

  4. 【论文分享】Fuzzing: A Survey for Roadmap

    文章目录 1. Introduction 2. Overview 3. Fuzzing Theory 3.1 Seed Set Selection 3.2 Seed Schedule 3.3 Byte ...

  5. 阅读笔记:《The Art, Science, and Engineering of Fuzzing: A Survey》

    因为最近研究执行路径探索,需要用到fuzzing的思想,而之前对fuzzing的了解很浅,故先阅读一篇survey来对这个领域有一个全面的认识.由于笔者水平有限,部分暂时无法准确理解之处使用原文表示, ...

  6. 论文阅读:Natural Language Processing Advancements By Deep Learning: A Survey

    文章目录 一.介绍 二.背景 1.人工智能和深度学习 (1)多层感知机 (2)卷积神经网络 (3)循环神经网络 (4)自编码器 (5)生成对抗网络 2.NLP中深度学习的动机 三.NLP领域的核心概念 ...

  7. 【论文阅读】 Object Detection in 20 Years: A Survey

    [论文阅读]Object Detection in 20 Years: A Survey 摘要 论文介绍 1.目标检测 2.目标检测的里程碑 3.数据集 4.性能度量 摘要 本篇博客参考Object ...

  8. prompt综述论文阅读:Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural La

    prompt综述论文阅读:Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Lan ...

  9. 论文阅读笔记--Monocular Human Pose Estimation: A Survey of Deep Learning-based Methods 人体姿态估计综述

    趁着寒假有时间,把之前的论文补完,另外做了一点点笔记,也算是对论文的翻译,尝试探索一条适合自己的论文阅读方法. 这篇笔记基本按照原文的格式来,但是有些地方翻译成中文读起来不太顺,因此添加了一些自己的理 ...

最新文章

  1. 使用Nginx实现服务器反向代理和负载均衡
  2. 开发日记-20190814 关键词 日常
  3. 赛思互动:企业开展CRM系统需求调研步骤
  4. Windows Android Studio生成javadoc
  5. 从一个极简的微服务架构开始
  6. Java 9:Process API的增强
  7. ReportLab for PDF
  8. sed手册-3 例子
  9. Access 中数据库操作时提示from子句语法错误
  10. Maven项目添加ojdbc8
  11. HDU-2030-汉字统计
  12. 游戏开发中的向量数学
  13. Casper与V神的博弈论(过节了,文末送大礼)
  14. uclinux 与 linux的区别
  15. react 中 ref 管理列表
  16. Git 命令行的各种退出方式
  17. 数据库应用(mysql)数据库管理
  18. 数据清洗--读行问题
  19. Aaron Swartz:如何提高效率
  20. 矩阵的投影、线性拟合与最小二乘法

热门文章

  1. 可以节能的能耗数据监测管理系统
  2. 世界读书日|云计算助力图书馆智慧升级
  3. 基于Pytorch+CNN实现英文文本语义相似度
  4. 00后大学生:精美绝伦的微积分教科书
  5. 贵州余庆中学2021高考成绩查询,余庆中学2019高考喜报成绩、一本二本上线人数情...
  6. eos节点服务器_Pi要开始申请节点了,Pi到底有没有前途? 竞选Pi的节点如何配置电脑(附送服务器策略干货)...
  7. 数据中心网络里的Underlay和Overlay
  8. Lync 地址簿同步知识点
  9. 508任务一:用pytorch简单实现LeNet5网络对MNIST数据集训练
  10. 友元-2021.12.12