zoukankan      html  css  js  c++  java
  • Proj THUDBFuzz Paper Reading: CodeAlchemist: Semantics-Aware Code Generation to Find Vulnerabilities in JS Engines

    Abstract

    目标: 生成语法语义有效的JS code snippets
    工具: CodeAlchemist
    算法: semantics-aware assembly
    效果: 在JS引擎中找到了很多bugs

    1. Intro

    P1: js引擎使用广泛

    P2: js安全重要

    P3: 成功的JS Fuzzing engines:

    1. LangFuzz
    • 方法: 将样本JS文件解析后切分为多个code fragments,然后再重组形成新的test cases。
    • 效果:从2011年到成文时至少发现了2.3k个bugs
    1. jsfunfuzz
    • 方法: 从手写的语法文件中生成语义有效的js语句
    • 效果: 从2006年到成文时至少发现了2.8k个bugs

    P4: 目前js fuzzer存在的缺点:生成的样例语义有效性低

    P5: jsfunfuzz缺点:写语法文件本身过于费时
    目前jsfunfuzz处理方法:允许一部分语法无效的code snippets出现,将js code snippets放在trycatch block中执行
    该解决方案仍然存在着其实没有提升语法有效率的缺点,还可能会改语义,导致一些bugs无法出现。比如CVE-2017-11799

    P6: 学习概率文法模型,比如Skyfire和TreeFuzz,仍然存在难以处理复杂的js类型系统,会生成语义无效样例的情况

    P7: 本文:提出semantics-aware assembly,关键是把JS种子切分为多个code bricks,每个code bricks上标着若干称为assembly constraints的用于指示当前code brick在什么条件下能与其他code brick结合。
    具体的,这些条件会指明每个codebrick中定义和使用了哪些变量(用数据流分析确定的),还会动态确定这些变量的类型。
    assembly constraints就是与langfuzz的最大不同。
    尽管还是存在语义无效的可能性,codealchemist还是大大增加了语义有效率。

    P8:
    无需人力实现语法文件,可以从现有种子直接学习。

    P9:
    实验:
    对象:4个引擎:ChakraCore, V8, JavaScriptCore, SpiderMonkey
    效果:

    1. 其中一个上面超过jsfunfuzz 4.7x
    2. 19 bugs, 11 security bugs
  • 相关阅读:
    二项堆(三)之 Java的实现
    二项堆(二)之 C++的实现
    二项堆(一)之 图文解析 和 C语言的实现
    斜堆(三)之 Java的实现
    斜堆(二)之 C++的实现
    斜堆(一)之 C语言的实现
    左倾堆(三)之 Java的实现
    左倾堆(二)之 C++的实现
    左倾堆(一)之 图文解析 和 C语言的实现
    二叉堆(三)之 Java的实现
  • 原文地址:https://www.cnblogs.com/xuesu/p/14501138.html
Copyright © 2011-2022 走看看