發(fā)布于:2021-01-07 17:22:25
0
130
0
對(duì)于所有使用Java應(yīng)用程序的企業(yè)來(lái)說(shuō),Java安全性都是重要的主題。Java冠軍Simon Ritter深入研究了JDK,以及未使您的應(yīng)用程序保持最新?tīng)顟B(tài)的潛在缺點(diǎn),以及為什么重要的補(bǔ)丁更新(CPU)和補(bǔ)丁集更新(PSU)之間的區(qū)別至關(guān)重要。
一年多以前,即2019年4月,大多數(shù)Java用戶訪問(wèn)JDK更新的方式發(fā)生了變化。原因是Oracle對(duì)JDK的開(kāi)發(fā)方式和Oracle JDK的許可條款進(jìn)行的更改綜合起來(lái)。
現(xiàn)在,Oracle JDK 11和Oracle JDK 8(來(lái)自更新211)使用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)買Java SE訂閱。
這要求用戶做出有關(guān)其JDK部署策略的決策。一種這樣的方法是:“嗯,它在我們現(xiàn)在擁有的JDK上運(yùn)行良好;讓我們堅(jiān)持下去”。
這有一個(gè)明顯的缺陷,那就是該決定將對(duì)應(yīng)用程序的安全性產(chǎn)生影響。
自從人們開(kāi)始開(kāi)發(fā)軟件以來(lái),其他人一直在嘗試尋找以最初不想要的方式使用它的方法。這通常是出于惡意目的,例如竊取信用卡號(hào)或用戶身份。我們使用“黑客”一詞來(lái)描述能夠顛覆計(jì)算機(jī)安全性的人。黑客使用多種方法來(lái)實(shí)現(xiàn)其目標(biāo)。從欺騙人們到泄露機(jī)密信息(網(wǎng)絡(luò)釣魚),再到通過(guò)緩沖區(qū)溢出之類的技術(shù)對(duì)軟件進(jìn)行復(fù)雜的操縱。
不幸的是,軟件越復(fù)雜,黑客就越容易利用該漏洞。JDK是一個(gè)非常復(fù)雜的軟件,因此可能包含漏洞。
發(fā)現(xiàn)軟件中的漏洞后,通常會(huì)將它們記錄為常見(jiàn)漏洞和披露(CVE)。由Miter公司運(yùn)營(yíng)的國(guó)家網(wǎng)絡(luò)安全FFRDC維護(hù)CVE數(shù)據(jù)庫(kù)。每個(gè)CVE(由唯一編號(hào)標(biāo)識(shí))均具有該漏洞的文字描述。
此外,每個(gè)CVE都有一個(gè)通用漏洞評(píng)分系統(tǒng)(CVSS)值。它不包括在CVE中,而是在由美國(guó)國(guó)家科學(xué)技術(shù)研究院(NIST)托管的國(guó)家漏洞數(shù)據(jù)庫(kù)中維護(hù)。CVSS提供基本分?jǐn)?shù)和一組指標(biāo)。基本分?jǐn)?shù)是表示漏洞嚴(yán)重性的0.1到10.0之間的值(從技術(shù)上講,基本分?jǐn)?shù)從0.0開(kāi)始,但從定義上講,分?jǐn)?shù)為零的任何東西都不是脆弱性)?;痉?jǐn)?shù)是根據(jù)一組指標(biāo)計(jì)算得出的,這些指標(biāo)表明漏洞的不同方面。這些指標(biāo)與諸如是否可以通過(guò)網(wǎng)絡(luò)利用漏洞,是否需要對(duì)計(jì)算機(jī)進(jìn)行物理訪問(wèn)等相關(guān)。
0.0:無(wú)
0.1-3.9:低
4.0-6.9:中
7.0-8.9:高
9.0-10.0:嚴(yán)重
讓我們看一下保持JDK最新的重要性。
首先,我回顧了過(guò)去三年的更新,并提取了每個(gè)漏洞都具有最高CVSS基本分?jǐn)?shù)的漏洞。如下表所示。
CPU日期 | 最高CVSS | 受影響的JDK版本 |
2020年7月2020年4月 2020年1月 2019年十月 2019年七月 | 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年四月 | 9.0 | 8 |
一月2019 | 6.1 | 6,7,8,11 |
2018年十月 | 9.0 | 8,11 |
2018年七月 | 5.9 | 6,7,8,10 |
2018年四月 | 8.3 | 6,7,8,9,10 |
一月2018 | 8.3(多個(gè)) | 6,7,8,9 |
2017年十月 | 9.6(多個(gè)) | 6,7,8,9 |
2017年七月 | 9.6(多個(gè)) | 7,8 |
如您所見(jiàn),大多數(shù)更新解決了至少一個(gè)得分高的漏洞,其中一些解決了關(guān)鍵漏洞。當(dāng)我們僅將此限制為自O(shè)racle Java SE許可更改以來(lái)的更新時(shí),我們?nèi)匀豢吹狡渲幸粋€(gè)具有嚴(yán)重漏洞,而三個(gè)則具有較高漏洞。有趣的是,2019年4月更新中解決的關(guān)鍵漏洞位于用于構(gòu)建JDK的Windows DLL中,而不是任何JDK代碼中。
接下來(lái),我分析了自2015年1月以來(lái)的所有更新,這些都是隨時(shí)可用的信息。查看所有已解決的漏洞并將其分為風(fēng)險(xiǎn)組,我們可以生成一個(gè)條形圖,如下所示:
我將關(guān)鍵的一分為二,以突出顯示得分為10的得分。
如您所見(jiàn),總共解決了320個(gè)CVE,其中大多數(shù)處于中低范圍。關(guān)鍵CVE的數(shù)量為59,這應(yīng)該使您考慮使JDK保持最新?tīng)顟B(tài)的重要性。
但是,還有更多的復(fù)雜性。
Oracle為每個(gè)更新提供兩個(gè)不同的版本。他們的所有軟件都一樣。這些稱為關(guān)鍵補(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)用程序無(wú)法運(yùn)行)。使用CPU進(jìn)行觸摸測(cè)試后,可以對(duì)其進(jìn)行部署以確保應(yīng)用程序的最大安全性。然后,您可以在將PSU部署到生產(chǎn)計(jì)算機(jī)之前花費(fèi)更長(zhǎng)的時(shí)間測(cè)試PSU(通常運(yùn)行全套回歸測(cè)試)。這樣可以確保您的應(yīng)用程序具有最大的穩(wěn)定性。
這里的重要說(shuō)明是,并非所有OpenJDK二進(jìn)制提供程序都了解CPU和PSU之間的區(qū)別。實(shí)際上,有些人將它們稱為CPU更新,實(shí)際上是PSU。在部署之前,您應(yīng)該仔細(xì)查看所獲得的內(nèi)容。
為了強(qiáng)調(diào)同時(shí)擁有CPU和PSU的好處,我們只需要查看2020年7月的更新即可。其中包括對(duì)錯(cuò)誤的修正,該修正本身引入了回歸。這種回歸的影響是,Hadoop集群,Solr和Lucene等頻繁使用的軟件不再可靠運(yùn)行,這對(duì)于使用它們的關(guān)鍵任務(wù)應(yīng)用程序來(lái)說(shuō)是一個(gè)嚴(yán)重的問(wèn)題。回歸不在安全補(bǔ)丁程序中,因此不包含在CPU中。
通過(guò)在7月27日發(fā)布更新265的修復(fù)程序解決了回歸問(wèn)題,該修復(fù)程序是計(jì)劃的7月更新發(fā)布后的十二天。初始更新包含對(duì)CVE的修復(fù),其基本分?jǐn)?shù)為8.3,其詳細(xì)信息已在發(fā)行說(shuō)明中公開(kāi)。如果您一直在使用其中一個(gè)受影響的軟件系統(tǒng),那么如果您只有全包的PSU,黑客將有將近兩個(gè)星期的時(shí)間來(lái)嘗試?yán)么塑浖?。如果您還可以訪問(wèn)CPU,則可能已經(jīng)推出了必要的安全補(bǔ)丁程序,可以保護(hù)系統(tǒng)免受威脅,并且可以放心地等待發(fā)布修訂的PSU。
Azul的OpenJDK構(gòu)建的Zulu Enterprise面向希望確保其系統(tǒng)提供最高級(jí)別的安全性和穩(wěn)定性的用戶。除了提供每個(gè)更新的CPU(安全)和PSU(完整)版本外,我們還努力在Oracle發(fā)布其版本后盡快提供這些更新。自從JDK 8的免費(fèi)公共更新結(jié)束以來(lái),Zulu Enterprise客戶已經(jīng)能夠在Oracle版本發(fā)布后的一小時(shí)內(nèi)下載更新。本質(zhì)上,這是同時(shí)的。
總而言之,很明顯,確保使用最新更新維護(hù)所有運(yùn)行基于JVM的應(yīng)用程序的系統(tǒng)非常重要。
您的Java運(yùn)行時(shí)是否應(yīng)有的安全?
作者介紹
熱門博客推薦