fastjson反序列化漏洞调用链挖掘方法及系统技术方案

技术编号:38830334 阅读:14 留言:0更新日期:2023-09-17 09:50
fastjson反序列化漏洞调用链挖掘方法及系统,包括配置代码仓库的Webhook;接收到更新的项目信息后识别项目代码的URL地址,将项目的Java源代码进行存储;将Java源代码解析为抽象语法树,再转换为Python字典树;检测Java源代码中是否引用或使用Fastjson库并且存在fastjson漏洞版本;检测JSON字符串是否存在解析漏洞;检测是否存在将JSON字符串反序列化成对象并对该对象进行操作的情况,并验证是否存在注入漏洞;判断是否存在fastjson反序列化漏洞,若是,则输出存在fastjson反序列化漏洞的调用链结果。本发明专利技术大大减轻人工挖掘的负担,提高了挖掘效率和准确性。提高了挖掘效率和准确性。提高了挖掘效率和准确性。

【技术实现步骤摘要】
fastjson反序列化漏洞调用链挖掘方法及系统


[0001]本专利技术涉及计算机网络
,特别是一种fastjson反序列化漏洞调用链挖掘方法及系统。

技术介绍

[0002]fastjson是一款由阿里巴巴开发的高性能的Java JSON解析库,可用于将Java对象转换为其JSON表示形式,被企业广泛地应用在Java开发中。但是fastjson也存在着一些安全风险,其中最常见的是反序列化漏洞。fastjson反序列化漏洞是指攻击者通过构造恶意的JSON数据,在fastjson解析时,触发了反序列化漏洞,从而导致攻击者可以执行任意的命令或代码。
[0003]目前,已经有一些针对fastjson反序列漏洞的挖掘工具。这些工具通常会根据fastjson的语法规则和解析过程,构造不同的数据输入,并观察程序行为,从而判断程序是否存在漏洞;有的甚至直接根据fastjson的版本来判断是否存在漏洞。
[0004]但是,现有的挖掘方法还存在一些缺陷。首先,由于fastjson的语法和解析方式非常复杂,因此需要构造各种不同的数据输入,才能够全面地检查程序的安全性,需要大量的计算资源和时间,而且也不一定能够覆盖所有可能的漏洞。其次,由于fastjson的版本更新比较快,攻击者的攻击方式也在不断地变化。因此,现有的自动化挖掘方法很难及时跟进漏洞的变化,从而难以保障系统的安全性。
[0005]即,现有技术存在挖掘效率与准确性较低的问题。

技术实现思路

[0006]本专利技术的主要目的在于提供了一种fastjson反序列化漏洞调用链挖掘方法、装置、设备及存储介质,旨在解决现有的fastjson反序列化漏洞调用链挖掘方法挖掘效率与准确性较低的技术问题。
[0007]为实现上述目的,本专利技术提供了一种fastjson反序列化漏洞调用链挖掘方法,其包括以下步骤:S1、配置项目代码仓库的Webhook,当项目代码仓库发生更新时,自动将更新的项目信息推送至指定的Webhook URL,项目信息至少包括项目代码的URL地址;S2、当接收到更新的项目信息后识别项目代码的URL地址,通过项目代码仓库的接口或者克隆的方式将项目的Java源代码进行存储;S3、将Java源代码解析为抽象语法树,再将抽象语法树转换为Python字典树;S4、遍历Python字典树,检测Java源代码中是否引用或使用Fastjson库,并且存在fastjson漏洞版本,若是,则执行步骤S5;
[0008]S5、遍历Python字典树,检测JSON字符串是否存在解析漏洞,若是,则执行步骤S6;S6、遍历Java源代码,检测是否存在将JSON字符串反序列化成对象并对该对象进行操作的情况,并验证是否存在注入漏洞,若是,则执行步骤S7;S7、判断是否存在fastjson反序列化漏洞,若是,则遍历调用函数查找调用链,并输出存在fastjson反序列化漏洞的调用链结果。
[0009]可选的,步骤S1中项目的详细信息还包括项目的ID和项目的名称。
[0010]可选的,步骤S3中将Java源代码解析为抽象语法树,具体包括以下步骤:对Java源代码进行语法分析,将Java源代码分解成一系列的令牌;再次进行语法分析,将一系列的令牌组合成一个抽象语法树。
[0011]可选的,步骤S3中将抽象语法树转换为Python字典树,具体包括以下步骤:获取抽象语法树的AST节点并作为参数,判断AST节点的类型;若AST节点为一个javalang.ast.Node类型的对象,则创建一个空字典,并遍历该AST节点的所有属性,将属性名作为该字典的键,将属性值通过递归调用后的返回值作为字典的值,最终返回该字典;若AST节点为一个列表类型的对象,则创建一个空列表,并遍历该列表中的每个元素,将每个元素通过递归调用后的返回值添加至该列表中,最终返回该列表;若AST节点为其他类型,则直接返回该节点。
[0012]可选的,步骤S4具体包括以下步骤:S40、遍历Python字典树中的所有import语句,查找是否有以“com.alibaba.fastjson”开头的import语句,若是,则将其标记为True;S41、遍历Python字典树中的所有类和方法,查找是否有使用Fastjson库的代码,具体为遍历每个方法的语句列表,查找是否有任何语句中包含“com.alibaba.fastjson”字符串,若是,则将其标记为True;S42、对“com.alibaba.fastjson”引入的版本进行判断,若版本小于1.2.80,则将其标记为True,判断结果为Java源代码中引用或使用Fastjson库,并且存在fastjson漏洞版本,并执行步骤S5。
[0013]可选的,步骤S5具体包括以下步骤:S50、遍历Python字典树,并检测是否有一条语句包含字符串“JSON.parse”,若是,则从中提取出JSON字符串;S51、检测JSON字符串是否存在解析漏洞,具体为检测JSON字符串是否以双引号开头或结尾,若是,则JSON字符串不存在解析漏洞,若否,则JSON字符串存在解析漏洞,执行步骤S6。
[0014]可选的,步骤S6具体包括以下步骤:S60、遍历Java源代码中的所有类型声明,并检测它们的字段中是否存在以“private”关键字开头的字段;若是,则将该字段的名称添加至列表中;S61、遍历所有的JSON字符串,检测其中是否包含在列表中的任何一个类名中;若是,则说明该JSON字符串可能存在反序列化注入漏洞,则执行步骤S7。
[0015]可选的,步骤S7具体包括以下步骤:S70、将Python字典树作为参数,遍历Java源代码中的所有调用函数,判断是否为Fastjson的JSON解析调用;若是,则递归遍历该解析调用内部的代码,并执行步骤S71;S71、检测是否还存在Fastjson的JSON解析调用,若是,则返回步骤S70,直至检测到一个不存在Fastjson远程代码执行漏洞的函数或位置后,输出存在fastjson反序列化漏洞的调用链结果;输出存在fastjson反序列化漏洞的调用链结果具体为:将存在fastjson反序列化漏洞的调用链结果、项目代码的URL地址保存至数据库中,再通过python flask接口开发框架从数据库获取项目的地址和存在fastjson反序列化漏洞的调用链进行返回。
[0016]可选的,调用链路通过一个调用链路列表来维护,递归遍历时,将调用链路列表传递给下一个层级,直到遍历结束;每次遍历结束时,显示调用链路列表。
[0017]与所述fastjson反序列化漏洞调用链挖掘方法相对应的,本专利技术提供一种fastjson反序列化漏洞调用链挖掘系统,其包括:项目代码拉取模块,用于配置代码仓库的Webhook,当项目代码仓库发生更新时,自动将更新的项目信息推送至指定的Webhook URL,
项目信息至少包括项目代码的URL地址;以及用于当接收到更新的项目信息后识别项目代码的URL地址,通过项目代码仓库的接口或者克隆的方式将本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.fastjson反序列化漏洞调用链挖掘方法,其特征在于,包括以下步骤:S1、配置项目代码仓库的Webhook,当项目代码仓库发生更新时,自动将更新的项目信息推送至指定的Webhook URL,项目信息至少包括项目代码的URL地址;S2、当接收到更新的项目信息后识别项目代码的URL地址,通过项目代码仓库的接口或者克隆的方式将项目的Java源代码进行存储;S3、将Java源代码解析为抽象语法树,再将抽象语法树转换为Python字典树;S4、遍历Python字典树,检测Java源代码中是否引用或使用Fastjson库,并且存在fastjson漏洞版本,若是,则执行步骤S5;S5、遍历Python字典树,检测JSON字符串是否存在解析漏洞,若是,则执行步骤S6;S6、遍历Java源代码,检测是否存在将JSON字符串反序列化成对象并对该对象进行操作的情况,并验证是否存在注入漏洞,若是,则执行步骤S7;S7、判断是否存在fastjson反序列化漏洞,若是,则遍历调用函数查找调用链,并输出存在fastjson反序列化漏洞的调用链结果。2.根据权利要求1所述的fastjson反序列化漏洞调用链挖掘方法,其特征在于:步骤S1中项目的详细信息还包括项目的ID和项目的名称。3.根据权利要求1所述的fastjson反序列化漏洞调用链挖掘方法,其特征在于:步骤S3中将Java源代码解析为抽象语法树,具体包括以下步骤:对Java源代码进行语法分析,将Java源代码分解成一系列的令牌;再次进行语法分析,将一系列的令牌组合成一个抽象语法树。4.根据权利要求3所述的fastjson反序列化漏洞调用链挖掘方法,其特征在于:步骤S3中将抽象语法树转换为Python字典树,具体包括以下步骤:获取抽象语法树的AST节点并作为参数,判断AST节点的类型;若AST节点为一个javalang.ast.Node类型的对象,则创建一个空字典,并遍历该AST节点的所有属性,将属性名作为该字典的键,将属性值通过递归调用后的返回值作为字典的值,最终返回该字典;若AST节点为一个列表类型的对象,则创建一个空列表,并遍历该列表中的每个元素,将每个元素通过递归调用后的返回值添加至该列表中,最终返回该列表;若AST节点为其他类型,则直接返回该节点。5.根据权利要求1所述的fastjson反序列化漏洞调用链挖掘方法,其特征在于:步骤S4具体包括以下步骤:S40、遍历Python字典树中的所有import语句,查找是否有以“com.alibaba.fastjson”开头的import语句,若是,则将其标记为True;S41、遍历Python字典树中的所有类和方法,查找是否有使用Fastjson库的代码,具体为遍历每个方法的语句列表,查找是否有任何语句中包含“com.alibaba.fastjson”字符串,若是,则将其标记为True;S42、对“com.alibaba.fastjson”引入的版本进行判断,若版本小于1.2.80,则将其标记为True,判断结果为Java源代码中引用或使用Fastjson库,并且存在fastjson漏洞版本,并执行步骤S5。6.根据权利要求1所述的fastjson反序列化漏...

【专利技术属性】
技术研发人员:薛素金胡妙鑫郑建民
申请(专利权)人:厦门农芯数字科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1