基于神经网络语言模型 (NNLM) 实现 JS 引擎模糊测试器被证实有效。韩国科学技术院(KAIST)的一篇论文《Montage: A Neural Network Language Model-Guided JavaScript Engine Fuzzer》, 首次提出了基于神经网络语言模型 (NNLM) 实现 JS 引擎模糊测试器: Montage。
- 论文提出了一种将 JS 测试用例的层次结构和这些结构之间的关系建模为一系列片段的新算法。 将 AST 编码为片段序列使 Montage 能够使用 LSTM 模型学习片段之间的关系。
- 技术的关键方面是将 JS 抽象语法树 (AST) 转换为可以直接训练流行的 NNLM 的 AST 子树序列
- 试验用例结果表明 Montage 在最新的 JS 引擎中发现了
37
个真实 bug,有3个是公共漏洞和暴露(CVE)
,证明了它能有效发现 JS 引擎的 bug。
以下是 Montage 的设计示意图:
以下是使用3种模糊测试器和 Montage 方法发现的错误数量比较
以下是用 CVE-2019-0860 的测试代码能够触发的成功案例之一。
function f0 ( f, p = {}) {
f . __proto__ = p ;
f . arguments = 44;
f . arguments === 44;
}
let v1 = new Proxy({} , {});
for ( let v0 = 0; v0 < 1000 ; ++ v0 ) {
f0 ( function () {'use strict ';} , v1 );
f0 ( class C {} , v1 );
}