如何修补 OpenSSL 中的 Heartbleed 漏洞 (CVE-2014-0160)?

如何修补 OpenSSL 中的 Heartbleed 漏洞 (CVE-2014-0160)?

从今天起,OpenSSL 中的错误已发现影响到1.0.11.0.1f含) 和 的版本1.0.2-beta

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

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

答案1

12.04、12.10、13.10 有安全更新和 14.04Ubuntu 安全通知 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 密钥,然后评估您的密钥是否可能已泄露,在这种情况下,攻击者可能已经从您的服务器中检索了机密信息。

答案2

该漏洞被称为心脏出血

我是否很脆弱?

一般来说,如果您运行某个服务器,并在某个时候为其生成了 SSL 密钥,那么您就会受到影响。大多数最终用户不会(直接)受到影响;至少 Firefox 和 Chrome 不使用 OpenSSL。SSH 不受影响。Ubuntu 软件包的分发不受影响(它依赖于 GPG 签名)。

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

如果您运行的服务器暴露在互联网上,除非您的日志显示自 2014-04-07 公告以来没有连接,否则请认为该服务器已受到攻击。(这假设该漏洞在公告之前未被利用。)如果您的服务器仅在内部暴露,则是否需要更改密钥将取决于采取了哪些其他安全措施。

有什么影响?

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

攻击者可能能够获取的关键数据之一是服务器的 SSL 私钥。利用此数据,攻击者可以冒充您的服务器。

如何在服务器上恢复?

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

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

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

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

  5. 撤销旧证书。

  6. 损害评估:为 SSL 连接提供服务的进程内存中的任何数据都可能被泄露。这可能包括用户密码和其他机密数据。您需要评估这些数据可能是什么。

    • 如果您正在运行允许密码验证的服务,那么在漏洞公布前不久连接的用户的密码应被视为已被泄露。(早一点,因为密码可能在内存中保留了一段时间而未被使用。)检查您的日志并更改任何受影响用户的密码。
    • 同时使所有会话 cookie 无效,因为它们可能已被泄露。
    • 客户端证书没有受到损害。
    • 自漏洞出现之前不久交换的任何数据可能仍保留在服务器的内存中,因此可能已泄露给攻击者。
    • 如果有人记录了旧的 SSL 连接并检索了您的服务器的密钥,他们现在就可以解密他们的记录。(除非增强体质是确定的——如果你不知道,那就不是。)

如何在客户端上恢复?

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

  • 客户端程序使用了有缺陷的OpenSSL库版本来实现SSL协议。
  • 客户端连接到恶意服务器。(例如,如果您连接到电子邮件提供商,则无需担心。)这一定是在服务器所有者意识到此漏洞之后发生的,因此大概是在 2014-04-07 之后。
  • 客户端进程的内存中保存着机密数据,这些数据不会与服务器共享。(因此,如果您只是运行程序wget下载文件,则不会泄露任何数据。)

如果您在 2014-04-07 晚上 UTC 和升级 OpenSSL 库之间执行了此操作,则客户端进程内存中的所有数据都将被泄露。

参考

答案3

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

答案4

对于那些不想进行全服务器软件包升级的人来说。我今天阅读了很多指南,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 重启

  • 确保您安装了适当的软件包版本,并再次检查您的网络服务器是否存在漏洞。

关键包如下,我使用下面的命令确定了这些信息,然后编辑掉了多余的部分(您不需要了解太多有关我的机器的状态的信息)。

$ 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/

相关内容