您的位置 首页 java

通过Weblogic配置处理Java反序列化高危漏洞问题

作者简介: 汤小宁,具备十余年架构设计及开发、故障排查、性能优化经验,原Oracle GCS资深 中间件 技术支持工程师,主要处理亚太区用户遇到的技术问题,产品包括 WebLogic 、portal、webcenter、JRockit、Exalogic等,用户覆盖通信、金融、财政、税务、电力等大型企事业单位、政府机关。现就职于北京海天起点,负责中间件相关技术支持服务。

一、什么是 Java 序列化 漏洞?

所谓序列化,就是把对象转换成字节流,以便于保存在内存、文件、数据库中,或者是在网络上传送对象的字节序列;而反序列化则是序列化的逆过程,将字节流还原成对象。

当两个进程进行远程通信时,彼此可以发送各种类型的数据。但无论是什么数据,都是以二进制序列的形式在网络上传送的。发送方需要把Java对象转换为字节序列,才能在网络上传送(序列化);接收方则需要把字节序列再恢复为Java对象(反序列化)。在很多应用当中,都需要对特定对象进行序列化,一个最常见的例子就是在weblogic集群中,为了实现session复制,要求Session对象必须是可序列化的,否则我们就会在server log中见到大量的警告信息,无法保证正常进行failover。

反序列化本身不是问题,问题在于java类ObjectInputStream在执行反序列化操作时,并不会对自身的输入进行检查,那么恶意攻击者就可以通过构建特定的输入,让反序列化产生非预期的对象,从而远程执行任意代码。

相关漏洞在很多主流序列化库中都存在,其中影响最大的就是Apache Commons工具集。它广泛应用于JAVA技术平台,包括WebLogic、IBM WebSphere、 JBoss Jenkins 和OpenNMS等,即使应用代码中并没有使用到Apache Commons Collections里的类,但只要Classpath中包含了Apache Commons Collections的jar包,都可能导致远程恶意代码的执行。目前很多Exp就是通过允许Java序列化协议的端口,把攻击代码上传到服务器,然后远程调用上传类来实现任意代码执行。

二、简单测试

对于反序列化漏洞,网络上已经有很多深入的分析和POC,本文不做具体探讨。就利用一个最简单的小工具,CommonsCollectionsTools.jar,来进行一个简单的测试。在存在漏洞的环境中,执行上述jar包能够在指定路径下生成文本文件,说明代码执行成功。

我们的测试环境是weblogic 10.3.6,Windows,没有安装任何weblogic补丁。

  • 配置一个全新的domain,其中包含一个AdminServer,不指定侦听 地址 ,端口为7001(一切都是默认值)

  • 启动AdminServer

  • 执行测试命令:

执行完成后,可以看到指定路径d:下生成了一个temp01.txt。

同时在weblogic server log中可以看到一个exception,也侧面验证执行过程已经完成:

漏洞确实存在。

三、配置weblogic堵塞漏洞

Oracle官方曾经针对critical级别的漏洞CVE-2015-4852出过专门的补丁,在特定版本上进行了修复。今年又在10.3.6.0.170418上修复了CVE-2017-3248,建议用户更新到最新版本。这些补丁通过黑名单的方式过滤危险的类,但仍然存在被绕过的风险。同时对于大量用户仍在使用的,超过维护生命周期的版本,目前并没有官方修复版本可用。

回过头来看当年的官方文档:

在weblogic上,相关漏洞需要通过t3(s)协议,那么在没有补丁可用的情况下,对t3(s)协议的过滤可以有效地避免问题。

  • 访问weblogic console,定义访问筛选器:

  • config.xml中看到如下内容:

以上配置表示,允许任意地址(*)通过t3(s)协议访问192.168.1.107的7001端口,而其它地址7001端口的t3(s)访问被禁用。上文提到我们没有限定weblogic的监听地址,意味着127.0.0.1, localhost ,192.168.1.107等等,都可以用于访问同一个weblogic server服务,从而可以让我们直观地看到在同一个server上协议筛选器是不是能够起到作用。

  • 重新启动weblogic server,执行CommonsCollectionsTools相关测试:

  • 访问192.168.1.107(允许t3)

  • 访问localhost(已禁止t3)

可以看到,指定路径下,temp01文件被生成,但是没有temp02;从输出信息也可以看到,在试图上传payload到localhost时连接被拒绝,筛选器设置成功。

四、小结

打补丁肯定是最安全的方式,但是没有补丁的时候能用其它方法避免漏洞也是很重要的。本文只是从weblogic配置环节验证了协议筛选的有效性,实际上类似功能完全可以通过防火墙、代理服务等等同样得以实现。还是一句话,严格的网络环境配置可以避免大多数的问题。

五、补充

同事的另一篇文档, 《weblogic之反序列化高危漏洞》 ,更为详细地说明了Oracle官方解决方案和非官方临时方案,包括打补丁的过程,可以参考。

文章来源:智云一二三科技

文章标题:通过Weblogic配置处理Java反序列化高危漏洞问题

文章地址:https://www.zhihuclub.com/196211.shtml

关于作者: 智云科技

热门文章

网站地图