如何保护服务器免受心脏出血 OpenSSL 漏洞的侵害

SSL安全漏洞

2014年4月7日星期一,一个被称为近期互联网历史上最糟糕的安全漏洞之一的OpenSSL漏洞被披露,该漏洞被称为Heartbleed漏洞,在OpenSSL版本 1.0.1中引入。

该错误允许任何攻击者读取易受攻击的主机的记忆,这意味着在具有易受攻击的OpenSSL版本的主机上使用的任何密钥都应该被视为受损。

我们将向您展示如何更新您的系统使用安全版本的OpenSSL,撤销任何不安全的SSL证书,并测试您是否脆弱。

更新您的系统

DigitalOcean 镜子正在更新,以包括 OpenSSL 包的最新版本,因为它们由分发包装提供。

在 Ubuntu 和 Debian 上,您可以通过键入以下方式进行更新:

1sudo apt-get update
2sudo apt-get dist-upgrade

如果您只想升级受影响的软件包,而不是更新整个系统(如果您有理由相信升级到其他组件会破坏您的系统),您可以选择性地升级 OpenSSL 软件包,键入:

1sudo apt-get install --only-upgrade openssl
2sudo apt-get install --only-upgrade libssl1.0.0

这将升级易受攻击的软件包,同时将其余的系统留在未升级的状态。

在 CentOS 和 Fedora 上,您可以输入以下信息来更新整个系统:

1yum update

如果您只想升级受影响的软件包,您可以发出以下命令:

1yum update openssl

再次,如果您有没有更新完整系统的具体原因,则仅建议这样做。

在写这篇文章时(8月4日14日),Fedora 19尚未在稳定存储库中拥有最新版本,您可以等待更新被接受,但您也可以继续手动构建包。

对于 64 位系统:

1yum -y install koji
2koji download-build --arch=x86_64 openssl-1.0.1e-37.fc19.1
3yum localinstall openssl-1.0.1e-37.fc19.1.x86_64.rpm

您可以通过键入以下方式对 32 位 Fedora 19 系统做同样的事情:

1yum -y install koji
2koji download-build --arch=i686 openssl-1.0.1e-37.fc19.1
3yum localinstall openssl-1.0.1e-37.fc19.1.i686.rpm

在Arch Linux上,可以通过键入更新包:

1sudo pacman -Syu

如果您选择性地更新包,Arch Linux系统可能会变得非常不稳定,所以我们不建议您只更新OpenSSL包。

这应该引入所有最近的更新,包括OpenSSL,如果您指向的镜子已经引入了最新的包,您应该在升级包列表中看到openssl或某种变体。

完成后,您应该重新启动您的计算机,以确保您的服务器不使用已载入内存的旧版本。

1sudo shutdown -r now

查看您的版本号码

您应该在更新系统后检查您的 OpenSSL 版本。

虽然OpenSSL版本 1.0.1g 是此问题的官方解决方案,但解决此问题的版本对于不同的发行版和发行版可能会有所不同。

出于这个原因,最好检查您的分销商的包装系统,因为openssl版本命令可能不反映我们需要的信息。

Debian 和 Ubuntu 发布和修复版本

对于 Debian 和 Ubuntu 系统,您可以通过键入以下方式获取您的 OpenSSL 包的当前版本:

1dpkg -l | grep "openssl"

你应该得到这样的输出:

1ii openssl 1.0.1e-2+deb7u6 amd64 Secure Socket Layer (SSL) binary and related cryptographic tools

对于 Debian 用户来说,您正在运行的 Debian 版本将决定正确的版本,如果您的 OpenSSL 版本至少与您的发行中列出的版本一样新,您应该受到保护:

  • Debian 6 (Squeeze):未受影响(在漏洞发生之前发货)
  • Debian 7 (Wheezy): 1.0.1e-2+deb7u6
  • Debian测试(Jessie): 1.0.1g-1
  • Debian不稳定(Sid): 1.0.1g-1

对于Ubuntu用户来说,正确的修补版本也取决于版本。 使用此列表来查看您的版本的最低安全版本:

  • Ubuntu 10.04:未受影响(在漏洞之前发送的旧版本)
  • Ubuntu 12.04: 1.0.1-4ubuntu5.12
  • Ubuntu 12.10: 1.0.1c-3ubuntu2.7
  • Ubuntu 13.04:生命终止支持,应升级
  • Ubuntu 13.10: 1.0.1e-3ubuntu1.2

如果您的发行版不再受支持(Ubuntu 13.04),建议您由于这个错误的严重程度而过渡到受支持的操作系统。

CentOS 和 Fedora 发布和修复版本

对于 CentOS 和 Fedora 系统,您可以通过键入来查询系统上安装的 OpenSSL 软件包的版本:

1rpm -q -a | grep "openssl"

你应该得到一个看起来像这样的输出:

1openssl-1.0.1e-16.el6_5.7.x86_64

对于CentOS,以下是必须应用的OpenSSL的版本和最低版本,以保护未来的SSL交互。

  • CentOS 5:未受影响(在漏洞发生之前发货)
  • CentOS 6: openssl-1.0.1e-16.el6.5.7

对于 Fedora 用户来说,您可以检查您的软件包版本是否至少与下面列出的版本相同。

  • Fedora 17:未受影响(在漏洞发生之前发送的旧版本)
  • Fedora 19: openssl-1.0.1e-37.fc19.1

** 注意**:注意 Fedora 版本号. 后台.1告诉你是否已被修补,如果你的包末尾没有.1,你仍然脆弱!

Arch Linux 修复版本

如果你正在运行Arch Linux,验证就更容易了,因为没有多个版本。

您可以检查您已安装的 OpenSSL 版本:

1pacman -Q | grep "openssl"

你应该得到一个看起来像这样的输出:

1openssl 1.0.1.g-1

如果你的安装版本是这个版本或更高版本,你没事。

取消和重新发行您的 SSL 证书 / 密钥

如果您从提供商那里购买了SSL证书,并在服务器上更新了您的OpenSSL包,则需要撤销旧密钥,并重新发行新密钥。

这个过程非常取决于发出您的初始证书的SSL服务,但您应该搜索他们的管理界面,以寻找类似于重新发行重新发行密钥的选项。

遵循您的SSL提供商给您的指示,他们可能会为您提供如何重建CSR的非常具体的指示,或者他们可能不会。

如果他们不为您提供他们希望您使用的具体openssl命令,您可以通过键入这样的东西来生成新的SSL CSR。

openssl req -new -newkey rsa:2048 -nodes -keyout hostname.key -out hostname.csr

您将需要将生成的 CSR 复制到您的服务器提供商的 Web 接口后,以便重新锁定您的服务器。

您将不得不将新密钥安装到旧密钥和证书保存在的相同位置。您需要使用的证书和密钥的路径将因分布和您如何配置 Web 服务器而有所不同。

例如,如果您正在使用 Apache 网页服务器,您应该在您的主 Apache 配置文件中看到一行,一个 virtualhost 文件,或一个单独源的配置文件,指向其搜索您的 SSL 信息的位置:

1SSLEngine on
2SSLCertificateFile /path/to/your_domain.crt
3SSLCertificateKeyFile /path/to/your_key.key
4SSLCertificateChainFile /path/to/CA.crt

这些可能看起来不同,但它们应该向您指向正确的方向,以找到您的SSL证书位置。

如果你正在使用 Nginx,你会发现类似的指南,指向你的服务器的SSL证书和密钥。

1server {
2    . . .
3    ssl_certificate /path/to/your_domain.crt;
4    ssl_certificate_key /path/to/your_key.key;
5    . . .
6}

另一种选择是检查您的分布的文档或检查您的服务器的文件系统,以了解您的证书存储在哪里。

当你完成时,你应该重新启动你的网页服务器使用新的密钥. 这样做的方式将因分布和服务器而异。

在 Debian 或 Ubuntu 上,您可以通过键入以下方式重新启动您的 Web 服务器:

1sudo service apache2 restart    # For Apache web server
2sudo service nginx restart      # For Nginx web server

在 CentOS 或 Fedora 上,您可以通过键入以下方式重新启动:

1sudo service httpd restart      # For Apache web server
2sudo service nginx restart      # For Nginx web server

对于Arch Linux,你应该使用这样的东西:

1sudo systemctl restart httpd.service
2sudo systemctl restart nginx.service

这应该允许您的 Web 服务器接收您的新证书更改。

从客户的角度进一步考虑

由于这个错误的普遍性,你还应该考虑其他因素,作为网页服务和网站的消费者,你也应该迅速做出反应,以尽量减少对你的帐户和信息的潜在损害。

您应该考虑之前通过SSL保护的任何通信都被这个错误破坏了,这意味着任何与安全网站的互动都可能受到欺诈。

一个很好的第一步是,在您使用的每个网站上更改您的密码,**在您验证他们已经更新了他们的OpenSSL版本以修补此漏洞后。

一个非常重要的考虑是确保您已设置的任何VPN实例。VPN连接的实现方式有几种,但SSL是最受欢迎的。例如,OpenVPN使用SSL。

另一个很好的措施是删除所有会话密钥和cookie,这意味着再生API密钥,清除存储在您的浏览器中的cookie等这可能是一个巨大的不便,但现在不经历这些痛苦的成本是您的帐户基本上是广泛开放的,并且与未更新OpenSSL的远程服务器的通信不应该被认为比简单文本更安全。

结论

这是一个非常大的漏洞,用户和管理员无法忽略或推迟,您应该立即更新您控制的任何服务器,并通知用户的漏洞,以便他们可以从头开始进行损坏控制。

通过补丁您的系统和更新您的SSL证书,您应该被保护免受这个漏洞,作为一个主机,为未来的通信。

By Justin Ellingwood
Published At
Categories with 技术
Tagged with
comments powered by Disqus