zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    嵌入式Linux基础知识
    面向对象程序设计与原则
    设计模式之工厂模式
    设计模式之单例模式
    基于Doxygen的C/C++注释原则
    设计模式概论
    重启博客
    java 单例模式的几种写法
    CountDownLatch、CyclicBarrier
    java ConcurrentHashMap和CopyOnWriteArrayList解决并发问题
  • 原文地址:https://www.cnblogs.com/xuesu/p/14495065.html
Copyright © 2011-2022 走看看