3.7. Not all bytes are equal Neural byte sieve for fuzzing

这篇文章的想法很直接,考虑到一个结构化的输入,在某些点变异会比在其他地方变异更有用,于是就产生了先预测变异的热力图,然后再变异的想法。

文中先在有限的时间内进行正常的模糊测试的流程,拿到样本及其覆盖率对模型进行训练。考虑到输入是一个连续的字节流,使用LSTM算法来建立模型。

训练模型用四个参数

  • 输入

  • 输入对应的覆盖

  • 变异后的输入

  • 变异后的输入对应的覆盖

模型把输入转成一个向量,输出的热力图也是一个向量,向量的每个单位是一个字节,表示变异这里带来覆盖率提升的可能性。 模型建立好后,用这个热度图来指导变异,先diff变异前后的样本,得到一个新的向量,变异记为1,否则为0。用这个新的向量乘上对应的heapmap,如果结果大于设置好的阈值,就对该变异进行测试。