面对反向补丁时确定有效的安全版本?

面对反向补丁时确定有效的安全版本?

Heartbleed 漏洞让很多人询问如何检查已安装软件包的版本。我也一样,因为我还没有找到方法。

不幸的是,回补使得版本检查几乎毫无用处,因为信息仍然停留在较低级别。例如(来自 Fedora):

$ openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Tue Apr  8 00:29:11 UTC 2014
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) ...
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT ...
OPENSSLDIR: "/etc/pki/tls"
engines:  dynamic 

而 Yum 和 Apt-Get 也好不到哪里去,因为它们没有提供有效的安全版本(来自 Fedora 的 Yum):

$ yum info openssl
Loaded plugins: langpacks, refresh-packagekit
Installed Packages
Name        : openssl
Arch        : x86_64
Epoch       : 1
Version     : 1.0.1e
Release     : 37.fc19.1
Size        : 1.5 M
Repo        : installed
From repo   : updates
Summary     : Utilities from the general purpose cryptography library with TLS
            : implementation
URL         : http://www.openssl.org/
License     : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
            : between machines. OpenSSL includes a certificate management tool
            : and shared libraries which provide various cryptographic
            : algorithms and protocols.

并且(来自 Ubuntu 和 Apt-Cache):

$ apt-cache showpkg openssl
Package: openssl
Versions: 
1.0.1e-3ubuntu1.2 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_saucy-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_saucy-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_saucy_main_binary-amd64_Packages
                  MD5: 977022bc5545601176b69704acc5df9b
 Description Language: en
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_saucy_main_i18n_Translation-en
                  MD5: 977022bc5545601176b69704acc5df9b

1.0.1e-3ubuntu1 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_saucy_main_binary-amd64_Packages)
 ...
Provides: 
1.0.1e-3ubuntu1.2 - 
1.0.1e-3ubuntu1 - 

如上所示,没有关于有效安全版本(“1.0.1g”)的信息。提供的唯一信息是 OpenSSL 级别较低(“1.0.1e”),可能容易受到最新漏洞的攻击。

反向修补和降低版本号一定是历史上最愚蠢的安全决策之一。它与
(1) 机会性加密不好,纯文本好(浏览器),以及
(2) 使用公开信息作为秘密/挑战问题

使用 Yum 和 Apt-Get 时,如何确定已修补的软件包的有效安全版本?(这是一个普遍性的问题,并不特定于 OpenSSL)。

答案1

我用rpm -q openssl --changelog | head

由此您可以检查安全补丁,并且根据您的存储库,它可以为您提供准确的版本(取决于它的注释程度)。

我更喜欢这种方式,而不是简单地根据构建日期假设它包含最新的安全补丁

由于你明确询问如何从 yum 执行此操作,因此首先你需要安装 changelog yum install yum-changelog

然后运行yum changelog openssl,或在更新时/之前查看,yum update openssl --changelog

出于兴趣,我快速搜索了一下,看看是否还有其他方法可以做到这一点,但我找到的只是像您这样的人,他想要一种简单的方法来检查安全版本,并且他编写了一个 shell 脚本来为任何软件包执行此操作(链接如下)

博客条目

Shell 脚本

apt-get还(显然)通过运行具有变更日志功能apt-get changelog openssl
(我说显然,因为我自己没有测试过这个 - 有些来源引用使用aptitude changelog <package>

dpkgdpkg-dev包中包含一个名为的工具dpkg-parsechangelog
(同样,我自己没有使用过这个工具,所以我不知道它会提供什么结果,但我猜是类似的信息)

附录:我发现解决变更日志提供 CVE 而不是特定版本问题的唯一简单方法是使用以下工具虚拟馈送
我实际上没有使用过这个特定的工具(可能还有其他工具),但它提供了命令行访问以下功能:
get_cve : basic CVE attributes (summary, published and modified dates)

如果有人有时间或意愿,我相信可以编写一个简单的 shell 脚本,它将结合从变更日志中提取的 CVE 信息并将其输入到 vFeed 等工具中,从而为您提供“package-x 是否包含最新的安全补丁?”这个问题的单行答案。
事实上,大部分工作可能已经在我之前链接到的 shell 脚本中完成了。

答案2

我发现检查有效状态的最可靠方法openssl是运行openssl version -a并查看该built on字段。此日期,与官方 Ubuntu/Fedora 安全公告配对,将提供您正在寻找的信息。

在某种程度上,我同意你关于补丁的说法,但我必须说,这可能会令人困惑。

相关内容