盡可能保持企業系統的安全應該是顯而易見的,不是嗎?不幸的是,由於需要考慮如此多的安全方面,這一點在一些最重要的地方常常被忽視。
例如,Java 執行時期,在 2019 年之前,使用最新的安全性修補程式更新 JDK 非常簡單,並且不會產生直接成本。當 Sun Microsystems 發布 Java 時,您可以免費下載 Java 開發工具包,除非您將其用於某種嵌入式或 一次性應用程式 (例如使用嵌入式 PC 的售票 kiosk)。即使 Java 的新版本發布(每兩年、三年甚至四年才發布一次),與持續的免費更新也有相當大的重疊,以實現平穩過渡。
Oracle 在 2010 年收購了 Sun 後,繼續以相同的方式提供 JDK,直到 2019 年。現在,就像發條一樣,我們每年都會有兩個新版本的 Java:一個在 3 月,一個在 9 月。這種更快的發布節奏導致了 Oracle JDK 長期支援(LTS)版本的引入,因為為所有版本提供擴展維護和支援是不切實際的。最初,每三年發布一個新的 LTS 版本,但現在已縮短為兩年,目前的 LTS 版本是 JDK 8、11、17 和 21。

在 Azul 的2024 年 Oracle 使用、定價和遷移調查與報告中,37% 的參與者使用 JDK 17,比其他任何版本都多。
安全性更新有多重要?畢竟,Java 已經快 30 歲了;我們現在還沒有消除所有的漏洞嗎?遺憾的是沒有,而且實際上,這永遠不會發生。 OpenJDK 包含 750 萬行程式碼,並依賴許多外部程式庫,所有這些都可能存在未被發現的漏洞。讓我們將其與一些真實數據結合。
假設您在 JDK 6 上運行應用程序,並且自 Oracle 免費公共更新結束(2013 年 4 月)以來尚未更新它。在這種情況下,您的應用程式總共面臨 425 個漏洞,其中 89 個是嚴重漏洞。
及時更新系統的能力至關重要,Oracle 為每個更新提供兩個版本,稱為關鍵補丁更新 (CPU) 和補丁集更新 (PSU)。 CPU僅包含與安全相關的變更; PSU 包含與安全相關的變更、錯誤修復、效能改進和任何其他程式碼變更。大小差異顯著。大型 CPU 可能包含 15 個更改,但通常少於 10 個。

更新中包含的變更越多,其中一項變更影響應用程式功能的可能性就越大。兩次更新之間只有三個月的時間,只能完成這麼多的應用程式測試。這會導致 PSU 產生重大影響的情況。例如,2022 年 7 月的 PSU 包含一個修復程序,該修復程序阻止基於 Hadoop 叢集、基於 Solr 和基於 Lucene 的應用程式正常運作。
自 Oracle 更改其發行版和授權以來,已有 22 次更新。其中,有 6 個 PSU 需要修改並發布新版本,以解決已引入的迴歸問題。創建新更新的時間從不到兩周到超過五週不等。任何時候都沒有任何 CPU 受到這樣的影響。存取 CPU 對於維持應用程式的最高安全等級至關重要。
由於 OpenJDK 的所有免費二進位發行版僅提供 PSU 版本,因此一些用戶可能會考慮在能夠部署之前幾週將其視為可接受的風險,這是非常危險的。
當 JDK 更新發佈時,所有已解決的漏洞都會在發行說明中公開。不良行為者現在擁有訊息,使他們能夠嘗試找到利用未修補的應用程式的方法。讓我們以常用的 Java 函式庫 Apache Struts 為例來說明這可能會帶來多大的危險。
2023 年 12 月 7 日,發布了 Struts 漏洞的詳細資訊。通用漏洞評分系統 (CVSS) 對此的評分為 9.8 分(滿分為 10 分),使其成為一個嚴重漏洞。此外,它還可能允許遠端執行程式碼 (RCE),這是比可用於拒絕服務 (DOS) 的漏洞更嚴重的漏洞。
僅四天後,概念驗證程式碼就發布展示了如何使用此漏洞。在該代碼發布後的 24 小時內,就在未修補的系統上觀察到了攻擊。在可用的 Java 更新可用之前等待兩週或更長時間將使您的應用程式暴露在外。您準備好冒這個風險嗎?
Azul 的平台核心提供經過 TCK(技術相容性套件)測試的 OpenJDK Zulu 版本,每季包括 CPU 和 PSU,它也仍然支援 JDK 6 和 7。以上若您想了解更多有關 Azul 產品的資訊,也歡迎隨時向我們的團隊洽詢。