■ 西安 郭朋
編者按:近期筆者針對單位系統中的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。