这些设置通常用于配置 Windows 系统的 SMB 协议行为以及相关的安全性和身份验证选项。[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters] 详细解释 说明

Windows SMB 协议行为、身份验证与安全选项完整解构分析报告

核心组件:LanmanServer(SMB 服务端,对外提供文件 / 打印共享)、LanmanWorkstation(SMB 客户端,访问远程 SMB 共享);内核驱动srv.sys(服务端)、mrxsmb*.sys(客户端重定向器);

配置来源:注册表 + 组策略 GPO,组策略会覆盖本地注册表原始值。

配置维度:①SMB 协议版本启用禁用;②SMB 数据包签名;③SMB3 会话加密;④身份验证 LM/NTLMv2 级别;⑤各种协商、超时、兼容行为;全部配置计算机级,不支持按用户配置,重启生效居多Microsoft ...。

一、底层原理

1、SMB 架构分层

应用层(LanmanServer / LanmanWorkstation svchost进程)
    ↓
内核驱动层:
    srv.sys        SMB服务端内核驱动(入站连接,TCP445)
    mrxsmb20.sys   SMB2/3客户端重定向器驱动(出站连接)
    mrxsmb10.sys   SMBv1客户端驱动(旧)
    ↓
传输层:tcpip.sys  TCP 445(SMB over TCP/IP);SMBv1兼容NetBT 139
  1. LanmanServer (Server 服务):监听 TCP445,接收外部 SMB 客户端连接,调用本地 NTFS 文件系统,输出共享资源;内核srv.sys完成绝大部分报文处理,svchost 内 LanmanServer 更多做策略加载、会话管理、安全描述符校验。
  2. LanmanWorkstation (Workstation 服务):SMB 客户端,访问\\server\share,mrxsmb20.sys把本地文件系统 IRP 转换成 SMB 网络报文发给远端服务器。
  3. 协商流程:
    1. Negotiate:客户端、服务端互相通告支持 SMB 版本(SMB1 / SMB2.02 / SMB2.1 / SMB3.0 / SMB3.1.1),协商双方共同支持最高版本。
    2. SessionSetup:身份认证(Kerberos 优先,回退 NTLM)。
    3. TreeConnect:连接目标共享。
  4. 安全机制
    • SMB 签名:对每个 SMB 报文做 HMAC 哈希,防止中间人篡改报文、SMB 中继攻击;SMBv1 使用 MD5;SMB2 使用 HMAC‑SHA256;SMB3 使用 AES‑CMAC/GMACMicrosoft ...。
    • SMB3 加密:SMB3.0 + 支持整会话 AES 加密;签名≠加密,签名只防篡改,不防窃听;加密同时提供保密性 + 完整性Microsoft ...。
    • 身份验证:SMB 会话建立依托 Windows LSA/SSP;优先 Kerberos,失败回退 NTLM;LmCompatibilityLevel控制 LM、NTLM、NTLMv2 的协商行为GitHub。
    • SMB3.1.1 预认证完整性:保护 Negotiate/SessionSetup 报文,阻止版本降级攻击,不可关闭GitHub。

关键区分:

  • SMB 签名:所有 SMB 版本都支持;校验报文完整性,明文依然可以被抓包读取。
  • SMB 会话加密:仅 SMB3.0 及以上;整条会话密文传输,抓包看不到业务数据。

2、配置生效原理

  1. GPO 组策略优先级高于本地注册表;组策略写入注册表的策略覆盖项,重启服务 / 重启整机才加载大部分 SMB 配置,热生效项极少。
  2. 两套注册表位置:
    • HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters → SMB 服务端配置(入站连接)
    • HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters → SMB 客户端配置(出站连接)
  3. 身份验证(LM‑NTLM)不属于 Lanman*,在HKLM\SYSTEM\CurrentControlSet\Control\Lsa,LSA 组件读取,控制 NTLM SSP 行为,会影响 SMB、RPC 等全部使用 NTLM 的组件GitHub。

二、依赖文件

文件 模块 角色
srv.sys 内核驱动 SMB 服务端,处理入站 TCP445 连接,报文解析,签名、加密执行内核逻辑
mrxsmb20.sys 内核驱动 SMB2/SMB3 客户端重定向器;把本地 IRP 转换 SMB 报文
mrxsmb10.sys 内核驱动 SMBv1 客户端驱动,现代系统默认禁用Microsoft ...
svchost.exe -k netsvcs 宿主进程 承载 LanmanServer、LanmanWorkstation 服务
lanmanserver.dll 服务 DLL SMB 服务端用户态策略加载、会话管理、共享 ACL 校验
lanmanworkstation.dll 服务 DLL SMB 客户端用户态,处理远程共享连接管理
lsass.exe / msv1_0.dll LSA NTLM SSP SMB 会话身份验证,LM‑NTLMv2 协商,LmCompatibilityLevel由 LSA 读取GitHub
tcpip.sys 内核网络 TCP445 传输
ntfs.sys 文件系统 SMB 服务端,读取本地共享文件
secpol.msc / gpedit.msc 策略编辑器 配置 SMB 签名、安全选项组策略,最终写入注册表
Get‑SmbServerConfiguration PowerShell 读取 / 设置 SMB 服务端运行时配置(部分可热生效)

三、依赖关系

1、服务依赖拓扑

  1. LanmanServer(Server):依赖 RPC、DCOM、NSI网络存储接口驱动;内核依赖srv.sys;停止服务,本机所有 SMB 共享全部关闭,入站 SMB 连接拒绝。
  2. LanmanWorkstation(Workstation):依赖 RPC、DNS Client、mrxsmb20.sys;停止则本机无法访问任何\\server\share远程共享。

二者不直接互相依赖,内核驱动间接耦合;域环境 Netlogon 同时依赖这两个服务Microsoft ...。

  1. 防火墙依赖:Windows 防火墙入站规则【文件和打印机共享】放行 TCP 445;SMBv1 兼容需要 TCP139 (NetBT),现代环境禁用。
  2. 权限依赖:注册表LanmanServer / LanmanWorkstation参数修改,必须管理员权限。
  3. 重启约束:
    • 修改 SMB 协议版本开关、签名注册表值:需要重启操作系统才完整加载内核驱动配置。
    • PowerShell Set‑SmbServerConfiguration部分参数可热生效,不需要重启。

2、关键注册表参数清单

📌 SMB 服务端 HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

值名 类型 含义 推荐安全值
SMB1 REG_DWORD 1 启用 SMBv1 服务端;0 禁用 0(禁用)Microsoft ...
SMB2 REG_DWORD 1 启用 SMB2/SMB3 服务端;0 禁用 1
EnableSecuritySignature REG_DWORD 如果客户端支持,则启用 SMB 签名 1Microsoft ...
RequireSecuritySignature REG_DWORD 强制入站 SMB 连接必须使用签名;拒绝未签名客户端 1(域控强烈建议 1)
RequireEncryption REG_DWORD 全局 SMB3 加密强制;拒绝非加密会话 0/1;开启仅 SMB3 客户端可连接

📌 SMB 客户端 HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters

值名 类型 含义 推荐安全值
EnableSecuritySignature REG_DWORD 出站连接,如果服务器支持,开启 SMB 签名 1Microsoft ...
RequireSecuritySignature REG_DWORD 本机向外连接 SMB 服务器,强制对方必须支持签名,否则连接失败 1

📌 NTLM 身份验证 LSA

HKLM\SYSTEM\CurrentControlSet\Control\Lsa

值名 类型 含义 推荐安全值
LmCompatibilityLevel REG_DWORD LM‑NTLM 协商级别;5 = 仅发送 NTLMv2 响应,拒绝 LM、NTLM1 5GitHub
NoLMHash REG_DWORD 不在本地存储 LM 哈希 1

LmCompatibilityLevel=5:客户端向外连接只发出 NTLMv2 响应;服务器侧会拒绝 LM/NTLMv1 身份验证。

3、配置冲突依赖

  1. SMB 签名协商逻辑
    • 服务端RequireSecuritySignature=1:任何客户端不提供 SMB 签名直接断开连接。
    • 客户端RequireSecuritySignature=1:连接远端服务器,如果服务器不支持签名,本机拒绝建立 SMB 会话。
    • 仅EnableSecuritySignature=1(Require=0):双方都支持签名就签名;一方不支持就降级无签名。
  2. SMB 加密(SMB3 Only)
    • 全局RequireEncryption=1,或者单共享‑EncryptData $true:只有 SMB3.x 客户端可以建立会话;SMB2/SMBv1 直接连接失败Microsoft ...。
  3. GPO 优先级:组策略「安全选项」会覆盖 LanmanServer / LanmanWorkstation Parameters 注册表;直接改注册表,如果 GPO 存在,下一次组策略刷新会被覆盖。

四、配套链

4.1 组策略路径

  1. SMB 签名(安全选项) 计算机配置\Windows设置\安全设置\本地策略\安全选项
  • Microsoft 网络服务器:对通信进行数字签名 (始终) → LanmanServer RequireSecuritySignature
  • Microsoft 网络服务器:对通信进行数字签名 (如果客户端同意) → LanmanServer EnableSecuritySignature
  • Microsoft 网络客户端:对通信进行数字签名 (始终) → LanmanWorkstation RequireSecuritySignature
  • Microsoft 网络客户端:对通信进行数字签名 (如果服务器同意) → LanmanWorkstation EnableSecuritySignatureGitHub
  1. LM‑NTLM 级别: 计算机配置\Windows设置\安全设置\本地策略\安全选项\LAN管理器身份验证级别 → 映射LmCompatibilityLevel。
  2. SMB 加密、审核: 计算机配置\管理模板\网络\Lanman服务器:审核不支持签名客户端、SMB 加密相关策略Microsoft ...。

4.2 PowerShell 管理配套(现代 Windows,优先使用)

# 查询SMB服务端全部配置
Get‑SmbServerConfiguration

# 设置全局强制加密(SMB3 only)
Set‑SmbServerConfiguration ‑RequireEncryption $true

# 查看本机SMB共享,单共享加密开关
Get‑SmbShare
Set‑SmbShare ‑Name ShareName ‑EncryptData $true

# 查看已建立SMB会话
Get‑SmbSession

4.3 命令行、排错配套

  1. sc qc LanmanServer、sc qc LanmanWorkstation 查看服务依赖。
  2. smbclient.exe(没有,Windows 无内置);抓包 Wireshark 过滤smb2;观察 Negotiate、SessionSetup 报文。
  3. 事件日志:Microsoft‑Windows‑SMB‑Server、Microsoft‑Windows‑SMB‑Client;可以开启审核客户端不支持签名事件 ID,排查签名导致连接失败Microsoft ...。

4.4 安全防护配套

  1. 禁用 SMBv1:PowerShell Disable‑WindowsOptionalFeature ‑Online ‑FeatureName SMB1Protocol;同时注册表LanmanServer\Parameters SMB1=0;还要禁用 mrxsmb10 驱动启动项Microsoft ...。
  2. 域控加固:域控制器强制开启服务端 RequireSecuritySignature=1,防御 SMB 中继攻击。

五、完整逻辑链路

链路 A:入站 SMB 连接完整协商(外部客户端访问本机共享)

外部客户端 → TCP 445 到达本机
    ↓ tcpip.sys → srv.sys内核驱动接收报文
Negotiate阶段:协商双方共同支持最高SMB版本
    ↓
SessionSetup身份认证:Kerberos优先,回退NTLM;LSA lsass.exe校验凭据,受LmCompatibilityLevel控制
    ↓
SMB签名协商:读取LanmanServer参数
    如果 RequireSecuritySignature=1,客户端不能提供签名 → 直接断开连接
    ↓
如果SMB3且RequireEncryption开启:协商AES加密会话;非SMB3客户端直接拒绝
    ↓
TreeConnect连接共享;ACL校验用户访问权限
    ↓
srv.sys <‑> ntfs.sys,读写本地文件,返回SMB应答报文

链路 B:本机 SMB 客户端访问远端服务器(\server\share)

用户输入 \\Server\Share
    ↓ LanmanWorkstation服务 → mrxsmb20.sys内核重定向器
发出Negotiate协商报文
    ↓
SessionSetup身份认证,LSA按照LmCompatibilityLevel构造NTLMv2凭据
    ↓
读取LanmanWorkstation\Parameters签名配置:
如果 RequireSecuritySignature=1,远端服务器不支持SMB签名 → 本机主动终止会话
    ↓
成功建立会话;本地文件IRP被mrxsmb20转换成SMB网络请求发给远端服务器

链路 C:修改注册表 / GPO 配置加载链路

管理员修改注册表 / GPO编辑安全选项
    ↓ GPO客户端服务刷新策略,写入覆盖注册表
👉 情况1:SMB版本开关、RequireSecuritySignature注册表:**重启整机,srv.sys/mrxsmb*.sys内核驱动加载新配置**
👉 情况2:PowerShell Set‑SmbServerConfiguration:部分参数热生效,通知运行中srv.sys更新运行时配置
    ↓
后续新建立SMB会话使用新安全配置;**已经存在的旧SMB会话维持旧配置,不会动态变更**

⚠️重点:已经存在的活跃 SMB 会话不会自动应用新配置;必须断开现有会话,新会话才会生效。

六、边界与约束(故障边界,高频坑)

1、协议版本边界

  1. SMBv1 强烈建议全局禁用;存在大量历史高危漏洞(EternalBlue);Win11 22H2 + 默认移除 SMBv1 组件Microsoft ...。
  2. 禁用 SMB2=0,则 SMB2、SMB3 全部关闭;SMB3 构建在 SMB2 框架之上,没有独立开关。
  3. SMB3 加密仅 SMB3.0 及以上支持;SMB2 没有会话加密能力;开启全局 RequireEncryption,老旧 SMB2 设备完全无法连接。

2、SMB 签名边界(最常见兼容故障)

  1. 服务端RequireSecuritySignature=1,所有入站连接必须支持 SMB 签名;老旧第三方 NAS、部分嵌入式设备不支持 SMB 签名,直接连接失败。
  2. 客户端RequireSecuritySignature=1,本机去连接第三方不支持签名 NAS,直接会话终止。

生产加固:域控制器强制开启 RequireSecuritySignature=1;普通文件服务器评估老旧设备兼容性,谨慎开启强制,优先 EnableSecuritySignature=1(协商优先签名,不强求)。

  1. 签名≠加密:开启 SMB 签名,报文防篡改,但抓包仍然可以读取明文业务数据;需要机密性必须 SMB3 加密。

3、身份验证 LmCompatibilityLevel 边界

  1. LmCompatibilityLevel=5:本机客户端只发送 NTLMv2;极老旧只支持 LM/NTLMv1 设备无法完成 NTLM 身份验证。
  2. 该参数全局影响全部 NTLM SSP 调用(SMB、RPC、LDAP NTLM),不是只控制 SMB。
  3. Kerberos 不受 LmCompatibilityLevel 影响;只有回退 NTLM 时才生效。

4、配置生效硬边界

  1. 注册表修改RequireSecuritySignature、SMB1/SMB2 开关,仅重启整机内核驱动加载才完整生效;只重启 LanmanServer 服务不足以刷新内核驱动配置。
  2. 已经建立的活跃 SMB 会话不会继承新配置;只有新发起会话使用新策略。
  3. GPO 组策略优先级高于本地注册表;直接改注册表,如果对应 GPO 配置存在,下次 gpupdate 会被覆盖,配置丢失。
  4. PowerShell Get‑SmbServerConfiguration读取的是运行时生效配置,可以和原始注册表不一致(GPO 覆盖)。

5、SMB 加密边界

  1. 加密粒度:全局服务器级别 RequireEncryption,或者单共享级别‑EncryptData;单共享优先级高于全局配置Microsoft ...。
  2. SMB3.1.1 预认证完整性,不能关闭;老旧客户端不兼容 SMB3.1.1 会协商降级到 SMB3.0。
  3. 开启加密后,Wireshark 抓包 SMB payload 全部密文;但是 Negotiate、SessionSetup 头部部分元数据仍然明文。

6、典型故障‑根因对照表

现象 根因
Windows 访问 NAS,报错 “指定的会话不存在” 服务器端 RequireSecuritySignature=1;NAS 固件不支持 SMB 签名
本机向外访问 SMB 共享失败,服务器本身正常 LanmanWorkstation RequireSecuritySignature=1;远端服务器不支持 SMB 签名
开启 RequireEncryption 后,老设备无法连接 老设备只支持 SMB2,SMB 加密仅 SMB3 可用
改注册表 SMB 签名参数,但现象无变化 没有重启整机;已有旧会话还在;GPO 策略覆盖注册表值
域控制器 SYSVOL 访问异常 域控强制 SMB 签名;客户端不支持签名;或者 LmCompatibilityLevel 设置过高
禁用 SMBv1 后老设备无法访问 设备只实现 SMBv1,没有 SMB2 支持,硬件老旧无固件升级

7、重大误区澄清

❌误区:SMB 签名可以加密数据,抓包看不到内容。 ✅真相:SMB 签名只提供报文完整性防篡改;业务载荷明文;加密功能是 SMB3 独立特性。

❌误区:修改 LanmanServer 注册表,重启 Server 服务就生效。 ✅真相:签名、协议版本属于内核srv.sys驱动配置,需要整机重启;重启服务不会重新加载内核驱动参数。

❌误区:LmCompatibilityLevel 只影响 SMB 协议。 ✅真相:LSA NTLM SSP 全局参数,SMB、RPC、DCOM 只要回退 NTLM 身份验证全部受该参数控制。

❌误区:新配置立刻作用在已经连接的 SMB 会话。 ✅真相:现有会话维持旧安全配置;断开重连的新会话才应用策略。

七、总结

  1. Windows SMB 分为服务端 LanmanServer(srv.sys 内核驱动,入站)、客户端 LanmanWorkstation(mrxsmb20.sys,出站);配置分为服务端参数、客户端参数两套独立注册表,组策略 GPO 优先级高于本地注册表。
  2. 四大安全配置维度:①SMB 协议版本开关;②SMB 报文签名(完整性,防中继篡改);③SMB3 会话加密(保密性 + 完整性);④LSA 的LmCompatibilityLevel控制 LM‑NTLM‑NTLMv2 身份验证协商。
  3. 关键行为:
    • RequireSecuritySignature=1:强制会话必须签名,不满足直接断开;EnableSecuritySignature=1协商优先签名,兼容降级。
    • LmCompatibilityLevel=5推荐加固,客户端只发出 NTLMv2 凭据,拒绝 LM/NTLMv1。
    • SMB3 加密仅 SMB3.x 可用,全局或单共享粒度开启,开启会拒绝 SMB2 设备。
  4. 生效硬边界:协议版本、SMB 签名注册表修改需要整机重启加载内核驱动;已经存在 SMB 会话不会自动刷新配置;GPO 会覆盖本地注册表。
  5. 加固建议:域控制器强制开启服务端RequireSecuritySignature=1;普通文件服务器评估老旧 NAS / 嵌入式设备兼容性;永久禁用 SMBv1;优先 Kerberos 身份验证,限制 NTLM 降级使用。

 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"EnablePlainTextPassword"=dword:00000000   ; 启用明文密码(0 禁用,1 启用),此项为禁用明文密码传输
"EnableSecuritySignature"=dword:00000001   ; 启用安全签名(0 禁用,1 启用),此项启用 SMB 连接的安全签名
"RequireSecuritySignature"=dword:00000000   ; 强制要求安全签名(0 禁用,1 启用),此项为禁用强制要求安全签名
"ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\
  00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,\
  77,00,6b,00,73,00,73,00,76,00,63,00,2e,00,64,00,6c,00,6c,00,00,00   ; 指定服务 DLL 的路径
"ServiceDllUnloadOnStop"=dword:00000001   ; 启动时卸载服务 DLL(0 禁用,1 启用),此项启用在停止时卸载指定的 DLL 文件
"AllowInsecureGuestAuth"=dword:00000001   ; 允许不安全的来宾身份验证(0 禁用,1 启用),此项启用来宾用户的身份验证,即使没有安全保护

说明:

  1. EnablePlainTextPassword: 如果设置为 0,则禁用明文密码传输,增加网络安全性。
  2. EnableSecuritySignature: 启用 SMB 协议中的安全签名,可以防止中间人攻击,确保数据传输的完整性。
  3. RequireSecuritySignature: 该项设置为 0 表示没有强制要求所有连接必须使用安全签名。
  4. ServiceDll: 指定了服务 DLL 文件的路径,该路径通常是某个系统服务或网络功能所依赖的动态链接库(DLL)。
  5. ServiceDllUnloadOnStop: 启用时,在服务停止时会卸载对应的 DLL 文件。
  6. AllowInsecureGuestAuth: 允许使用不安全的来宾身份验证,这可能会在网络共享中提供更简便的访问方式,但也会增加安全风险。《网络发现 对应》

这些设置通常用于配置 Windows 系统的 SMB 协议行为以及相关的安全性和身份验证选项。


《网络发现 对应》该注册表配置启用了不安全的来宾身份验证。具体来说:

Copy Code
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"AllowInsecureGuestAuth"=dword:00000001

AllowInsecureGuestAuth 设置为 1 允许使用不安全的来宾身份验证。这意味着在网络共享中,来宾用户可以不经过安全验证就访问某些资源,这样虽然提供了更方便的访问方式,但也增加了安全风险。因此,出于安全考虑,通常建议禁用此项。


 

posted @ 2025-05-26 09:56  suv789  阅读(519)  评论(0)    收藏  举报