在之前,大多數(shù) Java 用戶訪問 JDK 更新的方式發(fā)生了變化。其原因是 Oracle 對 JDK 的開發(fā)方式和 Oracle JDK 的許可條款所做的更改。
Oracle JDK 11 和 Oracle JDK 8(從更新 211 開始)現(xiàn)在使用 Oracle 技術(shù)網(wǎng)絡(luò)許可協(xié)議。這將免費(fèi)使用限制為僅四種情況:
- 個人使用(用于個人應(yīng)用程序的筆記本電腦或臺式機(jī))
- 開發(fā)使用
- Oracle 批準(zhǔn)的產(chǎn)品使用
- Oracle 云基礎(chǔ)架構(gòu)使用
對于所有其他情況,必須從 Oracle 購買 Java SE 訂閱。
這要求用戶就他們的 JDK 部署策略做出決定。一種這樣的方法是“好吧,它在我們現(xiàn)在擁有的 JDK 上運(yùn)行良好;讓我們堅持下去吧”。
這有一個明顯的缺陷,即該決定將對應(yīng)用程序的安全性產(chǎn)生的影響。
自從人們開始開發(fā)軟件以來,其他人一直在努力尋找以非預(yù)期方式使用它的方法。這通常是出于惡意目的,例如竊取信用卡號或用戶身份。我們使用術(shù)語黑客來描述能夠破壞計算機(jī)安全的人。黑客可以通過無數(shù)種方式來實(shí)現(xiàn)他們的目標(biāo);從欺騙人們泄露機(jī)密信息(網(wǎng)絡(luò)釣魚)到通過緩沖區(qū)溢出等技術(shù)對軟件進(jìn)行復(fù)雜的操作。
不幸的是,軟件越復(fù)雜,黑客利用漏洞的可能性就越大。JDK 是一個非常復(fù)雜的軟件,因此可能包含漏洞。
當(dāng)發(fā)現(xiàn)軟件中的漏洞時,它們通常被記錄為常見漏洞和暴露 (CVE)。由 Mitre Corporation 運(yùn)營的國家網(wǎng)絡(luò)安全 FFRDC 維護(hù) CVE 數(shù)據(jù)庫。每個由唯一編號標(biāo)識的 CVE 都有漏洞的文本描述。
此外,每個 CVE 都有一個通用漏洞評分系統(tǒng) (CVSS) 值。這不包含在 CVE 中,但在由美國國家科學(xué)技術(shù)研究院 (NIST) 托管的國家漏洞數(shù)據(jù)庫中維護(hù)。CVSS 提供了一個基本分?jǐn)?shù)和一組指標(biāo)?;痉?jǐn)?shù)是一個介于 0.1 和 10.0 之間的值,表示漏洞的嚴(yán)重程度(從技術(shù)上講,基本分?jǐn)?shù)從 0.0 開始,但根據(jù)定義,任何分?jǐn)?shù)為零的東西都不是漏洞)?;痉?jǐn)?shù)是根據(jù)一組指標(biāo)計算得出的,這些指標(biāo)表明漏洞的不同方面。這些指標(biāo)涉及諸如是否可以通過網(wǎng)絡(luò)利用漏洞、是否需要對機(jī)器進(jìn)行物理訪問等事項(xiàng)。
- 0.0:無
- 0.1-3.9:低
- 4.0-6.9:中等
- 7.0-8.9:高
- 9.0-10.0:嚴(yán)重
讓我們看看讓您的 JDK 保持最新狀態(tài)有多么重要。
首先,我回顧了過去三年的更新,并提取了每個都解決的具有最高 CVSS 基礎(chǔ)分?jǐn)?shù)的漏洞。這顯示在下表中。
處理器日期 | 最高 CVSS | 受影響的 JDK 版本 |
2020 年 7 月 2020 年 4 月 2020 年 1 月 2019 年 10 月 2019 年 7 月 | 8.38.3(多個) 8.1 6.8(多個) 6.8 | 7、8、11、147、8、11、13、14 7、8、11、13 7、8、11、13 7、8、11、12 |
2019 年 4 月 | 9.0 | 8 |
2019 年 1 月 | 6.1 | 6、7、8、11 |
2018 年 10 月 | 9.0 | 8,11 |
2018 年 7 月 | 5.9 | 6、7、8、10 |
2018 年 4 月 | 8.3 | 6、7、8、9、10 |
2018 年 1 月 | 8.3(多個) | 6,7,8,9 |
2017 年 10 月 | 9.6(多個) | 6,7,8,9 |
2017 年 7 月 | 9.6(多個) | 7,8 |
如您所見,大多數(shù)更新至少解決了一個高評分漏洞,并解決了幾個關(guān)鍵漏洞。當(dāng)我們將其限制為 Oracle Java SE 許可更改后的更新時,我們?nèi)匀豢吹揭粋€具有嚴(yán)重漏洞,三個具有高漏洞。有趣的是,2019 年 4 月更新中解決的關(guān)鍵漏洞存在于用于構(gòu)建 JDK 的 Windows DLL 中,而不是任何 JDK 代碼中。
接下來,我分析了自 2015 年 1 月以來的所有更新,這些都是現(xiàn)成的信息。查看所有解決的漏洞并將它們劃分為風(fēng)險組,我們可以生成一個條形圖,如下所示:
我將關(guān)鍵的分成兩部分,以突出顯示有多少個得分為 10 的。
如您所見,總共解決了 320 個 CVE,其中大部分處于中低范圍。關(guān)鍵 CVE 的數(shù)量是 59,這會讓您思考保持 JDK 最新的重要性。
然而,還有一點(diǎn)復(fù)雜。
Oracle 為每個更新提供了兩個不同的版本;這對于他們所有的軟件都是一樣的。這些稱為重要補(bǔ)丁更新 (CPU) 和補(bǔ)丁集更新 (PSU)。
CPU 僅包含與解決安全漏洞相關(guān)的更改。PSU 提供所有這些更改,以及任何其他錯誤修復(fù)、小幅增強(qiáng)等。這樣做的原因是為了在需要修補(bǔ)關(guān)鍵漏洞時快速推出更新。由于 CPU 包含的更改集較小,因此不太可能對應(yīng)用程序的穩(wěn)定性產(chǎn)生影響(即不太可能阻止您的應(yīng)用程序工作)。使用 CPU 完成觸摸測試后,您可以部署它以確保應(yīng)用程序的最大安全性。然后,在將 PSU 部署到生產(chǎn)機(jī)器之前,您可以花更長時間測試 PSU(通常運(yùn)行一整套回歸測試)。這確保了您的應(yīng)用程序的最大穩(wěn)定性。
這里需要注意的一點(diǎn)是,并非所有 OpenJDK 二進(jìn)制提供程序都了解 CPU 和 PSU 之間的區(qū)別。有些人稱他們的更新為 CPU,而實(shí)際上它是 PSU。在部署之前,您應(yīng)該仔細(xì)查看所獲得的內(nèi)容。
為了突出同時擁有 CPU 和 PSU 的好處,我們只需要看看 2020 年 7 月的更新。這包括對一個本身引入回歸的錯誤的修復(fù)。這種回歸的影響是大量使用的軟件,如 Hadoop Cluster、Solr 和 Lucene 不再可靠地工作,這對于使用它們的任務(wù)關(guān)鍵型應(yīng)用程序來說是一個嚴(yán)重的問題?;貧w不在安全補(bǔ)丁中,因此不包含在 CPU 中。
7 月 27 日(即預(yù)定的 7 月更新發(fā)布后的 12 天)發(fā)布了作為更新 265 的修復(fù),從而解決了回歸問題。初始更新包含對基本分?jǐn)?shù)為 8.3 的 CVE 的修復(fù),其詳細(xì)信息已在發(fā)行說明中公開。如果您使用的是受影響的軟件系統(tǒng)之一,如果您只有全包式 PSU,黑客將有近兩周的時間來嘗試?yán)盟H绻€可以訪問 CPU,您就可以推出必要的安全補(bǔ)丁,保護(hù)您的系統(tǒng)免受威脅,然后無憂無慮地等待修訂后的 PSU 發(fā)布。
Azul 的 Zulu Enterprise 版本的 OpenJDK 面向希望確保其系統(tǒng)提供最高級別的安全性和穩(wěn)定性的用戶。除了提供每個更新的 CPU(安全)和 PSU(完整)版本之外,我們還努力在 Oracle 發(fā)布它們的版本后盡快交付這些更新。自 JDK 8 的免費(fèi)公開更新結(jié)束后,Zulu Enterprise 客戶可以在 Oracle 發(fā)布后的一小時內(nèi)下載更新。這基本上是同時的。
總之,很明顯,確保所有運(yùn)行基于 JVM 的應(yīng)用程序的系統(tǒng)都保持最新更新是多么重要。