隱藏在過時Java中的威脅

 岱军 云云众生s

為什麼即時安全性更新對於您的關鍵企業 Java 應用程式至關重要。

譯自The Hidden Threats Lurking in Outdated Java,作者 Simon Ritter。

盡可能保持企業系統安全應該是顯而易見的,不是嗎?不幸的是,由於需要考慮如此多的安全方面,這在一些最重要的領域經常被忽略。

例如,Java運行時。

直到 2019 年,保持 JDK 更新到最新的安全性修補程式都是直截了當的,並且沒有直接成本。當 Sun Microsystems 發布 Java 時,您可以免費下載 Java 開發工具包,除非您將其用於某種嵌入式或單用途應用程式(例如使用嵌入式 PC 的售票亭)。即使發布了新版本的 Java——這每兩、三甚至四年才發生一次——與持續的免費更新仍然有相當大的重疊,以確保平穩過渡。

Oracle 在 2010 年收購 Sun 後,繼續以相同的方式交付其 JDK,直到 2019 年。它的第一個變化是轉向基於時間的發布計劃,而不是基於功能的發布計劃。現在,就像時鐘一樣,我們每年都有兩個新版本的 Java:一個在 3 月,一個在 9 月。

這種更快的發布節奏導致了 Oracle JDK 長期支援 (LTS) 版本的引入,因為為所有版本提供擴展維護和支援是不切實際的。最初,每三年發布一個新的 LTS 版本,但現在已經縮短到兩年。

目前的 LTS 版本是 JDK 8、11、17 和 21。 Oracle 不再支援(即使是商業上)舊的開源版本的 Java,JDK 6 和 7。

安全性更新有多重要?畢竟,Java 現在已經將近 30 年了;我們現在還沒有消除所有漏洞嗎?可悲的是,沒有,現實地說,這永遠不會發生。 OpenJDK 包含 750 萬行程式碼,並依賴許多外部程式庫,所有這些都可能存在未發現的漏洞。

讓我們用一些硬數據來解釋這一點。

假設您在 JDK 6 上運行您的應用程序,並且自 Oracle 免費公開更新結束(2013 年 4 月)以來一直沒有更新它。在這種情況下,您的應用程式會暴露於總共 425 個漏洞,其中 89 個是嚴重的。

及時更新您的系統的能力至關重要。

Oracle 為每個更新提供兩個版本,分別稱為關鍵補丁更新 (CPU) 和補丁集更新 (PSU)。 CPU 僅包含與安全相關的變更;PSU 包含與安全相關的變更、錯誤修復、效能改進以及任何其他程式碼變更。大小差異很大。一個大型 CPU 可能包含 15 個更改,但通常少於 10 個。另一方面,PSU 可以包含 200 到 400 個變更。

更新中包含的變更越多,其中一個變更可能影響應用程式功能的可能性就越大。由於更新之間只有三個月的時間,因此只能對應用程式進行如此多的測試。這會導致 PSU 產生重大影響的情況。例如,2022 年 7 月的 PSU 包含一個修復程序,該修復程序阻止了基於 Hadoop Cluster、Solr 和 Lucene 的應用程式正常運作。

自從 Oracle 更改其分發和授權以來,已經發布了 22 個更新。其中,6 個 PSU 需要修改和新版本來解決引入的迴歸。創建新更新的時間從不到兩周到超過五週不等。 CPU 從未受到過這種影響。存取 CPU 對於維護應用程式的最高安全等級至關重要。

由於所有免費的 OpenJDK 二進位分發版僅提供 PSU 版本,因此一些用戶可能認為在能夠部署之前等待幾週是可以接受的風險。

這非常危險。

當發布 JDK 更新時,所有已解決的漏洞都會在發行說明中揭露。惡意行為者現在擁有訊息,使他們能夠嘗試找到利用未修補應用程式的方法。

讓我們以常用的 Java 函式庫 Apache Struts 為例,來說明這有多危險。

2023 年 12 月 7 日,發布了有關 Struts 中漏洞的詳細資訊。該漏洞的通用漏洞評分系統 (CVSS) 為 9.8,使其成為嚴重漏洞。此外,它有可能允許遠端程式碼執行(RCE),這是一種比可用於拒絕服務 (DOS) 的漏洞更糟糕的漏洞。僅僅四天后,概念驗證程式碼就被發布,展示瞭如何利用此漏洞。在代碼發布後的 24 小時內,就觀察到對未修補系統的攻擊。在可用的 Java 更新發布之前等待兩週或更長時間,將使您的應用程式暴露在風險之中。您是否願意承擔這種風險?

Azul 的 Platform Core 提供了經過 TCK(技術相容性工具包)測試的 Zulu 版本的 OpenJDK,每個季度都包含 CPU 和 PSU。它還支援 JDK 6 和 7。這為您的關鍵任務企業 Java 應用程式提供了最大的安全性和穩定性,而無需您將舊版應用程式升級到更新的版本。