当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

截至今天,已发现bug in OpenSSL通过1.0.1f(含)和1.0.2-beta影响版本1.0.1

自Ubuntu 12.04以来,我们都容易受到这个bug的影响。为了修补此漏洞,受影响的用户应更新到OpenSSL 1.0.1g

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

最佳解决思路

安全更新可用于12.04,12.10,10.10 and 14.04请参阅Ubuntu Security Notice USN-2165-1

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

sudo apt-get update
sudo apt-get upgrade

从命令行。

不要忘记重新启动使用受影响的OpenSSL版本的服务(HTTP,SMTP等),否则您仍然易受攻击。另请参阅Serverfault.com上的Heartbleed: What is it and what are options to mitigate it?

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

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密钥,然后评估您的密钥是否可能泄漏,在这种情况下,攻击者可能已从服务器检索到机密信息。

次佳解决思路

该错误称为Heartbleed

我很脆弱吗?

通常情况下,如果您运行一些为您生成SSL密钥的服务器,则会受到影响。大多数end-users没有(直接)影响;至少Firefox和Chrome不使用OpenSSL。 SSH不受影响。 Ubuntu软件包的分发不受影响(它依赖于GPG签名)。

如果您运行任何使用OpenSSL版本1.0-1.0.1f的服务器(自从发现该错误以来修补的版本除外),则您很容易受到攻击。受影响的Ubuntu版本是11.10 oneiric到14.04可信pre-releases。这是一个实现错误,而不是协议中的缺陷,所以只有使用OpenSSL库的程序才会受到影响。如果您的程序与旧版0.9.x版本的OpenSSL链接,则不会受到影响。只有使用OpenSSL库实现SSL协议的程序才会受到影响;使用OpenSSL进行其他事情的程序不受影响。

如果您运行了易受互联网影响的易受攻击的服务器,请考虑它受到攻击,除非自2014-04-07发布公告以来您的日志显示无连接。 (这假定漏洞在宣布之前未被利用。)如果您的服务器仅在内部暴露,则您是否需要更改密钥取决于其他安全措施。

什么影响?

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

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

我如何在服务器上恢复?

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

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

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

    • 如果您使用由证书颁发机构签署的证书,请将新的公钥提交给您的CA.当您获得新证书时,请将其安装到您的服务器上。

    • 如果您使用self-signed证书,请将其安装到您的服务器上。

    • 无论哪种方式,移动旧的密钥和证书(但不要删除它们,只要确保它们不再被使用)。

  4. 现在您拥有了新的不妥协的密钥,您可以将服务器重新联机。

  5. 撤销旧证书。

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

    • 如果您运行的是允许密码验证的服务,那么在漏洞宣布前一段时间之后连接的用户的密码应该被认为是受到威胁的。 (之前有一段时间,因为密码可能在内存中暂时未被使用。)检查您的日志并更改任何受影响用户的密码。

    • 也会使所有会话Cookie无效,因为它们可能已被入侵。

    • 客户端证书不受影响。

    • 在漏洞发生前一段时间之后交换的任何数据可能都保留在服务器的内存中,因此可能已经泄漏给攻击者。

    • 如果某人记录了旧的SSL连接并检索了您的服务器的密钥,则他们现在可以解密其成绩单。 (除非PFS得到保证 – “如果你不知道,那不是。”)

我如何在客户端恢复?

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

  • 客户端程序使用OpenSSL库的bug版本来实现SSL协议。

  • 客户端连接到恶意服务器。 (例如,如果您连接到电子邮件提供商,这不是一个问题。)这必须发生在服务器所有者意识到此漏洞之后,因此推测2014-04-07之后。

  • 客户端进程在内存中有不与服务器共享的机密数据。 (所以如果你只是跑wget下载一个文件,没有数据泄漏。)

如果您在2014年4月7日傍晚UTC之间这样做并升级您的OpenSSL库,请考虑客户端进程内存中的任何数据都会受到影响。

参考

第三种解决思路

要查看在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
...

第四种思路

如果您的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

这个blog post

注意:正如博客文章所述,这种解决方法不能解决“需要使用1.0.1g openSSL源代码重新编译的Nginx和Apache服务器”。

第五种思路

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

这是运行Apache 2的Ubuntu 12.04 LTS所需的最小操作:

  • 转到this address并证明您有此漏洞。您应该使用您的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/

第六种思路

我注意到这里有很多评论者需要紧急帮助。他们按照说明进行升级和重新启动,并且在使用某些测试网站时仍然很脆弱。

您必须检查以确保您没有搁置的软件包,例如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。然后,重启受影响的服务。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/306.html,未经允许,请勿转载。