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
posted @ 2021-03-08 18:02  雪溯  阅读(129)  评论(0编辑  收藏  举报