FUZZ:a survey

阅读笔记

Fuzz的分类:

  • generation based和mutation based
  • white box,gray box,black box
  • directed 和 coverage-based
  • dumb 和 smart

Fuzz的几个挑战

  1. 如何选取mutate种子输入(mutation based)
  2. 低的代码覆盖率
  3. 通过验证

方法

  1. 程序instrumentation和污点分析
  2. RNN,LSTM

Coverage-based fuzzing

方法 : 使用覆盖率来近似衡量达到的程序状态数量

  • 将基本块作为最佳粒度
  • 简单统计执行了的基本块和统计基本快的transition(记录点和记录边)

问题:

  • 简单的统计执行了的基本块会导致信息丢失。

所以AFL是第一个引入边度量的。AFL提供两种插桩,compile-in,external。
compile-in -> gcc/llvm。外部模式提供qemu模式。
AFL通过代码插桩和AFLbitmap,追踪代码覆盖率,安全追踪被许多sanitizers做。

目标应用在执行前被插桩。
初始种子->选择->变异->testcase->执行->跟踪

关键问题

  • 初始化问题。 在mutatio-based测试用例中,严重依赖于初始化种子的质量。
    • 好的initial seed inputs节约时间,满足复杂文件格式的需求,更大的路径,重用
  • 如何生成测试用例。
  • 如何从pool中选择种子
  • 如何有效的测试应用
    通过程序分析,控制流和数据流, 更有针对性。

测试用例生成:

符合要求且触发难以到达的路径
在基于生成的方法中,可以使用机器学习来获取输入数据格式等。
在基于变异的方法中,应该首先修改影响控制流的字节,污点分析用于定为key location。

程序执行

覆盖更多代码,发现更多bug

不同应用模糊化

  • 文件格式fuzzing 例如web浏览器
  • kernal fuzzing。随机调用api,随机参数

未来的趋势

  • 新的技术的融合
  • smart fuzz (reinforcement)
  • 硬件特性
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值