今天推荐的论文是来自ISSTA 2021的论文“Modular CallGraph Construction for Security Scanning of Node.js Applications ”。
当你使用npm安装1.0.4版本的writex应用时(writex能够将markdown转为latex),npm audit工具会报告5个不同的安全威胁。然而,经过作者手动检查,五个中只有一个是真实存在的,另外四个是无法通过函数调用到达的。因此,在本篇论文中,作者设计了JAM工具,它基于调用图的方法,对Node.js进行扫描,提升npm分析的精准度。
首先作者总结了为node.js构建调用图的难点:
-
代码被分割成模块。如下图,lib1.js对外暴露的模块为filter,client1.js就可以使用require调用该模块。
-
使用了高阶函数。函数可以当作另外一个函数的参数,或者如下图第2行,返回的参数是一个函数。
在本篇论文中,作者构建函数调用图分为以下两个步骤。
-
第一步,总结每个文件声明的模块。作者记录了以下信息:Loc(源码位置)、Prop(属性)、Var(变量名)、Exp(函数表达式)。给定一个JS文件作为输入,输出文件的模块集合,由函数调用集合、函数返回集合和对象属性集合组成。作者在这里使用了轻量级的静态分析方法。下图为lib2.js实例生成的模块集合。
-
第二步是调用图的构建。作者首先总结了上面收集到的模块集合。并使用如下图所示的规则生成调用图,其中前两个规则依赖于对函数调用和对象属性的总结,后面三个规则总结了return的参数为一个函数的调用、函数的参数作为一个函数的调用和对象的属性为一个函数的调用。
最后,对于node.js中有漏洞的应用,作者检查了是否可以利用上述方法生成的调用图,从程序的入口点精准地访问到这些函数。实验结果表明,对于12个Node.js应用,JAM可以与npm audit报告相同数量的漏洞(8个),且降低了npm audit 81%的错误率;与当前生成调用图的方法js-callgraph相比,Jam具备更高的精度、准确度和更快的分析时间。
论文PDF:
https://dl.acm.org/doi/pdf/10.1145/3460319.3464836
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 学术论文推荐 2021-07-13
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论