Heartbleed:它是什么以及缓解它的选项是什么?

Jac*_*cob 203 security openssl heartbleed

这是一个关于理解和修复 Heartbleed 安全问题的规范问题。

CVE-2014-0160 又名“心血”究竟是什么?原因是什么,OpenSSL 的哪些操作系统和版本容易受到攻击,症状是什么,有什么方法可以检测成功的漏洞利用吗?

如何检查我的系统是否受到影响?如何缓解此漏洞?我是否应该担心我的密钥或其他私人数据已被泄露?我应该担心哪些其他副作用?

EEA*_*EAA 116

首先,在吓坏之前,请确保您了解此漏洞是否真的适用于您。如果您有一台服务器,但实际上从未有任何使用 TLS 的应用程序,那么这不是您需要修复的高优先级问题。另一方面,如果您曾经使用过支持TLS 的应用程序,那么您将大饱眼福。继续阅读:

CVE-2014-0160 又名“Heartbleed”究竟是什么?

这是一个大烂摊子,就是这样。简而言之,在 OpenSSL 1.0.1 到 1.0.1f 版本中发现了一个可远程利用的漏洞,攻击者可以通过该漏洞读取系统内存的某些部分。这些部分是保存敏感数据的部分,例如私钥、预共享密钥、密码和高价值的公司数据等。

该漏洞由 Google Security 的 Neel Mehta(2014 年 3 月 21 日)和芬兰 IT 安全测试公司 Codenomicon(2014 年 4 月 2 日)独立发现。

原因是什么?

好吧,OpenSSL 中的错误代码。是引入漏洞的提交,是修复漏洞的提交。该漏洞于 2011 年 12 月出现,并于 2014 年 4 月 7 日今天修补。

该错误也可以看作是更大问题的征兆。两个相关的问题是 (1) 有什么流程可以确保错误代码不会被引入代码库,以及 (2) 为什么协议和扩展如此复杂且难以测试。第 (1) 项是 OpenSSL 和许多其他项目的治理和流程问题。许多开发人员只是抵制代码审查、分析和扫描等实践。IETF 的 TLS WG 正在讨论第 (2) 项。请参阅Heartbleed/协议复杂性

错误代码是否被恶意插入?

我不会推测这是否真的是一个错误,或者可能是代表一个坏演员偷偷溜进来的一些代码。但是,为 OpenSSL 开发代码的人表示这是无意的。See Man 介绍了严重的“Heartbleed”安全漏洞,否认他是故意插入的

哪些操作系统和 OpenSSL 版本容易受到攻击?

如上所述,任何正在使用的操作系统或链接到 OpenSSL 1.0.1 到 1.0.1f 的应用程序。

有什么症状,有什么方法可以检测成功的漏洞利用?

这是可怕的部分。据我们所知,没有已知的方法可以检测此漏洞是否已被利用。从理论上讲,IDS 签名很快就会发布,可以检测到此漏洞,但在撰写本文时,这些签名尚不可用。

有证据表明,早在 2013 年 11 月,Heartbleed 就已在野外被积极利用。请参阅 EFF 的《内心狂野:情报机构是否在 2013 年 11 月使用 Heartbleed?彭博社报道说,在漏洞被引入后不久,美国国家安全局就将漏洞利用武器化了。参见NSA 多年来一直在利用 Heartbleed Bug 获取情报。然而,美国情报界否认布隆伯格的说法。参见IC 上的记录

如何检查我的系统是否受到影响?

如果您在系统上维护 OpenSSL,那么您可以简单地发出openssl version

$ openssl version
OpenSSL 1.0.1g 7 Apr 2014
Run Code Online (Sandbox Code Playgroud)

如果发行版正在维护 OpenSSL,那么您可能无法确定 OpenSSL 的版本,因为使用openssl命令或包信息(例如apt-getdpkgyumrpm)进行了回补丁。大多数(所有?)发行版使用的回补丁过程仅使用基本版本号(例如,“1.0.1e”);和不包括有效的安全版本(例如,“1.0.1g”)。

超级用户上有一个悬而未决的问题,以确定当包被反向修补时 OpenSSL 和其他包的有效安全版本。不幸的是,没有有用的答案(除了查看发行版的网站)。请参阅在遇到 Backpatching 时确定有效的安全版本?。

根据经验:如果您曾经安装过其中一个受影响的版本,并且曾经运行过与 OpenSSL 链接以获得 TLS 支持的程序或服务,那么您很容易受到攻击。

在哪里可以找到测试漏洞的程序?

在 Heartbleed 公告发布数小时内,互联网上的几个人就公开了可公开访问的 Web 应用程序,据称这些应用程序可用于检查服务器是否存在此漏洞。在撰写本文时,我还没有审查过任何申请,因此我不会进一步宣传他们的申请。在您首选的搜索引擎的帮助下,可以相对轻松地找到它们。

如何缓解此漏洞?

升级到非易受攻击的版本并重置或重新保护易受攻击的数据。正如Heartbleed网站上所述,适当的响应步骤大致包括:

  1. 修补易受攻击的系统。
  2. 重新生成新的私钥。
  3. 向您的 CA 提交新的 CSR。
  4. 获取并安装新的签名证书。
  5. 使会话密钥和 cookie 无效
  6. 重置密码和共享机密
  7. 撤销旧证书。

有关更详细的分析和答案,请参阅网站运营商应如何处理 Heartbleed OpenSSL 漏洞?在安全堆栈交换。

我是否应该担心我的密钥或其他私人数据已被泄露?我应该担心哪些其他副作用?

绝对地。系统管理员需要假设他们使用易受攻击的 OpenSSL 版本的服务器确实受到了威胁并做出相应的响应。

在漏洞被披露后不久,Cloudfare 提出了一个挑战,看看服务器的私钥是否可以在实践中恢复。Fedor Indutny 和 Ilkka Mattila 分别赢得了挑战。请参阅Heartbleed 挑战

我在哪里可以找到更多信息?

链接转储,对于那些寻找更多细节的人:


可以在Heartbleed 披露时间表中找到披露事件的相当详细的时间表:谁知道什么以及何时


如果您是一名程序员并且对各种编程技巧(例如通过 OpenSSL 的msg_cb回调检测 Heartbleed 攻击)感兴趣,请参阅 OpenSSL 的安全公告 2014047

  • +1 为**关闭。下。您的。SERVERS.*** -- 如果您在 SSL 非常重要的地方做任何事情,请关闭它,直到您解决问题。也不要忘记在您修补服务器后安装新证书(使用 *** 新密钥***) - 重用旧密钥(可能已被盗用)会破坏修补漏洞的全部目的...... (42认同)
  • **ALSO** - 重新启动链接到 OpenSSL 库的所有服务。在不重新启动守护程序的情况下升级 OpenSSL 与根本不升级一样好。 (29认同)
  • 确实 - 在任何类型的主要补丁(如 OpenSSL)之后,我认为重新启动机器以确保您不会错过任何东西是一个很好的规则。 (14认同)
  • 其中一名测试人员已开源:https://github.com/FiloSottile/Heartbleed (5认同)
  • @EEAA,“关闭您的服务器”并不意味着您必须断电。这意味着关闭(或重新配置以禁用 ssl/tls )apache,或任何正在提供服务的服务。 (3认同)
  • “我不会推测这是否真的是一个错误,或者可能是代表一个坏演员偷偷溜进来的一些代码。” - 代码由 Robin Seggelmann 提供。Seggelmann 是 [传输层安全性 (TLS) 和数据报传输层安全性 (DTLS) 心跳扩展](https://tools.ietf.org/rfc/rfc6520.txt) RFC 的合著者。实际提交是由 Henson 博士完成的;请参阅 4817504d0 提交。IETF 的 TLS WG 现在正在 [TLS:Heartbleed / 协议复杂性](https://www.ietf.org/mail-archive/web/tls/current/msg11891.html) 讨论此类扩展的有用性和增加的复杂性。 (3认同)

200*_*ess 43

XKCD 对该错误的简单解释:

第1354章


Nat*_*man 36

Ubuntu 12.04、12.10 和 13.10

Ubuntu 已发布USN-2165-1,其中声明更新的软件包现在可以在档案中使用。运行以下两个命令来获取修复。

sudo apt-get update
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

Ubuntu 14.04

我已将包含新版本 (1.0.1g) 的 Debian 软件包上传到我为此目的设置的 PPA。这三个命令会将我的 PPA 添加到您的系统,更新可用软件包列表,并升级所有内容:

sudo add-apt-repository ppa:george-edison55/openssl-heartbleed-fix
sudo apt-get update
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

注意:PPA 还提供了适用于 Ubuntu 12.04 和 13.10 的软件包,以防万一您更喜欢实际运行新版本 (1.0.1g) 而不是仅使用存档中的修补版本。

Ubuntu 10.04

这是一个 LTS 版本,服务器版本仍受支持并接收安全更新。但是heartbleed漏洞并没有影响ubuntu 10.04标准安装的openssl包,因为版本低于1.0.1。

桌面版本已达到使用寿命,需要升级/重新安装。

Ubuntu 13.04 和其他过时版本

Ubuntu 13.04 的支持周期非常短,这是您可能没有想到的。它已经达到使用寿命并且不再接收安全更新。早就该升级了。如果仍然有人在使用它,请立即升级,无论是从头开始还是可以按照以下简单程序无损升级到 13.10:http : //www.tecmint.com/upgrade-ubuntu-13-04-raring-ringtail -to-ubuntu-13-10-saucy-salamander/升级后系统会收到来自 13.10 的 heartbleed 补丁。

对于所有其他过时的 ubuntu 版本,这意味着基本上需要全新安装。

验证补丁是否已应用

本质上,运行openssl version -a并确保构建日期为 2014 年 4 月 7 日或之后,但请在此处查看更多信息

重启

确保重新启动依赖于 OpenSSL 的所有服务的最佳方法是重新启动

  • 14.04 [已收到补丁](http://changelogs.ubuntu.com/changelogs/pool/main/o/openssl/openssl_1.0.1f-1ubuntu2/changelog)。 (3认同)
  • 这取决于您使用的 Web 服务器以及更新方式。话虽如此,我不会担心删除现有连接,因为他们使用的是易受攻击的版本。 (2认同)

Mad*_*ter 14

RedHat 6.5 和 CentOS 6.5

这些都是脆弱的。 RedHat 的勘误 RHSA-2014-0376说有可用的修补库,任何受影响的人都应该尽早升级。

在撰写本文时,CentOS 还没有固定版本,但Karanbir Singh 在 CentOS-announce 上的帖子说他们已经制作了openssl-1.0.1e-16.el6_5.4.0.1具有可利用的 TLS的 openssl 的更新版本(请注意最后四位数字很重要)命令禁用,并且可以安全地应用它,因为它最终发布时将被固定版本覆盖。

暂时固定的版本似乎还没有出现在所有的镜像上,但它位于http://mirror.centos.org/centos/6/updates/x86_64/Packages/的主存储库中(对于i686)。

编辑:正如 Iain 所说,现在似乎有一个针对 C6.5 的完整补丁版本,而且它似乎已经被匆匆忙忙地推到了镜子里。yum update我的服务器直接得到了它;它是openssl-1.0.1e-16.el6_5.7

RH6 和 C6 6.5 之前的版本

这些都不是脆弱的。根据Red Hat 的这个建议

此问题不会影响 Red Hat Enterprise Linux 5 和 Red Hat Enterprise Linux 6.4 及更早版本附带的 openssl 版本。

Karanbir Singh 在 CentOS-announce 上的帖子对版本控制同样清楚:

今天早些时候,我们了解到 CentOS-6.5 中的 openssl 存在严重问题


jac*_*age 13

Debian Wheezy

Debian 已经发布了DSA-2896-1并且可以在此处获得修补库。此处提供了一个 shell 脚本。

1.补丁

Apt-get 存储库已更新,因此现在可以通过以下方式获得修补库 apt-get update && apt-get upgrade

apt-get upgrade libssl1.0.0 openssl
Run Code Online (Sandbox Code Playgroud)

或者(不推荐)可以手动升级软件包:

wget http://security.debian.org/pool/updates/main/o/openssl/libssl1.0.0-dbg_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/openssl_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/libssl-dev_1.0.1e-2+deb7u5_amd64.deb

dpkg -i openssl_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl1.0.0_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl1.0.0-dbg_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl-dev_1.0.1e-2+deb7u5_amd64.deb
Run Code Online (Sandbox Code Playgroud)

2. 重启服务器/服务

为了获得最佳保护,请重新启动整个服务器,或者如果服务器无法脱机,则重新启动所需的服务。

3. 检查 OpenSSL 版本

love@server:~$ openssl version
OpenSSL 1.0.1e 11 Feb 2013
love@server:~$ dpkg -l libssl1.0.0
||/ Name                    Version          Architecture     Description
+++-=======================-================-================-====================================================
ii  libssl1.0.0                 1.0.1e-2+deb7u6  amd64            SSL shared libraries
Run Code Online (Sandbox Code Playgroud)

  • @user568829 应用补丁 openssl 版本后仍会显示“OpenSSL 1.0.1e 2013 年 2 月 11 日”,因为补丁称为 1.0.1e-2。你可以用`dpkg -l openssl`检查它应该显示版本`1.0.1e-2+deb7u6` (2认同)
  • 我建议在更新 OpenSSL 后重新启动主机,不是因为这是绝对必要的,而是为了让您放心,至少动态加载 OpenSSL 库的所有内容都在使用新版本。(静态链接是另一回事。)也就是说,我认识到某些服务器无法在所有可以接受服务重启的情况下轻松重启。 (2认同)

Ouk*_*uki 9

FreeBSD 10.0或来自端口的openssl

FreeBSD的安全团队已经发布了关于咨询CVE-2014-0160(又名“心脏出血漏洞”)和:是FreeBSD-SA-14:06.openssl

  1. 更新 FreeBSD

    • 通过二进制补丁更新 FreeBSD

      i386amd64 平台上运行FreeBSD的RELEASE 版本的系统可以通过 freebsd-update(8) 实用程序更新:

      # freebsd-update fetch
      # freebsd-update install
      
      Run Code Online (Sandbox Code Playgroud)
    • 从源代码更新 FreeBSD

      1. 从以下位置下载相关补丁,并使用您的 PGP 实用程序验证分离的 PGP 签名。

        # fetch http://security.FreeBSD.org/patches/SA-14:06/openssl-10.patch
        # fetch http://security.FreeBSD.org/patches/SA-14:06/openssl-10.patch.asc
        # gpg --verify openssl-10.patch.asc
        
        Run Code Online (Sandbox Code Playgroud)
      2. 以 root 身份执行以下命令:

        # cd /usr/src
        # patch < /path/to/patch
        
        Run Code Online (Sandbox Code Playgroud)
      3. 重新编译操作系统

        使用在FreeBSD 手册中描述的buildworldinstallworld

  2. 使用最低版本1.0.1_10更新openssl端口

  3. 使用库重启所有守护进程,或者重启系统

  4. 假装您的系统已被入侵,重新发布所有 ssl 密钥和/或证书以及可能泄露的信息(请参阅EEAA更一般的答案)。

FreeBSD 9.x 和 FreeBSD 8.x

这些系统是不容易心脏出血漏洞默认情况下的问题,因为依靠旧0.9.x版本版本的OpenSSL库,除非你安装OpenSSL的 从端口(见楼上)。

如果这些系统不容易受到Heartbleed问题的影响,那么由于另一个本地漏洞而尽早升级您的系统可能是明智的(请参阅FreeBSD-SA-14:06.openssl和楼上的“FreeBSD 10.0”部分):

本地攻击者可能能够窥探签名过程并从中恢复签名密钥。[CVE-2014-0076]

注意

最初的Heartbleed 公告将 FreeBSD 8.4 和 9.1 列为潜在的漏洞。由于缺少Heartbeat Extension(默认 FreeBSD openssl 库为 0.9.x 版),情况并非如此。


200*_*ess 9

我想指出,私钥并不是唯一应该被视为受到威胁的资产。该错误有可能泄漏在与 OpenSSL 相同的地址空间(即相同的进程)中运行的任何内存。因此,如果您正在运行一个服务器进程,其中 OpenSSL 的易受攻击版本是静态或动态链接的,则该进程曾经处理过的任何信息,包括密码、信用卡号和其他个人数据,都应被视为可能受到损害。