保护你的服务器不受Heartbleed OpenSSL漏洞的威胁

保护你的服务器不受Heartbleed OpenSSL漏洞的威胁

提供:ZStack社区

SSL出现重大安全隐患

2014年4月7日,号称互联网史上最糟糕的一个安全漏洞被披露。该漏洞涉及OpenSSL,名字叫做Heartbleed。Heartbleed漏洞在OpenSSL 1.0.1版本被引入,该版本自从2012年3月开始被广泛使用,直到2014年4月7日被披露同时发出的1.0.1g版本才提供了该漏洞的补丁。有关该漏洞的详细说明可参考这个CVE-2014-0160的问题报告

该bug的存在让攻击者可以读取相关服务器的内存,从而获取该服务器上被使用过的任何密钥的内容。各个发行版目前都推出了打过补丁的更新(译注:本文撰写于2014年4月8日),以供用户下载更新,然而用户仍然拉取更新到本地,并处理之前可能被泄露的所有密钥。

本文介绍如何将系统更新至最新的安全版本的OpenSSL,并处理可能已经不再安全的SSL证书。最后,测试一下你的服务器是否已经对Heartbleed免疫。

更新系统

如果你使用的发行版已经更新了其OpenSSL软件包,则最简单的方法就是做一次整体的系统更新。

Ubuntu和Debian用户可以用如下命令:

sudo apt-get update
sudo apt-get dist-upgrade

如果你只想单独更新OpenSSL而不想更新整个系统(不推荐,除非你担心系统会在更新其他组件之后变得不稳定),则可以输入如下命令:

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

该命令将仅仅更新涉及Heartbleed漏洞的软件,而不更新其他的系统组件。

CentOS和Fedora用户可以输入如下命令更新整个系统:

yum update

或输入如下命令更新OpenSSL:

yum update openssl

或者,你也可以手动构建OpenSSL软件包。64位Fedora可使用如下命令:

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

32位Fedora可使用如下命令:

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

Arch Linux用户可输入如下命令更新整个系统:

sudo pacman -Syu

由于Arch Linux容易在单独更新软件包后变得不稳定,所以这里不介绍单独更新OpenSSL的做法。

至此,你的系统就完成了补丁。在系统更新运行过程中,你应该能看到 openssl 出现在更新列表中。

更新完毕后,重启系统以确保系统内存中使用的是新版本的OpenSSL:

sudo shutdown -r now

检查版本号

系统更新重启完毕后,请检查你的OpenSSL版本。

针对Heartbleed漏洞的官方补丁版本是OpenSSL 1.0.1g,不过不同的发行版可能会使用不同的版本号。有的发行版直接在老版本的OpenSSL上打补丁,而不是更新整个软件包。

因此,最好是通过发行版的软件包系统来进行这个检查,而不是使用openssl version命令。

Debian / Ubuntu

Debian和Ubuntu用户可以使用如下命令进行检查:

dpkg -l | grep "openssl"

你看到的结果应该是这样的:

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

不同的Debian版本显示的结果:

  • Debian 6 (Squeeze):不受该漏洞影响(该版本的发布时间在Heartbleed漏洞引入之前)
  • Debian 7 (Wheezy):1.0.1e-2+deb7u6
  • Debian testing (Jessie):1.0.1g-1
  • Debian unstable (Sid):1.0.1g-1

不同的Ubuntu版本显示的结果:

  • Ubuntu 10.04: 不受该漏洞影响(该版本的发布时间在Heartbleed漏洞引入之前)
  • 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版本:

rpm -q -a | grep "openssl"

输出结果如下:

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

CentOS各版本显示的结果(以下输出忽略了后面的32位/64位相关信息):

  • CentOS 5: 不受该漏洞影响(该版本的发布时间在Heartbleed漏洞引入之前)
  • CentOS 6: openssl-1.0.1e-16.el6.5.7

Fedora各版本显示的结果:

  • Fedora 17: 不受该漏洞影响(该版本的发布时间在Heartbleed漏洞引入之前)
  • Fedora 19: openssl-1.0.1e-37.fc19.1

注:Fedora使用了“.1”后缀来代表是否打过补丁。如果你的输出结果没有“.1”后缀,则代表尚未打过补丁。

Arch Linux

在Arch Linux上进行检查要简单一些,因为这个发行版没有那么多版本。

用如下命令检查OpenSSL版本:

pacman -Q | grep "openssl"

应该输出的结果:

openssl 1.0.1.g-1

当然,如果你的OpenSSL版本比上面的版本高,你也是安全的。

SSL证书/密钥的废除与更新

我们现在已经在系统上完成了OpenSSL的更新。如果你从供应商处购买过SSL证书,则需要废除(revoke)之前的密钥,重新注册(reissue)新的密钥。这个过程一般叫做“密钥更新(rekeying)”。

不同的SSL证书供应商为该过程提供了不同的服务方式。一般来说,如果你到供应商的后台界面,这个功能应该叫做“rekey”或者“reissue keys”。大部分供应商在进行rekey的同时就会废除之前的密钥,当然你也可以手动进行废除的操作。

供应商的后台会一步一步指引你完成整个过程,包括如何生成CSR的方式。

如果供应商的指南没有提供具体的openssl命令,则可以参考下面的这行命令(需要在sudo下执行):

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

你需要把生成的CSR复制到供应商的后台界面中以完成rekey的动作。然后,就可以下载新的证书了。

新的密钥需要跟旧的密钥安装在同样的位置。不同的发行版会有不同的密钥保存目录,比较常见的是/etc/ssl/certs这个目录,也有可能在Web服务器目录下。

Apache用户可以打开Apache的主配置文件,查询下面这几项内容:

SSLEngine on
SSLCertificateFile /path/to/your_domain.crt
SSLCertificateKeyFile /path/to/your_key.key
SSLCertificateChainFile /path/to/CA.crt

Nginx用户可以打开Nginx的配置文件,查询下面这几项内容:

server {
    . . .
    ssl_certificate /path/to/your_domain.crt;
    ssl_certificate_key /path/to/your_key.key;
    . . .
}

如果你在上面这些地方都没找到,也可以查询你的发行版提供的文档,或者在本地文件系统做一次搜索。

证书密钥更新完毕后,重启Web服务器以使新密钥生效。

Debian和Ubuntu用户可以使用下面的命令:

sudo service apache2 restart    # Apache
sudo service nginx restart      # Nginx

CentOS和Fedora用户可以使用下面的命令:

sudo service httpd restart      # Apache
sudo service nginx restart      # Nginx

Arch Linux用户可以使用下面的命令:

sudo systemctl restart httpd.service
sudo systemctl restart nginx.service

以上,你的Web服务器应该已经在使用新的证书运行了。

普通用户的角度

由于本次漏洞影响范围广泛,作为一个普通的互联网用户,你也需要做一定的防范,以避免威胁到你的个人账户信息。

我们可以假设,之前你通过SSL登陆过的网站可能都已经遭受了Heartbleed的侵害,这意味着之前的登陆过程可能已经被泄露。

首先,你可以在你确定已经打过补丁的网站上更新你的密码。如果你更新密码的时候该网站还没打过补丁,那么新密码也跟旧密码一样不可靠。

然后是你之前设置过的VPN。VPN连接的实现方法不止一个,不过SSL是最流行的一种方式。比如OpenVPN用的就是SSL。任何与服务器连接的证书都最好重新生成,把旧的废弃,换用新的。

你也可以考虑将所有的进程密钥和cookie都删掉。这包括你在各个网站上的API key,你的浏览器里的cookie等等。一时之间这会造成很多不方便,然而为了安全这也是值得的。毕竟,一个没打过补丁的SSL网站几乎跟没用过SSL的普通网站一样的不安全。

总结

Heartbleed是一个严重的bug,任何管理员和用户都务必要针对这个bug展开防护措施。系统管理员应当立刻更新其系统并告知用户其中的风险,进行必要的用户端防护。

更新系统并更新过SSL证书之后,你的系统已经对Heartbleed漏洞免疫,可以继续提供安全的加密访问能力。

本文来源自DigitalOcean Community。英文原文:How to Protect Your Server Against the Heartbleed OpenSSL Vulnerability by Justin Ellingwood

翻译:lazycai

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值