巧用JDK环境助力Weblogic补丁升级
2020-11-11西安郭朋
■ 西安 郭朋
编者按:近期笔者针对单位系统中的Weblogic高危漏洞进行了修补,在Linux系统中进行的非常顺利,但在Windows操作系统上按照同样的步骤进行安装,却问题多多,过程相当曲折。
Weblogic是一个基于JAVA EE架构的中间件,是用于开发、集成、部署和管理大型分布式Web应用及网络应用和数据库应用的Java应用服务器。
近期Oracle官方发布了三个针对Weblogic的高危漏洞的关键补丁公告。这三个漏洞均是因为T3协议存在缺陷,攻击者无需经过身份验证,即可直接通过构造T3请求触发漏洞实现远程代码执行,获取用户系统权限,进而实施攻击破坏行为。
鉴于上述漏洞影响范围大、潜在危害程度高,笔者单位要求对存在安全漏洞的系统要第一时间下载和安装Oracle官方的系统补丁,以确保长期有效的防护。
Weblogic中间件在笔者单位应用很广泛,其中在Linux、Windows操作系统上都有大量的部署应用。笔者将从Oracle官网上下载的Weblogic补丁,先在Linux操作系统上进行了安装。该过程进行很顺利,几十台Linux服务器均升级成功。然后笔者在Windows操作系统上按照同样的步骤进行安装,却不想问题多多,过程相当曲折。
首先笔者将补丁包上传至%Weblogic_Home%utilssucache_dir目录下,然后进入%Weblogic_Home%utilssu目录,按住Shift键的同时,再点击鼠标右键,在弹出的窗口中选择“在此处打开命令窗口”项。
在打开的DOS窗口中执行以下命令,查看当前补丁安装情况:
bsu.cmd -prod_dir=%Weblogic_Home%wl ser ver_10.3 -status=app lied -verbose -view
发现程序报出“java.lang.OutOfMemoryError:Java heap space”错误,如图1所示。
笔者看到程序抛出虚拟内存不足错误,便立即修改bsu.cmd程序里的虚拟内存参数,将原来的MEM_ARGS参数最小和最大内存都调整为1024 MB。
原来的参数为:set MEM_ARGS=-Xms256m -Xmx512m
而调整后的参数为:set MEM_ ARGS=-Xms1024m -Xmx 1024m
笔者通过重启bsu.cmd程序,执行上述查询补丁安装情况命令,但还是抛出“java.lang.OutOfMemory Error:Java heap space”虚拟内存不足错误。
笔者心想可以给Weblo gic打个补丁,设置1 GB的内存还不够吗?于是继续增加内存数,这次笔者直接将MEM_ARGS参数最小和最大内存都调整为2048 MB,并重启bsu.cmd程序执行查询命令。但这次竟抛出了新错误“Error occurred during initialization of VM”,如图2所示。
图1 出现“java.lang.OutOfMemoryError:Java heap space”错误提示
图2 出现“Error occurred during initialization of VM”的新错误提示
这次报错竟然是内存给的太大,程序连初始化都无法完成了。这可怎么办呢?内存给大了程序无法启动,给小了补丁无法升级完成。经查32位的JDK最大只能支持1.5 GB内存,所以笔者把MEM_ARGS参数的最小和最大内存设置为1.5 GB,set MEM_ARGS=-Xms1536m -Xmx1536m,这次程序能够正常启动,执行查询命令成功,如图3所示。
笔者按捺住心中小小的激动,赶紧执行以下安装补丁命令:
bsu.cmd -install -patch_download dir=%Weblogic_Home%utilssucache_dir-patch list=8K1U -prod_dir=%Weblogic_Home%wl server_10.3
结果这次很悲催,虚拟内存不足的命令又抛出了。
看来用32位的JDK环境是无法完成Weblogic补丁升级的任务了。而这台服务器上的应用程序相对开发的时间比较早,最大只能支持32位的1.6版本的JDK环境,不能安装更高版本的JDK。
至此情况陷入了僵局。那么能不能给bsu.cmd程序单独指定64位的1.8版本的JDK环境,而保留原来的系统Java环境不变呢?说干就干,按照这一思路,首先笔者在自己的办公微机上安装64位的1.8版本的JDK环境,将安装好的环境上传到服务器,当做绿色软件使用。上传完成后,笔者修改bsu.cmd程序的JAVA_HOME路径,将SET JAVA_HOME=C:Javajdk160_29修改为SET JAVA_HOME=C:Javajdk1.8.0_131,同时修改MEM_ARGS参数的最小和最大内存为4 GB,set MEM _ ARGS=-Xms4096m-Xmx4096m。重启bsu.cmd程序后,程序能正常启动,输入安装补丁的命令,终于出现了久违的界面。在经过耐心的等待后,终于提示补丁安装成功,如图4所示。
后来笔者经过多次测试发现,给Weblogic安装最新的补丁,最少需要3 GB的内存,才不会抛出虚拟内存不足的错误。当然,如果服务器内存够大的话,给的内存越多越好,因为64位JDK理论上可以支持128 GB内存。因为给的内存越大,补丁的安装速度越快。
图3 执行查询命令成功
图4 补丁安装成功
自此笔者探索出了一条新路,特别是一些只能运行在32位版本比较低的JDK环境的Java应用程序,可以从别的地方复制一个最新的64位的JDK 1.8的运行环境到本机,当做绿色软件使用,而不用安装。这样既不会破坏本机比较老的JDK环境,又可以通过配置让需要使用高版本JDK的应用程序使用新环境,既确保了生产,又确保了安全,实现了双赢。
经过这次小小的波折,笔者发现办法总比困难多。在此之前笔者曾经都想着放弃给这台服务器的Weblogic中间件打补丁了,但后来经过不断尝试,终于克服困难,完成升级。
笔者对此颇有感悟,有时助力很重要,通过巧用JDK 1.8运行环境,顺利地完成单位的系统安全加固任务。
说明:%Weblogic_Home%是指WebLogic的安装目录,例如,笔者的就是:C:OracleMiddleware。Weblogic版本号为10.3.6。