今天推荐的论文是来自ICSE 2020的“Extracting Taint Specifications for JavaScript Libraries”,作者基于动态分析,对现有JS代码构建了进行自动化污点分析的方法。
作者总结了当前静态分析JS代码的难题。如下图所示,下面的代码存在着“当用户输入不当路径时,目录下的文件夹会被全部删除”的风险。而使用当前的静态分析,就需要理解代码中每个库的含义,或者对库中的所有代码进行静态分析,但是JS库的代码通常数量巨大,且高度动态,因此仅进行静态分析是不够的。因此,作者提出了基于动态分析的污点分析的方法。
首先,作者定义了数据结构接触点(Points)的概念,它指示了一个点在代码中的位置。
接着,作者总结了污点分析关注的传播路径(流),有以下三种形式。
-
接触点从函数参数流向return参数。
-
对象的复制和传递
-
接触点在return语句中
接下来,作者提出了使用动态的方法推断上述接触点和传播路径。如下图所示,对于一个npm模块,箭头代表信息的流动。当执行测试套件时,在模块的入口处标记污染,在模块内部使用动态污点分析来记录内部的污点,在模块出口处,会生成一个额外的源,以供其他模块使用。
与传统“将API接口作为入口点,返回值作为出口点”不同的是,作者考虑了与客户端的交互,提出了“细胞膜”的概念,用以确认库代码起始位置和客户端结束位置。对于多模块交互的问题,作者为每个模块都添加了膜分析。
最后,作者实现了该上述方案,作者实现的原型工具能够自动提取了146个额外的污染槽和7840个传播路径,涵盖了1393个npm模块。他们将动态污点分析的工具与传统静态分析的工具结合起来,并发现了136个新的警报。
论文PDF:
https://software-lab.org/publications/icse2020_Taser.pdf
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 学术论文推荐 2021-07-21
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论