当前位置: 首页>>技术问答>>正文


如何修补/解决方法SSLv3 POODLE漏洞(CVE-2014-3566)?

, , ,

问题描述

BEAST attackHeartbleed bug之后,现在我已经听说了SSL /TLS中一个名为POODLE的新漏洞。我如何保护自己免遭被剥削?

  • 只有服务器或客户受到影响?

  • 这个OpenSSL /GnuTLS是特定的吗?

  • 什么样的服务受到影响?只有HTTPS或IMAPS,SMTPS,OpenVPN等?

请向我展示如何避免此漏洞的示例。

最佳解决思路

背景信息

SSL旨在确保互联网上的传输级别。对于’the web’又名HTTP,你会知道这是HTTPS,但它也用于其他应用程序协议。 SSLv2是第一个广泛使用的传输安全协议,但不久后发现它不安全。后继SSLv3和TLSv1现在得到广泛支持。 TLSv1.1和TLSv1.2更新,并获得了很多支持。大多数(如果不是所有)2014年发布的网络浏览器都支持它。

Google工程师最近的发现指出,SSLv3不应该再使用(比如很久以前就弃用了SSLv2)。无法连接到您的网站/服务的客户可能非常有限。 CloudFlare announced不到0.09%的访问者仍然依赖SSLv3。

简单的解决方案:禁用SSLv3。

Ubuntu提供任何更新吗?

是的,通过添加SCSV功能的usn-2385-1,但它不会完全缓解问题,因为它不会禁用SSLv3,并且修补程序只有在修补连接的两端时才有效。您将通过您的软件包管理器中的常规安全更新来收到它。

所以,你仍然必须采取行动来禁用SSLv3(它是可配置的)。未来版本的客户端/浏览器将最有可能禁用SSLv3。例如。 Firefox 34将会这样做。

默认情况下,在Ubuntu的实施级别禁用SSLv3可能会破坏一些东西,对于non-HTTPS SSL使用情况并不那么脆弱,所以我认为维护人员不会这样做,只会应用此SCSV补丁。

为什么通过usn-2385-1在OpenSSL中更新SCSV不会减轻问题?

真的,停止询问这些问题,只需跳过几段并禁用SSLv3即可。但是,嘿,如果你不相信,在这里你去:

POODLE显示带有CBC密码的SSLv3被破坏,实施SCSV不会改变这一点。根据需要,SCSV只会确保您不会从通常情况下所需的Man-in-the-中等攻击所需的某些TLS协议降级到任何较低的TLS /SSL协议。

如果您必须访问某个根本不提供TLS但只有SSLv3的服务器,那么您的浏览器并没有真正的选择,必须使用SSLv3与服务器通话,这样SSLv3就不会受到任何降级攻击。

如果您必须访问某个提供TLSv1 +和SSLv3的服务器(不鼓励),并且您希望确保您的连接不会被攻击者降级到SSLv3,则服务器和客户端都需要此SCSV补丁。

为了完全缓解SSLv3的失效问题,您的结局已经足够,您可以确定不会降级。而且您将无法与SSLv3专用服务器通话。

好的,那么我如何禁用SSLv3?

请参阅下面的应用特定部分:现在涵盖Firefox,Chrome,Apache,Nginx和Postfix。

只有服务器或客户受到影响?

如果服务器和客户端都接受SSLv3(即使两者由于降级攻击而能够支持TLSv1 /TLSv1.1 /TLS1.2),则存在该漏洞。

作为服务器管理员,您现在应该禁用SSLv3以确保用户的安全。

作为用户,您现在应该在浏览器中禁用SSLv3,以便在访问仍支持SSLv3的网站时保护自己。

这个OpenSSL /GnuTLS /浏览器是特定的吗?

不是。这是一个协议(设计)错误,而不是实现错误。这意味着你不能修补它(除非你改变旧的SSLv3的设计)。

是的,有一个新的OpenSSL security release,但在下面阅读(但我真的需要SSLv3支持…为了X,Y,Z原因!),为什么你最好集中精力禁用SSLv3。

我可以杀死网络(防火墙)级别的SSLv3吗?

好吧,可能。我把它放在一个单独的博客文章中,以便进一步思考和工作。我们可能会有一些神奇的iptables规则可以使用!

我的博客文章:How to take down SSLv3 in your network using iptables for POODLE?

它仅适用于HTTPS还是适用于IMAP /SMTP /OpenVPN和其他支持SSL的协议?

研究人员表示,目前的攻击媒介与控制使用在受害者机器上运行的JavaScript的明文发送到服务器。此矢量不适用于不使用浏览器的non-HTTPS方案。

此外,通常SSL客户端不允许将会话降级到SSLv3(在握手功能中显示TLSv1 +),但浏览器希望与后向兼容,并且它们可以。控制明文的组合和HTTP头部的特定方式使得它可以被利用。

结论:现在禁用HTTPS的SSLv3,在下一个服务窗口中为其他服务禁用SSLv3。

有什么影响?我是否需要撤销并重新生成服务器证书? (和Heartbleed一样)

不,你不需要为此转动你的证书。该漏洞从会话数据中暴露明文恢复,但不提供对任何秘密的访问(会话密钥或证书密钥)。

攻击者很可能只能窃取明文头像会话cookie,以便执行session hijacking。另外一个限制是需要一个完整的(有效的)MitM attack

还有什么可以改进我的SSL配置吗?

作为用户,除了在浏览器中禁用SSLv3之外,并不是真的。那么,只要始终安装最新的安全更新即可。

对于服务器,请遵循Mozilla’s TLS server guide。并用Qualys’ SSL Labs test进行测试。在您的网站上获得A +评分真的不难。只需更新您的软件包并实施Mozilla指南中的建议即可。

但我真的需要SSLv3的支持……因为X,Y,Z!怎么办?

那么,有一个补丁可以绕过TLSv1客户端的降级攻击,称为SSLv3后备保护。顺便提一下,这也会提高TLSv1 +的安全性(降级攻击更难/不可能)。它在Ubuntu安全公告usn-2385-1中作为更新版本的OpenSSL提供。

大问题:客户端和服务器都需要这个补丁才能工作。所以,在我看来,当你更新客户端和服务器时,无论如何你都应该升级到TLSv1 +。

不过,请您现在只需在您的网络中停用SSLv3即可。努力升级安全标准并沟通SSLv3。

我听说过SCSV支持来消除协议降级攻击。我需要它吗?

只有当你真的需要SSLv3出于某种奇怪的原因,但它也提高了TLSv1 +的安全性,所以是的,我建议你安装它。 Ubuntu在usn-2385-1中为此功能提供更新。您将通过您的软件包管理器中的常规安全更新来收到它。

测试私人托管网站的漏洞(例如Intranet /脱机)。

只要他们支持SSLv3,你的服务器就很容易受到攻击。这里有几个选项:

  • 使用OpenSSL s_client:

    openssl s_client -connect <server>:<port> -ssl3
    

    如果连接成功,则启用sslv3。如果失败,它将被禁用。当它失败时,你应该看到类似于:

    error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
    
  • 使用nmap

    nmap --script ssl-enum-ciphers -p 443 myhostname.tld
    

    它应该输出’SSLv3: No supported ciphers found‘。调整你的主机名/端口。

  • 使用cipherscan。克隆/下载二进制文件并执行它:

    ./cipherscan myhostname.tld
    

    它不应该在’protocols’列中列出任何带有SSLv3的内容。


Firefox浏览器

打开about:config,找到security.tls.version.min并将值设置为1。然后重新启动浏览器以删除所有打开的SSL连接。

security,ssl,tls,ubuntu

从版本34开始,Firefox将默认禁用SSLv3,因此不需要任何操作(source)。然而,在写作的那一刻,刚刚释放了33个,并且在11月25日设置了34个。


Google Chrome(Linux)

编辑/usr/share/applications/google-chrome.desktop文件,例如

sudo nano /usr/share/applications/google-chrome.desktop

编辑所有以Exec=开头的行以包含--ssl-version-min=tls1

例如。一条线

Exec=/usr/bin/google-chrome-stable %U

Exec=/usr/bin/google-chrome-stable --ssl-version-min=tls1 %U

然后确保完全关闭浏览器(Chrome应用程序可能会保持您的浏览器在后台处于活动状态!)。

注意:您可能需要对每个google-chrome软件包更新重复此操作,以覆盖此.desktop启动程序文件。默认情况下禁用SSLv3的谷歌浏览器或Chromium浏览器在撰写本文时尚未公布。


Apache HTTPD服务器

如果您正在运行当前允许SSLv3的Apache Web服务器,则需要编辑Apache配置。在Debian和Ubuntu系统上,文件是/etc/apache2/mods-available/ssl.conf。在CentOS和Fedora上,文件是/etc/httpd/conf.d/ssl.conf。您需要使用其他SSL指令将以下行添加到Apache配置中。

SSLProtocol All -SSLv2 -SSLv3

这将允许除SSLv2和SSLv3之外的所有协议。

在您处理它时,您可能需要考虑如Mozilla’s TLS server guide中所述,改进您的Web服务器的密码组配置。添加例如:

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLCompression          off
# Read up on HSTS before you enable it (recommended)
# Header add Strict-Transport-Security "max-age=15768000"

然后检查新配置是否正确(无错别字等):

sudo apache2ctl configtest

并重新启动服务器,例如

sudo service apache2 restart

在CentOS和Fedora上:

systemctl restart httpd

更多信息:Apache documentation

现在测试它:如果您的网站是公开的,请使用Qualys’ SSL Labs tool进行测试。


Nginx服务器

如果您正在运行Nginx,请在您的配置中将其他SSL指令中包含以下行:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

在您处理它时,您可能需要考虑如Mozilla’s TLS server guide中所述,改进您的Web服务器的密码组配置。添加例如:

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
# Read up on HSTS before you enable it (recommended)
# add_header Strict-Transport-Security max-age=15768000;

并重新启动服务器,例如

sudo service nginx restart

参考:Nginx documentation

现在测试它:如果您的网站是公开的,可用的,请使用Qualys’ SSL Labs tool进行测试。


Lighttpd网络服务器

Lighttpd版本> 1.4.28支持配置选项来禁用SSLv2和v3。 1.4.28之前的Lighttpd版本允许您仅禁用SSLv2。请注意,Ubuntu 12.04 LTS和更早版本最多安装lighttpd v1.4.28,因此这些发行版不提供简单修补程序。因此,此修补程序只能用于大于12.04的Ubuntu版本。

对于Ubuntu 12.04或Debian 6,可从openSUSE存储库获得更新的lighttpd软件包:http://download.opensuse.org/repositories/server:/http/Debian_6.0

该软件包专门用于Debian 6(挤压),但也适用于12.04(精确)

编辑您的/etc/lighttpd/lighttpd.conf以在ssl.engine = "enable"指令之后添加以下行

ssl.use-sslv2          = "disable"
ssl.use-sslv3          = "disable"

然后,您应该使用sudo service lighttpd restart重新启动lighttpd服务,并执行前面部分中所述的ssl3握手测试,以确保更改已成功实施。

取自http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL


Postfix SMTP

对于’opportunistic SSL'(加密策略未强制执行,普通也可接受),则不需要更改任何内容。即使SSLv2比普通的更好,所以如果你需要保护你的服务器,你应该使用’mandatory SSL’模式。

对于已经配置的’mandatory SSL’模式,只需添加/更改入站连接的smtpd_tls_mandatory_protocols设置和出站连接的smtp_tls_mandatory_protocols

smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3

或者,如果您想要禁用SSLv3以进行机会加密(即使它不是如上所述的那样),请这样做:

smtpd_tls_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3

并重新启动Postfix:

sudo service postfix restart

Sendmail

(匿名用户未经验证的编辑,我不熟悉Sendmail,请验证。)

这些选项在sendmail.mcLOCAL_CONFIG部分中配置

LOCAL_CONFIG
O CipherList=HIGH
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3

Dovecot

在Dovecot v2.1 +中,将以下内容添加到/etc/dovecot/local.conf(或/etc/dovecot/conf.d中的新文件)中:

ssl_protocols = !SSLv2 !SSLv3

并重启Dovecot:

sudo service dovecot restart

对于旧版本,您将不得不使用patch the source code


Courier-imap(imapd-ssl)

Courier-imap默认允许在Ubuntu 12.04和其他版本上使用SSLv3。您应该禁用它并使用STARTTLS来强制TLS。编辑您的/etc/courier/imapd-ssl配置文件以反映以下更改

IMAPDSSLSTART=NO
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=1
TLS_PROTOCOL=TLS1
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CIPHER_LIST="<take those from the Mozilla TLS Server guide!>"

HAProxy服务器

SSL在HAProxy> = 1.5中受支持。

编辑/etc/haproxy.cfg文件并找到您的bind行。附加no-sslv3。例如:

bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3

参考:HAProxy Documentation


OpenVPN

看起来不受影响(source)。

OpenVPN uses TLSv1.0, or (with >=2.3.3) optionally TLSv1.2 and is thus not impacted by POODLE.


Puppet

Puppet通过HTTPS使用SSL,但不会被’browser’客户端使用,只是Puppet代理不会受到所示攻击媒介的攻击。但是,最好禁用SSLv3。

我的建议是使用stephenrjohnson/puppetmodule Puppet模块设置您的Puppet主控器,其中的I killed SSLv3在前一段时间。

次佳解决思路

可能不是Ubuntu特有的,但为了解决Node.js中的Poodle漏洞,您可以在创建https或tls服务器时将secureOptions设置为require('constants').SSL_OP_NO_SSLv3

有关更多信息,请参阅https://gist.github.com/3rd-Eden/715522f6950044da45d8

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/293.html,未经允许,请勿转载。