[发明专利]一种Node.js代码安全检测方法及系统在审
申请号: | 202210279951.1 | 申请日: | 2022-03-21 |
公开(公告)号: | CN114912110A | 公开(公告)日: | 2022-08-16 |
发明(设计)人: | 刘奇旭;陈文岗;靳泽;刘清越;李香龙;刘潮歌;谭儒 | 申请(专利权)人: | 中国科学院信息工程研究所 |
主分类号: | G06F21/56 | 分类号: | G06F21/56;G06F40/30;G06F40/284 |
代理公司: | 北京君尚知识产权代理有限公司 11200 | 代理人: | 李文涛 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 node js 代码 安全 检测 方法 系统 | ||
1.一种Node.js代码安全检测方法,其特征在于,包括以下步骤:
对待检测的程序代码以及该程序代码中所使用的第三方库代码进行TypeScript化处理,并利用代码打包器将处理后的程序代码打包为单文件形式的程序代码;
将打包后的程序代码编译为抽象语法树,并在抽象语法树上对程序代码中的动态特性进行静态化处理;
将静态化处理后的抽象语法树编译为中间表示,并按照预定义的规则在中间表示上标记入口函数、危险函数及无害化处理函数;
对标记后的中间表示构建值流图,并在值流图上进行双向污点分析,搜索潜在风险利用路径。
2.如权利要求1所述的方法,其特征在于,对待检测的程序代码进行TypeScript化处理的步骤包括类型推导和推导失败部分函数改写;对第三方库代码进行TypeScript化处理的步骤包括类型声明搜索、类型推导和推导失败部分函数改写。
3.如权利要求1所述的方法,其特征在于,将程序代码编译为抽象语法树的步骤包括词法分析、语法分析和语义分析,上述步骤通过TypeScript编译器实现。
4.如权利要求1所述的方法,其特征在于,在抽象语法树上对程序代码中的动态特性进行静态化处理的步骤包括:语法脱糖、对象字面量处理、任意类型处理和闭包处理,其中语法脱糖是将高级的语法糖转换为等价的普通代码语法,对象字面量处理、任意类型处理和闭包处理都是将动态代码转换为静态代码的过程。
5.如权利要求4所述的方法,其特征在于,对象字面量处理的方法为:使用隐藏类技术处理对象字面量,通过遍历抽象语法树,为不同的对象字面量之间构建引用关系,然后根据对象字面量的引用关系进行拓扑排序,按照排序依次分析每个对象字面量的类型,并为每个对象字面量构建一个隐藏类,最后将对象字面量的声明改写为隐藏类的实例化;
任意类型处理的方法为:使用类型转换技术处理任意类型,预先准备任意类型与其他已知类型的转换函数,并最小化原则将任意类型出现的地方改写为类型转换函数的调用;
闭包处理的方法为:使用显式作用域技术处理闭包,为每个闭包生成一个作用域类和一个闭包函数类,并基于作用域类改写内层函数;作用域类包含闭包所使用的外层作用域的变量,闭包函数类包括改写后的内层函数和作用域类的实例,以及调用改写后的内层函数的方法;然后将原来的闭包改写为作用域类的实例化和闭包函数类的实例化,将闭包的调用改写为闭包函数类实例的方法调用。
6.如权利要求1所述的方法,其特征在于,将抽象语法树编译为中间表示的方法是以递归下降的方式遍历抽象语法树,将抽象层次更高的树状结构的抽象语法树转换为抽象程度更低的线性的中间表示指令序列。
7.如权利要求1所述的方法,其特征在于,按照先验知识库中预定义的规则在中间表示上标记入口函数、危险函数及无害化处理函数,包括:在中间表示上将先验知识库中Source规则所对应的函数标记为入口函数,将先验知识库中Sink规则所对应的函数标记为危险函数,将先验知识库中Sanitizer规则所对应的函数标记为无害化处理函数。
8.如权利要求1所述的方法,其特征在于,构建值流图的步骤包括:构建过程内控制流图和函数调用图,将过程内控制流图和函数调用图组合成过程间控制流图;遍历过程间控制流图上所有关于值的处理,建立值之间的赋值关系,构建程序赋值图;在程序赋值图上进行指针分析,确定指针的指向关系;利用程序赋值图和指针分析的结果构建值流图。
9.如权利要求1所述的方法,其特征在于,双向污点分析包括前向污点分析和后向污点分析,其中前向污点分析以Source点为起点将污点按照值流进行正向传播,适用于数据流收敛的情况;后向污点分析以Sink点为起点将污点按照值流进行反向传播,适用于数据流发散的情况。
10.一种实现权利要求1-9任一项所述方法的Node.js代码安全检测系统,其特征在于,包括:
预置处理模块,用于将待检测的程序代码及第三方库代码进行TypeScript化处理,并将多文件形式的代码打包为单文件的形式;
编译前端及动态特性处理模块,用于将代码编译为抽象语法树,并在抽象语法树上处理对象字面量、任意类型和闭包动态特性;
中间表示生成器模块,用于将抽象层次更高的树状结构的抽象语法树转换为抽象程度更低的线性的中间表示指令序列;
函数标记模块,按照先验知识库中预定义的规则在中间表示上标记入口函数、危险函数及无害化处理函数;
值流图构建模块,用于在中间表示上构建控制流和数据流相关的图结构,并进行指针分析,构建值流图;
污点分析模块,用于在中间表示上进行前向污点分析和后向污点分析,搜索潜在风险利用路径。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所,未经中国科学院信息工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210279951.1/1.html,转载请声明来源钻瓜专利网。