【信息安全服务】代码审计之反序列化漏洞分析

1.Java反序列化

序列化是用于将对象转换成二进制串存储起来,而反序列化则是相反,将二进制串转化为对象。Java的反射机制可以为日常开发提供众多遍历,但这样的设计同样存在安全风险。通过反射机制攻击者可以越过Java的静态检查和类型约束,直接访问并且修改目标对象的属性和状态。

2.关键函数

ObjectInputStream()

readObject()

当程序设计人员使用ObjectInputStream的readObject方法进行对象读取时,readObject方法可能会造成恶意代码被执行的风险。

import org.apache.commons.lang.SerializationUtils:
    public ClusterConfig getClusterConfig(){
        if (getConfBytes() == null) {
               return null;
        }
        return (ClusterConfig) SerializationUtils.deserializa(getConfBytes());

private static void deserialize() throws FileNotFoundException,IOException,ClassNotFoundException {
    FileInputStream fis = new FileInputStream(new File(pathname:"person.ser"));
    ObjectInputStream ois = new ObjectInputStrem(fis);
    Person p = (Person)ois.readObject();
    System.out.printIn("name:"+p.getName()+" age"+p.getAge());
}

3.常见几类反序列化漏洞

(0x1)Weblogic

XMLDecoder 反序列化漏洞(如CVE-2017-3506、CVE-2017-10271、CVE-2019-2725)

JRMP反序列化漏洞(CVE-2015-4852 CVE-2016-0638 CVE-2016-3510 CVE-2017-3428 CVE-2018-2628 CVE-2018--2893))

 (0x2) Spring JNDI 反序列化漏洞

 (0x3) Fastjson 反序列化漏洞 

(0x4) Jackson 反序列化漏洞 (CVE-2019.12086 CVE-2019-12384 CVE-2019-14361 CVE-2019-14379)

4.框架层面的主动防护

     JEP 290是Oracle针对Java反序列化提出的一种增强安全机制,并在JDK6u141、7u131、8u121及最新的JDK9和10进行了集

成;

JEP290为用户用户提供一个更加简单有效并且可配置的过滤机制,以及对RMI导出对象执行检查。其核心实际上就是提供了一个

名为ObjectInputFilter的接口,用户在进行反序列化操作的时候,将filter设置给ObjectInputStream对象。这里就是用的

setInternalObjectInputFilter方法:

private final void setInternal0bjectInputFilter(0bjectInputFilter filter) {
    SecurityManager sm = System.getSecurityManager();
    if (sm != null) {
        sm.checkPermission(new SerializablePermission(name: " serialFilter"));
    }
    if (serialFilter != null && serialFilter != ObjectInputFilter.Config.getSerialFilter()) {
        throw new IllegalStateException("filter can not be set more than once" );
    }
    this.serialFilter = filter;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keyli0n

赠人玫瑰 手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值