如何防止java编程语言序列化网络攻击?

什么是序列化?自从1997年发布JDK1.1以来,序列化已经存在于Java平台中。它用于在套接字之间共享对象表示,或者将对象及其状态保存起来以供将来使用(反序列化)。在JDK10及更低版本中,序列化作为java.base包和java.io.Serializable方法的一部分存在于所有的系统中。序列化的挑战和局限 序列化的局限主要...
如何防止java编程语言序列化网络攻击?
java编程一直以来都是互联网软件开发市场上的主流开发语言,同样的这也就导致了只要发生漏洞的话,所有用java编程开发的软件都会出现问题,下面天通苑java培训就一起来了解一下,java编程语言中的序列化问题应该如何解决。

什么是序列化?

自从1997年发布JDK1.1以来,序列化已经存在于Java平台中。

它用于在套接字之间共享对象表示,或者将对象及其状态保存起来以供将来使用(反序列化)。

在JDK10及更低版本中,序列化作为java.base包和java.io.Serializable方法的一部分存在于所有的系统中。

序列化的挑战和局限

序列化的局限主要表现在以下两个方面:

出现了新的对象传输策略,例如JSON、XML、ApacheAvro、ProtocolBuffers等。

1997年的序列化策略无法预见现代互联网服务的构建和攻击方式。

进行序列化漏洞攻击的基本前提是找到对反序列化的数据执行特权操作的类,然后传给它们恶意的代码。

序列化在哪里?如何知道我的应用程序是否用到了序列化?

要移除序列化,需要从java.io包开始,这个包是java.base模块的一部分。常见的使用场景是:

实现Serializable接口和(可选)serialversionuid长整型字段。

使用ObjectInputStream或ObjectOutputStream。

使用严重依赖序列化的库,例如:Xstream、Kryo、BlazeDS和大多数应用程序服务器。

使用这些方法的开发人员应考虑使用其他存储和读回数据的替代方法。EishaySmith发布了几个不同序列化库的性能指标。在评估性能时,需要在基准度量指标中包含安全方面的考虑。默认的Java序列化“更快”一些,但漏洞也会以同样的速度找上门来。

我们该如何降低序列化缺陷的影响?

项目Amber包含了一个关于将序列化API隔离出来的讨论。我们的想法是将序列化从java.base移动到单独的模块,这样应用程序就可以完全移除它。在确定JDK11功能集时并没有针对该提议得出任何结果,但可能会在未来的Java版本中继续进行讨论。

通过运行时保护来减少序列化暴露

一个可以监控风险并自动化可重复安全专业知识的系统对于很多企业来说都是很有用的。Java应用程序可以将JVMTI工具嵌入到安全监控系统中,通过插桩的方式将传感器植入到应用程序中。

其他有用的安全技术

在进行维护时,可以不需要手动列出一长串东西,而是使用像OWASPDependency-Check这样的系统,它可以识别出已知安全漏洞的依赖关系,并提示进行升级。也可以考虑通过像DependABot这样的系统进行库的自动更新。

虽然用意很好,但默认的Oracle序列化过滤器存在与SecurityManager和相关沙箱漏洞相同的设计缺陷。因为需要混淆角色权限并要求提前了解不可知的事物,限制了这个功能的大规模采用:系统管理员不知道代码的内容,所以无法列出类文件,而开发人员不了解环境,甚至DevOps团队通常也不知道系统其他部分(如应用程序服务器)的需求。

2023-04-03
mengvlog 阅读 11 次 更新于 2025-07-19 20:14:00 我来答关注问题0
  • 使用严重依赖序列化的库,例如:Xstream、Kryo、BlazeDS和大多数应用程序服务器。使用这些方法的开发人员应考虑使用其他存储和读回数据的替代方法。EishaySmith发布了几个不同序列化库的性能指标。在评估性能时,需要在基准度量指标中包含安全方面的考虑。默认的Java序列化“更快”一些,但漏洞也会以同样的速...

  •  文暄生活科普 最后几块拼图(一):使用 Yakit 打破 Java 序列化协议语言隔离

    在复杂案例中,通过使用特定命令序列化 CC1 利用链,并将其转换为十六进制格式,可以更好地分析和利用序列化对象。此外,实现 ACED 反序列化流与 Json 的互转,进一步增强了工具的实用性和灵活性。“最后几块拼图”项目旨在完善安全能力基座,完成 Java 序列化流分析部分,并提供 yak 语言的接口,方便...

  •  翡希信息咨询 什么是反序列化?反序列化的过程,原理

    反序列化的过程主要包括以下几个步骤: 读取数据:使用如ObjectInputStream等工具读取已经序列化的数据。 解析类的信息:从序列化数据中解析出对象的类信息,包括类名和成员变量结构等。 创建对象实例:根据解析出的类信息,在内存中创建对应类的新对象实例。 填充成员变量:将序列化数据中的成员变量值填充...

  •  八维教育hw 怎样做才能让Java 序列化机制 更安全

    Java 序列化 serialization主要职责就是将一个对象的状态转化为一个字节序列,以方便对象的持久化或网络传输。反序列化的过程正好相反。开发人员所要做的只是实现Serializable接口,然后调用ObjectOutputStream/ObjectInputStream的WriteObject/ReadObject方法即可,其他的工作 JVM 会自动帮你做了。那通过实现Seriali...

  •  文暄生活科普 告别脚本小子系列丨JAVA安全(3)——JAVA反射机制

    不能直接使用new关键字创建实例,需要通过反射获取构造函数并调用。最后,文章通过一个简单的应用实例展示了Java反射在隐藏webshell关键字中的作用,以此绕过WAF检测。通过反射实现Java命令执行,隐藏关键字,从而实现任意操作。这一应用实例展示了Java反射在实际场景中的重要作用。

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部