有没有办法(间接、黑客或其他方式)将 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 完全分开。