如何修补OpenSSL中的Heartbleed错误(CVE-2014-0160)?


152

截至目前,已发现OpenSSL中的一个错误会影响1.0.1通过1.0.1f(包括)和引起的版本1.0.2-beta

从Ubuntu 12.04开始,我们所有人都容易受到此bug的攻击。为了修补此漏洞,受影响的用户应更新为OpenSSL 1.0.1g

每个受影响的用户现在如何才能应用此更新?


您有受影响的openssl版本吗?
Braiam 2014年

我已经安装了修补程序版本1.0.1-4ubuntu5.12,并且已经重新启动了apache服务,但是在网站上进行的filippo.io/Heartbleed测试仍然显示我很脆弱。

1
@Mat我不知道该站点要测试什么,但是也许它检测到您正在使用旧密钥。由于密钥可能已泄漏,因此您需要重新生成它。
Gilles 2014年

1
您确实不想将OpenSSL更新为批发新版本,这是令人难以置信的痛苦。容易
得多的

升级后您是否重新启动了服务?
Axel

Answers:


141

安全更新适用于12.04、12.10、13.10 和14.04,请参阅Ubuntu安全公告USN-2165-1

因此,首先您需要应用可用的安全更新,例如通过运行

sudo apt-get update
sudo apt-get upgrade

从命令行。

不要忘记重启使用受影响的OpenSSL版本的服务(HTTP,SMTP等),否则您仍然容易受到攻击。另请参阅Heartbleed:这是什么,有哪些缓解方法?在Serverfault.com上。

以下命令显示(升级后)所有需要重新启动的服务:

sudo find /proc -maxdepth 2 -name maps -exec grep -HE '/libssl\.so.* \(deleted\)' {} \; | cut -d/ -f3 | sort -u | xargs --no-run-if-empty ps uwwp

之后,您需要重新生成所有服务器SSL密钥,然后评估您的密钥是否可能泄漏,在这种情况下,攻击者可能已从服务器中检索了机密信息。


23
不确定这是否适用于Ubuntu 12.04.4 LTS。完全更新后,openssl version给出OpenSSL 1.0.1 14 Mar 2012。那不是补丁版本,对吗?还是我看错了?
保罗·坎特雷尔

7
与Ubuntu 13.04有什么关系?没有可用的升级版openssl :-(
Frodik 2014年

20
在Ubuntu 12.04上,甚至固定的OpenSSL也会显示版本1.0.1 14 Mar 2012。阅读crimi的答案以了解您的安装是否包括此修复程序。
2014年

7
谢谢,@ dan!在这里总结@crimi的答案:如果您跑步dpkg -l | grep ' openssl '并获得,1.0.1-4ubuntu5.12那么您就很好了。
保罗·坎特雷尔

20
修补和重新启动是不够的。您需要重新生成密钥,并评估您的密钥以及其他机密材料是否已泄漏。请参阅例如Heartbleed是否意味着每个SSL服务器都有新证书?
吉尔斯2014年

71

该错误称为Heartbleed

我容易受到伤害吗?

通常,如果您运行某些服务器在某个时候生成了SSL密钥,则您会受到影响。大多数最终用户没有(直接)受到影响;至少Firefox和Chrome不使用OpenSSL。SSH不受影响。Ubuntu软件包的分发不受影响(它依赖于GPG签名)。

如果运行任何使用OpenSSL版本1.0–1.0.1f的服务器(除了自发现错误以来已修补的课程版本),您就容易受到攻击。受影响的Ubuntu版本为11.10 oneiric到14.04可信预发行版。这是一个实现错误,而不是协议中的缺陷,因此只有使用OpenSSL库的程序才会受到影响。如果您有一个与旧版OpenSSL 0.9.x版本链接的程序,则不会受到影响。只有使用OpenSSL库来实现SSL协议的程序才会受到影响;使用OpenSSL进行其他操作的程序不受影响。

如果您运行的是暴露于Internet的易受攻击的服务器,则认为该服务器已受到威胁,除非自2014年4月7日发布以来您的日志未显示任何连接。(这假定该漏洞在发布前未被利用。)如果服务器仅在内部公开,则是否需要更改密钥取决于其他安全措施。

有什么影响?

该错误使任何可以连接到您的SSL服务器的客户端都可以从该服务器检索大约64kB的内存。客户端不需要以任何方式进行身份验证。通过重复攻击,客户端可以连续尝试转储内存的不同部分。

攻击者可能能够检索的关键数据之一是服务器的SSL私钥。利用这些数据,攻击者可以模拟您的服务器。

如何在服务器上恢复?

  1. 使所有受影响的服务器脱机。只要它们在运行,它们就有可能泄漏关键数据。

  2. 升级libssl1.0.0软件包,并确保重新启动所有受影响的服务器。
    您可以使用grep'libssl检查受影响的进程是否仍在运行。(已删除)'/ proc / / maps`

  3. 生成新密钥。这是必需的,因为该错误可能使攻击者获得了旧的私钥。请遵循最初使用的相同步骤。

    • 如果您使用由证书颁发机构签名的证书,则将新的公共密钥提交给您的CA。获得新证书后,将其安装在服务器上。
    • 如果使用自签名证书,则将其安装在服务器上。
    • 无论哪种方式,都将旧密钥和证书移开(但不要删除它们,只需确保不再使用它们)。
  4. 现在您有了新的密钥,可以使服务器恢复在线状态

  5. 撤销旧证书。

  6. 损坏评估:服务于SSL连接的进程内存中的所有数据都可能已泄漏。这可以包括用户密码和其他机密数据。您需要评估这些数据可能是什么。

    • 如果您正在运行允许密码验证的服务,那么自从漏洞宣布不久之前就已建立连接的用户的密码应视为已泄露。(前一阵子,因为密码可能已经在内存中使用了一段时间。)检查您的日志并更改任何受影响用户的密码。
    • 还要使所有会话cookie无效,因为它们可能已被破坏。
    • 客户端证书不受影响。
    • 此漏洞发生之前不久交换的任何数据都可能保留在服务器的内存中,因此可能已泄露给攻击者。
    • 如果有人记录了旧的SSL连接并检索了服务器的密钥,则他们现在可以解密其笔录。(除非PFS得到保证-如果你不知道,事实并非如此。)

如何在客户端上恢复?

在少数情况下,客户端应用程序会受到影响。服务器端的问题是任何人都可以连接到服务器并利用该错误。为了利用客户端,必须满足三个条件:

  • 客户端程序使用了错误版本的OpenSSL库来实现SSL协议。
  • 客户端连接到恶意服务器。(因此,例如,如果您连接到电子邮件提供商,则不必担心。)这必须在服务器所有者意识到此漏洞之后发生,大概是在2014-04-07之后。
  • 客户端进程中的机密数据未与服务器共享。(因此,如果您只是wget想下载文件,就不会有数据泄漏。)

如果您在2014年4月4日晚上UTC到升级OpenSSL库之间进行了此操作,请考虑客户端进程内存中的所有数据都将受到威胁。

参考文献


4
我不相信“仅SSL / TLS连接的服务器端受到影响”是真的。openssl.org/news/secadv_20140407.txt说,它可以揭示来自客户端或服务器的机密。ubuntu.com/usn/usn-2165-1同意。连接到恶意服务器时使用客户端证书的机会很小,但是这种可能性存在。
armb 2014年

@armb你说的很对。甚至不使用客户端证书也没关系,数据泄漏与证书的使用无关。我已经寻求专业人士的帮助
吉尔斯2014年

客户端证书是您泄漏私钥的情况,但是是的,密码,授权cookie等仍然可能泄漏。但是,对于典型使用的基于OpenSSL的客户端(例如curl或wget),在连接到恶意服务器时,您不会在内存中拥有其他站点的秘密,因此在那种情况下,我认为唯一的泄漏就是您提供了客户端秘密预期将它们提供给合法站点,并且Heartbleed在握手期间泄漏了它们,直到证书验证显示您没有连接到正确的站点为止。
armb 2014年

1
@Gilles您可能会对以下事实的答案感兴趣:哪些客户被证明容易受到Heartbleed的攻击?。我设法在nginx(代理模式),wget,链接等上获得了“有趣的”内存。
Lekensteyn

1
@MuhamedHuseinbašić该软件包openssl包含命令行工具。使用OpenSSL库来实现SSL协议的应用程序(例如Apache)不使用它。但是您应该只应用发行版的安全更新。
吉尔斯(Gilles)2017年

40

要查看在Ubuntu上安装了哪个OpenSSL版本,请运行:

dpkg -l | grep openssl

如果看到以下版本输出,则应包括CVE-2014-0160的补丁。

ii  openssl      1.0.1-4ubuntu5.12      Secure Socket Layer (SSL)...

查看https://launchpad.net/ubuntu/+source/openssl/1.0.1-4ubuntu5.12,它显示出已修复的错误类型:

...
 SECURITY UPDATE: memory disclosure in TLS heartbeat extension
    - debian/patches/CVE-2014-0160.patch: use correct lengths in
      ssl/d1_both.c, ssl/t1_lib.c.
    - CVE-2014-0160
 -- Marc Deslauriers <email address hidden>   Mon, 07 Apr 2014 15:45:14 -0400
...

2
我已经升级并获得了5.12版,但是该工具仍然告诉我我很容易受害filippo.io/Heartbleed Thoughts?
toxaq 2014年

3
我已经在这方面测试了更新的服务器,它告诉我我不受影响。您是否重新启动了系统,或者至少确定所有必需的进程都已重新启动?
crimi

3
更新OPENSSL之后,我所要做的就是重新启动apache服务,但是优雅并没有帮助。我不得不去使用sudo service apache2 restart
Tom Hert,2014年

1
我刚刚发现漏洞的原因:我安装了mod-spdy-beta。删除它并重新启动apache之后,所有测试现在都是绿色的。
安德里亚斯·罗斯

3
更新openssl不会修复诸如Apache,Nginx或postfix之类的应用程序。您必须libssl1.0.0按照其他帖子中的说明更新并重新启动它们。
tnj 2014年

17

如果您的apt-get存储库不包含任何预编译的1.0.1g OpenSSL版本,那么只需从官方网站下载源代码并进行编译即可。

在单个命令行下方,用于编译和安装最新的openssl版本。

curl https://www.openssl.org/source/openssl-1.0.1g.tar.gz | tar xz && cd openssl-1.0.1g && sudo ./config && sudo make && sudo make install

通过符号链接将旧的openssl二进制文件替换为新的。

sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`

你们都好!

# openssl version should return
openssl version
OpenSSL 1.0.1g 7 Apr 2014

cf此博客文章

注意:如博客文章所述,此解决方法无法解决“必须使用1.0.1g openSSL源重新编译的Nginx和Apache服务器”。


2
通常,Ubuntu不提供新的上游版本,而是为所有受支持的发行版打补丁,以使更改最少。
Florian Diesch 2014年

1
注意:确保在更新OpenSSL之后重新启动服务器。Apache和Nginx选择了新库,该漏洞已关闭。
dAngelov 2014年

6
嘿,现在我花时间阅读这篇文章的详细信息,我感到更加震惊-从Internet上的某个随机位置下载tarball,解压缩并以root身份执行其中的一部分只是鲁re的行为。如果下载并检查了tarball签名会更好一些,但是要确保您验证签名是通过正确的密钥签名的,这本身就是一个难题。分发已经致力于确保tarball和补丁的安全来源。谢谢。
sarnold 2014年

2
现在最好从源代码进行编译,然后再从apt安装一个较新的代码,这是个好主意,这样一来,无论您是在我的老版本的ubuntu上,还是比我想像的都要安全得多
nwgat 2014年

2
@sarnold openssl.org似乎不是一个随意的地方来下载openssl的源代码。Canonical应该使此操作不必要,但是openssl.org 应该是工作的权威上游。
Rustavore

12

对于那些不想进行服务器级软件包升级的用户。我今天读了一堆这些指南,并且apt-get upgrade openssl=== apt-get upgrade这将应用您的计算机所需的所有安全修复程序。很好,除非您明确地在某个地方使用了旧的软件包版本。

这是在运行Apache 2的Ubuntu 12.04 LTS上所需的最少操作。

  • 转到此地址并证明您有漏洞。您应该使用Web服务器的直接外部地址。如果使用负载均衡器(例如ELB),则可能不会直接与Web服务器联系。

  • 运行以下1个衬板以升级软件包并重新启动。是的,我看到所有指南都说您应该在2014年4月4日之后加上时间戳记,但在我看来情况并非如此。

    apt-get更新&& apt-get安装openssl libssl1.0.0 && /etc/init.d/apache2重新启动

  • 确保已安装适当的软件包版本,然后再次检查Web服务器中的漏洞。

关键软件包如下所示,我使用下面的命令确定了这些信息,然后删除了所有内容(您不需要了解我的计算机的状态)。

$ dpkg -l | grep ssl

ii  libssl-dev                       1.0.1-4ubuntu5.12          SSL development libraries, header files and documentation
ii  libssl1.0.0                      1.0.1-4ubuntu5.12          SSL shared libraries
ii  openssl                          1.0.1-4ubuntu5.12          Secure Socket Layer (SSL)* binary and related cryptographic tools

1.0.1-4ubuntu5.12不应包含该漏洞。通过再次访问下面的网站并测试您的Web服务器,确保是这种情况。

http://filippo.io/Heartbleed/


2
对我而言,使用外部站点证明服务器中的漏洞似乎是错误的方法。
Rinzwind 2014年

如今,外部漏洞测试脚本变得越来越普遍。它确实执行内部脚本的操作,只是从外部Web服务器启动连接。您可以查看WhiteHatSecurity.com之类的网站,作为远程​​启动所有连接的程序示例。在某些情况下,这是行不通的,例如网络漏洞测试,但是对于测试面向前的Web服务器(通常是SSL服务器),这几乎是理想的。
Adrian

如果要升级,为什么要安装该软件包?
Braiam 2014年

1
apt-get install openssl libssl1.0.0为我做了。openssl version -a现在运行显示:built on: Mon Apr 7 20:33:29 UTC 2014
topher

“如今,外部漏洞测试脚本正变得越来越普遍。”这为外部站点滥用我的系统提供了可能性:他们需要知道它会失败并在对我的系统进行补丁之前对其进行入侵。不,这不是正确的方法。(是的,我用apache和openssl托管自己的网站)。
Rinzwind

11

我注意到这里有许多评论者迫切需要帮助。他们遵循说明,升级,重新引导,并且在使用某些测试网站时仍然容易受到攻击。

您必须检查以确保没有保留的软件包(例如libssl)。

:~$ sudo apt-get upgrade -V
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  libssl-dev (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  libssl1.0.0 (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  linux-image-virtual (3.2.0.31.34 => 3.2.0.60.71)
  linux-virtual (3.2.0.31.34 => 3.2.0.60.71)
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

升级那些apt-mark unhold libssl1.0.0(例如)。然后升级:apt-get upgrade -V。然后,重新启动受影响的服务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.