如何保护您的服务器免受POODLESSLv3漏洞的影响

来自菜鸟教程
跳转至:导航、​搜索

介绍

2014 年 10 月 14 日,SSL 加密协议第 3 版中的一个漏洞被披露。 这个漏洞被称为 POODLE(在降级的传统加密上填充 Oracle),允许攻击者使用中间人攻击以纯文本形式读取使用此版本协议加密的信息。

尽管 SSLv3 是协议的旧版本,主要是过时的,但如果没有更好的加密选项,许多 软件仍然依赖 SSLv3。 更重要的是,如果 SSLv3 对尝试连接的双方都是可用的替代方案,那么攻击者就有可能强制进行 SSLv3 连接。

POODLE 漏洞会影响任何可以使用 SSLv3 进行通信的服务或客户端。 因为这是协议设计的缺陷,而不是实现问题,所以 每个 使用 SSLv3 的软件都容易受到攻击。

要了解有关该漏洞的更多信息,请参阅 CVE-2014-3566 中的 CVE 信息。

POODLE 漏洞是什么?

POODLE 漏洞是 SSL 协议版本 3 中的一个弱点,它允许攻击者在中间人上下文中破译 SSLv3 加密消息的纯文本内容。

谁受此漏洞影响?

此漏洞会影响可以强制与 SSLv3 通信的所有软件。 这意味着任何实现包含 SSLv3 支持的回退机制的软件都容易受到攻击并且可以被利用。

一些可能受到影响的常见软件是 Web 浏览器、Web 服务器、VPN 服务器、邮件服务器等。

它是如何工作的?

简而言之,POODLE 漏洞的存在是因为 SSLv3 协议没有充分检查与加密消息一起发送的填充字节。

由于接收方无法验证这些,攻击者可以替换它们并将它们传递到预期的目的地。 当以特定方式完成时,修改后的有效负载可能会被接收者毫无怨言地接受。

目的地平均每 256 个请求中会接受一次,从而允许攻击者解密单个字节。 这可以很容易地重复,以便逐步解密额外的字节。 任何能够反复强迫参与者使用此协议重新发送数据的攻击者都可以在很短的时间内破解加密。

我该如何保护自己?

应采取措施确保您在作为客户端和服务器的角色中不会受到攻击。 由于加密通常在客户端和服务器之间协商,这是一个涉及双方的问题。

服务器和客户端应采取措施完全禁用 SSLv3 支持。 许多应用程序默认使用更好的加密,但将 SSLv3 支持作为后备选项实现。 这应该被禁用,因为如果两个参与者都允许它作为可接受的方法,恶意用户可以强制 SSLv3 通信。

如何保护常用应用程序

下面,我们将介绍如何在一些常见的服务器应用程序上禁用 SSLv3。 注意评估您的服务器以保护任何可能依赖 SSL/TCP 加密的附加服务。

由于 POODLE 漏洞并不代表实现问题,而是整个协议的固有问题,因此没有变通方法,唯一可靠的解决方案是不使用它。

Nginx 网络服务器

要在 Nginx Web 服务器中禁用 SSLv3,可以使用 ssl_protocols 指令。 这将位于配置中的 serverhttp 块中。

例如,在 Ubuntu 上,您可以将其全局添加到 http 块内的 /etc/nginx/nginx.conf/etc/nginx/sites-enabled 目录中的每个 server 块。

sudo nano /etc/nginx/nginx.conf

要禁用 SSLv3,您的 ssl_protocols 指令应设置如下:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

进行上述修改后,您应该重新启动服务器:

sudo service nginx restart

阿帕奇网络服务器

要在 Apache Web 服务器上禁用 SSLv3,您必须调整 mod_ssl 模块提供的 SSLProtocol 指令。

该指令可以在服务器级别或虚拟主机配置中设置。 根据您的发行版的 Apache 配置,SSL 配置可能位于一个单独的源文件中。

在 Ubuntu 上,可以通过编辑 /etc/apache2/mods-available/ssl.conf 文件来调整服务器范围的服务器规范。 如果启用了 mod_ssl,则符号链接会将此文件连接到 mods-enabled 子目录:

sudo nano /etc/apache2/mods-available/ssl.conf

在 CentOS 上,您可以在此处的 SSL 配置文件中进行调整(如果启用了 SSL):

sudo nano /etc/httpd/conf.d/ssl.conf

在里面你可以找到 SSLProtocol 指令。 如果这不可用,请创建它。 修改它以明确删除对 SSLv3 的支持:

SSLProtocol all -SSLv3 -SSLv2

保存并关闭文件。 重新启动服务以启用您的更改。

在 Ubuntu 上,您可以键入:

sudo service apache2 restart

在 CentOS 上,这将是:

sudo service httpd restart

HAProxy 负载均衡器

要在 HAProxy 负载均衡器中禁用 SSLv3,您需要打开 haproxy.cfg 文件。

它位于 /etc/haproxy/haproxy.cfg

sudo nano /etc/haproxy/haproxy.cfg

在您的前端配置中,如果您启用了 SSL,您的 bind 指令将指定公共 IP 地址和端口。 如果您使用 SSL,则需要将 no-sslv3 添加到此行的末尾:

frontend name
    bind public_ip:443 ssl crt /path/to/certs no-sslv3

保存并关闭文件。

您将需要重新启动服务以实施更改:

sudo service haproxy restart

OpenVPN VPN 服务器

OpenVPN 的最新版本实际上不允许 SSLv3。 该服务不易受此特定问题的影响,因此您无需调整配置。

有关更多信息,请参阅 OpenVPN 论坛上的 此帖子

后缀 SMTP 服务器

如果您的 Postfix 配置设置为需要加密,它将使用名为 smtpd_tls_mandatory_protocols 的指令。

您可以在主 Postfix 配置文件中找到它:

sudo nano /etc/postfix/main.cf

对于设置为始终使用加密的 Postfix 服务器,您可以通过设置此参数来确保不接受 SSLv3 和 SSLv2。 如果您不强制加密,则无需执行任何操作:

smtpd_tls_mandatory_protocols=!SSLv2, !SSLv3

保存您的配置。 重新启动服务以实施您的更改:

sudo service postfix restart

Dovecot IMAP 和 POP3 服务器

为了在 Dovecot 服务器上禁用 SSLv3,您需要调整一个名为 ssl_protocols 的指令。 根据您的发行版打包方法,SSL 配置可能保存在备用配置文件中。

对于大多数发行版,您可以通过打开此文件来调整此指令:

sudo nano /etc/dovecot/conf.d/10-ssl.conf

在内部,如果您使用的是 Dovecot 2.1 或更高版本,请将 ssl_protocols 指令设置为禁用 SSLv2 和 SSLv3:

ssl_protocols = !SSLv3 !SSLv2

如果您使用低于 2.1 的 Dovecot 版本,您可以将 ssl_cipher_list 设置为禁止 SSLv3,如下所示:

ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL:!SSLv3

保存并关闭文件。

重新启动服务以实施您的更改:

sudo service dovecot restart

进一步的步骤

除了服务器端应用程序之外,您还应该更新任何客户端应用程序。

特别是,Web 浏览器可能会因为它们的降压协议协商而容易受到此问题的影响。 确保您的浏览器不允许 SSLv3 作为可接受的加密方法。 这可以在设置中或通过安装额外的插件或扩展来调整。

结论

由于对 SSLv3 的广泛支持,即使启用了更强的加密,这个漏洞也是深远而危险的。 作为使用 SSL 加密的任何资源的消费者和提供者,您需要采取措施保护自己。

请务必检查所有可能以任何形式利用 SSL/TLS 的网络可访问服务。 通常,这些应用程序需要明确的指令来完全禁用较弱的加密形式,如 SSLv3。