题 Heartbleed:什么是减轻它的选择?


这是一个 典型问题 关于理解和修复Heartbleed安全问题。

究竟什么是CVE-2014-0160 AKA“Heartbleed”?原因是什么,OpenSSL的操作系统和版本容易受到攻击,有什么症状,是否有任何方法可以检测到成功的漏洞利用?

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


204
2018-04-08 00:26




Heartbleed的缓解 涉及 更多 而不仅仅是新的钥匙。 (链接到我对Information Security StackExchange的回答) - scuzzy-delta
我听说了,但我认为EEAA非常全面地涵盖了以下内容。 - MadHatter
我同意:这是一个很好的答案,但是 heartbleed.com 我们非常努力地指出除了新的密钥对之外还有一些考虑因素 - 比如强制密码更改和会话失效。 - scuzzy-delta
@scuzzy-delta - 好点。我现在已经回答了CW,所以可以随意使用这些信息进行编辑/改进。 - EEAA
什么是最好的例子 - (不出所料)XKCD: xkcd.com/1354 - Wayne Werner


答案:


第一在吓坏之前,请确保您了解此漏洞是否真的适用于您。如果你有一台服务器,但实际上从未有过任何使用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和许多其他项目的治理和流程问题。许多开发人员只是拒绝代码审查,分析和扫描等实践。项目(2)正在IETF的TLS WG上讨论。看到 Heartbleed /协议复杂性

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

我不会推测这是不是真的是一个错误,或者可能是代表一个坏演员的一些代码。但是,为OpenSSL开发代码的人声称这是无意的。看到 引入严重“Heartbleed”安全漏洞的人否认他故意插入它

什么操作系统和OpenSSL版本易受攻击?

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

有什么症状,是否有任何检测成功利用的方法?

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

有证据表明Heartbleed早在2013年11月就在野外被积极开发。见EFF 狂野的心灵:智力机构是否在2013年11月使用Heartbleed? 据彭博社报道,在漏洞出现后不久,国家安全局已将该漏洞武器化。看到 美国国家安全局表示要多年来开发智能漏洞。然而,美国情报界否认彭博社的说法。看到 记录中的IC

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

如果 您正在系统上维护OpenSSL,然后您可以简单地发布 openssl version

$ openssl version
OpenSSL 1.0.1g 7 Apr 2014

如果 分发是维护OpenSSL,然后你可能无法确定由于使用反向修补而导致的OpenSSL版本 openssl 命令或包信息(例如, apt-getdpkgyum 要么 rpm)。大多数(所有?)发行版使用的后备修补过程仅使用基本版本号(例如,“1.0.1e”);并且  包括一个 有效的安全版本 (例如,“1.0.1g”)。

超级用户有一个未解决的问题,即在回调包时确定OpenSSL和其他包的有效安全性版本。不幸的是,没有有用的答案(除了检查发行版的网站)。看到 面对Backpatching时确定有效的安全版本?。

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

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

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

如何减轻此漏洞?

升级到非易受攻击版本并重置或重新保护易受攻击的数据。如上所述 心脏出血漏洞 网站,适当的响应步骤广泛:

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

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

我应该担心我的密钥或其他私人数据   妥协?我应该关注哪些其他副作用?

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

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

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

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


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


如果您是程序员并且对各种编程技巧感兴趣,例如通过OpenSSL检测Heartbleed攻击 msg_cb 回调,然后看OpenSSL的 安全咨询2014047


118
2018-04-08 04:23



+1为 关闭。下。您的。服务器。*  - 如果您在SSL非常重要的情况下执行任何操作,请将其关闭直至解决问题。另外不要忘记安装新证书(使用 新钥匙)在修补服务器之后 - 重用旧密钥(可能已被泄露)会破坏修补漏洞的整个目的...... - voretaq7
也  - 重新启动链接到OpenSSL库的任何服务。在不重新启动守护进程的情况下升级OpenSSL与完全不进行升级一样好。 - EEAA
确实 - 在任何类型的主要补丁(如OpenSSL)之后,我认为重启机器以确保您不会错过任何东西是一个很好的规则。 - voretaq7
其中一位测试人员是开源的: github.com/FiloSottile/Heartbleed - Riking
@EEAA,“关闭你的服务器”并不意味着你必须拉动电源。这意味着关闭(或重新配置以禁用ssl / tls)apache,或者正在进行服务的任何服务。 - psusi


XKCD对错误的简单解释:

XKCD 1354


42
2018-04-08 07:28





Ubuntu 12.04,12.10和13.10

Ubuntu发布了 USN-2165-1,表明现在可以在档案中使用更新的包。运行以下两个命令以获取修复程序。

sudo apt-get update
sudo apt-get upgrade

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

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

Ubuntu 10.04

这是LTS版本,仍然支持服务器版本并接收安全更新。但是,这个容易出错的漏洞并没有影响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的所有服务的最佳方法是 重启


36
2018-04-08 10:37



我不能说其他版本,但似乎有一个精确的补丁(12.04)。虽然我不能肯定地说这可以修复漏洞,但它至少在相关提交之后编译(Mon Apr 7 20:31:55 UTC 2014)。 - Calrion
@Calrion:OpenSSL的补丁或OpenSSL的Debian打包? OpenSSL已经修复并发布了新版本。 - Nathan Osman
openssl正在更新时,现有连接会发生什么?他们会被丢弃吗? - pdeva
这取决于您使用的Web服务器以及更新方式。话虽这么说,我不担心丢弃现有连接,因为他们使用的是易受攻击的版本。 - Nathan Osman
14.04 从那以后收到补丁。 - Seth


RedHat 6.5和CentOS 6.5

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

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

暂时修复的版本似乎还没有进入所有镜像,但是在主存储库中 http://mirror.centos.org/centos/6/updates/x86_64/Packages/ (和i686类似)。

编辑:正如Iain所说,现在看起来似乎是C6.5的完全修补版本,而且它似乎已经匆忙地绕过镜子了。直 yum update 得到它为我的服务器;它的 openssl-1.0.1e-16.el6_5.7

6.5之前的RH6和C6版本

这些并不脆弱。根据 来自红帽的这个咨询

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

Karanbir Singh向CentOS发布消息 版本控制同样清晰:

今天早些时候,我们发现了一个严重的问题   在CentOS-6.5中发布的openssl问题


14
2018-04-08 13:07



是不是 lists.centos.org/pipermail/centos-announce/2014-April/... 修复的发布? - Iain


Debian Wheezy

Debian已经过了 DSA-2896-1 和补丁库是 在这里。一个shell脚本是 在这里

1.补丁

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

apt-get upgrade libssl1.0.0 openssl

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

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

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

13
2018-04-08 11:23



如果您正在获取更新 wheezy/security 那你就会好起来的 apt-get update && apt-get upgrade。或者,使用交互式包管理器仅更新包 openssl, libssl1.0.0, libssl1.0.0-dbg 和 libssl-dev (安装在您的系统上)。 - α CVn
使用apt-get并没有解决我的问题 - 仍然显示OpenSSL 1.0.1e 2013年2月11日 - user568829
谢谢@ michael-kjorling,当我这样做时它不可用,但它是最安全和正确的升级方式。 - jacksoncage
应用补丁后,@ user568829 openssl版本仍会显示 OpenSSL 1.0.1e 11 Feb 2013 因为补丁被称为1.0.1e-2。你可以查看 dpkg -l openssl 它应该显示版本 1.0.1e-2+deb7u6 - jacksoncage
我建议在更新OpenSSL后重新启动主机,这不是因为它是绝对必要的,但是为了让您高枕无忧,至少所有动态加载OpenSSL库的东西都在使用新版本。 (静态链接是另一回事。)也就是说,我认识到在可能接受服务重启的所有情况下,某些服务器无法轻松重启。 - α CVn


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


9
2018-04-08 20:23





FreeBSD 10.0 要么 OpenSSL的 来自港口

FreeBSD安全团队 已发布有关CVE-2014-0160(又名“Heartbleed”)的咨询,并且: 是FreeBSD-SA-14:06.openssl

  1. 更新FreeBSD

    • 通过二进制补丁更新FreeBSD

      系统运行 发布版本 FreeBSD上的 I386 要么 AMD64 可以通过freebsd-update(8)实用程序更新平台:

      # freebsd-update fetch
      # freebsd-update install
      
    • 从源代码更新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
        
      2. 以root身份执行以下命令:

        # cd /usr/src
        # patch < /path/to/patch
        
      3. 重新编译操作系统

        运用 buildworld的 和 的installworld 如中描述的那样 FreeBSD手册

  2. 更新 OpenSSL的 最小版本的端口 1.0.1_10

  3. 使用库重新启动所有守护程序,或重新引导系统

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

FreeBSD 9.x和FreeBSD 8.x.

这些系统是 不易受伤害 到了 心脏出血漏洞 默认情况下,依赖于0.9.x版本的旧版本 OpenSSL的 图书馆, 除非 你安装了 OpenSSL的  来自港口 (见楼上)。

如果这些系统不易受到攻击 心脏出血漏洞 问题,由于另一个问题,升级你的系统可能比较快 本地 漏洞(见 是FreeBSD-SA-14:06.openssl 和楼上的“FreeBSD 10.0”部分):

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

注意

原本的 心脏出血漏洞 咨询列表FreeBSD 8.4和9.1可能存在漏洞。由于缺乏,这是不正确的 心跳扩展 (默认的FreeBSD openssl库是0.9.x版本)。


9
2018-04-11 08:03





我发现几乎无法确定我使用的几个设备上使用的SSL版本。虽然技术上不能缓解能够识别当前易受攻击的主机是我的首选。

我整理了一个小型VM,它将使用对任意主机和端口执行检查 FiloSottile的测试模块。初步一瞥,代码看起来很合理。

已完成的VM的发布是 这里。它是VMX格式。

警告的话

这个脚本和VM会 只要 显示系统的当前状态。完全有可能在过去的某个时刻,您的系统处于易受攻击状态并且可能被滥用。

这里出现的东西绝对是一个高优先级的修复,但确实如此  帮助您解决应用更新和更改所有密钥的问题。


3



我刚收到一封来自Snapt的电子邮件。 BOLO (留意) ! - Jacob


Amazon Linux(Amazon EC2中使用的Linux发行版)

https://aws.amazon.com/amazon-linux-ami/security-bulletins/ALAS-2014-320/

问题概述: 在OpenSSL处理TLS心跳扩展数据包的方式中找到了缺失的边界检查。此缺陷可用于从连接的客户端或服务器显示高达64k的内存。

受影响的版本: 安装了openssl 1.0.1的任何Amazon Linux AMI,任何Amazon Linux AMI 2013.03或更高版本,以及已升级到2013.03或更高版本的任何Amazon Linux AMI。默认情况下,OpenSSL安装在Amazon Linux AMI上。

受影响的包裹: OpenSSL的

问题更正: 运行yum update openssl以更新您的系统。安装新软件包后,您需要手动重新启动使用openssl的所有服务,或者重新启动实例。虽然新软件包仍然命名为openssl-1.0.1e,但它确实包含CVE-2014-0160的修复程序。

新包装: i686的:

openssl-1.0.1e-37.66.amzn1.i686

openssl-static-1.0.1e-37.66.amzn1.i686

openssl-perl-1.0.1e-37.66.amzn1.i686

openssl-devel-1.0.1e-37.66.amzn1.i686

openssl-debuginfo-1.0.1e-37.66.amzn1.i686

x86_64的:

openssl-devel-1.0.1e-37.66.amzn1.x86_64

openssl-1.0.1e-37.66.amzn1.x86_64

openssl-debuginfo-1.0.1e-37.66.amzn1.x86_64

openssl-perl-1.0.1e-37.66.amzn1.x86_64

openssl-static-1.0.1e-37.66.amzn1.x86_64

2