首页 > 其他 > 详细

afl的一些思想

时间:2019-12-16 16:02:42      阅读:105      评论:0      收藏:0      [点我收藏+]

基本思想:将输入测试集加入队列,取队列中的输入集并进行变异,如产生新行为将变异输入集加入队列

1.记录代码块,使用元组,A^B不同于B^A
2.记录新行为,维护一个全局元组map,当输入变异文件不产生新元组时被丢弃(即使执行路径不同但是元组都是已经被记录的同样被丢弃),产生新行为的变异文件插入到输入队列头。检测新行为时同时基于代码块粗略执行数
3.剔除语料(由于产生新行为的变异文件都会插入输入队列头,变异文件过程有合成输入集作为新的输入集的操作,所以新插入的变异文件有可能会是祖先输入文件的超级子集,PS:这里就是j00ru提到的NP问题orz。为了提高效率,AFL会定期检测输入的变异文件的子集是否可以覆盖当前变异文件的元组路径)。AFL的做法是根据变异文件执行次数和文件大小给每个文件分配权重,为每个元组选择权重最低的变异文件,直至遍历完所有元组。未被选中的变异文件没有被直接丢弃,若在检测时有新的、没有fuzz过的变异文件在输入队列,99%的其他变异文件被丢弃。若没有新的没有fuzz过的文件,若当前被fuzz的入口以前fuzz过,95%被丢弃;若当前文件没有进行过完整的fuzz,75%被丢弃
4.记录新的崩溃。AFL认为是新的崩溃的策略是:崩溃的执行路径出现了已有崩溃没有过的元组(至少一个);崩溃的执行路径缺少已有崩溃的必要元组(至少一个)
5.修剪输入集。为了提高效率,AFL尝试去除输入集的可变长度长度数据块,并根据是否改变执行路径决定是否保留修改。
6.fuzz策略。位翻转、整型数的顺序加减、测试一些可能引起整型溢出的数
7.引入语法token来解决sql之类人类可读机器不识别的fuzz
8.通过fork产生新进程来绕过execve的执行,通过管道通信提高效率

afl的一些思想

原文:https://www.cnblogs.com/snip3r/p/12049497.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!