漏洞概述
SSL3.0是已过时且不安全的协议,目前已被TLS 1.0,TLS 1.1,TLS 1.2替代,因为兼容性原因,大多数的TLS实现依然兼容SSL3.0。为了通用性的考虑,目前多数浏览器版本都支持SSL3.0,TLS协议的握手阶段包含了版本协商步骤,一般来说,客户端和服务器端的最新的协议版本将会被使用。其在与服务器端的握手阶段进行版本协商的时,首先提供其所支持协议的最新版本,若该握手失败,则尝试以较旧的协议版本协商。能够实施中间人攻击的攻击者通过使受影响版本浏览器与服务器端使用较新协议的协商的连接失败,可以成功实现降级攻击,从而使得客户端与服务器端使用不安全的SSL3.0进行通信,此时,由于SSL 3.0使用的CBC块加密的实现存在漏洞,攻击者可以成功破解SSL连接的加密信息,比如获取用户cookie数据。这种攻击被称为POODL攻击(Padding Oracle On Downgraded Legacy Encryption)。此漏洞影响绝大多数SSL服务器和客户端,影响范围广泛。但攻击者如要利用成功,需要能够控制客户端和服务器之间的数据(执行中间人攻击)。该漏洞来自于SSLv3本身使用的算法RC4的缺陷,不是实现问题,该漏洞无法修复,只能将SSLv3当作不安全协议禁用,强制使用TLS。
Windows从Windows XP开始,在操作系统层面提供了SSL和TLS支持。使用Windows本身安全服务的软件可以支持TLS,对于浏览器,运行在Windows XP或者更新系统上所有主流浏览器均支持TLS协议。
Mac OS X系统经测试至少从10.6(Snow Leopard)版本开始,Safari支持TLS协议。iOS系统至少从5.0版本开始支持TLS 1.2协议,即iPhone 4S以及更新版本的iPhone均支持TLS协议。
Android系统也在系统层面上支持TLS协议,并从第一个版本开始就支持TLS,在开发手册中也警告了使用SSL协议的危险性。
从这些基本情况分析,禁用SSLv3对于主流系统和浏览器通过HTTPS访问客户网站的方式影响不大,但是如果有客户端强制通过SSLv3而没有实现TLS方式的加密传输,将可能有较大的影响,具体影响需要看客户对HTTPS的使用场景。
如何修复 POODLE SSLv3 安全漏洞 (CVE-2014-3566)
这个漏洞和之前的 B.E.A.S.T (Browser Exploit Against SSL TLS) 非常相似,但是目前还没有可靠的解决办法,除非完全禁用 SSLv3 的支持。简单的说,攻击者可获取你加密流中的明文数据。
还是让我们来看看如何处理吧,Mozilla Security Wiki Serverside TLS 之前建议使用严格的协议和加密方法限制,值得我们注意。
Apache
在Apache 的 SSL 配置中禁用 SSLv3 和 SSLv3:
SSLProtocol all -SSLv2 -SSLv3
Nginx
在 Nginx 只允许使用 TLS 协议:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
MySQL
值得注意的是,除非你在 MySQL 5.6 中部署 sha256_password 插件,plugin for MySQL 5.6 就会在验证握手之前必须完成SSL/TLS连接协商,因此这种攻击向量只成为一个问题 —— 有效的登录访问的数据流。( sha256_password 提供一个选项使用 SSL/TLS 的认证)
这使得事情变得更加有趣,和 Apache 和 Nginx 不同的是,没有方法来完全启用和禁用 SSL/TLS 协议,但可以 指定 SSL 通讯的加密规范.
要在 MySQL 删除 SSLv3 的支持,你只需要确定在配置中不使用 SSLv3 加密。
在这个 bug 中你可以找到 SSLv3 加密方法列表:
openssl ciphers -v 'DEFAULT' | awk '/SSLv3 Kx=(RSA|DH|DH(512))/ { print $1 }' DHE-RSA-AES256-SHA DHE-DSS-AES256-SHA DHE-RSA-CAMELLIA256-SHA DHE-DSS-CAMELLIA256-SHA AES256-SHA CAMELLIA256-SHA EDH-RSA-DES-CBC3-SHA EDH-DSS-DES-CBC3-SHA DES-CBC3-SHA DHE-RSA-AES128-SHA DHE-DSS-AES128-SHA DHE-RSA-SEED-SHA DHE-DSS-SEED-SHA DHE-RSA-CAMELLIA128-SHA DHE-DSS-CAMELLIA128-SHA AES128-SHA SEED-SHA CAMELLIA128-SHA RC4-SHA RC4-MD5 EDH-RSA-DES-CBC-SHA EDH-DSS-DES-CBC-SHA DES-CBC-SHA EXP-EDH-RSA-DES-CBC-SHA EXP-EDH-DSS-DES-CBC-SHA EXP-DES-CBC-SHA EXP-RC2-CBC-MD5 EXP-RC4-MD5
删除 ssl-cipher 配置中的上述信息就可以禁用 SSLv3 支持。当然,确保 MySQL 服务不提供一般访问是迄今为止对抗 CVE-2014-3566 漏洞最重要的一个步骤。
你可以通过 这里 了解更多关于 POODLE 的资讯。
以下脚本可以识别你的服务是否提供没有密码的 SSLv3 支持:
mysql -se “SHOW STATUS LIKE ‘Ssl_cipher_list'” | sed ‘s/:/n/g’ | sed ‘s/Ssl_cipher_listss//g’ | while read sspec; do SPEC=openssl ciphers -v “$sspec” 2>/dev/null | grep -v SSLv3 | awk ‘{print $1}'; [[ "$sspec" == "$SPEC" ]] && mysql –ssl-cipher=$sspec -e QUIT 2>/dev/null && echo “$sspec OK”; done
via percona