nmap 漏洞扫描报告 Ubuntu 20.04 Web 服务器上存在“端口 465 上的 smtps ssl-dh-params”漏洞。如何关闭漏洞?

nmap 漏洞扫描报告 Ubuntu 20.04 Web 服务器上存在“端口 465 上的 smtps ssl-dh-params”漏洞。如何关闭漏洞?

我正在运行 Ubuntu 20.04 LEMP(Linux、Nginx、MariaDb、PHP)电子邮件/Web 服务器。我还在从我的 MacOS 客户端机器上进行一些 nmap 漏洞测试。在 MacOS 上,我使用启用了 nmap 插件的 Oh My Zsh!为了从我的 MacOS 客户端机器上对我的 Ubuntu 服务器进行一些漏洞测试,我发出了以下命令:

nmap_check_for_vulns my.server.ip.address

这是

nmap --script=vuln

在使用我的服务器的 IP 地址发出命令后,nmap 报告了以下漏洞:

465/tcp   open  smtps
| ssl-dh-params:
|   VULNERABLE:
|   Anonymous Diffie-Hellman Key Exchange MitM Vulnerability
|     State: VULNERABLE
|       Transport Layer Security (TLS) services that use anonymous
|       Diffie-Hellman key exchange only provide protection against passive
|       eavesdropping, and are vulnerable to active man-in-the-middle attacks
|       which could completely compromise the confidentiality and integrity
|       of any data exchanged over the resulting session.
|     Check results:
|       ANONYMOUS DH GROUP 1
|             Cipher Suite: TLS_DH_anon_WITH_AES_128_CBC_SHA
|             Modulus Type: Safe prime
|             Modulus Source: Unknown/Custom-generated
|             Modulus Length: 2048
|             Generator Length: 8
|             Public Key Length: 2048
|     References:
|_      https://www.ietf.org/rfc/rfc2246.txt

在服务器上,输出为sudo -ss lnpt

LISTEN                        0                             100                                                        0.0.0.0:465                                                      0.0.0.0:*                            users:(("smtpd",pid=586529,fd=6),("master",pid=2078,fd=29))

提供的 nmap 链接https://www.ietf.org/rfc/rfc2246.txt,没有提供我能找到的关于这个特定漏洞的参考。

我的问题是,这个漏洞意味着什么,哪个进程正在使用它,以及如何在不禁用端口 456 的情况下缓解 Ubuntu 20.04 服务器上的这个漏洞?我是否需要修复 postfix/dovecot SMTP 服务器中的 Diffie Hellman 问题?如果需要,我该怎么做?

答案1

匿名 TLS 是一种也称为“无证书 TLS”的配置。服务器的密钥对没有信任链,因此绝对无法防范中间人攻击。证书就是为了解决这个问题而发明的。

相关的 Postfix 文档页面是TLS_README

Postfix smtp 服务器(在 TCP 端口 465 上运行的服务)支持无证书操作,但是仅适用于内部主机

对于非公共 Internet MX 主机的服务器,Postfix 支持无证书的配置。

首先,这是设置时启用的唯一模式smtpd_tls_cert_file = none,但您不能将其用于面向公众的服务器。相反,请使用适当的全局受信任证书和密钥对。来自 Let's Encrypt 的证书和密钥对就可以了。可以按以下方式设置:

smtpd_tls_chain_files = /.../rsachain.pem
smtpd_tls_cert_file =
smtpd_tls_key_file =

rsachain.pem文件应按以下顺序包含以下内容:私钥、服务器证书、证书链。

请注意,TLS 1.3 不支持无证书操作。因此,消除警告的一种方式(实际上是一种好方法)是禁用所有较旧的版本:

smtpd_tls_protocols = >=TLSv1.3

问题在于,一些旧的或不符合标准的客户端(旧到不支持 TLS v1.3)将无法建立 TLS 连接。

另一种方法是直接禁用无证书操作:

smtpd_tls_exclude_ciphers = aNULL

无论如何,如果仅仅是因为 Postfix 没有排除这个 aNULL 而引发 nmap 警报,那么根据 Postfix 手册,这是一个误报:

无法强制远程 SMTP 客户端检查服务器证书,因此通常不需要排除匿名密码。

这样做的理由如下。

即使在服务器上禁用此功能,也很容易受到降级攻击,即仅发布此 aNULL 套件和 TLS v1.2(或更低版本)的 MitM 代理。完全避免此问题的唯一方法是配置客户不使用匿名密码和/或易受攻击的协议并检查服务器证书。您必须在每个客户端上单独配置此功能,因此没有必要在服务器上禁用它。

答案2

最高版本的Ubuntu 20.04 服务器中的 Postfix目前是 Postfixv3.4.13。 这Postfix 的最高稳定版本是 Postfix v3.6,因此缓解这些漏洞取决于您的 postfix 版本。

对于任一版本的 postfix,为了缓解这些漏洞,你需要禁用以下任何内容TLSv1.3在 Postfix 中。

在 Postfix 3.6 版本以下您可以通过编辑文件来实现这一点/etc/postfix/main.cf

sudo nano /etc/postfix/main.cf

并添加!SSLv2, !SSLv3, !TLSv1, !TLSv1.1 !TLSv1.2以下几行:

smtpd_tls_mandatory_protocols = 
smtpd_tls_protocols = 
smtp_tls_mandatory_protocols = 
smtp_tls_protocols = 

在我的情况下,我只需要!TLSv1.2通过更改以下几行来添加

smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, !TLSv1.2
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, !TLSv1.2
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, !TLSv1.2
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, !TLSv1.2

在 Postfix 3.6 版本以下,上述更改应该有效地导致 postfix“仅”接受 TLSv1.3 及更高版本的连接,从而成功缓解此漏洞。

在 Postfix 大于或等于 v3.6 中您可以通过编辑文件来实现这一点/etc/postfix/main.cf

sudo nano /etc/postfix/main.cf

并添加>=TLSv1.3以下几行:

smtpd_tls_mandatory_protocols = 
smtpd_tls_protocols = 
smtp_tls_mandatory_protocols = 
smtp_tls_protocols = 

因此您的配置/etc/postfix/main.cf应如下所示:

smtpd_tls_mandatory_protocols = >=TLSv1.3
smtpd_tls_protocols = >=TLSv1.3
smtp_tls_mandatory_protocols = >=TLSv1.3
smtp_tls_protocols = >=TLSv1.3

在 Postfix 3.6 以上版本中,上述更改应该有效地导致 postfix“仅”接受 TLSv1.3 及更高版本的连接,从而成功缓解此漏洞。

答案3

smtps是使用 TLS 加密发送电子邮件的端口。此端口由您的 SMTP 服务器使用。

要修复此漏洞,您需要更改 SMTP 服务器配置。有两种选择:

  1. 禁用端口 465。您仍然可以使用其他 SMTP 端口发送电子邮件。
  2. 修复 SMTP 服务器中的 DH 问题。

另一种方法是使用防火墙阻止端口 465。

相关内容