主题:通过OPG(object property graph)来挖掘JavaScript的零日漏洞。
曹教授首先介绍了JavaScript的一些特征和特有的四类漏洞,其中比较重要的一条是JavaScript是基于原型链的。
然后曹教授给出了今天讲座的一个high-level summary:
1.用抽象解释的方式来处理动态的特征
2.对JavaScript的对象进行建模
3.通过图查询来进行漏洞的检测
接下来曹教授主要从三个方面介绍了他的工作:
ObjLupAnsys FSE2021,ODGen Usenix2022,未来工作
1.ObjLupAnsys FSE2021:
曹教授首先介绍了什么是原型链污染:通过污染一个基对象的属性,使其他任何代码或者程序想访问这个基对象的属性时,都会获得被污染的属性。然后叫举了一个toString的例子来解释了原型链污染。通过原型链污染,会造成DoS,任意代码执行和会话固定攻击等问题。曹教授举了一个集体的例子,讲了原型链污染是怎么在paypal-adaptive 的NPM包中进行工作,通过一个对象的[__proto__][toString]两个属性获取到系统函数,并进行污染。在下面的代码中使用toString时,就会发现这是已经被污染过的函数。
接下来,曹教授介绍了自己团队是如何通过静态解释的方式来检测原型链污染的漏洞。整体架构是这个样子的:输入是一个抽象语法树AST。第一步:AST会经过一个静态的解释器,每个AST的节点依次执行,在执行的过程中会不断向OBG(Object Property Graph)进行查询,这时候会静态解析是不是某个函数调用,如果是就会进入到对应的函数中。所有的节点和变量都会通过这种方式进行调用。第二步是污点分析(Taint Analysis),做taint propagation时,只有taint到达的新点的所有constraints被满足时,才会执行propagation操作。第三步是object lookup analysis,主要是对Source和Sink两个集合不断进行拓展,把两个集合的value对应起来,最终找到我们感兴趣的,能被重定义的函数。一旦发现函数被重定义,系统就会进行报告。曹教授把之前paypal的例子进行第三步object lookup analysis,用一张更加详细的图进行说明。最后介绍了实现代码的构成,在两个数据集上的评估结果,以及代码覆盖率和工具性能。
2. ODGen Usenix 2022:
曹教授首先介绍了第二个项目的动机和核心思想。主要是通过Object Dependency Graph将objects和AST连接起能更加方便地进行漏洞查询。曹教授介绍了一个六行代码的例子,这个例子包含两个漏洞:command injection和 internal property tampering,然后展示了这个例子的AST,以及如何一步一步生成ODG。然后曹教授根据生成的ODG,分别进行和Command Injection 和 internal property tampering漏洞的检测。
接下来曹教授展示了四种不同漏洞是如何通过ODG中的不同方式进行检测。曹教授的团队通过这种方式在30万的NPM包中检测到了2964个零日漏洞,人工核查了264个,其中180个是正确的,然后介绍了和其他项目相比,通过ODG检测的FP和FN。最后曹教授以一个通过ODG检测出来的Deparam的漏洞的示例结束了这一部分。
在演讲的最后,曹教授讲述了未来的工作以及现场演示了今天所讲内容的demo。
https://www.bilibili.com/video/BV1xL411M7wz?spm_id_from=333.999.0.0