SMB 安全增强功能

本文介绍 Windows Server 和 Windows 中的 SMB 安全增强功能。

SMB 加密

SMB 加密提供 SMB 数据端对端加密,并防止数据在未受信任的网络中遭到窃听。 你可做出最少努力来部署 SMB 加密,但对于专用硬件或软件,可能需要额外成本。 它对 Internet 协议安全性 (IPsec) 或 WAN 加速器无要求。 可针对每次共享配置 SMB 加密,也可针对整个文件服务器进行配置,或者在映射驱动器时进行配置。

注意

SMB 加密不涉及静态安全性,这通常由 BitLocker 驱动器加密处理。

对于需要保护敏感数据免受拦截攻击的任何场景,可以考虑进行 SMB 加密。 可能的方案包括:

  • 使用 SMB 协议移动信息工作者的敏感数据。 SMB 加密在文件服务器和客户端之间提供端到端的隐私和完整性保障。 无论传输数据的网络如何(例如是由非 Microsoft 提供商维护的广域网 (WAN) 连接),它都提供这种安全性。
  • 借助 SMB 3.0,文件服务器可为服务器应用程序(如 SQL Server 或 Hyper-V)提供持续可用的存储。 启用 SMB 加密可提供保护信息免受窥探攻击的机会。 SMB 加密比大多数存储区域网络 (SAN) 所需的专用硬件解决方案更容易使用。

Windows Server 2022 和 Windows 11 引入了用于 SMB 3.1.1 加密的 AES-256-GCM 和 AES-256-CCM 加密套件。 Windows 连接到支持它的另一台计算机时,会自动协商这种更高级的密码方法。 你也可通过组策略强制执行此方法。 Windows 仍支持 AES-128-GCM 和 AES-128-CCM。 默认情况下,AES-128-GCM 与 SMB 3.1.1 协商,实现了安全和性能的最佳平衡。

Windows Server 2022 和 Windows 11 SMB 直通现在支持加密。 以前,启用 SMB 加密会禁用直接数据放置,从而使 RDMA 性能与 TCP 一样慢。 现在,数据在放置之前进行加密,使性能下降相对较小,同时增加了 AES-128 和 AES-256 保护的数据包的隐私。 可使用Windows 管理中心Set-SmbServerConfigurationUNC 强化组策略来启用加密。

此外,Windows Server 故障转移群集现支持对加密群集共享卷 (CSV) 和存储总线层 (SBL) 的节点内存储通信进行精细控制。 此支持意味着在使用存储空间直通和 SMB 直通时,你可在群集本身内部加密东-西通信来提高安全性。

重要

请注意,与不加密相比,任何端到端的加密保护都会产生显著的性能操作成本。

启用 SMB 加密

你可以为整个文件服务器启用 SMB 加密,也可以只为特定文件共享启用 SMB 加密。 可以使用以下方法之一来启用 SMB 加密。

使用 Windows Admin Center 启用 SMB 加密

  1. 下载并安装 Windows Admin Center
  2. 连接到文件服务器。
  3. 选择“文件和文件共享”
  4. 选择“文件共享”选项卡。
  5. 若要在共享上要求加密,请选择共享名称并选择“启用 SMB 加密”。
  6. 若要在服务器上要求加密,请选择“文件服务器设置”。
  7. 在“SMB 3 加密”下,选择“所有客户端都需要(其他客户端被拒绝)”,然后选择“保存”。

使用 UNC 强化来启用 SMB 加密

通过 UNC 强化,可将 SMB 客户端配置为要求加密,而不考虑服务器加密设置。 此功能有助于防止拦截攻击。 若要配置 UNC 强化,请参阅 MS15-011:组策略中的漏洞可能允许远程执行代码。 有关拦截攻击防御措施的详细信息,请参阅如何通过 SMB 客户端防御保护用户免受拦截攻击

使用 Windows PowerShell 启用 SMB 加密

  1. 登录到服务器,并在提升的会话中在计算机上运行 PowerShell。

  2. 若要为单个文件共享启用 SMB 加密,请运行以下命令。

    Set-SmbShare –Name <sharename> -EncryptData $true
    
  3. 若要为整个文件服务器启用 SMB 加密,请运行以下命令。

    Set-SmbServerConfiguration –EncryptData $true
    
  4. 若要创建新的 SMB 文件共享并启用 SMB 加密,请运行以下命令。

    New-SmbShare –Name <sharename> -Path <pathname> –EncryptData $true
    

在启用加密的情况下映射驱动器

  1. 若要在使用 PowerShell 映射驱动器时启用 SMB 加密,请运行以下命令。

    New-SMBMapping -LocalPath <drive letter> -RemotePath <UNC path> -RequirePrivacy $TRUE
    
  2. 若要在使用 CMD 映射驱动器时启用 SMB 加密,请运行以下命令。

    NET USE <drive letter> <UNC path> /REQUIREPRIVACY
    

部署 SMB 加密的注意事项

默认情况下,为文件共享或服务器启用 SMB 加密时,只允许 SMB 3.0、3.02 和 3.1.1 客户端访问指定的文件共享。 此限制会加强管理员为访问共享的所有客户端数据提供保护的意识。

但是,在某些情况下,管理员可能想要允许对不支持 SMB 3.x 的客户端进行未加密访问。 这种情况可能发生在使用混合客户端操作系统版本的过渡期间。 若要允许对不支持 SMB 3.x 的客户端进行未加密访问,请在 Windows PowerShell 中输入以下脚本:

Set-SmbServerConfiguration –RejectUnencryptedAccess $false

注意

建议在部署加密后不允许未加密的访问。 改为更新客户端以支持加密。

下一部分中所述的预身份验证完整性功能可防止拦截攻击将连接从 SMB 3.1.1 降级到 SMB 2.x(它将使用未加密的访问)。 但是,它不会阻止降级到 SMB 1.0,这也会导致未加密的访问。

为了保证 SMB 3.1.1 客户端始终使用 SMB 加密来访问已加密共享,必须禁用 SMB 1.0 服务器。 有关说明,请使用 Windows Admin Center 连接到服务器,打开“文件和文件共享”扩展,然后选择“文件共享”选项卡,系统将提示你卸载。 有关详细信息,请参阅如何在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3

如果“–RejectUnencryptedAccess”设置保留为默认设置“$true”,则仅允许支持加密的 SMB 3.x 客户端访问文件共享(SMB 1.0 客户端也会被拒绝)。

部署 SMB 加密时,请考虑以下问题:

  • SMB 加密使用高级加密标准 (AES)-GCM 和 CCM 算法加密和解密数据。 无论 SMB 签名设置如何,AES-CMAC 和 AES-GMAC 还能为加密的文件共享提供数据完整性验证(签名)。 如果要在不加密的情况下启用 SMB 签名,可继续执行此操作。 有关详细信息,请参阅满怀信心地配置 SMB 签名
  • 如果你的组织使用广域网 (WAN) 加速设备,则当你尝试访问文件共享或服务器时,可能会遇到问题。
  • 使用默认配置(其中不允许对已加密的文件共享进行未加密访问)时,如果不支持 SMB 3.x 的客户端尝试访问已加密的文件共享,则事件 ID 1003 会记录到 Microsoft-Windows-SmbServer/Operational 事件日志中,并且客户端将收到一条“拒绝访问”错误消息。
  • SMB 加密与 NTFS 文件系统中的加密文件系统 (EFS) 无关,SMB 加密不需要也不依赖于使用 EFS。
  • SMB 加密与 BitLocker 驱动器加密无关,SMB 加密不需要也不依赖于使用 BitLocker 驱动器加密。

预身份验证完整性

SMB 3.1.1 能够检测到拦截攻击,这些攻击尝试通过使用预身份验证完整性来使客户端和服务器协商的协议或功能降级。 预身份验证完整性是 SMB 3.1.1 中的一项强制性功能。 它利用加密哈希来防止对协商和会话设置消息进行任何篡改。 生成的哈希值被用作输入以派生会话的加密密钥,包括其签名密钥。 此过程使得客户端和服务器可以相互信任连接和会话属性。 当客户端或服务器检测到这种攻击时,会断开连接,并在 Microsoft-Windows-SmbServer/Operational 事件日志中记录事件 ID 1005。

由于这种保护,并且为了充分利用 SMB 加密的完整功能,我们强烈建议你禁用 SMB 1.0 服务器。 有关说明,请使用 Windows Admin Center 连接到服务器,打开“文件和文件共享”扩展,然后选择“文件共享”选项卡,系统将提示你卸载。 有关详细信息,请参阅如何在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3

新签名算法

SMB 3.0 和 3.02 使用较新的加密算法进行签名:基于高级加密标准 (AES) 密码的消息身份验证代码 (CMAC)。 SMB 2.0 使用较旧的 HMAC-SHA256 加密算法。 AES-CMAC 和 AES-CCM 可以显著地加快大多数支持 AES 指令的新式 CPU 上的数据加密。

Windows Server 2022 和 Windows 11 引入了用于 SMB 3.1.1 签名的 AES-128-GMAC。 Windows 连接到支持它的另一台计算机时,将自动协商这种性能更佳的密码方法。 Windows 仍支持 AES-128-CMAC。 有关详细信息,请参阅满怀信心地配置 SMB 签名

禁用 SMB 1.0

从 Windows Server 版本 1709 和 Windows 10 版本 1709 开始,默认不安装 SMB 1.0。 要了解如何移除 SMB1,请使用 Windows Admin Center 连接到服务器,打开“文件和文件共享”扩展,然后选择“文件共享”选项卡,系统将提示你卸载。 有关详细信息,请参阅如何在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3

如果仍安装,应立即禁用 SMB1。 若要详细了解如何检测和禁止 SMB 1.0 的使用,请参阅停止使用 SMB1。 若要了解先前或当前需要 SMB 1.0 的软件,请参阅 SMB1 产品信息中心