zoukankan      html  css  js  c++  java
  • afl的一些思想

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

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

    j00ru Effective file format fuzzing

  • 相关阅读:
    电脑一族,打电脑时候的健康的坐姿
    根据时间戳,增量同步数据的解决办法
    写在前面
    《T-GCN: A Temporal Graph Convolutional Network for Traffic Prediction》 论文解读
    关于Graph Convolutional Network的初步理解
    图形学_opengl纹理映射
    推荐算法_CIKM-2019-AnalytiCup 冠军源码解读_2
    推荐算法_CIKM-2019-AnalytiCup 冠军源码解读
    leetcode_雇佣 K 名工人的最低成本(优先级队列,堆排序)
    图形学_Bezier曲线
  • 原文地址:https://www.cnblogs.com/snip3r/p/12049497.html
Copyright © 2011-2022 走看看