保护 SMB 流量免受拦截

本文介绍攻击者可能如何使用针对 SMB 协议的拦截方法,以及如何缓解攻击。 这些概念可帮助你为 SMB 协议开发自己的深层防御策略。

什么是拦截攻击?

中间敌手 (AITM) 攻击旨在修改客户端和服务器之间的网络通信,从而使威胁行动者能够拦截流量。 拦截后,恶意行动者也许可以欺骗、篡改、披露或拒绝访问组织数据或帐户凭据。

许多组织依赖使用 SMB 在用户之间共享文件和支持其他应用程序或技术,例如 Active Directory 域服务。 由于 SMB 的采用非常广泛,它已成为攻击者的经常性攻击目标,同时可能会对整个企业产生影响。

例如,AITM 攻击可能用于工业或国家级间谍活动、敲诈勒索或查找文件中存储的敏感安全数据。 它还可以用作更广泛攻击的一部分,使攻击者能够在网络内部横向移动或以多个终结点为目标。

攻击在不断演变,攻击者经常结合使用既定方法和新方法。 在保护系统免受 SMB 拦截攻击时,有两个主要目标:

  • 减少可用的攻击方法数量。
  • 保护呈现给用户的路径。

由于许多组织中的技术和客户端的多样性,全面的防御结合了多种方法并遵循零信任原则。 在什么是零信任?一文中详细了解零信任。

下面将会介绍一些可以降低 SMB 拦截风险的典型良好做法配置。

减少可用的攻击方法

若要保护系统免受 SMB 拦截攻击,第一步应该是减小受攻击面。 受攻击面是系统容易受到网络威胁和危害的位置。

以下部分将讨论为减小受攻击面而应采取的一些基本措施。

安装 更新

在组织允许的前提下,在可用安全更新发布后定期尽快在 Windows Server 和客户端系统上安装这些更新。 安装最新安全更新是保护系统免受当前已知安全漏洞影响的最快且最简单方法,这些安全漏洞不仅会影响 SMB,而且会影响所有 Microsoft 产品和服务。

可以根据组织的要求使用几种不同的方法来安装安全更新。 典型方法如下:

考虑订阅 Microsoft 安全响应中心 (MSRC) 安全更新指南中的通知。 当发布了软件更新来解决新的和现有的常见漏洞和披露 (CVE) 时,安全更新指南通知系统会通知你。

删除 SMB 1.0

应该从不需要 SMB 1.0 的所有 Windows Server 和客户端中删除或禁用该功能。 对于确实需要 SMB 1.0 的系统,应该尽快迁移到 SMB 2.0 或更高版本。 从 Windows 10 Fall Creators Update 和 Windows Server 2019 开始,默认不再安装 SMB 1.0

提示

Windows 10 家庭版和 Windows 10 专业版在全新安装或就地升级后默认仍然包含 SMB 1.0 客户端。 此行为在 Windows 11 中发生了变化,你可以在现在默认会为 Windows 11 家庭版预览体验成员内部版本禁用 SMB1 一文中了解详细信息。

删除 SMB 1.0 会消除多个众所周知的安全漏洞,从而可以保护系统。 SMB 1.0 缺少 SMB 2.0 和更高版本中可帮助防范拦截攻击的安全功能。 例如,为防止连接泄密,SMB 3.0 或更高版本使用预身份验证完整性、加密和签名。 在 SMB 安全增强一文中了解详细信息。

在删除 SMB 1.0 功能之前,请确保计算机上没有任何应用程序和进程需要此功能。 有关如何检测和禁用 SMB 1.0 的详细信息,请参阅如何在 Windows 中检测、启用和禁用 SMBv1、SMBv2 与 SMBv3 一文。

还可以使用 Windows Admin Center 文件和文件共享工具来快速启用 SMB1 客户端连接审核和卸载 SMB 1。

禁用来宾身份验证和回退

在 SMB 1.0 中,当用户的凭据出错时,SMB 客户端将尝试进行来宾访问。 从 Windows 10 版本 1709 和 Windows Server 2019 开始,SMB2 和 SMB3 客户端默认不再允许来宾帐户访问或回退到来宾帐户。 应使用 SMB 2.0 或更高版本,并在默认未禁用来宾访问的任何系统上禁用 SMB 来宾访问。

提示

Windows 11 家庭版和专业版与其以前的默认行为没有变化;它们默认允许来宾身份验证。

禁用来宾访问时,可以防止恶意行动者创建服务器并诱骗用户使用来宾访问权限来访问该服务器。 例如,当用户访问欺骗性共享时,他们的凭据将会出错,而 SMB 1.0 将回退为使用来宾访问。 禁用来宾访问会阻止 SMB 会话连接,从而阻止用户访问该共享和任何恶意文件。

若要防止在默认未禁用来宾访问的 Windows SMB 客户端(包括 Windows Server)上使用来宾回退,请执行以下操作:

  1. 打开“组策略管理控制台”
  2. 在控制台树中,选择计算机配置 > 管理模板 > 网络 > Lanman 工作站
  3. 对于“设置”,请右键单击启用不安全的来宾登录,然后选择编辑
  4. 依次选择已启用确定

若要详细了解来宾访问默认行为,请参阅 Windows 中默认已禁用 SMB2 和 SMB3 的来宾访问一文。

禁用 WebDAV 协议

Windows 客户端可能不要求运行 WebClient 服务。 该服务提供 Web 分布式创作和版本控制 (WebDAV) 协议。 如果客户端不使用 WebDAV 通过 HTTP 或 HTTPS 访问 SMB 共享,则你可以禁用该服务。

当用户使用 WebDAV 访问文件时,无法通过 HTTPS 强制建立基于 TLS 的连接。 例如,你的服务器可能配置为要求进行 SMB 签名或加密,但如果启用了 WebDAV,则 Web 客户端可以连接到 HTTP/80。 无论 SMB 配置如何,任何建立的连接都不会加密。

已准备好实现时,可以使用组策略首选项在大量计算机上禁用该服务。 有关配置组策略首选项的详细信息,请参阅配置服务项

限制出站 SMB 目标

至少阻止发往网络外部设备的出站 SMB 流量。 阻止出站 SMB 可防止将数据发送到外部终结点。 恶意行动者经常尝试进行欺骗、篡改或网络钓鱼攻击,这些攻击会试图将用户定向到伪装成电子邮件或其他文件中的友好链接或快捷方式的恶意终结点。 若要详细了解如何阻止出站 SMB 访问,请参阅在 Windows Server 中保护 SMB 流量一文。

通过在体系结构中引入微边界和微分段来进一步贯彻这一原则。 阻止发往外部网络的出站 SMB 流量有助于防止数据直接外泄到 Internet,但是新式攻击会使用先进的技术通过攻击其他系统来间接获得访问权限,然后在网络内部横向移动。 微边界和微分段旨在减少能够直接连接到 SMB 共享的系统和用户数目,除非他们确实需要连接。 详细了解作为零信任指南的一部分的网络分段

保护协议

第二个目标是保护用户与其数据之间的路径,这称为传输中数据保护。 传输中数据保护通常涉及到使用加密、接口强化和删除不安全的协议,以提高攻击防御能力。

以下部分将讨论应采取哪些基本措施来保护 SMB 协议。

使用 SMB 3.1.1

Windows 始终会协商最高可用协议版本,确保设备和计算机支持 SMB 3.1.1。

从 Windows 10 和 Windows Server 2016 开始可以使用 SMB 3.1.1。 SMB 3.1.1 包含一个新的强制性安全功能,称为预身份验证完整性。 预身份验证完整性对早期 SMB 连接阶段进行签名或加密,以防止使用加密哈希处理来篡改协商和会话设置消息。

加密哈希处理是指客户端和服务器可以相互信任连接和会话属性。 预身份验证完整性取代了 SMB 3.0 中引入的安全方言协商。 无法关闭预身份验证完整性,但如果客户端使用较旧的方言,则不会使用预身份验证完整性。

可以通过至少强制使用 SMB 3.1.1 来进一步增强安全态势。 若要将最低 SMB 方言版本设置为 3.1.1,请在权限提升的 PowerShell 提示符下运行以下命令:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name "MinSMB2Dialect" -Value 0x000000311
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name "MaxSMB2Dialect" -Value 0x000000311

若要详细了解如何设置 Windows Server 和 Windows 中使用的最小和最大 SMB 方言,请参阅 在 Windows 中管理 SMB 方言

使用 UNC 强化来要求签名、加密和相互身份验证

通过要求至少实现相互身份验证 (Kerberos) 和完整性(SMB 签名),来为所有 SMB 共享启用 UNC 强化。 还应考虑评估隐私(SMB 加密)而不是 SMB 签名。 无需同时配置 SMB 签名和加密,因为加密隐式包含签名方法使用的签名。

注意

SMB 加密是在 Windows 8 和 Windows Server 2012 中随 SMB 3 一起引入的。 除非所有计算机都支持 SMB 3.0 或更高版本,或者是支持 SMB 3 和加密的第三方,否则不应要求加密。 如果在不支持 SMB 加密的服务器托管的客户端或 UNC 路径上配置 SMB 加密,则 SMB 客户端无法访问指定的路径。 此外,如果为服务器配置了 SMB 加密,并且服务器由不支持 SMB 加密的客户端访问,则这些客户端同样无法访问该路径。

UNC 强化提供了检查 UNC 路径以获取强制安全设置的功能,如果服务器无法满足这些设置,则会拒绝连接。 从 Windows Server 2016 和 Windows 10 开始,默认将为域控制器上的 SYSVOL 和 NETLOGON 共享启用 UNC 强化。 它是一个非常有效的防欺骗和防篡改工具,因为客户端可以验证服务器的身份并验证 SMB 有效负载的完整性。

配置 UNC 强化时,可以指定各种 UNC 路径模式。 例如:

  • \\<Server>\<Share> - 配置条目应用于指定服务器上具有指定名称的共享。
  • \\*\<Share> - 配置条目应用于任何服务器上具有指定名称的共享。
  • \\<Server>\* - 配置条目应用于指定服务器上的任何共享。

准备好实现 UNC 强化功能时,可以使用组策略将此功能应用于大量计算机。 有关通过组策略配置 UNC 强化的详细信息,请参阅安全公告 MS15-011

使用强制签名或加密按需映射驱动器

除了 UNC 强化之外,还可以在映射网络驱动器时使用签名或加密。 从 Windows 版本 1709 和更高版本开始,可以使用 Windows PowerShell 或命令提示符按需创建已加密或签名的映射驱动器。 可以使用 NET USE 命令或 PowerShell New-SmbMapping 命令通过指定 RequireIntegrity(签名)或 RequirePrivacy(加密)参数来映射驱动器。

这些命令可由管理员使用或包含在脚本中,以自动映射需要加密或完整性检查的驱动器。

这些参数不会改变签名或加密的工作方式,也不会改变方言要求。 如果你尝试映射驱动器,而服务器拒绝遵守签名或加密要求,则驱动器映射将会失败,而不是以不安全的方式进行连接。

New-SmbMapping 参考文章中了解 New-SmbMapping 命令的语法和参数。

超越 SMB

停止使用 NTLM 并提高 Kerberos 安全性。 首先可以对 NTLM 的使用启用审核,然后检查日志以查找 NTLM 的使用位置。

由于 NTLM 使用较旧的 MD4/MD5 加密哈希函数,删除 NTLM 有助于防范常见攻击,例如传递哈希、暴力破解或彩虹哈希表。 此外,与 Kerberos 等较新协议不同,NTLM 无法验证服务器的身份,因此也容易受到 NTLM 中继攻击。 使用 Kerberos 可以轻松缓解许多常见攻击。

若要了解如何在过渡到 Kerberos 的早期阶段审核 NTLM,请参阅评估 NTLM 的使用一文。 还可以阅读 Azure Sentinel 不安全协议工作簿实现指南博客文章,来了解如何使用 Azure Sentinel 检测不安全的协议。

在删除 NTLM 的同时,应考虑为脱机和票证传递攻击添加更多保护层。 在增强 Kerberos 安全性时,请使用以下项作为指导。

  1. 部署 Windows Hello 企业版或智能卡 - Windows Hello 企业版的双因素身份验证增加了一个全新的保护层。 了解 Windows Hello 企业版
  2. 强制使用长密码和短语 - 我们建议使用较长的密码长度(例如 15 个或更多字符)来提高暴力攻击防御能力。 还应避免使用常用单词或短语,使密码更安全。
  3. 为 Active Directory 域服务部署 Microsoft Entra 密码保护 - 使用 Microsoft Entra ID 密码保护来阻止特定于组织的已知弱密码和薄弱方面。 若要了解详细信息,请查看对 Active Directory 域服务强制实施本地 Microsoft Entra 密码保护
  4. 使用组托管服务帐户 (gMSA) - 已启用 gMSA 的服务采用 127 个随机字符的构造,使破解密码的暴力破解和字典攻击变得极其耗时。 在组托管服务帐户概述一文中了解什么是 gMSA。
  5. Kerberos Armoring,称为灵活身份验证安全隧道 (FAST) - FAST 可以防止 Kerberoast 攻击,因为用户的预身份验证数据受到保护,不再会受到脱机暴力破解或字典攻击。 它还可以防止来自欺骗性 KDC 的降级攻击,有关详细信息,请查看 Kerberos Armoring
  6. 使用 Windows Defender Credential Guard - Credential Guard 通过防止票证授予和缓存的服务票证被盗,使票证的本地泄露变得更加困难。 在 Windows Defender Credential Guard 的工作原理一文中了解详细信息。
  7. 考虑要求实施 SCRIL:要求使用智能卡进行交互式登录 - 在部署 SCRIL 时,AD 会将用户密码更改为随机的 128 位集,而用户不再可以使用它来进行交互式登录。 SCRIL 通常只适用于具有特定安全要求的环境。 若要详细了解无密码策略,请查看配置用户帐户以禁止密码身份验证

后续步骤

现在,你已了解用于防范 SMB 拦截攻击的一些安全控制和缓解措施,由此你也知道无法通过一项措施来防范所有拦截攻击。 目标是通过分层防御建立跨越多种技术的深思熟虑、整体性且有优先级的风险缓解组合措施。

可以继续阅读以下文章来详细了解这些概念。