Proj THUDBFuzz Paper Reading: Montage: A Neural Network Language Model-Guided JS Engine Fuzzer

Abstract

本文: Montage
特点: Fuzzing + 神经网络语言模型(LSTM)
主要步骤: 将一棵AST转化为一串AST subtrees,训练LSTM
实验效果:

  1. 能够生成valid JS tests
  2. 比previous studies outperforms
  3. 找到了37个bugs,其中3个是CVEs

1.Intro

P1: JS受欢迎->JS Bug的严重性
P2: JS Bug的严重性: JS Bug常被利用;被利用的方式; NVD中浏览器项目中JS Bug占比
P3:

  1. LangFuzz: 结合JS seed files的代码碎片来生成新的JS test input
  2. GramFuzz和IFuzz: 思路类似,不过IFuzzer使用基于feedback的遗传算法来指导来增进Fuzzing效率
    P4: 都没有考虑到code fragments内在逻辑关系;本文能利用
    P5,6: 2个observation
  3. a new security problem often arises from JS engine files that have been patched for a different bug
  4. test code that triggers new security vulnerabilities is often composed of code fragments that already exist in regression tests
  • 这个的说明是通过找到2038个JS文件和67个包含bug的JS文件,将这些文件都转化为只有1层的AST,发现这67个对应的AST有95.9%出现在2038个转化而成的AST中???

本文核心任务: 通过将一部分代码改成LSTM生成的代码来变异regression test
核心步骤:

  1. 将每个JS test对应的AST转化为一串fragments(fragment指深度为1的子树)
  2. 用fragments训练LSTM
  3. 用LSTM变异JS test的子树

已有类似研究:

  1. [16]: 重组PDF objects
  • 需要对structural control flows建模,此外,还需要对JS tokens之间的语义数据依赖关系进行建模

Montage与已有研究的差别: 基于fragments,每个fragment内部已经有了一定的结构关系,能够反映出语法和语义共性

实验:

  1. 在ChakraCore1.14.1上寻找bug,并与CodeAlchemist, jsfunfuzz, IFuzzer进行对比
  • 5次比对,每次72h
  • Montage找到133个bugs,其中15个security bugs,竞品没找到的数目分别是9,12,12;
    • Montage能找到其他工具找不到的bug
  1. 将Montage与随机选择,马尔科夫链,字符/token级别的网络做比对
  2. 在CharkraCore, JSCore, SpiderMonkey和V8上分别进行fuzz
  • 找到37个unique bugs;分别来自什么软件
  • 显示Montage有在现实项目中找到bug的能力

2.Background

2.2 Fuzzing testing

  1. jsfunfuzz: 以terminal token为单位生成
  2. CodeAlchemist: 利用assembly constraints of its building blocks
  3. LangFuzz, GramFuzz, IFuzz: struct a pool of code fragments
  4. TreeFuzz: 利用概率性上下文无关文法来生成test suite
  5. Skyfire: 推测出概率性上下文无关文法
  • 4&5缺点: 太general,不能找到js的bug

3.Motivation

P1: 回答问题: 会导致bug的JS files是否有什么相似之处-为此,设计了从ChakraCode的PoC中观察的一些小实验;为什么选择ChakraCode
P2: PoC是如何收集的;收集到了什么;
P3-: 如何从PoC数据中得出两个observations

4.Overview

Montage基本特点;基本功能;利用两个observations;基本步骤;PhaseI-III基本步骤,必要性,目的;
Montage在第三步会把当前subtree之前的fragment作为context放入。

Other model guided approaches

addressing code completion和其他神经网络生成测试的工作

5.Design

目标:

  1. 生成的测试中能够反映js的语法和语义特性
  • 通过AST子树来抽象化JS fragments之间的语义层次关系
  1. 不产生ref errors

提出了新算法;利用了什么性质;基本步骤;认为该模型能做到什么;

5.1 Phase I: Building Training Data of Fragment Sequences

5.2 Phase II: Training an LSTM Model

5.3 Phase III: Generating JS Tests

6.Implementation

Parse & Generating JS Statement: Esprima 4.0和Escodegen 1.9.1
其他技术细节: python和nodejs之间用pipe channel通信
LSTM的参数
监控: Python subprocess module, SIGILL, SIGSEGV
源码地址

7.Evaluation

8.Related Work

9.Conclusion

原文地址:https://www.cnblogs.com/xuesu/p/14495065.html