服务器消息块签名概述
本文介绍服务器消息块 (SMB) 2.x 和 3.x 签名,以及如何确定是否需要 SMB 签名。
简介
SMB 签名(也称为安全签名)是 SMB 协议中的安全机制。 SMB 签名意味着每个 SMB 消息都包含使用会话密钥生成的签名。 客户端将整个消息的哈希放入 SMB 标头的签名字段中。
SMB 签名首先出现在 windows 2000 Microsoft、Microsoft Windows NT 4.0 和 Microsoft Windows 98 中。 签名算法随着时间的推移而演变。 通过引入基于哈希的消息身份验证代码 (HMAC) SHA-256 改进了 SMB 2.02 签名,取代了 SMB1 中使用的旧 MD5 方法。 SMB 3.0 添加了 AES-CMAC 算法。 在 Windows Server 2022 和 Windows 11 中,我们添加了 AES-128-GMAC 签名加速。 如果需要最佳性能和保护组合,请考虑升级到最新的 Windows 版本。
SMB 签名如何保护连接
如果有人在传输过程中更改消息,哈希将不匹配,SMB 将知道有人篡改了数据。 签名还确认发件人和接收方的标识。 这可以防止中继攻击。 理想情况下,使用 Kerberos 而不是 NTLMv2,以便会话密钥启动强。 不要使用 IP 地址连接到共享,也不会使用 CNAME 记录,或者使用 NTLM 而不是 Kerberos。 请改用 Kerberos。 有关详细信息,请参阅 使用计算机名称别名代替 DNS CNAME 记录 。
SMB 签名的策略位置
SMB 签名的策略位于计算机配置>Windows 设置>安全设置>本地策略>安全选项中。
- Microsoft 网络客户端:对通信进行数字签名(始终)
注册表项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters
注册表值:RequireSecuritySignature
数据类型:REG_DWORD
数据:0(禁用),1(启用) - Microsoft网络客户端:数字签名通信(如果服务器同意)
注册表项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters
注册表值: EnableSecuritySignature
数据类型:REG_DWORD
数据:0(禁用),1(启用) - Microsoft 网络服务器:对通信进行数字签名(始终)
注册表项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters
注册表值:RequireSecuritySignature
数据类型:REG_DWORD
数据:0(禁用),1(启用) - Microsoft网络服务器:数字签名通信(如果客户端同意)
注册表项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters
注册表值: EnableSecuritySignature
数据类型:REG_DWORD
数据:0(禁用),1(启用)
请注意 ,在这些策略中,“始终”表示需要 SMB 签名,“如果服务器同意”或“如果客户端同意”表示已启用 SMB 签名。
了解“RequireSecuritySignature”和“EnableSecuritySignature”
忽略 SMB2+ 客户端和 SMB2+ 服务器的 EnableSecuritySignature 注册表设置。 因此,除非使用 SMB1,否则此设置不会起任何作用。 SMB 2.02 及更高版本的签名仅由是否需要来控制。 当服务器或客户端需要 SMB 签名时,使用此设置。 仅当两者都已将签名设置为 0 时,才会进行签名。
- | 服务器 – RequireSecuritySignature=1 | 服务器 – RequireSecuritySignature=0 |
---|---|---|
客户端 – RequireSecuritySignature=1 | Signed | Signed |
客户端 – RequireSecuritySignature=0 | Signed | 未签名 |
参考
Windows 10 中的 SMB 2 和 SMB 3 安全性:签名和加密密钥剖析
默认情况下,WINDOWS 10 版本 1709、Windows Server 版本 1709 及更高版本中未安装 SMBv1