编辑
2024-10-15
Paper
00
请注意,本文编写于 36 天前,最后修改于 36 天前,其中某些信息可能已经过时。

目录

CAMFuzz: Explainable Fuzzing with Local Interpretation
作者
核心思想
整体框架
Training

🤔

CAMFuzz: Explainable Fuzzing with Local Interpretation

作者

核心思想

目前主流的研究思路是解锁未覆盖到的代码块,但是作者认为并不是所有未解锁的代码块都是有用的;同时对于需要解锁的代码块进行分析目前的主流方案是符号执行或者是数据流分析,但是目前的符号执行或者数据流分析仍然存在许多的问题;同时机器学习方案在模糊测试中存在不稳定或模型训练时间过长的问题。

针对上述问题,作者提出了一种名为CAMFuzz的新型解决方案,其利用了可解释人工智能和程序理解能力来分析首先需要解锁程序中的哪些代码块,应该优先变异哪些字节来到达目标区域,并且应该怎么变异。

整体框架

  • Training: 目标是能够训练处一个模拟程序行为的模型,给定一个种子输入,模型就可以预测代码覆盖图。作者选择使用分类模型实现这个目标,最后使用一个GAP层来替代最后一个卷积层后的全连接层
  • Local Explanation: 使用GAP层来定位输入中的对象,而后让其来帮助我们进行解释;直观上来讲,我们已经训练了一个从输入到程序代码块的映射,我们给出一个目标代码块,Local Explanation模块应该给出与该代码块所相关的字节位置
  • Magic Value Identification

Training

Data preprocess

作者选择的训练数据为原始种子文件覆盖率图

针对原始种子文件,首先找到最大的种子而后将其他种子使用\x00填充到目标大小;而后将所有种子文件输入到目标程序中获取覆盖率图。通常来说Fuzzer输出的种子是不平衡的[即大部分种子覆盖到大部分都能覆盖到的代码块,只有少量种子可以覆盖到稀有代码块],所以为了解决这种种子不平衡的问题,作者在获得覆盖率图后会对种子队列进行剪枝以平衡种子。

model

作者使用CNN模型来将种子映射到覆盖率图,在理想情况中给定一个训练好的模型ff和一个输入(x1,x2,...,xn)(x_1,x_2,...,x_n),这个模型可以预测一个代码块covicov_i能否被覆盖。但是针对该模型作者做了三个改动

  • 使用GAP层而不是全连接层
  • 将最后一个卷积层所产生的特征图的形状设置为128
  • 为了解决代码块数量过多的情况,作者设计了一种分段训练算法

Local interpretaion

作者引用了一种名为CAM的本地解释技术,其背后思想是

  • 使用GAP层替代全连接层
  • 利用 GAP 后面的最后一个卷积层生成的特征图中的部分信息和 GAP 生成的权重来生成定位信息

作者最后只生成了大小为128的热力图,其给出的解释是如果保持特征图的形状和原始输入相同会有大量的卷积运算从而拖累模型训练进度。

Node selection

本文作者:Du4t

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!