当前位置: 首页 > 专利查询>扬州大学专利>正文

一种支持序列化或反序列化特征的混合流图生成方法技术

技术编号:37344181 阅读:29 留言:0更新日期:2023-04-22 21:36
本发明专利技术公开了一种支持序列化或反序列化特征的混合流图生成方法,对java源程序进行指定入口函数,并采用上下文敏感的指针分析方法,构建初始调用图,提高指针分析的效率及准确性,并结合信息流传播的规则,对实际程序中存在的反序列化黑白名单规则加以适配,使得构造的调用关系更加准确,同时信息流传播及调用图的结合共同构造出混合流图,实现了序列化或反序列化调用关系的精准分析,帮助开发人员查找出可能存在的漏洞。找出可能存在的漏洞。找出可能存在的漏洞。

【技术实现步骤摘要】
一种支持序列化或反序列化特征的混合流图生成方法


[0001]本专利技术涉及软件安全领域,尤其是一种支持序列化或反序列化特征的混合流图生成方法。

技术介绍

[0002]2015年,Lawrence和Frohoff提出了Java反序列化漏洞。随后,Breenmachine利用Java反序列化漏洞成功攻击了WebLogic、WebSphere、JBoss、Jenkins、OpenNMS等Java应用,实现了远程代码执行。Fastjson、Jackson、Hessian、XStream等第三方反序列化库被爆出存在反序列化漏洞,在反序列化攻击者可控的数据时可能会执行攻击者构造的恶意代码其中能够找到反序列化利用链是该类型漏洞能否利用的关键。所以对java程序做完整的过程间分析至关重要,例如漏洞检测,信息流优化和分析。由于Java应用及依赖库的代码空间大和Java本身多态的问题,序列化期间主要依靠反射完成方法的调用,想要对反序列化过程中做完整的分析存在一定的困难,《Salsa:Static Analysis of Serialization Features》利指针分析加迭代的方法能够构建(反)序列化期间的调用,《Serialization

Aware Call Graph Construction》中又对salsa的反序列化期间的回调方法进行扩充,但是仍然只是考虑了继承了Serializable的可序列化类,没有对继承了Externalizable的可序列化类在(反)序列化的相关回调void readExternal(OIS),void writeExternal(OIS)进行支持,也没有考虑在现实环境中可能存在的黑白名单问题。

技术实现思路

[0003]专利技术目的:本专利技术的目的在于提供一种支持序列化或反序列化特征的混合流图生成方法,明确序列化或反序列化期间真实存在的调用关系以及从反序列化对象的序列化点向下的信息传播关系,解决当前无法准确生成序列化或反序列化期间函数调用的问题。
[0004]技术方案:本专利技术提供了一种支持序列化或反序列化特征的混合流图生成方法,包含以下步骤:
[0005]1)将java源程序以及包含程序入口函数CSV文件,以及相关的配置文件作为输入;
[0006]2)根据工具输入的入口函数CSV文件,将入口函数以及入口函数所对应的上下文提取至工作列表工作列表以<m,c>∈W的形式存在,其中c代表入口函数对应的上下文;
[0007]3)根据已有的工作列表从入口函数使用对象敏感的指针分析方法,构建初始调用图,若在调用过程中包含序列化点及反序列化点的调用,则将序列化点及反序列化点调用和上下文c存入synthetic method函数,根据指针分析生成初始的调用图,初始的调用图和synthetic methods函数共同传入步骤4),序列化点指的是反序列化点ObjectInputStream.readObject()及序列化点ObjectOutputStream.writeObject(Object);
[0008]4)将初始的调用图和synthetic methods函数进行调用图的迭代优化,利用过滤器对在此过程中利用过滤器对程序中存在的黑白名单规则的匹配进行调用,生成完整的具
有序列化或反序列化的调用图;
[0009]5)在反序列化的调用图生成的过程中,指针分析与反序列化过程中的信息传播规则共同处理,以反序列化函数的序列化点或反序列化点的具体实现为分析起点,进行信息流的向下传播,最终与完整的具有序列化或反序列化的调用图合成为混合流图。
[0010]进一步的,步骤2)中,入口函数CSV文件中含有入口函数,其中入口函数均以<m,c>的形式提取至工作列表即每一个入口函数均分配全局上下文Globe c,c是程序状态的抽象表示。
[0011]进一步的,步骤2)中,<m,c>∈W中的函数m均被转换为单一静态赋值SSA的中间表示Intermediary Representation,首先利用上下文敏感的指针分析进行初步处理,当在处理入口函数中的函数调用时,指针分析计算方法的调用目标g通过下列公式确定:
[0012]Targets=dispatch(pt(<o,c>),g)
[0013]当指针集pt(<o,c>)所指向的对象类中有g的实现,则调用上述公式;
[0014]当存在ObjectInputStream流或者ObjectOutputStream流及其子类发生的读取对象流readObject()和写入对象流writeObject()时,分别为其创建synthetic method函数,用于记录序列化及序列化时的调用,作为下一个阶段的输入。
[0015]进一步的,步骤3)中,提供了序列化及反序列化过程中的回调函数,既继承Serializable类在序列化或反序列化过程中产生的回调,同时继承Externalizable类在序列化或反序列化过程中产生的回调,序列化过程期间的回调函数包含void writeObject(ObjectOutputStream)、void writeExternal(ObjectOutputStream)、Object writeReplace();反序列化过程期间的回调函数包含void readObjectNoData()、void readObject(ObjectInputStream)、ObjectreadResolve()、void readExternal(ObjectInputSteam)、void validateObject()。
[0016]进一步的,步骤4)中,将初始调用图进行迭代优化,并将synthetic methods函数放入对应的处理模型中,处理模型包含序列化模型及反序列化模型,同时,反序列化模型中包含两种条用途生成模式,分别为基于下采样的反序列化调用图生成模式及全程序的调用图生成模式,其中,下采样的反序列化调用图生成模式根据IR的def

use确定调用的类并做改进的CHA分析,全程序的调用图生成模式则对程序中可以反序列化的类进行处理。
[0017]进一步的,步骤4)中,处理模型包含序列化模型及反序列化模型,其中,序列化模型包含以下步骤:
[0018]4.1.1)对序列化的synthetic method函数中的序列化点,ObjectOutputStream.writeObject(Object o)进行遍历,其中,参数o的指针集pt(<o,c>)指向的对象o1,t是o1对象所指向的可序列化对象类型;
[0019]4.1.2)对所有的t进行遍历,若对应的对象类型包含序列化过程期间的回调函数,则将该回调函数添加为执行并将该回调函数对应的对象类型记录入m
s本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种支持序列化或反序列化特征的混合流图生成方法,其特征在于,包含以下步骤:1)将java源程序以及包含程序入口函数CSV文件,以及相关的配置文件作为输入;2)根据工具输入的入口函数CSV文件,将入口函数以及入口函数所对应的上下文提取至工作列表工作列表以的形式存在,其中c代表入口函数对应的上下文,m为函数;3)根据已有的工作列表从入口函数使用对象敏感的指针分析方法,构建初始调用图,若在调用过程中包含序列化点及反序列化点的调用,则将序列化点及反序列化点调用和上下文c存入synthetic method函数,根据指针分析生成初始的调用图,初始的调用图和synthetic methods函数共同传入步骤4),序列化点指的是反序列化点ObjectInputStream.readObject()及序列化点ObjectOutputStream.writeObject(Object);4)将初始的调用图和synthetic methods函数进行调用图的迭代优化,利用过滤器对在此过程中利用过滤器对程序中存在的黑白名单规则的匹配进行调用,生成完整的具有序列化或反序列化的调用图;5)在反序列化的调用图生成的过程中,指针分析与反序列化过程中的信息传播规则共同处理,以反序列化函数的序列化点或反序列化点的具体实现为分析起点,进行信息流的向下传播,最终与完整的具有序列化或反序列化的调用图合成为混合流图。2.根据权利要求1所述的支持序列化或反序列化特征的混合流图生成方法,其特征在于,步骤2)中,入口函数CSV文件中含有入口函数,其中入口函数均以<m,c>的形式提取至工作列表即每一个入口函数均分配全局上下文Globe c。3.根据权利要求2所述的支持序列化或反序列化特征的混合流图生成方法,其特征在于,步骤2)中,<m,c>∈W中的函数m均被转换为单一静态赋值SSA的中间表示Intermediary Representation,首先利用上下文敏感的指针分析进行初步处理,当在处理入口函数中的函数调用时,指针分析计算方法的调用目标g通过下列公式确定:Targets=dispatch(pt(<o,c>),g)当指针集pt(<o,c>)所指向的对象类中有g的实现,则调用上述公式;当存在ObjectInputStream流或者ObjectOutputStream流及其子类发生的读取对象流readObject()和写入对象流writeObject()时,分别为其创建synthetic method函数,用于记录序列化及序列化时的调用,作为下一个阶段的输入。4.根据权利要求3所述的支持序列化或反序列化特征的混合流图生成方法,其特征在于,步骤3)中,提供了序列化及反序列化过程中的回调函数,既继承Serializable类在序列化或反序列化过程中产生的回调,同时继承Externalizable类在序列化或反序列化过程中产生的回调,序列化过程期间的回调函数包含void writeObject(ObjectOutputStream)、void writeExternal(ObjectOutputStream)、Object writeReplace();反序列化过程期间的回调函数包含void readObjectNoData()、void readObject(ObjectInputStream)、ObjectreadResolve()、void readExternal(ObjectInputSteam)、void validateObject()。5.根据权利要求4所述的支持序列化或反序列化特征的混合流图生成方法,其特征在于,步骤4)中,将初始调用图进行迭代优化,并将synthetic methods函数放入对应的处理模型中,...

【专利技术属性】
技术研发人员:孙小兵王满友薄莉莉吴潇雪曹思聪魏颖
申请(专利权)人:扬州大学
类型:发明
国别省市:

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

1