🤔
目前主流的研究思路是解锁未覆盖到的代码块,但是作者认为并不是所有未解锁的代码块都是有用的;同时对于需要解锁的代码块进行分析目前的主流方案是符号执行或者是数据流分析,但是目前的符号执行或者数据流分析仍然存在许多的问题;同时机器学习方案在模糊测试中存在不稳定或模型训练时间过长的问题。
针对上述问题,作者提出了一种名为CAMFuzz的新型解决方案,其利用了可解释人工智能和程序理解能力来分析首先需要解锁程序中的哪些代码块,应该优先变异哪些字节来到达目标区域,并且应该怎么变异。
Local Explanation
模块应该给出与该代码块所相关的字节位置Data preprocess
作者选择的训练数据为原始种子文件
和覆盖率图
针对原始种子文件
,首先找到最大的种子而后将其他种子使用\x00
填充到目标大小;而后将所有种子文件输入到目标程序中获取覆盖率图。通常来说Fuzzer输出的种子是不平衡的[即大部分种子覆盖到大部分都能覆盖到的代码块,只有少量种子可以覆盖到稀有代码块],所以为了解决这种种子不平衡的问题,作者在获得覆盖率图后会对种子队列进行剪枝以平衡种子。
model
作者使用CNN模型来将种子映射到覆盖率图,在理想情况中给定一个训练好的模型和一个输入,这个模型可以预测一个代码块能否被覆盖。但是针对该模型作者做了三个改动
Local interpretaion
作者引用了一种名为CAM的本地解释技术,其背后思想是
作者最后只生成了大小为128的热力图,其给出的解释是如果保持特征图的形状和原始输入相同会有大量的卷积运算从而拖累模型训练进度。
Node selection
本文作者:Du4t
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!