[论文解读] Learn&Fuzz: Machine Learning for Input Fuzzing
本文提出 Learn&Fuzz,一种新颖的机器学习方法,利用序列到序列的循环神经网络从样本 PDF 输入中自动学习生成式概率文法。该方法学习格式正确 PDF 对象的统计结构,并利用此模型指导智能模糊测试,显著提升了 Microsoft Edge 的 PDF 解析器在代码覆盖率和漏洞发现方面相较于随机模糊测试与基线学习型模糊测试技术的表现。
Fuzzing consists of repeatedly testing an application with modified, or fuzzed, inputs with the goal of finding security vulnerabilities in input-parsing code. In this paper, we show how to automate the generation of an input grammar suitable for input fuzzing using sample inputs and neural-network-based statistical machine-learning techniques. We present a detailed case study with a complex input format, namely PDF, and a large complex security-critical parser for this format, namely, the PDF parser embedded in Microsoft's new Edge browser. We discuss (and measure) the tension between conflicting learning and fuzzing goals: learning wants to capture the structure of well-formed inputs, while fuzzing wants to break that structure in order to cover unexpected code paths and find bugs. We also present a new algorithm for this learn&fuzz challenge which uses a learnt input probability distribution to intelligently guide where to fuzz inputs.
研究动机与目标
- 解决在复杂格式(如 PDF)中为基于文法的模糊测试手动创建输入文法的繁琐且易出错的问题。
- 探索学习格式正确输入结构与注入格式错误输入以触发意外代码路径之间的张力。
- 开发一种全自动、端到端的方法,从原始样本输入中学习统计输入模型,无需程序插桩。
- 评估学习到的概率模型是否能比随机或基于启发式的方案更有效地指导模糊测试。
提出的方法
- 采用序列到序列(seq2seq)循环神经网络,从样本输入语料库中学习 PDF 对象结构的统计生成模型。
- 在原始 PDF 文本上进行无监督、端到端训练,以学习有效输入序列的概率分布。
- 通过从训练好的 seq2seq 模型中采样,生成新的、格式正确的 PDF 对象,同时保持语法和语义规律性。
- 应用一种新颖的 Learn&Fuzz 算法,利用学习到的概率分布指导输入的变异方式与位置,优先选择统计上合理但结构多样的变异。
- 将学习到的模型集成到模糊测试流水线中,平衡格式正确性(以提升覆盖率)与变异(以发现漏洞)。
- 使用 Microsoft Edge 的 PDF 解析器评估该方法,并测量代码覆盖率与漏洞发现率。
实验结果
研究问题
- RQ1基于神经网络的模型能否有效从原始样本输入中学习复杂、扁平化输入格式(如 PDF 对象)的统计结构?
- RQ2如何利用学习到的输入概率分布来指导模糊测试,以在格式正确性与结构变异之间取得平衡?
- RQ3在解析器中学习准确的输入结构与生成能触发意外代码路径的输入之间存在何种权衡?
- RQ4Learn&Fuzz 方法在代码覆盖率与漏洞检测方面是否优于随机模糊测试及其他学习型模糊测试技术?
- RQ5神经网络模型的统计特性是否有助于缓解学习与模糊测试目标之间的固有冲突?
主要发现
- seq2seq 模型成功从原始 PDF 输入中学习到一个生成式、概率性文法,生成了大量符合格式语法规则的新颖、格式正确的 PDF 对象。
- 所学习的模型在 Microsoft Edge 的 PDF 解析器中实现的代码覆盖率高于随机模糊测试与基线学习型模糊测试方法。
- 所提出的 Learn&Fuzz 算法通过利用学习到的概率分布指导变异,相较于其他模糊测试策略,在覆盖多样化代码路径方面表现更优。
- 该方法表明,通过神经网络进行统计建模可有效捕捉 PDF 对象的复杂、扁平化结构,包括多样的键值对与嵌套类型。
- 该方法在漏洞发现方面实现了可量化的改进,尤其在触发错误处理与边界情况的代码路径方面表现突出。
- 结果证实了学习格式正确结构与注入格式错误输入之间存在根本性张力,而 Learn&Fuzz 方法通过引导式变异有效缓解了这一矛盾。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。