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 脚本来为任何软件包执行此操作(链接如下)
apt-get
还(显然)通过运行具有变更日志功能apt-get changelog openssl
(我说显然,因为我自己没有测试过这个 - 有些来源引用使用aptitude changelog <package>
)
dpkg
dpkg-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 安全公告配对,将提供您正在寻找的信息。
在某种程度上,我同意你关于补丁的说法,但我必须说,这可能会令人困惑。