发布于:2021-01-07 17:22:25
0
106
0
对于所有使用Java应用程序的企业来说,Java安全性都是重要的主题。Java冠军Simon Ritter深入研究了JDK,以及未使您的应用程序保持最新状态的潜在缺点,以及为什么重要的补丁更新(CPU)和补丁集更新(PSU)之间的区别至关重要。
一年多以前,即2019年4月,大多数Java用户访问JDK更新的方式发生了变化。原因是Oracle对JDK的开发方式和Oracle JDK的许可条款进行的更改综合起来。
现在,Oracle JDK 11和Oracle JDK 8(来自更新211)使用Oracle技术网络许可协议。这将免费使用限制为仅以下四种情况:
个人使用(用于个人应用程序的笔记本电脑或台式机)
开发用途
Oracle批准的产品使用
Oracle云基础架构使用
对于所有其他情况,必须从Oracle购买Java SE订阅。
这要求用户做出有关其JDK部署策略的决策。一种这样的方法是:“嗯,它在我们现在拥有的JDK上运行良好;让我们坚持下去”。
这有一个明显的缺陷,那就是该决定将对应用程序的安全性产生影响。
自从人们开始开发软件以来,其他人一直在尝试寻找以最初不想要的方式使用它的方法。这通常是出于恶意目的,例如窃取信用卡号或用户身份。我们使用“黑客”一词来描述能够颠覆计算机安全性的人。黑客使用多种方法来实现其目标。从欺骗人们到泄露机密信息(网络钓鱼),再到通过缓冲区溢出之类的技术对软件进行复杂的操纵。
不幸的是,软件越复杂,黑客就越容易利用该漏洞。JDK是一个非常复杂的软件,因此可能包含漏洞。
发现软件中的漏洞后,通常会将它们记录为常见漏洞和披露(CVE)。由Miter公司运营的国家网络安全FFRDC维护CVE数据库。每个CVE(由唯一编号标识)均具有该漏洞的文字描述。
此外,每个CVE都有一个通用漏洞评分系统(CVSS)值。它不包括在CVE中,而是在由美国国家科学技术研究院(NIST)托管的国家漏洞数据库中维护。CVSS提供基本分数和一组指标。基本分数是表示漏洞严重性的0.1到10.0之间的值(从技术上讲,基本分数从0.0开始,但从定义上讲,分数为零的任何东西都不是脆弱性)。基本分数是根据一组指标计算得出的,这些指标表明漏洞的不同方面。这些指标与诸如是否可以通过网络利用漏洞,是否需要对计算机进行物理访问等相关。
0.0:无
0.1-3.9:低
4.0-6.9:中
7.0-8.9:高
9.0-10.0:严重
让我们看一下保持JDK最新的重要性。
首先,我回顾了过去三年的更新,并提取了每个漏洞都具有最高CVSS基本分数的漏洞。如下表所示。
CPU日期 | 最高CVSS | 受影响的JDK版本 |
2020年7月2020年4月 2020年1月 2019年十月 2019年七月 | 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年四月 | 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(多个) | 6,7,8,9 |
2017年十月 | 9.6(多个) | 6,7,8,9 |
2017年七月 | 9.6(多个) | 7,8 |
如您所见,大多数更新解决了至少一个得分高的漏洞,其中一些解决了关键漏洞。当我们仅将此限制为自Oracle Java SE许可更改以来的更新时,我们仍然看到其中一个具有严重漏洞,而三个则具有较高漏洞。有趣的是,2019年4月更新中解决的关键漏洞位于用于构建JDK的Windows DLL中,而不是任何JDK代码中。
接下来,我分析了自2015年1月以来的所有更新,这些都是随时可用的信息。查看所有已解决的漏洞并将其分为风险组,我们可以生成一个条形图,如下所示:
我将关键的一分为二,以突出显示得分为10的得分。
如您所见,总共解决了320个CVE,其中大多数处于中低范围。关键CVE的数量为59,这应该使您考虑使JDK保持最新状态的重要性。
但是,还有更多的复杂性。
Oracle为每个更新提供两个不同的版本。他们的所有软件都一样。这些称为关键补丁更新(CPU)和补丁集更新(PSU)。
CPU仅包含与解决安全漏洞有关的更改。PSU提供了所有这些更改,以及所有其他错误修复,较小的增强等。这样做的目的是在需要修补关键漏洞时能够快速推出更新。由于CPU包含的更改集较小,因此它不太可能对应用程序的稳定性产生影响(即,不太可能使您的应用程序无法运行)。使用CPU进行触摸测试后,可以对其进行部署以确保应用程序的最大安全性。然后,您可以在将PSU部署到生产计算机之前花费更长的时间测试PSU(通常运行全套回归测试)。这样可以确保您的应用程序具有最大的稳定性。
这里的重要说明是,并非所有OpenJDK二进制提供程序都了解CPU和PSU之间的区别。实际上,有些人将它们称为CPU更新,实际上是PSU。在部署之前,您应该仔细查看所获得的内容。
为了强调同时拥有CPU和PSU的好处,我们只需要查看2020年7月的更新即可。其中包括对错误的修正,该修正本身引入了回归。这种回归的影响是,Hadoop集群,Solr和Lucene等频繁使用的软件不再可靠运行,这对于使用它们的关键任务应用程序来说是一个严重的问题。回归不在安全补丁程序中,因此不包含在CPU中。
通过在7月27日发布更新265的修复程序解决了回归问题,该修复程序是计划的7月更新发布后的十二天。初始更新包含对CVE的修复,其基本分数为8.3,其详细信息已在发行说明中公开。如果您一直在使用其中一个受影响的软件系统,那么如果您只有全包的PSU,黑客将有将近两个星期的时间来尝试利用此软件。如果您还可以访问CPU,则可能已经推出了必要的安全补丁程序,可以保护系统免受威胁,并且可以放心地等待发布修订的PSU。
Azul的OpenJDK构建的Zulu Enterprise面向希望确保其系统提供最高级别的安全性和稳定性的用户。除了提供每个更新的CPU(安全)和PSU(完整)版本外,我们还努力在Oracle发布其版本后尽快提供这些更新。自从JDK 8的免费公共更新结束以来,Zulu Enterprise客户已经能够在Oracle版本发布后的一小时内下载更新。本质上,这是同时的。
总而言之,很明显,确保使用最新更新维护所有运行基于JVM的应用程序的系统非常重要。
您的Java运行时是否应有的安全?
作者介绍