如何修补/解决SSLv3 POODLE漏洞(CVE-2014-3566)?
在BEAST攻击和Heartbleed bug之后 ,现在我已经听说过一个名为POODLE的 SSL / TLS漏洞。 我如何保护自己免受被剥削?
- 是仅影响服务器还是客户端?
- 这个OpenSSL / GnuTLS具体吗?
- 什么样的服务受到影响? 只有HTTPS还是IMAPS,SMTPS,OpenVPN等?
请告诉我如何避免此漏洞的示例。
背景信息
SSL旨在确保Internet上的传输级别。 对于’web’即HTTP,你会将其称为HTTPS,但它也用于其他应用程序协议。 SSLv2是第一个广泛使用的传输安全协议,但在不久之后被发现不安全。 后继者SSLv3和TLSv1现在得到广泛支持。 TLSv1.1和TLSv1.2更新,并获得了很多支持。 大多数(如果不是全部)从2014年发布的Web浏览器都支持它。
谷歌工程师最近的发现指出SSLv3不应该再使用了(比如SSLv2很久以前就被弃用了)。 无法连接到您的站点/服务的客户可能非常有限。 CloudFlare 宣布 ,不到0.09%的访问者仍然依赖SSLv3。
简单的解决方案:禁用SSLv3。
Ubuntu是否提供任何更新?
是的,通过usn-2385-1增加了SCSVfunction, 但它并没有完全缓解这个问题,因为它没有禁用SSLv3,只有在连接的两端都已修补时,补丁才会起作用。 您将通过包管理器中的常规安全更新收到它。
所以, 你仍然需要自己动手来禁用SSLv3(它是可配置的)。 未来版本的客户端/浏览器最有可能禁用SSLv3。 例如Firefox 34将这样做。
默认情况下,在实施级别的Ubuntu中完全禁用SSLv3可能会破坏一些非易受攻击的非HTTPS SSL使用,因此我假设维护者不会这样做,只会应用此SCSV补丁。
为什么通过usn-2385-1在OpenSSL中更新SCSV不会缓解这个问题?
真的,不要再问这些问题,只是跳过几段并禁用SSLv3。 但是,嘿,如果你不相信,在这里你去:
POODLE显示带有CBC密码的SSLv3已损坏,实现SCSV不会改变它。 SCSV仅确保您不会根据需要将某些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安全版本 ,但在下面阅读( 但我真的需要SSLv3支持……因为X,Y,Z! )为什么你更好地专注于完全禁用SSLv3。
我可以在网络(防火墙)级别上杀死SSLv3吗?
嗯,是的,可能。 我把它放在一个单独的博客文章中,以便进一步思考和工作。 我们可能会使用一些神奇的iptables
规则!
我的博文: 如何使用iptables for POODLE取消网络中的SSLv3?
它仅适用于HTTPS还是IMAP / SMTP / OpenVPN以及其他支持SSL的协议?
如研究人员所示,当前的攻击向量可以控制使用在受害者机器上运行的Javascript发送到服务器的明文。 如果不使用浏览器,此向量不适用于非HTTPS方案。
此外,通常SSL客户端不允许将会话降级为SSLv3(在握手function中看到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 Security咨询公司usn-2385-1中最近的OpenSSL版本的后端口提供的 。
大问题:客户端和服务器都需要此补丁才能工作。 因此,在我看来,当您更新客户端和服务器时,您应该只升级到TLSv1 +。
但是,请,请暂时退出您网络中的SSLv3。 努力提升安全标准,放弃SSLv3。
我听说SCSV支持消除协议降级攻击。 我需要它吗?
只有你真的需要SSLv3有一些奇怪的原因,但它也提高了TLSv1 +的安全性,所以是的,我建议你安装它。 Ubuntu在usn-2385-1中提供了此function的更新。 您将通过包管理器中的常规安全更新收到它。
测试私有托管站点的漏洞(例如,Intranet / offline)。
只要服务器支持SSLv3,您的服务器就容易受到攻击。 这里有几个选项:
-
使用OpenSSL s_client:
openssl s_client -connect
: -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 myhostname.tld
它不应该在’protocols’列下列出任何SSLv3。
Firefox浏览器
打开about:config
,找到security.tls.version.min
并将值设置为1
。 然后重新启动浏览器以删除任何打开的SSL连接。
从版本34开始的Firefox将默认禁用SSLv3,因此不需要任何操作( 源 )。 然而,在撰写本文时,33日刚刚发布,34日将在11月25日发布。
谷歌浏览器(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的Google Chrome或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的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服务器
如果您正在运行Nginx,请在配置中包含以下其他SSL指令中的以下行:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
在您使用它时,您可能需要考虑改进网络服务器的密码套件配置,如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网络服务器
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
对于’机会主义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
发邮件
(匿名用户未经validation的编辑,我对Sendmail不满意,请validation。)
这些选项在sendmail.mc
的LOCAL_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 v2.1 +中,将以下内容添加到/etc/dovecot/local.conf
(或/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/courier/imapd-ssl
配置文件以反映以下更改
IMAPDSSLSTART=NO IMAPDSTARTTLS=YES IMAP_TLS_REQUIRED=1 TLS_PROTOCOL=TLS1 TLS_STARTTLS_PROTOCOL=TLS1 TLS_CIPHER_LIST=""
HAProxy服务器
HAProxy> = 1.5支持SSL。
编辑/etc/haproxy.cfg
文件并找到bind
行。 附加no-sslv3
。 例如:
bind :443 ssl crt ciphers no-sslv3
参考: HAProxy文档
OpenVPN的
似乎不受影响( 来源 )。
OpenVPN使用TLSv1.0或(有> = 2.3.3)可选TLSv1.2,因此不受POODLE的影响。
木偶
Puppet在HTTPS上使用SSL,但“浏览器”客户端不使用它,只是Puppet代理不会受到显示的攻击媒介的攻击。 但是,最好只禁用SSLv3。
我的建议是使用stephenrjohnson / puppetmodule Puppet模块来设置你的Puppet master, 我之前杀死了SSLv3 。
可能不是特定于ubuntu但是为了解决Node.js中的Poodle漏洞,您可以在创建https或tls服务器时将secureOptions
设置为require('constants').SSL_OP_NO_SSLv3
。
有关其他信息,请参阅https://gist.github.com/3rd-Eden/715522f6950044da45d8
快递的“修复”禁用tls 1.1和tls 1.2。 似乎没有办法以tls 1.1或更高版本运行快递。 您的服务器上的PCI扫描可能会返回建议:
如果支持,将SSL / TLS服务器配置为仅使用TLS 1.1或TLS 1.2。 将SSL / TLS服务器配置为仅支持不使用分组密码的密码套件。
由于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"