Translated message

A translation of this page exists in English.

2016 年 4 月 12 日发布的 Samba 重要安全漏洞

Samba 是一个服务器消息块( Server Message Block,SMB)或通用互联网文件系统(Common Internet File System,CIFS)协议的开源部署。它允许兼容的 PC 共享文件、打印机和其他信息。我们已在目前支持的所有 Samba 平台上发现和修复了几个漏洞。关于 Badlock 问题(CVE-2016-2118)的更多信息,请参考知识库文章 2253041

受影响的版本:

CVE RHEL 5 samba RHEL 5 samba3x RHEL 6 samba RHEL 6 samba4 RHEL 7 Gluster Storage 受影响的 Samba 角色
CVE-2015-5370 N Y Y Y Y Y Samba 可以操作的所有可能的角色
CVE-2016-2110 Y Y Y Y Y Y Samba 可以操作的所有可能的角色
CVE-2016-2111 Y Y Y Y Y Y Classic primary DC、backup DC 或 Active Directory DC
CVE-2016-2112 Y Y Y Y Y Y Samba 可以操作的所有可能的角色
CVE-2016-2113 N N N Y Y Y Samba 可以操作的所有可能的角色
CVE-2016-2114 N N N Y Y Y Samba 可以操作的所有可能的角色
CVE-2016-2115 Y Y Y Y Y Y Samba 可以操作的所有可能的角色
CVE-2016-2118 Y Y Y Y Y Y Samba 可以操作的所有可能的角色,但对于 Active Directory DC 来说级别是 ‘严重‘。

CVE-2015-5370: DCE/RPC 代码里的多个漏洞

我们在 Samba 的 DCE/RPC 协议实现里发现多个漏洞。远程的已验证的攻击者可能利用这些漏洞来实现针对 Samba 服务器的拒绝服务攻击(导致高 CPU 负载甚至崩溃),或者用运行 Samba 的用户(root)权限执行任意代码。man-in-the-middle 攻击者也可以利用这个漏洞接管 Active Directory (AD) 对象并破解 Samba Active Directory 域控制器(DC),从而降低安全 DCE/RPC 连接的安全性。

注意:Red Hat Enterprise Linux 附带的 Samba 软件包不支持将 Samba 以 AD DC 运行,这个漏洞适用于 Samba 实现的所有角色。

CVE-2016-2118 (Badlock): SAMR 和 LSA 可能的 man- in-the-middle 攻击

关于这个漏洞的细节位于:Badlock Security Flaw in Samba - CVE-2016-2118

CVE-2016-2110: 对 NTLMSSP 可能的 Man-in-the-middle 攻击

我们在 Samba 的 NTLMSSP 验证实现里发现了几个漏洞。未验证的 man-in-the-middle 攻击者可能利用这些漏洞来清除连接的加密和完整性标记,导致数据以明文传输。攻击者也可能强制客户或服务器以明文发送数据,即使连接显性地要求加密。

不同的管理性 Samba 项目工具(例如 "net"、"samba-tool"、"ldbsearch" 或 "ldbedit")将 LDAP(带有 NTLMSSP 验证)用作客户端。

这些漏洞影响了 Samba 可以操作的所有可能的角色,且关联 CVE-2016-2112CVE-2016-2113

CVE-2016-2111: NETLOGON Spoofing 漏洞

我们发现配置为域控制器的 Samba 会使用欺骗性的名称建立与主机的安全通讯频道。能够监视网络通讯的远程攻击者可以利用这个漏洞来获取这个主机的和会话相关的信息。

这个漏洞只影响作为 classic primary DC、backup DC 或 Active Directory DC 运行的 Samba。

对于 Microsoft Windows Server,这个漏洞被称为 [CVE-2015-0005](https://technet.microsoft.com/library/security/ms15-027)。

这个漏洞的安全建议补丁引入了一个新的 smb.conf 选项:

  raw NTLMv2 auth (G)

这个参数确定 smbd(8) 是否允许 SMB1 客户
无需扩展的安全性(无 SPNEGO)就可以使用 NTLMv2 验证。

如果禁用这个选项、 lanman auth 和 ntlm auth 
只有支持 SPNEGO 的客户会被允许。这意味着 NTLMv2
只在 NTLMSSP 内部被支持。

默认值:raw NTLMv2 auth = no

CVE-2016-2112: LDAP 客户和服务器没有强制完整性保护

我们发现 Samba 的 LDAP 实现没有对 LDAP 连接强制完整性保护。man-in-the-middle 攻击者可能利用这个漏洞降低 LDAP 连接的安全性,使其不使用完整性保护,从而劫持连接。

这些漏洞影响了 Samba 可以操作的所有可能的角色。

这个漏洞的安全建议补丁引入了一个新的 smb.conf 选项:

  ldap server require strong auth (G)

"ldap server require strong auth" 选项定义了
LDAP 服务器是否要求 LDAP 通讯签名
或者签名且加密(SEAL)。可能的值是:
    no、allow_sasl_over_tls 和 yes。

“no” 允许对所有传输的简单和 SASL 绑定。

“allow_sasl_over_tls” 允许对 TLS 加密连接的简单和 SASL 绑定(无需 SIGN 或 SEAL)。
未加密的连接
只允许用 SIGN 或 SEAL 进行 SASL 绑定。

“yes” 允许对 TLS 加密连接的简单绑定。
未加密的连接只允许用 SIGN 或 SEAL 进行 SASL 绑定。

    默认值:ldap server require strong auth = yes

注意:LDAP 服务器还有选项来强制强验证。安全补丁将引入一个名为 ldap server require strong auth的新选项,可能的值为noallow_sasl_over_tlsyes

因为以前的默认行为是 'no',所以您可能需要显性地修改这个选项,直至所有客户都已调整好来处理 LDAP_STRONG_AUTH_REQUIRED 错误。Windows 客户和 Samba 成员服务器已经使用了完整性保护(integrity protection)。

CVE-2016-2113: 缺失的 TLS/SSL 证书检验可能导致 man in the middle 攻击

我们发现 Samba 在某些连接里没有检验 SSL/TLS 证书。man-in-the-middle 攻击者可能利用这个漏洞通过特殊制作的 SSL/TLS 证书假冒 Samba 服务器。

这些漏洞影响了 Samba 可以操作的所有可能的角色。

这个漏洞的安全建议补丁引入了一个新的 smb.conf 选项:

  tls verify peer (G)

这控制是否及如何限制客户检验端点的证书和名称。
可能的值为(程度递增):
    no_check,、ca_only、ca_and_name_if_available、ca_and_name 和 as_strict_as_possible。

当设置为 no_check 时,证书不会被检验,
这可能导致简单的 man-in-the-middle 攻击。

当设置为 ca_only 时,证书从 "tls ca file" 选项指定的 CA 获得签名时将被检验。
您必须设置 "tls ca file" 为有效的文件。
证书的生命周期也会被检验。
如果配置了 "tls crl file" 选项,
证书也会根据 CA CRL 进行检验。

当设置为 ca_and_name_if_available 时,所有来自 ca_only 的检查都会被执行。
此外,对点主机名将根据证书名进行检验,
如果它是应用层提供的且没有赋予
IP 地址的话。

当设置为 ca_and_name 时,所有来自 ca_and_name_if_available 的检查都将被执行。
此外还需要提供对点主机名,
甚至 IP 地址将根据证书名进行检查。

当设置为 as_strict_as_possible 时,所有来自 ca_and_name 的检查将被执行。
此外还需要配置 "tls crl file"。
以后的 Samba 版本还可能实施其他的检查。

默认值:tls verify peer = as_strict_as_possible

CVE-2016-2114: 没有实施 "server signing = mandatory"

我们发现 Samba 没有对时已 SMB1 协议的客户强制 Server Message Block (SMB) 签名。man-in-the-middle 攻击者可能利用这个漏洞来改动客户端和服务器间的通讯。

这个漏洞影响下列服务器角色:standalone server、member server、classic primary DC、backup DC 和 Active Directory DC。

迁移:

smb.conf文件里 [global] 部分的显性 client signing = mandatory以及 server min protocol = SMB2 配置选项,应该防止没有签名保护的连接。然而,这可能导致不支持 SMB2(或更高版本)的旧的客户无法连接。

CVE-2016-2115: 用于 IPC 通讯的 SMB 客户连接的完整性没有得到保护

我们发现 Samba 默认没有启用 IPC 通讯的完整性保护。man-in-the-middle 攻击者可能利用这个漏洞来查看或修改 Samba 服务器和客户间发送的数据。

这个漏洞的安全建议补丁引入了几个新的 smb.conf 选项:

  client ipc signing (G)

这控制是否允许或要求客户
将 IPC 连接的 SMB 签名用作 DCE/RPC 传输。
可能的值为 auto、mandatory 和 disabled。

当设置为 mandatory 或 default 时,SMB 签名是必需的。

如果设置为 auto,将提供 SMB 签名,但不会强制。
如果设置为 disabled,也不会强制 SMB 签名。

winbindd 到 Active Directory 域控制器的连接
总是强制签名。

    默认值:client ipc signing = default

  client ipc max protocol (G)

参数的值(字符串)是
作为 DCE/RPC 传输的 IPC 连接支持的最高的协议级别。

通常不应该设置这个选项,
因为 SMB 协议的自动协商阶段会接管对合适协议的选择。

这个值默认引用所支持的最新协议,目前是 SMB3_11。

关于可用协议的列表,请查看 client max 协议。
CORE、COREPLUS、LANMAN1、LANMAN2 会默默升级至 NT1。
   默认值:client ipc max protocol = default

    示例:client ipc max protocol = SMB2_10

  client ipc min protocol (G)

这个设置控制
用于 DCE/PRC 传输的 IPC$ 连接的最小的协议版本。

通常不需要设置这个选项
因为 SMB 协议的自动协商阶段会接管对合适协议的选择。

这个值默认引用 NT1 和
   "client min protocol" 的有效值间的较高的值。

关于可用协议的列表,请查看 client max 协议。
CORE、COREPLUS、LANMAN1、LANMAN2 会默默升级至 NT1。

    默认值:client ipc min protocol = default

    示例:client ipc min protocol = SMB3_11

迁移:

smb.conf文件里 [global] 部分的显性 client signing = mandatory配置选项。

这些漏洞影响了 Samba 可以操作的所有可能的角色。