■ 西安 郭朋
編者按:近期筆者針對單位系統(tǒng)中的Weblogic高危漏洞進(jìn)行了修補,在Linux系統(tǒng)中進(jìn)行的非常順利,但在Windows操作系統(tǒng)上按照同樣的步驟進(jìn)行安裝,卻問題多多,過程相當(dāng)曲折。
Weblogic是一個基于JAVA EE架構(gòu)的中間件,是用于開發(fā)、集成、部署和管理大型分布式Web應(yīng)用及網(wǎng)絡(luò)應(yīng)用和數(shù)據(jù)庫應(yīng)用的Java應(yīng)用服務(wù)器。
近期Oracle官方發(fā)布了三個針對Weblogic的高危漏洞的關(guān)鍵補丁公告。這三個漏洞均是因為T3協(xié)議存在缺陷,攻擊者無需經(jīng)過身份驗證,即可直接通過構(gòu)造T3請求觸發(fā)漏洞實現(xiàn)遠(yuǎn)程代碼執(zhí)行,獲取用戶系統(tǒng)權(quán)限,進(jìn)而實施攻擊破壞行為。
鑒于上述漏洞影響范圍大、潛在危害程度高,筆者單位要求對存在安全漏洞的系統(tǒng)要第一時間下載和安裝Oracle官方的系統(tǒng)補丁,以確保長期有效的防護(hù)。
Weblogic中間件在筆者單位應(yīng)用很廣泛,其中在Linux、Windows操作系統(tǒng)上都有大量的部署應(yīng)用。筆者將從Oracle官網(wǎng)上下載的Weblogic補丁,先在Linux操作系統(tǒng)上進(jìn)行了安裝。該過程進(jìn)行很順利,幾十臺Linux服務(wù)器均升級成功。然后筆者在Windows操作系統(tǒng)上按照同樣的步驟進(jìn)行安裝,卻不想問題多多,過程相當(dāng)曲折。
首先筆者將補丁包上傳至%Weblogic_Home%utilssucache_dir目錄下,然后進(jìn)入%Weblogic_Home%utilssu目錄,按住Shift鍵的同時,再點擊鼠標(biāo)右鍵,在彈出的窗口中選擇“在此處打開命令窗口”項。
在打開的DOS窗口中執(zhí)行以下命令,查看當(dāng)前補丁安裝情況:
bsu.cmd -prod_dir=%Weblogic_Home%wl ser ver_10.3 -status=app lied -verbose -view
發(fā)現(xiàn)程序報出“java.lang.OutOfMemoryError:Java heap space”錯誤,如圖1所示。
筆者看到程序拋出虛擬內(nèi)存不足錯誤,便立即修改bsu.cmd程序里的虛擬內(nèi)存參數(shù),將原來的MEM_ARGS參數(shù)最小和最大內(nèi)存都調(diào)整為1024 MB。
原來的參數(shù)為:set MEM_ARGS=-Xms256m -Xmx512m
而調(diào)整后的參數(shù)為:set MEM_ ARGS=-Xms1024m -Xmx 1024m
筆者通過重啟bsu.cmd程序,執(zhí)行上述查詢補丁安裝情況命令,但還是拋出“java.lang.OutOfMemory Error:Java heap space”虛擬內(nèi)存不足錯誤。
筆者心想可以給Weblo gic打個補丁,設(shè)置1 GB的內(nèi)存還不夠嗎?于是繼續(xù)增加內(nèi)存數(shù),這次筆者直接將MEM_ARGS參數(shù)最小和最大內(nèi)存都調(diào)整為2048 MB,并重啟bsu.cmd程序執(zhí)行查詢命令。但這次竟拋出了新錯誤“Error occurred during initialization of VM”,如圖2所示。
圖1 出現(xiàn)“java.lang.OutOfMemoryError:Java heap space”錯誤提示
圖2 出現(xiàn)“Error occurred during initialization of VM”的新錯誤提示
這次報錯竟然是內(nèi)存給的太大,程序連初始化都無法完成了。這可怎么辦呢?內(nèi)存給大了程序無法啟動,給小了補丁無法升級完成。經(jīng)查32位的JDK最大只能支持1.5 GB內(nèi)存,所以筆者把MEM_ARGS參數(shù)的最小和最大內(nèi)存設(shè)置為1.5 GB,set MEM_ARGS=-Xms1536m -Xmx1536m,這次程序能夠正常啟動,執(zhí)行查詢命令成功,如圖3所示。
筆者按捺住心中小小的激動,趕緊執(zhí)行以下安裝補丁命令:
bsu.cmd -install -patch_download dir=%Weblogic_Home%utilssucache_dir-patch list=8K1U -prod_dir=%Weblogic_Home%wl server_10.3
結(jié)果這次很悲催,虛擬內(nèi)存不足的命令又拋出了。
看來用32位的JDK環(huán)境是無法完成Weblogic補丁升級的任務(wù)了。而這臺服務(wù)器上的應(yīng)用程序相對開發(fā)的時間比較早,最大只能支持32位的1.6版本的JDK環(huán)境,不能安裝更高版本的JDK。
至此情況陷入了僵局。那么能不能給bsu.cmd程序單獨指定64位的1.8版本的JDK環(huán)境,而保留原來的系統(tǒng)Java環(huán)境不變呢?說干就干,按照這一思路,首先筆者在自己的辦公微機(jī)上安裝64位的1.8版本的JDK環(huán)境,將安裝好的環(huán)境上傳到服務(wù)器,當(dāng)做綠色軟件使用。上傳完成后,筆者修改bsu.cmd程序的JAVA_HOME路徑,將SET JAVA_HOME=C:Javajdk160_29修改為SET JAVA_HOME=C:Javajdk1.8.0_131,同時修改MEM_ARGS參數(shù)的最小和最大內(nèi)存為4 GB,set MEM _ ARGS=-Xms4096m-Xmx4096m。重啟bsu.cmd程序后,程序能正常啟動,輸入安裝補丁的命令,終于出現(xiàn)了久違的界面。在經(jīng)過耐心的等待后,終于提示補丁安裝成功,如圖4所示。
后來筆者經(jīng)過多次測試發(fā)現(xiàn),給Weblogic安裝最新的補丁,最少需要3 GB的內(nèi)存,才不會拋出虛擬內(nèi)存不足的錯誤。當(dāng)然,如果服務(wù)器內(nèi)存夠大的話,給的內(nèi)存越多越好,因為64位JDK理論上可以支持128 GB內(nèi)存。因為給的內(nèi)存越大,補丁的安裝速度越快。
圖3 執(zhí)行查詢命令成功
圖4 補丁安裝成功
自此筆者探索出了一條新路,特別是一些只能運行在32位版本比較低的JDK環(huán)境的Java應(yīng)用程序,可以從別的地方復(fù)制一個最新的64位的JDK 1.8的運行環(huán)境到本機(jī),當(dāng)做綠色軟件使用,而不用安裝。這樣既不會破壞本機(jī)比較老的JDK環(huán)境,又可以通過配置讓需要使用高版本JDK的應(yīng)用程序使用新環(huán)境,既確保了生產(chǎn),又確保了安全,實現(xiàn)了雙贏。
經(jīng)過這次小小的波折,筆者發(fā)現(xiàn)辦法總比困難多。在此之前筆者曾經(jīng)都想著放棄給這臺服務(wù)器的Weblogic中間件打補丁了,但后來經(jīng)過不斷嘗試,終于克服困難,完成升級。
筆者對此頗有感悟,有時助力很重要,通過巧用JDK 1.8運行環(huán)境,順利地完成單位的系統(tǒng)安全加固任務(wù)。
說明:%Weblogic_Home%是指WebLogic的安裝目錄,例如,筆者的就是:C:OracleMiddleware。Weblogic版本號為10.3.6。