OpenSSL今天曝出一严重Bug,牵连的版本非常多,多个linux发行版中招。
Bug详情
OpenSSL v1.0.1到1.0.1f中发现了一个非常严重bug(CVE-2014-0160),该bug允许攻击者读取存在bug的系统的64kb处理内存,暴露加密流量的密钥,用户的名字和密码,以及访问的内容。攻击者可以利用该bug窃听通信,直接从服务和用户窃取数据。OpenSSL已经发布了1.0.1g修正bug,Debian发行版也在半小时修复了bug,Fedora发布了一个权宜的修正方案。
该bug是在2011年引入到OpenSSL中,使用OpenSSL 0.9.8的发行版不受影响,但Debian Wheezy、Ubuntu 12.04.4、 Centos 6.5、Fedora 18、SuSE 12.2、OpenBSD 5.4、FreeBSD 8.4和NetBSD 5.0.2之后的版本都受到影响。如果你运行存在该bug的系统,那么最好废除所有密钥。【摘自OpenSSL严重bug允许攻击者读取64k内存,Debian半小时修复】
查看系统OpenSSL情况
openssl version -a
命令查看版本,如果发现版本号刚好处于v1.0.1到v1.0.1f间,恭喜!躺着中枪的感觉。赶紧升级版本吧!
升级
目前centos和ubuntu各软件源均未添加修复版升级,可自行去OpenSSL官网下载最新的1.0.1g
版本安装。
遇到问题,可参看:Openssl 升级遇到的问题,其他问题google即可。
详细解决方案
截止4月9日,各大安全厂商和平台陆续推出升级方案,这里总结如下:
存在此漏洞的版本OpenSSL 1.0.1 和OpenSSL 1.0.2-beta存在此漏洞,更老版本OpenSSL(1.0.0和0.9.8)不受影响 ,但官网有相关patch,所以建议升级。
检查相关服务是否有此漏洞:
修补方法:
- 如果为OpenSSL 1.0.1版本,应尽快升级到OpenSSL 1.0.1g(已修复漏洞)
- 无法立即升级的用户可以加-DOPENSSL_NO_HEARTBEATS参数重新编译OpenSSL
- 如果为OpenSSL 1.0.2-beta版本,建议暂时用OpenSSL 1.0.1g替代,等OpenSSL 1.0.2-beta2修复版本发布,再更新至OpenSSL 1.0.2-beta2
具体实施:
- 希望安装OpenSSL 1.0.1g,则按如下方式操作
1
2
3
4
5
6
7
8
9
10wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
tar -zxvf openssl-1.0.1g.tar.gz && cd openssl-1.0.1g/
./config
make && make install
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v
openssl version -a #验证版本正确升级
```
- 如果不方便立即升级,建议重新下载源码加-DOPENSSL_NO_HEARTBEATS参数编译安装(OpenSSL 1.0.1e为例)
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar -zxvf openssl-1.0.1e.tar.gz && cd openssl-1.0.1e/
./config -DOPENSSL_NO_HEARTBEATS
make && make install
echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
ldconfig -v
openssl version -a | grep DOPENSSL_NO_HEARTBEATS #验证版本正确升级1
2
- 确认依赖OpenSSL库的服务,例如nginx, apache等web服务,如果是静态编译了openssl库的,需要在升级完OpenSSL后重新编译服务程序,使用动态链接库的,需要重启一下服务
mv /usr/bin/openssl{,.OFF}
mv /usr/include/openssl{,.OFF}
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
ldconfig -v
openssl version -a #验证版本正确升级1
2
3
4
5
6
7
8
- 如果发现升级出现问题可以采用一下方法进行回滚OpenSSL
```shell
rm -rf /usr/bin/openssl /usr/include/openssl
mv /usr/bin/openssl{.OFF,}
mv /usr/include/openssl{.OFF,}
sed s#/usr/local/ssl/lib##g /etc/ld.so.conf
ldconfig -v