2014年10月15日,Google发布了一份关于SSLv3 “POODLE”的高危漏洞(漏洞编号CVE-2014-3566)的简要分析报告。根据Google的说法,该漏洞贯穿于所有的SSLv3版本中,利用该漏洞,***可以通过中间人***等类似的方式(只要劫持到的数据加密两端均使用SSL3.0),便可以成功获取到传输数据(例如cookies)。

  • 漏洞说明

  • 利用场景

  • 修复方法

  • 背景知识

  •   ssl协议

  •   sslv3协议

  • 与Heartbleed漏洞有何区别

漏洞说明:

  当用户的浏览器使用更新版本的安全协议与服务器进行连接,如果遇到 bug 导致连接失败,会转而尝试更老版本的安全协议进行连接,「更老版本」就包括有 SSL 3.0。也即意味着,***完全有能力在***一个服务器/单一用户的时候故意制造连接失败的情况,触发浏览器的机制使用 SSL 3.0,并且从中获取用户/服务器端的关键信息。

 ***者在此漏洞利用中扮演一种中间人的角色,比如A,C进行通信,B(***者)在中间作为一个代理,B截获A,C之间的通信后经过SSLv3加密后的数据包, 在SSLv3工作在CBC(cipher-block chaining密文块串联)加密模式的情况下利用SSLv3中存在的漏洞,解密得到其数据包的明文信息,而这些明文信息极有可能是用户的隐私数据,比如Cookie,这样***者就可以拿到这些隐私数据,进行更深层次的***。 

 1)HTTPS通信双方均使用了SSLv3协议,且加密算法采用CBC模式的块加密; 

 2)***者通过控制受害者发起特意构造的https请求,截获并修改加密后的请求; 

利用场景:

公共场所的免费WiFi,安全防范薄弱的家用路由器

修复方法:

  Google的建议:关闭客户端SSLv3支持或者服务器SSLv3支持或者两者全部关闭。

  建议支持TLS_FALLBACK_SCSV,这可以解决重试连接失败的问题,从而防止***者强制浏览器使用SSL3.0, 它还可以防止降级到TLS1.2至1.1或1.0,可能有助于防止未来的***。

 

1)如果要完全避免此漏洞,需要禁止使用SSLv3协议; 

2)考虑到老版本浏览器(如IE6)的默认设置为SSLv3协议,如果直接禁用SSLv3协议,将导致这批采用默认设置的用户无法访问对应网站,可以采用通过修改webserver的SSL配置来修复这个问题,配置实现的效果是客户端通过SSLv3协议访问https业务时双方使用RC4-SHA加密,而采用TLS1.0或更高版本协议时优先使用其他强加密算法。 

3)某些移动客户端访问的应用在禁止SSLv3或更改SSL配置时,需要考虑到移动客户端中是否指定了使用SSLv3协议或者采用CBC模式的块加密,如果有这个问题则需要先修改客户端的实现才能执行修复方案,否则移动客户端的访问将受影响。 

所有支持SSLV3协议的软件都受这个漏洞影响,可以通过如下的工具来检查是否支持sslv3协议

http://sourceforge.net/projects/sslscan/

https://wiki.mozilla.org/Security/Server_Side_TLS

服务端SSL支持检测:https://www.ssllabs.com/ssltest/index.html

本地SSLv3支持检测:https://www.ssllabs.com/ssltest/viewMyClient.html

禁止使用SSLv3协议配置: 

nginx 

修改应用原SSL配置文件中的ssl_protocols以及ssl_ciphers 

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-RC4-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA256:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS; 

 

apache 

修改应用原SSL配置文件中SSLProtocol 以及SSLCipherSuite 

SSLProtocol all -SSLv3 -SSLv2 

SSLCipherSuite  ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-RC4-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA256:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS 

 

 

不禁止SSLv3协议,去除SSLv3支持的CBC模式的块加密算法配置: 

nginx 

修改应用原SSL配置文件中的ssl_protocols以及ssl_ciphers 

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-RC4-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA256:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS; 

apache 

修改应用原SSL配置文件中SSLProtocol 以及SSLCipherSuite 

SSLProtocol all -SSLv2 

SSLCipherSuite  ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-RC4-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA256:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS 

特别提示:修复完成后请务必重启Apache和Nginx服务使修复生效。 

客户端:浏览器禁用SSLv3协议支持

1、IE浏览器

1)点击浏览器右上角的“工具”选项,选择“Internet选项”

2)选择“高级”

3)找到“使用SSL3.0”的设置,将方框里的“勾”去掉

4)点击“确定”保存

2、Chrome浏览器

Windows系统用户设置方法:

1)完全关闭 Chrome 浏览器

2)复制一个平时打开 Chrome 浏览器的快捷方式

3)在新的快捷方式上右键点击,进入属性

4)在「目标」后面的空格中字段的末尾输入以下命令 --ssl-version-min=tls1

Mac OS X系统用户设置方法:

1)完全关闭 Chrome 浏览器

2)找到本机自带的终端(Terminal)

3)输入以下命令:/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ssl-version-min=tls1

Linux系统用户设置方法:

1)完全关闭 Chrome 浏览器

2)在终端中输入以下命令:google-chrome—ssl-version-min=tls1

3、Firefox 浏览器用户可以进入“关于:设置”,方法是在地址栏输入 about:config,然后将 security.tls.version.min 调至 1。

安全是一个永无止境的进程,因此时刻保持清醒并随时做好处理任何变化的准备是很重要的。另外,还要时刻关注一些信息,例如, Mozilla的推荐密码套件和SSL/TLS最佳部署方案。

特别提示:客户端修复完成后请务必重启 浏览器 使修复生效。 

背景知识:

ssl协议:

TLS 和 SSL 是两个密切相关的协议, 均用于保证两个主机之间通信数据的机密性与完整性。

TLS或 SSL 可为已存在的应用层协议(例如. HTTP, LDAP, FTP, SMTP 及其他),添加一个安全层。它同样可以用于创建×××解决方案(例如, Open×××).

SSL 协议于1994年由Netscape开发。1996年,SSL 3.0 (最后版本)被发布。IETF 基于此协议进行了开发,取名为TLS。1999年,IETF在RFC2246中发布TLS 1.0。

TLS 或 SSL 协议,由多层构成. 最接近它的上层协议是可信传输协议(例如: TCP). 它可用于封装较高层次的协议。

TLS和SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同。

 sslv3(SSL 3.0)协议:

   SSL 3.0 improved upon SSL 2.0 by adding SHA-1–based ciphers and support for certificate authentication.

From a security standpoint, SSL 3.0 should be considered less desirable than TLS 1.0. The SSL 3.0 cipher suites have a weaker key derivation process; half of the master key that is established is fully dependent on the MD5 hash function, which is not resistant to collisions and is, therefore, not considered secure. Under TLS 1.0, the master key that is established depends on both MD5 and SHA-1 so its derivation process is not currently considered weak. It is for this reason that SSL 3.0 implementations cannot be validated under FIPS 140-2.[113]

In October 2014, the vulnerability in the design of SSL 3.0 has been reported, which makes CBC mode of operation with SSL 3.0 vulnerable to the padding attack (see #POODLE attack). 

与heartbleed漏洞有何区别

2014年4月7日OpenSSL发布了安全公告,在OpenSSL1.0.1版本中存在严重漏洞(CVE-2014-0160)。

OpenSSL Heartbleed模块存在一个BUG,问题存在于ssl/dl_both.c文件中的心跳部分,当***者构造一个特殊的数据包,满足用户心跳包中无法提供足够多的数据会导致memcpy函数把SSLv3记录之后的数据直接输出,该漏洞导致***者可以远程读取存在漏洞版本的OpenSSL服务器内存中多达64K的数据。

SSL 3.0 POODLE attack漏洞属于中间人***,非心脏出血类漏洞。

参考:

http://fp.huafans.cn/thread-1345963-1-1.html

https://www.ssllabs.com/downloads/SSL_TLS_Deployment_Best_Practices_1.3.pdf