「互联网大事记」OpenSSL HeartBleed

Published on:

这几天OpenSSL的HeartBleed漏洞算是互联网的大事,详情


关于这个漏洞我大概了解了一下,做个记录:

  • 只影响使用https的服务
  • 受影响的版本是OpenSSL 1.0.1 版至 1.0.1f 版, 1.0.1之前的版本不受影响,为此,OpenSSL更新到了1.0.1g
  • 官方漏洞名称为:CVE-2014-0160
  • 如果网站配置了一项名为「perfect forward secrecy」的功能,则影响会大幅减少,但还不如升级到最新OpenSSL版本
  • 该漏洞已被利用2年之久。
  • 利用该漏洞可以读取服务器内容中64k数据,可以不断反复获取,获取的内容可能包含cookie、明文帐号密码。
  • 这有一个Ruby脚本,用于检测你的网站是否受此漏洞影响: heartbeat

升级OpenSSL

用本地mac开发机做示例(当然,重要的是你应该在HTTPS服务器上面升级):

brew update
brew install openssl
brew link --force openssl

rm /usr/bin/openssl
ln -s /usr/local/Cellar/openssl/1.0.1g/bin/openssl /usr/local/bin

openssl version -a

Rubyist该怎么办?

Ruby官方已经给出解决方法

执行下面命令来验证链接到Ruby的OpenSSL版本:

ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'

执行下面命令验证Ruby 中 OpenSSL 库的版本:

ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'

如果发现你的Ruby用的是受漏洞影响的OpenSSL,那么你就需要重新编译安装Ruby了。

$ ./configure --with-openssl-dir=/path/to/openssl
$ make
$ make install

很多人服务器上使用了rbenv或rvm, 那么则需要依赖rbenv和rvm来更新Ruby,当然前提是升级到OpenSSL 1.0.1g版本。

rbenv ruby-build
rvm config
phusion-passenger


漏洞攻击原理简要描述

  • 正常情况:程序读取数据长度,根据长度读取数据内容,然后原封不动地把数据内容发回给用户
  • 黑客发一段恶意数据,长度为64k,但是实际的数据内容远小于64k, 比如1byte,这种情况下,server就会把内存后续的[64K-1]长度的数据“原封不动”地发回给黑客
  • 可以不段的反复发送恶意数据,sever发回的数据可能包含其他用户的明文密码

这个过程有点像用沾满蜂蜜的筷子捅向一大堆芝麻粒,每次都能粘很多芝麻回来。各大提供HTTPS服务的网站的内存块,就变成了这样的芝麻。

Comments

comments powered by Disqus