AFL的介绍

1. guided fuzzing的挑战Fuzzing是漏洞挖掘领域最有效的方法之一,可以用来发现大量的远程代码执行和提权的漏洞。然而,fuzzing优势相对肤浅和盲目的。随机变异使得我们很难实现达到测试程序特定的代码路径。这就使得测试的代码覆盖率很低。有很多人试图去解决这个问题,Tavis Ormandy曾经提出一种:语料精馏法。这个方法根据代码覆盖率,从大量高质量的输入文件语料
摘要由CSDN通过智能技术生成

参考了http://blog.csdn.net/gengzhikui1992/article/details/50829114中对一些语句的理解,对AFL的README.txt进行了总结。。

1. guided fuzzing 的挑战
Fuzzing 是漏洞挖掘领域最有效的方法之一,可以用来发现大量的远程代码执行和提权的漏洞。然而, fuzzing 优势相对肤浅和盲目的。随机变异使得我们很难实现达到测试程序特定的代码路径。这就使得测试的代码覆盖率很低。
有很多人试图去解决这个问题, Tavis Ormandy 曾经提出一种:语料精馏法。这个方法根据代码覆盖率,从大量高质量的输入文件语料中选取一个子集,然后按照传统方法去 fuzz 。这种方法很有效,但前提是需要一个这样的语料。另一方面,代码覆盖率只提供了一个很简单的对程序状态的描述,当 Fuzzing 测试到了一定的程度,代码覆盖率就没什么作用了。
所以,大家都在探索更复杂的技术,比如:程序控制流分析,符号执行或静态分析。这些技术在实验中是很有前途的,但是在实际应用中显得效率低下、缺乏可靠性。
2. AFL 的方案
AFL 是一个暴力方法的 fuzzer ,采用了一个极其简单但是绝对可靠的,插桩代码导向的遗传算法。
它使用 一种自定义的边缘覆盖率 来识别程序控制流的局部变化。
简单来说,整个算法的逻辑如下:
  1) Load user-supplied initial test cases into the queue,

  2) Take next input file from the queue,

  3) Attempt to trim the test case to the smallest size that doesn't alter
     the measured behavior of the program,

  4) Repeatedly mutate the file using a balanced and well-researched variety
     of traditional fuzzing strategies,

  5) If any of the generated mutations resulted in a new state transition
     recorded by the instrumentation, add mutated output as a new entry in the
     queue.

  6) Go to 2.


被选择出来的测试用例会进行周期性的删减,消除那些已经被更新的、更高覆盖率的废弃的测试用例。
整个 fuzzing 过程,会产生一个很有用的 测试 集合的语料库,可以用来对一些浏览器、 office 应用、闭源的软件等进行压力测试。
经测试, AFL 的性能,比那些 blind fuzzing 或者 coverage-only 工具高多了。

3. 使用 AFL 插桩程序(有源码的情况下 instrument
当有源代码时,我们可以在编译期间进行instrument,这种instrument对性能影响很小。
gcc/g++重新编译目标程序的方法是:
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值