从概念上讲, 模糊是一个优化问题, 其目标是最大限度地在给定时间的测试中发现触发漏洞的程序输入的数量.
目前主流的模糊测试思路是使用进化算法来解决底层优化问题 - 生成新的输入, 最大限度地提高代码覆盖率. 进化优化从一组种子输入开始, 将随机突变应用于种子生成新的测试输入, 执行这些输入的目标程序, 并只保留有希望的新输入 . 这样存在的问题是输入语料库越来越大时, 达到新的代码位置的效率会越低.
本文介绍了一种新的, 高效的, 可扩展的程序平滑技术, 使用前馈神经网络 (NNs), 可以增量学习复杂的平滑逼近, 真实世界的程序分支行为, 即由特定给定的输入预测目标程序的控制流边缘. 首先确定程序平滑的意义, 采用高效的梯度引导技术进行模糊处理. 并有一个有效的和可扩展的程序平滑技术使用代理神经网络有效地建模目标程序的分支行为, 并进一步提出了一种增量学习技术, 以随着训练数据的曾多迭代地改进代理模型.
如何将模糊转换为优化问题:
梯度引导:
平滑逼近:
增量学习: 在一开始 NN 模型可能只能覆盖程序空间的一小部分, 所以需要通过增量训练进一步细化模型. 本文设计了一种新的覆盖的过滤方案, 该方案创建了旧数据和新数据的浓缩摘要, 使得训练更有效.
来源: http://www.bubuko.com/infodetail-3003588.html