(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202210279951.1 (22)申请日 2022.03.21 (71)申请人 中国科学院信息 工程研究所 地址 100093 北京市海淀区闵庄路甲89号 (72)发明人 刘奇旭 陈文岗 靳泽 刘清越  李香龙 刘潮歌 谭儒  (74)专利代理 机构 北京君尚知识产权代理有限 公司 11200 专利代理师 李文涛 (51)Int.Cl. G06F 21/56(2013.01) G06F 40/30(2020.01) G06F 40/284(2020.01) (54)发明名称 一种Node.js代码安全检测方法及系统 (57)摘要 本发明提出一种Node.js代码安全检测方法 及系统, 涉及计算机网络安全领域, 对待检测的 程序代码及其所使用的第三方库代码进行 TypeScrip t化处理, 并将处理后的程序代码打包 为单文件形式的程序代码; 将打包后的程序代码 编译为抽象语 法树, 并对程序代码中的动态特性 进行静态 化处理; 将静态化处理后的抽象语法树 编译为中间表示, 标记入口函数、 危险函数及无 害化处理函数; 对标记后的中间表示构建值流 图, 在图上进行双向污点分析, 搜索潜在风险利 用路径。 本发 明弥补了 现有检测方法不能检测出 控制流和数据流较为复杂中代码的安全风险的 缺陷, 有效地 提高了Node.js代码的安全性。 权利要求书2页 说明书6页 附图8页 CN 114912110 A 2022.08.16 CN 114912110 A 1.一种Node.js代码安全检测方法, 其特 征在于, 包括以下步骤: 对待检测的程序代码以及该程序代码中所使用的第三方库代码进行TypeScript化处 理, 并利用代码打包器将处 理后的程序代码打包为单文件形式的程序代码; 将打包后的程序代码编译为抽象语法树, 并在抽象语法树上对程序代码中的动态特性 进行静态化处 理; 将静态化处理后的抽象语法树编译为中间表示, 并按照预定义的规则在中间表示上标 记入口函数、 危险函数及无害化处 理函数; 对标记后的中间表示构建值流图, 并在值流图上进行双 向污点分析, 搜索潜在风险利 用路径。 2.如权利 要求1所述的方法, 其特征在于, 对待检测的程序代码进行TypeScript化处理 的步骤包括类型推导和推导失败部 分函数改写; 对第三方库代码进行TypeScr ipt化处理的 步骤包括类型声明搜索、 类型推导和推导失败部分函数改写。 3.如权利要求1所述的方法, 其特征在于, 将程序代码编译为抽象语法树的步骤包括词 法分析、 语法分析和语义分析, 上述 步骤通过TypeScript编译器实现。 4.如权利要求1所述的方法, 其特征在于, 在抽象语法树上对程序代码中的动态特性进 行静态化处理的步骤包括: 语法脱糖、 对象字面量处理、 任意类型处理和闭包处理, 其中语 法脱糖是将 高级的语法糖转换为等价的普通代码语法, 对 象字面量处理、 任意类型处理和 闭包处理都是将动态 代码转换为静态 代码的过程。 5.如权利要求4所述的方法, 其特征在于, 对象字面量处理的方法为: 使用隐藏类技术 处理对象字面量, 通过遍历抽象语法树, 为不同的对象字面量之间构建引用关系, 然后根据 对象字面量的引用关系进行拓扑排序, 按照排序依 次分析每个对 象字面量的类型, 并为每 个对象字面 量构建一个隐藏类, 最后将对象字面 量的声明改写为隐藏类的实例化; 任意类型处理的方法为: 使用类型转换技术处理任意类型, 预先准备任意类型与其他 已知类型的转换函数, 并最小化原则将任意类型 出现的地方改写为类型转换函数的调用; 闭包处理的方法为: 使用显式作用域技术处理闭包, 为每个闭包生成一个作用域类和 一个闭包函数类, 并基于作用域类改写内层函数; 作用域类包含闭包所使用的外层作用域 的变量, 闭包函数类包括改写后的内层函数和作用域类的实例, 以及调用改写后的内层函 数的方法; 然后将原来的闭包 改写为作用域类的实例化和闭包函数类的实例化, 将闭包的 调用改写为闭包函数类实例的方法调用。 6.如权利要求1所述的方法, 其特征在于, 将抽象语法树编译为中间表示的方法是以递 归下降的方式遍历抽象语法树, 将抽象层次更高的树状结构的抽象语法树转换为抽象程度 更低的线性的中间表示指令序列。 7.如权利要求1所述的方法, 其特征在于, 按照先验知识库中预定义的规则在中间表示 上标记入口函数、 危险函数及无害化处理函数, 包括: 在中间表 示上将先验知识库中Source 规则所对应的函数标记 为入口函数, 将先验知识库中Sink规则所对应的函数标记为危险函 数, 将先验知识库中San itizer规则所对应的函数 标记为无害化处 理函数。 8.如权利要求1所述的方法, 其特征在于, 构建值流图的步骤包括: 构建过程内控制流 图和函数调用图, 将过程内控制流图和 函数调用图组合成过程间控制流图; 遍历过程间控 制流图上所有关于值的处理, 建立值之 间的赋值关系, 构建程序赋值图; 在程序赋值图上进权 利 要 求 书 1/2 页 2 CN 114912110 A 2行指针分析, 确定指针的指向关系; 利用程序赋值图和指针分析的结果构建值 流图。 9.如权利要求1所述的方法, 其特征在于, 双向污点分析包括前向污点分析和后向污点 分析, 其中前向污点分析以Source点为起点将污点按照值流进行正 向传播, 适用于数据流 收敛的情况; 后向污点分析以Sink点为起点将污点按照值流进行反向传播, 适用于数据流 发散的情况。 10.一种实现权利 要求1‑9任一项所述方法的Node.js代码安全检测系统, 其特征在于, 包括: 预置处理模块, 用于将待检测的程序代码及第三方库代码进行TypeScript化处理, 并 将多文件形式的代码打包为单文件的形式; 编译前端及动态特性处理模块, 用于将代码编译为抽象语法树, 并在抽象语法树上处 理对象字面 量、 任意类型和闭包动态特性; 中间表示生成器模块, 用于将抽象层次更高的树状结构的抽象语法树转换为抽象程度 更低的线性的中间表示指令序列; 函数标记模块, 按照先验知识库中预定义的规则在中间表示上标记入口函数、 危险函 数及无害化处 理函数; 值流图构建模块, 用于在中间表示上构建控制流和数据流相关的图结构, 并进行指针 分析, 构建值 流图; 污点分析模块, 用于在中间表示上进行前向污点分析和后向污点分析, 搜索潜在风险 利用路径。权 利 要 求 书 2/2 页 3 CN 114912110 A 3

.PDF文档 专利 一种Node.js代码安全检测方法及系统

文档预览
中文文档 17 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共17页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种Node.js代码安全检测方法及系统 第 1 页 专利 一种Node.js代码安全检测方法及系统 第 2 页 专利 一种Node.js代码安全检测方法及系统 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 17:44:10上传分享
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。