在BEAST攻击和Heartbleed错误之后,现在我听说SSL / TLS中的一个名为POODLE的新漏洞。如何保护自己免受剥削?
- 仅影响服务器还是影响客户端?
- 这是OpenSSL / GnuTLS专用的吗?
- 哪些服务受到影响?仅HTTPS还是IMAPS,SMTPS,OpenVPN等?
请向我展示有关如何避免此漏洞的示例。
在BEAST攻击和Heartbleed错误之后,现在我听说SSL / TLS中的一个名为POODLE的新漏洞。如何保护自己免受剥削?
请向我展示有关如何避免此漏洞的示例。
Answers:
SSL旨在保护Internet上的传输级别。对于“ Web”(也称为HTTP),您将其称为HTTPS,但它也用于其他应用程序协议。SSLv2是第一个被广泛使用的传输安全协议,但是不久之后就被发现是不安全的。现在广泛支持后继SSLv3和TLSv1。TLSv1.1和TLSv1.2是较新的,也获得了很多支持。2014年发布的大多数(如果不是全部)网络浏览器都支持它。
Google工程师最近的发现指出,不应再使用SSLv3(就像很久以前不推荐使用SSLv2一样)。无法连接到您的站点/服务的客户端可能非常有限。CloudFlare 宣布不到0.09%的访问者仍然依赖SSLv3。
简单的解决方案:禁用SSLv3。
是的,通过具有SCSV功能的usn -2385-1,但它不能完全缓解该问题,因为它没有禁用SSLv3,并且只有在对连接的两面都进行了修补的情况下,该修补程序才起作用。您将通过程序包管理器中的常规安全更新来接收它。
因此,您仍然必须自己采取行动来禁用SSLv3(它是可配置的)。客户端/浏览器的未来版本很可能会禁用SSLv3。例如Firefox 34会这样做。
在Ubuntu上,默认情况下在实现级别上完全禁用SSLv3可能会对非HTTPS SSL使用造成一些破坏,因为这种使用不太容易受到影响,因此我认为维护人员不会这样做,仅会应用此SCSV补丁。
确实,不要再问这样的问题,而只是跳过几段并禁用SSLv3。但是,嘿,如果您不相信,请继续:
POODLE显示具有CBC密码的SSLv3已损坏,实施SCSV不会改变这一点。SCSV仅确保您不会将通常情况下所需的中间人攻击所需的某些TLS协议降级为任何较低的TLS / SSL协议。
如果您必须访问某个根本不提供TLS而是仅提供SSLv3的服务器,那么您的浏览器实际上没有选择,只能使用SSLv3与该服务器通信,因此该服务器很容易受到攻击而不会受到任何降级攻击。
如果你有访问一些服务器,提供的TLSv1 +和SSLv3的太(这是鼓励),你要确保你的连接不会被攻击者降级为SSLv3的,那么这两个服务器和客户端需要这个SCSV补丁。
为了完全缓解该问题,禁用SSLv3就足够了,您可以确定不会降级。而且您将无法与仅SSLv3的服务器通信。
请参阅以下特定于应用程序的部分:Firefox,Chrome,Apache,Nginx和Postfix现已涵盖。
如果服务器和客户端都接受SSLv3(即使由于降级攻击而都能够使用TLSv1 / TLSv1.1 / TLS1.2),则存在此漏洞。
作为服务器管理员,您现在应该禁用SSLv3 ,以确保用户的安全。
作为用户,你应该在你的浏览器中禁用的SSLv3 现在访问网站,其还支持SSLv3的时候,以确保自己。
不,这是协议(设计)错误,而不是实现错误。这意味着您无法真正对其进行修补(除非您要更改旧版SSLv3的设计)。
是的,有一个新的OpenSSL安全版本,但请阅读以下内容(但我确实真的需要SSLv3支持...出于X,Y,Z!的原因),以便您更好地完全禁用SSLv3。
好吧,可能。我将其放在单独的博客文章中,以供进一步考虑和工作。我们可能有一些魔术iptables
规则可以使用!
我的博客文章:如何使用iptables for POODLE删除网络中的SSLv3?
研究人员显示,当前的攻击媒介可通过使用在受害者计算机上运行的Javascript控制发送到服务器的纯文本。如果不使用浏览器,此向量不适用于非HTTPS方案。
此外,通常SSL客户端不允许将会话降级到SSLv3(在握手功能中可以看到TLSv1 +),但是浏览器希望做到向后兼容,并且可以。与控制纯文本以及HTTP头的特定构建方式的结合使其可被利用。
结论:禁用SSLv3的用于HTTPS 现在,禁用SSLv3的为你的下一个服务窗口等服务。
不,您不需要为此旋转证书。该漏洞公开了从会话数据进行的纯文本恢复,它不提供对任何机密(会话密钥或证书密钥)的访问。
攻击者很可能只能窃取会话cookie之类的纯文本标头,以执行会话劫持。另一个限制是需要全面(主动)的MitM攻击。
作为用户,除了在您的浏览器中禁用SSLv3之外,实际上不是。好吧,始终安装最新的安全更新。
对于服务器,请遵循Mozilla的TLS服务器指南。并使用Qualys的SSL Labs测试进行测试。在您的网站上获得A +评级确实并不难。只需更新您的软件包并实施Mozilla指南中的建议即可。
好吧,有一个补丁可以防御具有TLSv1功能的客户端的降级攻击,称为SSLv3后备保护。顺便说一下,它也将提高TLSv1 +的安全性(降级攻击更难/不可能)。它是Ubuntu安全通报usn-2385-1中较新的OpenSSL版本的反向移植。
大收获:客户端和服务器都需要此补丁才能正常工作。因此,我认为在更新客户端和服务器时,无论如何都应该升级到TLSv1 +。
但是,请暂时将您网络中的SSLv3淘汰。努力升级安全标准,而放弃SSLv3。
仅当您出于某些奇怪的原因确实需要SSLv3时,但是它也可以提高TLSv1 +中的安全性,因此,我建议您安装它。Ubuntu在usn-2385-1中提供了此功能的更新。您将通过程序包管理器中的常规安全更新来接收它。
仅当服务器支持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。
打开about:config
,找到security.tls.version.min
并将值设置为1
。然后重新启动浏览器以删除所有打开的SSL连接。
从版本34开始的Firefox将默认禁用SSLv3,因此无需任何操作(source)。但是,在撰写本文时,仅发布了33个,而将11月25日设置为34。
编辑/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的Google Chrome或Chromium浏览器。
如果您正在运行当前允许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之外的所有协议。
在使用它时,您可能需要考虑改进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
并重新启动服务器,例如
sudo service apache2 restart
在CentOS和Fedora上:
systemctl restart httpd
更多信息:Apache文档
现在对其进行测试:如果您的站点是公开可用的,请使用Qualys的SSL Labs工具对其进行测试。
如果您正在运行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版本> 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"
然后,您应该使用来重新启动lighttpd服务,sudo service lighttpd restart
并按照前面各节中的说明执行ssl3握手测试,以确保成功实现了更改。
取自http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL。
对于“机会主义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不满意,请验证。)
这些选项在LOCAL_CONFIG
您的部分配置sendmail.mc
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 v2.1 +中,将以下内容添加到您的/etc/dovecot/local.conf
(或中的新文件/etc/dovecot/conf.d
):
ssl_protocols = !SSLv2 !SSLv3
并重新启动Dovecot:
sudo service dovecot restart
对于较旧的版本,您将必须修补源代码。
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> = 1.5支持SSL。
编辑/etc/haproxy.cfg
文件并找到您的bind
行。追加no-sslv3
。例如:
bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3
参考:HAProxy文档
似乎不受影响(来源)。
OpenVPN使用TLSv1.0或(大于等于2.3.3)(可选)TLSv1.2,因此不受POODLE的影响。
Puppet使用基于HTTPS的SSL,但“浏览器”客户端未使用它,只是不易受到所示攻击媒介影响的Puppet代理。但是,最佳做法是仅禁用SSLv3。
我的建议是使用stephenrjohnson / puppetmodule Puppet模块来设置您的Puppet主服务器,前一段时间我在其中杀死了SSLv3。
可能不是Ubuntu的具体的,但为了解决在Node.js的贵宾犬vulnerablity可以设置secureOptions
到require('constants').SSL_OP_NO_SSLv3
当你创建一个HTTPS或TLS服务器。
参见https://gist.github.com/3rd-Eden/715522f6950044da45d8了解更多信息
由于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"