JavaScript代码安全问题对web安全的影响之大,大家应该都很清楚,但是在现实世界中广泛部署和使用的JS代码实在是太多,有漏洞的代码往往从唐山跑到了江苏都没有办法被抓住,所以研究人员一直在努力想办法开展大规模的社会面(in the wild)全员核酸JS代码安全分析,今天我们就给大家介绍AsiaCCS 2022上的一篇相关论文On Measuring Vulnerable JavaScript Functions in the Wild
在这篇由加拿大Concordia大学研究人员完成的论文中,作者从NPM 包、Chrome扩展以及热门网站收集了总共9,205,654个不同的JS函数,对这些代码开展了安全分析,发现了11,148个不安全函数。
作者在本文的研究工作中并没有挖掘新类型的JS漏洞,而主要利用了Snyk 和VulnCode-DB project里面已经整理的有漏洞的JS代码作为参考依据,开展了function-level的漏洞相似性分析。
为了从Snyk和VulnCode-DB中选择并验证有问题的JS函数(这些漏洞数据库其实并不提供特别详细的标记信息),作者首先要收集相关的存在问题的开源项目,然后用各种方法去确认到底其中是哪部分代码出了问题。在这个点上,作者主要使用的工具是很多漏洞分析工作中也都会用到的Semgrep,通过开发对应的Semgrep规则,来发现有问题的JS函数。
作者在这里讨论了安全社区已有的Semgrep规则,并实验测试发现,它们根本检测不出来有问题的代码,于是本文的主要贡献之一就是为安全社区去提供一些更高质量的规则。下面进入到“Semgrep规则开发的艺术”环节,作者在论文中主要针对Prototype pollution和ReDoS两类有问题的代码的模式进行总结并开发相关的规则(因为这两类规则可能误报率更低)
此处略去如何撰写Semgrep规则细节一万字(我们是一个懒惰的公众号),只看看结果,效果还不错哦:
准备好了参考数据,接下来就要进行总决战了。作者也是尽可能贯彻了“一个不漏,应检尽检”的方针,收集了热门项目中会用到的JS代码:
在实际检测中,除了使用Semgrep的规则扫描,还同时使用了fuzzy hash comparison和Cryptographic hash comparison(其实小编并没有特别理解最后这个密码学hash比较的意义是什么?寻找那些原封不动被copy过去的有漏洞的代码?)来过滤扫描结果,减少误报。
最后,作者对10个比较热门的项目中使用到的有漏洞的JS函数情况进行了讨论, 大家如果对论文中提到的各种规则、数据集有兴趣,可以访问:
https://github.com/Marynk/JavaScript-vulnerability-detection
论文PDF:
https://users.encs.concordia.ca/~mmannan/publications/JS-vulnerability-aisaccs2022.pdf
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2022-06-13
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论