如何确保您的 Java 应用程序安全

2021-09-22 19:36:15 浏览数 (2527)

在之前,大多数 Java 用户访问 JDK 更新的方式发生了变化。其原因是 Oracle 对 JDK 的开发方式和 Oracle JDK 的许可条款所做的更改。

Oracle JDK 11 和 Oracle JDK 8(从更新 211 开始)现在使用 Oracle 技术网络许可协议。这将免费使用限制为仅四种情况:

  1. 个人使用(用于个人应用程序的笔记本电脑或台式机)
  2. 开发使用
  3. Oracle 批准的产品使用
  4. Oracle 云基础架构使用

对于所有其他情况,必须从 Oracle 购买 Java SE 订阅。

这要求用户就他们的 JDK 部署策略做出决定。一种这样的方法是“好吧,它在我们现在拥有的 JDK 上运行良好;让我们坚持下去吧”。

这有一个明显的缺陷,即该决定将对应用程序的安全性产生的影响。

自从人们开始开发软件以来,其他人一直在努力寻找以非预期方式使用它的方法。这通常是出于恶意目的,例如窃取信用卡号或用户身份。我们使用术语黑客来描述能够破坏计算机安全的人。黑客可以通过无数种方式来实现他们的目标;从欺骗人们泄露机密信息(网络钓鱼)到通过缓冲区溢出等技术对软件进行复杂的操作。

不幸的是,软件越复杂,黑客利用漏洞的可能性就越大。JDK 是一个非常复杂的软件,因此可能包含漏洞。

当发现软件中的漏洞时,它们通常被记录为常见漏洞和暴露 (CVE)。由 Mitre Corporation 运营的国家网络安全 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 基础分数的漏洞。这显示在下表中。

处理器日期最高 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.08
2019 年 1 月6.16、7、8、11
2018 年 10 月9.08,11
2018 年 7 月5.96、7、8、10
2018 年 4 月8.36、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

如您所见,大多数更新至少解决了一个高评分漏洞,并解决了几个关键漏洞。当我们将其限制为 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 Cluster、Solr 和 Lucene 不再可靠地工作,这对于使用它们的任务关键型应用程序来说是一个严重的问题。回归不在安全补丁中,因此不包含在 CPU 中。

7 月 27 日(即预定的 7 月更新发布后的 12 天)发布了作为更新 265 的修复,从而解决了回归问题。初始更新包含对基本分数为 8.3 的 CVE 的修复,其详细信息已在发行说明中公开。如果您使用的是受影响的软件系统之一,如果您只有全包式 PSU,黑客将有近两周的时间来尝试利用它。如果您还可以访问 CPU,您就可以推出必要的安全补丁,保护您的系统免受威胁,然后无忧无虑地等待修订后的 PSU 发布。

Azul 的 Zulu Enterprise 版本的 OpenJDK 面向希望确保其系统提供最高级别的安全性和稳定性的用户。除了提供每个更新的 CPU(安全)和 PSU(完整)版本之外,我们还努力在 Oracle 发布它们的版本后尽快交付这些更新。自 JDK 8 的免费公开更新结束后,Zulu Enterprise 客户可以在 Oracle 发布后的一小时内下载更新。这基本上是同时的。

总之,很明显,确保所有运行基于 JVM 的应用程序的系统都保持最新更新是多么重要。