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

截至今天,已发现OpenSSL中的一个错误影响版本1.0.11.0.1f (包括)和1.0.2-beta

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

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

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

这个bug被称为Heartbleed 。

我很脆弱吗?

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

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

如果您运行了暴露在Internet上的易受攻击的服务器,请考虑将其泄露,除非您的日志在2014-04-07发布后没有显示任何连接。 (这假定漏洞在宣布之前未被利用。)如果您的服务器仅在内部公开,您是否需要更改密钥将取决于其他安全措施。

有什么影响?

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

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

如何在服务器上恢复?

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

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

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

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

  5. 撤销旧证书。

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

    • 如果您正在运行允许密码身份validation的服务,那么在漏洞发布之前就已经连接的用户的密码应被视为已泄露。 (稍前,因为密码可能在内存中暂时未使用。)检查日志并更改任何受影响用户的密码。
    • 同时使所有会话cookie无效,因为它们可能已被盗用。
    • 客户端证书不会受到损害。
    • 从漏洞之前的一点点开始交换的任何数据都可能保留在服务器的内存中,因此可能已泄露给攻击者。
    • 如果有人记录了旧的SSL连接并检索了服务器的密钥,他们现在可以解密他们的记录。 (除非确保PFS – 如果你不知道,那不是。)

如何在客户端上恢复?

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

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

如果您在2014-04-07晚间UTC和升级OpenSSL库之间执行此操作,请考虑客户端进程内存中的任何数据都会受到损害。

参考

  • Heartbleed Bug (由两个独立发现错误的团队中的一个)
  • OpenSSL TLS心跳(Heartbleed)漏洞利用的确切工作原理是什么?
  • Heartbleed是否意味着每个SSL服务器都有新证书?
  • Heartbleed:什么是减轻它的选择?

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

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

这篇博客文章 。

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

对于那些不想进行服务器级软件包升级的人。 我今天阅读了一些这些指南和apt-get upgrade openssl === apt-get upgrade这将应用你的机器所需的所有安全修复程序。 太棒了,除非你明确地依赖某个旧的软件包版本。

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

  • 转到此地址并certificate您有漏洞。 您应该使用您的Web服务器的DIRECT EXTERNAL ADDRESS。 如果使用负载均衡器(例如ELB),则可能无法直接与Web服务器联系。

  • 运行以下1个衬垫以升级包并重新启动。 是的,我看到所有的导游说你应该有一个比2014年4月4日晚的时间戳,这对我来说似乎并非如此。

    apt-get update && apt-get install openssl libssl1.0.0 && /etc/init.d/apache2 restart

  • 确保安装了适当的软件包版本,并再次检查您的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 。 然后,重启受影响的服务。