当前位置:   article > 正文

SMB签名的基础知识(同时覆盖SMB1和SMB2)

smb1和smb2

SMB签名概述

 

服务器消息块(SMB)是Windows最常用的文件协议。SMB签名是一项功能,通过它可以在数据包级别对使用SMB的通信进行数字签名。对数据包进行数字签名可以使数据包的接收者确认其来源和真实性。SMB协议中的这种安全机制有助于避免诸如篡改数据包和“中间人”攻击之类的问题。

 

SMB签名在所有当前受支持的Windows版本中都可用,但是默认情况下仅在域控制器上启用SMB签名。建议将其用于域控制器,因为SMB是客户端用于下载组策略信息的协议。SMB签名提供了一种确保客户端接收到真正的组策略的方法。

 

SMB签名是在Windows 2000中引入的(当时它还被移植回Microsoft Windows NT 4.0和Microsoft Windows 98)。随着Windows Vista和Windows Server 2008中SMB2的引入,使用新的哈希算法(HMAC SHA-256代替了旧的MD5)改进了签名。当时,设置已更新,以简化配置和互操作性(您可以在后面的文章中找到详细信息)。SMB2签名的另一个重要改进是性能。在SMB1中,启用签名会大大降低性能,尤其是在通过WAN时。如果将SMB2加签名用于1GbE网络和现代CPU,则与SMB1相比,性能下降的幅度有限。如果使用更快的网络(例如10GbE),则签名对性能的影响会更大。

 

SMB1签名配置和默认值

 

有两种主要方法可以为SMB1客户端和SMB1服务器配置签名。设置组策略来配置它比较容易。例如,这是默认情况下如何将域控制器配置为要求签名。另一种方法是使用注册表设置。在每一侧(SMB1客户端和SMB1服务器),可以将SMB1签名设置为“必需”,“启用”或“禁用”。

 

这是SMB1客户端签名设置的摘要:

 

表格1

设置         组策略设置     注册表项

需要         数字签名通信(始终)–已启用         RequireSecuritySignature = 1

已启用*  数字签名通信(如果服务器同意)–已启用     EnableSecuritySignature = 1,RequireSecuritySignature = 0

残障人士         数字签名通信(如果服务器同意)–禁用         EnableSecuritySignature = 0,RequireSecuritySignature = 0

这是SMB1服务器签名设置的摘要:

 

表2

设置         组策略设置     注册表项

需要***  数字签名通信(始终)–已启用         RequireSecuritySignature = 1

已启用     数字签名通信(如果客户同意)–已启用         EnableSecuritySignature = 1,RequireSecuritySignature = 0

残废**     数字签名通信(如果客户同意)–已禁用         EnableSecuritySignature = 0,RequireSecuritySignature = 0

*在SMB1客户端上签名的默认设置为“已启用”。

**在SMB1服务器上签名的默认设置为“禁用”。

***用于在域控制器上签名的默认设置(通过组策略定义)为“必需”。

 

组策略设置位于“计算机配置” Windows“设置”“安全设置”“本地策略”“安全选项”下。

客户端注册表项存储在HKEY_LOCAL_MACHINESystemCurrentControlSetServicesLanmanWorkStationParameters下。

服务器注册表项存储在HKEY_LOCAL_MACHINESystemCurrentControlSetServicesLanmanServerParameters下。

所有注册表项的类型均为DWORD。

 

SMB2签名配置和默认值

 

SMB2通过仅设置一项即可简化此配置:是否需要签名。可以通过组策略或注册表设置在SMB2客户端和SMB2服务器上进行配置。在每一侧,签名都可以设置为“必需”或“不需要”。

 

这是SMB2客户端和SMB2服务器签名设置的摘要:

 

表3

设置         组策略设置     注册表项

必填*       数字签名通信(始终)–已启用         RequireSecuritySignature = 1

不需要**         数字签名通信(始终)–已禁用         RequireSecuritySignature = 0

*在域控制器上签名的默认设置(通过组策略定义)为“必需”。

**在SMB2服务器和SMB客户端上签名的默认设置为“不需要”。

 

组策略设置位于“计算机配置” Windows“设置”“安全设置”“本地策略”“安全选项”下。

客户端注册表项存储在HKEY_LOCAL_MACHINESystemCurrentControlSetServicesLanmanWorkStationParameters下。

服务器注册表项存储在HKEY_LOCAL_MACHINESystemCurrentControlSetServicesLanmanServerParameters下。

所有注册表项的类型均为DWORD。

 

SMB签署有效行为

 

SMB客户端和SMB服务器之间进行了协商,以决定是否将有效使用签名。

 

以下是SMB2的有效行为的摘要:

 

表4

服务器–必需         服务器–不需要

客户–必填     签     签

客户–不需要         签*  未签名**

以下是Windows当前版本中SMB1的有效行为的摘要:

 

表5

服务器–必需         服务器–已启用     服务器–禁用

客户–必填     签     签     签

客户端-已启用        签*  签     未签名**

客户端–禁用         签     未签名     未签名

*域控制器SMB流量的默认值。

**所有其他SMB流量的默认值。

 

较旧的SMB1签名行为

 

关于SMB1签名的一个常见混淆源是,较早版本的Windows具有不同的签名行为。如http://support.microsoft.com/kb/950876所述,该行为在2008年进行了更改,以匹配Windows Server 2008和Windows Vista的行为。以下是Windows Server 2003和Windows XP(或更早版本)的早期版本的有效行为的摘要:

 

表6

旧服务器–必需     旧服务器-已启用   旧服务器–禁用

老客户–必填         签     签     无法连接

旧客户端-已启用   签*  签     未签名**

老客户-残疾人        无法连接         未签名     未签名

*域控制器SMB1流量的默认值。

**所有其他SMB1流量的默认值。

 

如果您有旧的SMB1服务器或旧的SMB1客户端,则应对其进行修补或更新,以消除在配置错误的环境中连接失败的可能性。

 

更改SMB签名行为

 

通常,建议您保留默认的SMB签名设置。但是,客户有时希望在特定情况下重新配置SMB签名。例如,客户可能需要:

 

提高域控制器中的SMB性能。的确,SMB签名将需要进行其他处理以进行哈希计算,因此您可以通过禁用“域控制器”上的“必需”设置来提高域控制器SMB的性能。但是,我们强烈建议不要更改默认值,因为它还会使您的组策略受到篡改和中间人攻击。

通过禁用域控制器上的“必需”设置,允许使用WAN“优化”设备来加快分支机构和总部之间的SMB流量。同样,您是以性能换取安全性。尽管这些设备可能是合法的,但它们本质上是充当代理的角色,并且可以中继过时的组策略设置甚至是被篡改的组策略设置(如果受到威胁)。

提高不是域控制器的SMB客户端或SMB服务器的安全性。通过在SMB客户端或SMB服务器上启用“必需”设置,可以强制对所有SMB通信进行签名。不建议对所有SMB通信进行签名,因为这将需要其他处理(用于哈希计算),并且会降低SMB性能。

如果您决定必须更改SMB签名设置,则建议使用“数字签名通信(始终)”组策略设置。如果无法通过组策略执行此操作,则可以使用“ RequireSecuritySignature”注册表设置。

 

重要说明:我们不再建议使用“数字签名通信(如果客户同意)”或“数字签名通信(如果服务器同意)”组策略设置。我们也不再建议使用“ EnableSecuritySignature”注册表设置。这些仅影响SMB1行为的选项可以由“(始终)数字签名通信”组策略设置或“ RequireSecuritySignature”注册表设置有效地代替。

 

参考文献

 

这是一些知识库文章(支持)和TechNet文章,它们提供了有关SMB签名的其他详细信息。请仔细解释这些引用,因为其中一些引用了较旧的SMB1行为。

 

http://support.microsoft.com/kb/887429-较旧版本的OS的服务器消息块签名概述

http://support.microsoft.com/kb/916846-组策略或注册表中SMB签名不匹配

http://support.microsoft.com/kb/950876-Windows Server 2003和Windows XP修复程序,以匹配Windows Server 2008或Windows Vista SP1签名。

http://technet.microsoft.com/zh-cn/library/cc728025.aspx-组策略:Microsoft网络客户端:对通信进行数字签名(始终)

http://technet.microsoft.com/zh-cn/library/cc785861.aspx-组策略:Microsoft网络客户端:对通信进行数字签名(如果服务器同意)

http://technet.microsoft.com/zh-cn/library/cc786681.aspx-组策略:Microsoft网络服务器:对通信进行数字签名(始终)

http://technet.microsoft.com/zh-cn/library/cc759474.aspx-组策略:Microsoft网络服务器:对通信进行数字签名(如果客户端同意)

http://technet.microsoft.com/zh-cn/library/cc512612.aspx-如何用安全性射击自己,第1部分

 

 

PS:关于SMB3的快速说明

 

尽管SMB3中用于签名的加密有所更改(SMB3使用AES-CMAC进行签名,而不是SMB2中的HMAC SHA-256),但本博客中描述的总体SMB2行为也适用于SMB3。

 

 

 

PPS:内德·皮尔(Ned Pyle)在2017年9月9日发布的便条

 

安全与安全有关–无论您想要还是不想要。如果安全至关重要,则性能无关紧要,而应用程序/传输协议安全的代价就是性能。如果您还不完全了解这些选项,那么5年前SMB中的加密已取代了签名。SMB 3.1.1(Windows 10,Windows Server 2016)中的加密性能实际上比签名性能要好得多,当然也要安全得多。

 

您应该查看:

 

https://aka.ms/stopusingsmb1-  或这些签名都无关紧要。

https://blogs.technet.microsoft.com/secguide/-  检查安全性基线,包括SMB。

https://blogs.technet.microsoft.com/srd/2015/02/10/ms15-011-ms15-014-hardening-group-policy/

https://support.microsoft.com/zh-CN/help/3000483/ms15-011-vulnerability-in-group-policy-could-allow-remote-code-execution-february-10,-2015

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/899017
推荐阅读
  

闽ICP备14008679号