首页 > 编程语言 >owasp top10之不安全的反序列化

owasp top10之不安全的反序列化

时间:2024-01-22 16:57:33浏览次数:35  
标签:10 stu1 对象 top10 owasp 攻击 序列化 数据

更多网络安全干货内容:点此获取

———————

一、什么是反序列化

Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。

将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。

序列化的实现方法:

  • 把一个Java对象写入到硬盘、数据库、文件中,或者传输到网路上面的其它计算机,这时我们就需要自己去通过java把相应的对象转换成字节流。
  • 在Java的OutputStream类下面的子类ObjectOutputStream类就有对应的WriteObject(Object object)其中要求对应的object实现了iava的序列化的接口。

反序列化

  • 将字节流(二进制数据)换回原对象
  • 构造方法:ObjectInputStream(InputStream in)
  • 方法:Object readObject(),从 ObjectInputStream 读取对象

通俗的说,就是现在流行面向对象开发,万物皆对象。比如一个student对象有着很多属性,我们在用的时候可以这么赋值,以PHP为例一个stu对象,有很多属性,name,sex等等,是json格式,如下:

$stu1 = new Stu();

$stu1->name=“GGG'

$stu1->sex= true;

$stu1->age = 18;

$stu1->score = 89.9;

这样的数据,很占空间,所以在临时存储时,会序列化成一种便于存储的字符串格式,如:Array{ “name":"GGG",“age” :18,“SEX” :true,“score” :89.9}。这样用的时候,再序列化回来,使用serialize()和unserialize()函数来来回回转这就是序列化和反序列化。

序列化通常被用于:

  • 远程通信和进程间通信(RPC/IPC)
  • 连线协议、Web服务、消息代理
  • 缓存/持久性
  • 数据库、缓存服务器、文件系统
  • HTTP cookie、HTML表单参数、API身份验证令牌

二、不安全的反序列化

对反序列化的利用是有点困难的。因为在不更改或调整底层可被利用代码的情况下,现成的反序列化漏洞很难被使用。

这一问题包括在Top 10的行业调查中,而不是基于可量化的数据。

有些工具可以被用于发现反序列化缺陷,但经常需要人工帮助来验证发现的问题。希望有关反序列化缺陷的普遍性数据将随着工具的开发而被更多的识别和解决。

反序列化缺陷的影响不能被低估。它们可能导致远程代码执行攻击,这是可能发生的最严重的攻击之一。业务影响取决于应用程序和数据的保护需求。

1. 漏洞产生的原因

序列化和反序列化本身并不存在问题,但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中,执行构造的任意代码漏洞代码。

示例如下:

//读取输入流,并转换对象

InputStream in=request.getlnputStream();

ObjectlnputStream ois = new ObjectlnputStream(in):

//恢复对象

ois.readObject();

ois.close();

2. 漏洞产生的影响

可能导致两种主要类型的攻击:

  • 与对象和数据结构相关的攻击,如果应用程序中存在可在反序列化期间,或之后更改行为的类,则攻击者可以修改应用程序逻辑或实现任意远程代码执行。
  • 典型的数据篡改攻击,例如使用现有数据结构但内容发生该改变的访问控制相关攻击

反序列化缺陷还可能导致拒绝服务、访问控制攻击。

3. 如何防御?

唯一安全的架构模式是不接受来自不受信源的序列化对象,也不使用只允许原始数据类型的序列化介质。如果做不到以上要求,可以考虑使用下述方法——

  • 执行完整性检查,如: 在序列化对象上实现完整性检查,例如数字签名,以防止恶意对象创建或数据篡改。
  • 在对象创建之前的反序列化期间强制执行严格的类型约束,因为代码通常需要一组可定义的类。
  • 隔离运行在低特权环境中反序列化的代码。
  • 记录反序列化的异常情况和失败信息,如: 传入的类型不是预期的类型,或者反序列处理引发的例外情况。
  • 限制或监视来自于容器或服务器传入和传出的反序列化网络连接。
  • 监控反序列化,当用户持续进行反序列化时,对用户进行警告。

 

  更多内容:​​​​​​OWASP TOP 10 之敏感数据泄露

OWASP TOP 10 之失效的访问控制

​​​​​​OWASP TOP 10 之失效的身份认证

OWASP TOP 10之跨站脚本攻击

标签:10,stu1,对象,top10,owasp,攻击,序列化,数据
From: https://www.cnblogs.com/wanyunsecurity/p/17980449

相关文章

  • 序列化之@JsonComponent、@JsonInclude、@JsonSerialize、@JsonIgnore、JsonProperty
    前言:很多时候,例如前端需要字段user可能只是需要用到user中的userName属性,而后端传过去的却是一整个user对象,这样显然是不行的。那有没有一种技术,可以把后端传给前端的user类型的值改变为userName类型的值呢?@JsonComponent、@JsonInclude、@JsonSerialize可以在序列化的时候动手脚,可......
  • 为什么double会被序列化为NaN
    提问为什么double会被序列化为NaN回答世界上存在Double.NaN这个东西,他被序列化就会成为NaNexample//Seehttps://aka.ms/new-console-templateformoreinformationusingSystem.Globalization;usingNewtonsoft.Json;usingNewtonsoft.Json.Converters;Console.Writ......
  • Python pickle 二进制序列化和反序列化 - 数据持久化
    模块pickle实现了对一个Python对象结构的二进制序列化和反序列化。"pickling"是将Python对象及其所拥有的层次结构转化为一个字节流的过程,而"unpickling"是相反的操作,会将(来自一个binaryfile或者bytes-likeobject的)字节流转化回一个对象层次结构。pickling(和unp......
  • c# csharp 对象序列化
    对象序列化要将一个序列化对象存储起来,您可以使用C#中的序列化和反序列化功能。以下是一个示例代码,它演示了如何将一个序列化对象存储到文件中:usingSystem;usingSystem.IO;usingSystem.Runtime.Serialization.Formatters.Binary;namespaceMyNamespace{[Serializab......
  • 配置redisTemplate序列化,解决乱码与反序列化失败
    /***@projectName:MultiModuleDemo*@package:com.example.config*@className:RedisConfig*@description:TODO(配置RedisTemplate序列化)*@date:2023/12/1821:08*@version:1.0*/@ConfigurationpublicclassRedisConfig{@BeanpublicRedi......
  • C# 对象序列化 单元测试 .netframework
    对象序列化以及单元测试F:\song\netframework_serialize\netframework_serialize\Program.csusingnetframework_serialize.Animal;usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Runtime.Serialization.Formatters.Bina......
  • SpringBoot集成Jackson实现JSON序列化
    一、前言Jackson是一个在Java中常用的JSON序列化和反序列化库,它具有操作简单、性能优秀、支持多种数据格式等特点,被广泛应用于各种服务端开发中。SpringMVC框架的默认json解析器也是Jackson。当前常见的json解析器还有Gson、fastjson等,jackson的优势是解析大的json文件处理速度快,运......
  • delphi JSON序列化(五)
    关于TJSONConverters的使用unitUnit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,Vcl.StdCtrls,Vcl.Buttons,Rest.JSON.Types,Rest.JsonReflect;t......
  • delphi JSON序列化(四)
    涉及的重要类REST.Json,REST.JsonReflect,REST.Json.Interceptors,REST.Json.Types单元中。一、TJson类最简单的一个类,提供了JSON->OBJECT和OBJECT->JSON几个方法,方法有TJsonOptions参数,如:   classfunctionObjectToJsonObject(AObject:TObject;AOptions:TJsonOpti......
  • netty: Marshalling序列化示例
    一、请求对象和响应对象,分别要实现Serializable接口packagecn.edu.tju;importjava.io.Serializable;publicclassUserRequestimplementsSerializable{privateStringusername;privateStringpassword;publicStringgetUsername(){returnus......