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