在发生BEAST攻击和Heartbleed错误之后,现在我听说SSL / TLS中的一个名为POODLE的新漏洞。如何保护自己免受攻击?


仅服务器还是客户端都受到影响?
此OpenSSL / GnuTLS是否特定?
哪些服务受到影响? ?仅HTTPS还是IMAPS,SMTPS,OpenVPN等?

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

评论

可在此处找到更多信息SSL3“贵宾犬”漏洞

@Braiam是的,我知道,再一次是聪明的托马斯!但是,这是非常面向密码的问答。本关于AU的问答旨在提供实用和面向Ubuntu的信息。 :-)

??您如何期望比“如果不安装修补程序,那么Níðhöggr会吞噬您的脾脏”更实用的解决方案。

@Braiam首先:没有补丁(请阅读我的回答)。我认为Thomas是指设备而不是DIY-Ubuntu Web服务器托管。诸如负载平衡器之类的设备通常会提供固件更新以更改默认设置,或者会提供能够对其进行配置的功能。但是,在Ubuntu中,这完全取决于用户/管理员。

其实有:供应商可以禁用/删除所有与SSLv3相关的代码,因此您根本不需要触摸任何东西。

#1 楼

背景信息

SSL旨在确保Internet上的传输级别。对于“ Web”(也称为HTTP),您将其称为HTTPS,但它也用于其他应用程序协议。 SSLv2是第一个被广泛使用的传输安全协议,但是不久之后就被发现是不安全的。现在广泛支持后继SSLv3和TLSv1。 TLSv1.1和TLSv1.2是较新的,并且也获得了很多支持。 2014年以后发行的大多数(如果不是全部)网络浏览器都支持它。

Google工程师最近的发现指出,不应再使用SSLv3(就像很久以前不推荐使用SSLv2一样)。无法连接到您的站点/服务的客户端可能非常有限。 CloudFlare宣布不到0.09%的访问者仍然依赖SSLv3。

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

Ubuntu是否提供任何更新?

是的,通过具有SCSV功能的usn-2385-1,但是它不能完全缓解问题,因为它没有禁用SSLv3,并且只有在对连接的两面都进行了修补的情况下,该修补程序才起作用。您将通过程序包管理器中的常规安全更新来接收它。

因此,您仍然必须自己采取行动来禁用SSLv3(它是可配置的)。客户端/浏览器的未来版本很可能会禁用SSLv3。例如。 Firefox 34会这样做。

在Ubuntu上默认在实现级别上完全禁用SSLv3可能还会破坏一些非HTTPS SSL使用的东西,因为它不太容易受到攻击,因此我认为维护者会赢得胜利't这样做,仅将应用此SCSV补丁。

为什么通过usn-2385-1在OpenSSL中更新SCSV不能缓解该问题?

真的,不要再问这样的问题,只需跳过几段并禁用SSLv3。但是,嘿,如果您不相信,请继续:

POODLE表明,具有CBC密码的SSLv3已损坏,实施SCSV不会改变这一点。 SCSV仅确保您不会将通常情况下所需的中间人攻击从所需的某些TLS协议降级为任何较低的TLS / SSL协议。

如果访问某些根本不提供TLS的服务器,而仅提供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安全版本,但请阅读以下内容(但我真的很需要SSLv3支持...(原因X,Y,Z!)说明为什么最好完全禁用SSLv3。

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

好吧,可能是的。我将其放在单独的博客文章中,以供进一步考虑和工作。我们可能有一些神奇的iptables规则可以使用!

我的博客文章:如何使用POODLE的iptables在网络中删除SSLv3?

仅与HTTPS相关吗还是针对IMAP / SMTP / OpenVPN和其他支持SSL的协议?

如研究人员所示,当前的攻击媒介可通过使用在受害服务器上运行的Javascript控制发送到服务器的纯文本。机。此向量不适用于不使用浏览器的非HTTPS场景。

此外,通常SSL客户端不允许将会话降级到SSLv3(在握手功能中可以看到TLSv1 +),但是浏览器希望向后兼容,但确实如此。结合控制纯文本和HTTP标头的特定构建方式,使其变得可利用。

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

有什么影响?我需要吊销并重新生成服务器证书吗? (与Heartbleed一样)

不,您不需要为此旋转证书。该漏洞公开了从会话数据中恢复纯文本的功能,它不提供对任何秘密(会话密钥或证书密钥)的访问。

攻击者最有可能只能窃取会话等纯文本头Cookie,以执行会话劫持。另外一个限制是需要进行全面(主动)的MitM攻击。

我还能做些其他什么来改善我的SSL配置吗?

作为用户,除了在浏览器中禁用SSLv3之外,实际上不是。好吧,总是安装最新的安全更新。

对于服务器,请遵循Mozilla的TLS服务器指南。并使用Qualys的SSL Labs测试进行测试。在您的网站上获得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


它不应在“协议”列下列出任何使用SSLv3的内容。



Firefox浏览器

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



Firefox从版本34开始将默认禁用SSLv3,因此无需任何操作(源)。但是,在撰写本文时,仅发布了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应用可能请保持您的浏览器在后台运行!)。在撰写本文时,尚未宣布默认禁用SSLv3的Google Chrome或Chromium浏览器。


Apache HTTPD服务器

如果您正在运行Apache当前允许SSLv3的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以外的所有协议。

在进行此操作时,您可能需要考虑改善Web服务器的密码套件配置,如Mozilla的TLS服务器指南中所述。添加例如:

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

< br并重新启动服务器,例如

sudo service apache2 restart


在CentOS和Fedora上:

systemctl restart httpd


更多信息:Apache文档

现在对其进行测试:如果您的站点是公开可用的,请使用Qualys的SSL Labs工具对其进行测试。


Nginx服务器

如果您正在运行Nginx,只需在配置中在其他SSL指令中包括以下行即可:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;


在进行此操作时,您可能需要考虑改进Web服务器的密码套件配置,如Mozilla的TLS服务器指南中所述。添加例如:

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文档
/>
现在对其进行测试:如果您的站点公开可用,请使用Qualys的SSL Labs工具对其进行测试。


Lighttpd Web服务器

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(精确)

编辑您的.desktop,在/etc/lighttpd/lighttpd.conf指令后添加以下行

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


然后,您应该使用ssl.engine = "enable"重新启动lighttpd服务,并按照前面几节中的说明执行ssl3握手测试,以确保更改已成功实现。

来自http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL。


Postfix SMTP

对于“机会型SSL”(未强制执行加密策略,也可以接受简单的加密),您无需进行任何更改。甚至SSLv2也比普通的要好,因此,如果您需要保护服务器安全,则无论如何都应使用“强制性SSL”模式。

对于已经配置的“强制性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不满意,请验证。)

这些选项在sudo service lighttpd restartLOCAL_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 +中,将以下内容添加到sendmail.mc(或/etc/dovecot/local.conf中的新文件):

ssl_protocols = !SSLv2 !SSLv3


并重新启动Dovecot:

sudo service dovecot restart


对于较旧的版本,您将必须修补源代码。


Courier-imap(imapd-ssl)

Courier-imap默认在Ubuntu 12.04和其他版本上允许SSLv3。您应该禁用它,而改用STARTTLS强制TLS。编辑您的/etc/dovecot/conf.d配置文件以反映以下更改

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服务器

HAProxy> = 1.5支持SSL。

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

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


参考:HAProxy文档


OpenVPN

似乎不受影响(源)。


OpenVPN使用TLSv1.0,或者(使用> = 2.3.3)(可选)TLSv1.2,因此不受POODLE的影响。



木偶

Puppet使用基于HTTPS的SSL,但“浏览器”客户端未使用它,只是不易受到所示攻击媒介影响的Puppet代理。但是,最好的方法是仅禁用SSLv3。

我的建议是使用stephenrjohnson / puppetmodule Puppet模块来设置您的Puppet主服务器,前一段时间我在其中杀死了SSLv3。

评论


在公开发布此漏洞后,很快就创建了这个答案。那里仍然可能有错误-像往常一样,随时进行编辑/改进。

– Gertvdijk
2014年10月15日,0:32

ssl_protocols指令后,Nginx配置不应该带有冒号

– Michelle
14-10-15在5:04



好吧,对于Firefox,我相信这是正在发生的事情。

– fuglede
14-10-15在11:45

此Mozilla Security博客文章建议安装此加载项,而不是手动调整首选项。

– Legoscia
2014-10-15 14:22

@muru这是在防火墙级别杀死SSLv3的开始。 blog.g3rt.nl/take-down-sslv3-using-iptables.html

– Gertvdijk
14-10-15在22:21

#2 楼

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

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

评论


IMO,您不应该直接使用Node / Python / Ruby或类似的东西公开HTTP(S)。像Apache / Nginx / ...一样放置一个像样的HTTPd ...

– Gertvdijk
14-10-15在11:22

是的,您不应该直接曝光。 tcp层HTTP的语言不是很好,但是它们在执行套接字时会摇摆不定。让nginx从套接字读取它。 :-)

– jrg
14-10-15在13:20

这不应该被否决。在许多情况下,除了托管http服务器外,还会使用tls。

–psanford
2014-10-15 14:29

@gertvdijk&jrg Node.js不是语言。这是用于构建可扩展网络应用程序的框架。正如您指出的那样,应该将Node.js放在Apache服务器之后(甚至称其为“体面”)已经明确表明,您完全不知道自己在说什么。声明他们对tpc / http不好,这显然是个人偏见。请仅关注话题,而不要像您不了解的那样轻率地拒绝投票。

– 3rdEden
14-10-23在12:54

@ 3rdEden好吧,也许我的评论有点笼统,但是这里有一些我想做的笔记。 1)我没有投票,2)我的评论是一个温和的“ IMO”,3)也许这只是我的安全背景,但我了解到不应将应用程序框架直接暴露给80/443。生产。 (除非出于演示目的)。 4)我看不出您的帖子如何成为一般Ask Ubuntu访问者对该问题的“答案”;它只是非常特定于Node.js部署的特定情况。

– Gertvdijk
14-10-23在13:08

#3 楼

快递的“修复”禁用tls 1.1和tls 1.2。似乎没有办法在tls 1.1或更高版本上运行courier。
服务器上的PCI扫描可能会返回以下建议:

将SSL / TLS服务器配置为仅使用如果支持TLS 1.1或TLS 1.2。
将SSL / TLS服务器配置为仅支持不使用分组密码的密码套件。

#4 楼

由于POODLE漏洞是协议本身的设计缺陷,而不是实现错误,因此不会有补丁。缓解此问题的唯一方法是在apache服务器中禁用SSLv3。将以下几行添加到ssl.conf中,并重新启动apache。

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"


评论


-1表示RC4和非功能性ECDSA,因为大多数人都具有RSA证书。请阅读有关如何正确配置服务器的内容。 wiki.mozilla.org/Security/Server_Side_TLS

– Gertvdijk
2014-10-15 22:57



@gertvdijk对于RC4,我同意你的看法,但是包含ECDSA套件也没有什么坏处。如果您只有RSA证书,那么这是无害的,并且如果以后再获得ECDSA证书,则可以省去修复配置的麻烦。

–马特·诺德霍夫(Matt Nordhoff)
2014-10-17 2:37

@MattNordhoff足够公平,但是我的意思是对于基于RSA证书的常规配置而言,剩下的密码很少。它可以在大多数浏览器中使用,但是可能会遇到兼容性问题。

– Gertvdijk
14-10-17在7:24

绝对从该列表中删除RC4,这是不安全的。如果可以的话,剩下的留着。 3DES较弱,但为了兼容性,我已在一个特定的地方将其启用。我讨厌这样做,因为它很弱,但至少它实际上并没有损坏。

–布赖恩·诺伯劳赫(Brian Knoblauch)
2014年11月21日下午16:56