新的软件包版本如何进入 LTS 发行版?(当前示例:OpenSSL)

cis*_*cis 3 upgrade updates package-management openssl 18.04

我正在运行几台 Ubuntu 18.04 机器,它们都需要 OpenSSL。

最近,OpenSSL 报告了一个安全问题:https : //www.openssl.org/news/secadv/20200421.txt (CVE-2020-1967)。

我确实通过 Ubuntu 标准包安装了 OpenSSL,这里没有自定义包源,也没有自己编译。因此,由于情况确实如此,并且由于我使用的是当前维护的 LTS 发行版(如上所述的 18.04),因此我假设运行apt update并且apt upgrade足以获取最新更新并免受该漏洞的影响。但不是。显然,它更复杂。

根据https://launchpad.net/ubuntu/+source/openssl,有一个适用于 Ubuntu 的 OpenSSL 软件包版本,可以对上述 CVE-2020-1967 做出反应。但是,它的版本名称中仍然包含 1.1.1f,而解决问题的 OpenSSL 版本实际上是 1.1.1g(根据他们的建议)。而且,更重要的是:该软件包仅适用于 Focal Fossa (20.04)。

因此,我想借此机会了解一些有关 Ubuntu 内部结构以及软件包版本如何进入我的计算机的知识:

  • 为什么新的包只为较新的 LTS 发行版创建而旧的包容易受到攻击?
  • 这个过程一般是如何工作的?
  • 从公开宣布漏洞到通过 提供修补程序包之间的平均时间是apt upgrade多少?

use*_*733 5

为什么新的包只为较新的 LTS 发行版创建而旧的包容易受到攻击?只是FALSE,让我们向您展示如何自己确定:

首先,让我们来看看Ubuntu CVE Tracker

输入您的 CVE 编号,您将看到:

  • Ubuntu 安全团队已经解决了这个问题。
  • 一些 Ubuntu 版本需要新的软件包,而另一些则不需要。
  • 跟踪器包含带有修复程序的确切软件包版本。

其次,很多人对 Debian/Ubuntu快照发布模型的概念感到困惑。在此模型下,单个版本(如 19.10 或 20.04)中的软件不会因新版本而增加……即使是大多数安全版本。

  • 例外:有一些例外,比如网络浏览器,总是在旧版本上获得最新版本。

然而,“不增加”并不意味着“不固定”。许多软件包在发布后无需升级到新版本即可获得安全补丁。让我们再说一遍:鼓励用户更新到较新的软件包,因为大多数用户没有技能或耐心修补和重新编译软件包发行版,如Ubuntu,然而,有工程师谁也有技巧和耐心。

  • 这是风险管理:较新的软件包可能会引入错误,并且尚未在发行版中进行测试,因此大多数软件包都已打补丁。

最后,让我们以这两个元素为基础,看看 CVE-2020-1967 中的 OpenSSL 示例:

  • Ubuntu 安全团队评估了六个不同版本的 Ubuntu 中的漏洞。该漏洞存在于其中一个版本中。
  • 上游版本(针对用户)是 1.1.1g 版本
  • 安全团队修补了 20.04 的包 1.1.1f 中的漏洞。由于他们添加了补丁而不是合并新的上游版本,因此他们不能再声称它是 1.1.1f,也不是 1.1.1g。它是别的东西,所以它被称为 1.1.1f-1ubuntu2。请注意,“ubuntu2”中的“2”表示这是该软件包的第三个补丁,因为它来自上游。
  • 补丁的标记方案并非偶然 - 它经过精心设计,因此您可以一目了然地看到有多少补丁来自 Debian,有多少来自 Ubuntu。此外,它仍然可以按字母数字排序,因此 apt 将始终正确识别要安装的最高版本。
  • 最后,经过审核和测试,补丁包openssl 1.1.1f-1ubuntu2在发布前上传到20.04(Focal)。如果补丁是在发布后发生的,它将在焦点安全存储库中。这是将 -security 存储库保留在您的源中并保持无人值守升级处于活动状态很重要的原因之一。