强制 Windows 8.1 仅使用 SMB3?

强制 Windows 8.1 仅使用 SMB3?

有没有办法(间接、黑客或其他方式)将 Windows 8.1 限制为仅限 SMB3,并阻止其接受或提供 SMB2 连接?

我发现在 8.1 上,SMB2 和 SMB3 共享相同的堆栈,因此无法在内部禁用 SMB2 功能(通过终止mrxsmb20或类似)而不会影响 SMB3。

但是,也有可能存在其他有效关闭它的方法,比如通过防火墙、某些软件、针对会话的策略或设置、或连接的协议要求和宣传功能(也许是 SMB2 无法满足的方式)。没有禁用堆栈。

由于我的 LAN 设备都不需要建立 SMB2 连接,因此让它接受不需要的降级旧协议是一种不好的做法(通过 SSL 协议降级发起的 crossref 安全攻击以及最近通过较旧的 SMB1 漏洞发起的攻击)。但是有没有办法在运行该版本 Windows 的设备上禁用它?

答案1

首先我要道歉,因为当时我不知道答案,答案不完整。现在我要更清楚、更正确地回答。

我自己测试过(使用 7 和 10),效果很好;应该没有理由说它不能在 Windows 8.1 上使用。我从这一页在 Microsoft 的 Technet 纪录片中。不幸的是,这并不能阻止连接到 SMBv2 文件共享,但确实阻止SMBv2 连接。这为 SMB3 安全性提供了关键区别。

默认情况下,当为文件共享或服务器启用 SMB 加密时,仅允许 SMB 3.0 客户端访问指定的文件共享。这可确保管理员保护所有访问共享的客户端的数据。

....

如果 –RejectUnencryptedAccess 设置保留其默认设置 $true,仅限具有加密功能的 SMB 3.0 客户端 被允许访问文件共享(SMB 1.0 客户端也将被拒绝)。

这段话推断,必须为特定服务器共享启用 SMB 加密才能拒绝它;换句话说,除非它被加密,否则它不会拒绝。您需要在提升的 powershell 中使用以下命令来加密您的共享。(如果您不希望在启用拒绝的情况下拒绝该共享,您也可以将其替换为无加密)$true$false

要将特定共享设置为加密:

Set-SmbShare –Name <sharename> -EncryptData $true

将所有共享设置为加密。这可能是您想要的。这将是默认设置,并将覆盖特定共享设置):

Set-SmbServerConfiguration –EncryptData $true

也可以通过修改EncryptData中的键来实现此HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters目的,方法是将 DWORD 值从0(false) 设置为1(true)。然后您必须重新启动计算机以使设置生效(您可能可以重新启动某些服务)。

要创建共享并使其加密:

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

文档描述了当启用RejectUncreyptedAccess时,SMBv1将无法连接,因为它只接受 SMBv3连接,因此也限制传入的 SMBv2 连接。

因此,如果我们没有通过将 RejectUnencryptedAccess 的值设置为 $true 来启用它,如果尚未启用(默认情况下启用),请使用以下命令:

Set-SmbServerConfiguration –RejectUnencryptedAccess $true

也可以通过修改RejectUnecryptedAccess中的键来实现此HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters目的,方法是将 DWORD 值从0(false) 设置为1(true)。然后您必须重新启动计算机以使设置生效(您可能可以重新启动某些服务)。

另供参考:

SMBv2 被拒绝的技术原因不是因为它未加密,而是因为它使用效率较低且安全性较低的加密算法。SMBv3 使用 AES(高级加密标准(于 1998 年发布)),而 SMBv2 使用 HMAC-Sha256(安全哈希算法(由 NSA 于 2001 年发布))。[我确实尝试阻止传入的 HMAC-Sha256,但当我尝试阻止时,它没有任何反应,因为它不被 Windows 视为“弱”算法,因此无法像 Sha1 算法那样被禁用]

使用此命令禁用 SMBv1(因为当启用 RejectUnencryptedAccess 且所有共享都加密时它是多余的,并且您无论如何都想禁用它):

Set-SmbServerConfiguration -EnableSMB1Protocol $false

同时启用 SMBv2 和 SMBv3(启用 RejectUnecryptedAccess 时 SMBv2 连接将被阻止):

Set-SmbServerConfiguration -EnableSMB2Protocol $true

虽然您在想要使用 SMBv3 时无法禁用传入的 SMBv2,但您可以通过使用提升的 powershell 或命令提示符禁用 SMBv1 客户端来禁用传入的 SMBv1:

sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi 
sc.exe config mrxsmb10 start= disabled
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol

微软的其他优秀参考资料:

答案2

El8dN8 提供的答案是正确的,只需补充一些内容:

在 Windows 10 1607 上进行一些测试后,似乎 SMBv3 与“EnableSMB2Protocol”绑定在一起。如果您禁用它,即使使用“EncryptData”:$true,您也会失去网络共享功能 - 它只会拒绝所有 SMB 版本的所有传入连接(假设您也禁用了 SMBv1)。出于某种原因,Microsoft 尚未将 SMBv2 和 v3 完全分开。

相关内容