Windows 7是否真正支持SMB核心协议?

10

我正在为一台基于Z80的旧机器开发SMB服务器。该机器运行一个非常简单的类似于MS-DOS的操作系统(没有多任务、没有用户概念、仅支持FAT文件系统,不支持Unicode,只支持8.3文件名),并且内存有限,因此我的第一个想法是仅实现SMB核心协议。我将使用TCP传输。

目前,我只有一个非常短的测试代码,它只回复SMB_COM_NEGOTIATE命令,指示所需方言为核心协议("PC NETWORK PROGRAM 1.0")。为了测试它,我尝试从运行Windows 7的计算机连接,通过在地址栏中输入"\\<server IP>" 。我已经用Wireshark验证了服务器接收到了negotiate命令并发送了一个(表面上)正确的响应。

问题:当Windows客户端接收到响应时,它会显示一个通用的“无法访问资源”错误消息(带有错误代码0x80004005),然后什么也不会发生(不会发送任何更多的SMB消息)。我期望会收到SMB_COM_TREE_CONNECT或类似的命令。

我认为可能是Windows 7不支持核心协议(它非常老,并且缺乏任何安全特性),但是,为什么它在negotiate请求中列出核心方言名称呢?也许我漏掉了一些步骤?服务器必须在negotiate响应后发送任何其他数据包吗?

客户端操作系统是Windows 7 Ultimate 64位,并附上以下Wireshark转储的请求和响应,在此请注意过程中是否有任何错误:

请求:

SMB dialect negotiate request

响应:

SMB dialect negotiate response

更新:如果我选择NT LM 0.12方言而不是核心方言,则会从客户端收到SESSION_SETUP_AND_REQUESTX命令。所以显然,核心协议在Windows 7上不受支持。无论如何,欢迎提供额外信息。

2个回答

4
我相信Windows 7支持核心协议。根据此处的说明,它会在连接到旧服务器时降级为SMB 1.0。
基于Windows 7与Samba服务器连接存在的问题,我认为指定核心协议的问题是由Windows 7机器上的LANMAN工作站/客户端设置引起的。
建议进行以下更改。
  • 启用LM和NTLM哈希作为安全策略的一部分 网络安全:LAN Manager身份验证级别 发送LM&NTLM响应
  • 根据此处更改注册表键值【HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa \【LmCompatibilityLevel】的值为0
  • 在注册表中向LanmanWorkStation和NetLogon添加以下参数 HKLM\System\CCS\Services\LanmanWorkstation\Parameters DWORD DomainCompatibilityMode = 1 DWORD DNSNameResolutionRequired = 0

    HKLM\System\CCS\Services\Netlogon\Parameters DWORD RequireSignOnSeal = 0 DWORD RequireStrongKey = 0

    可以通过注册表和安全策略对这些设置进行更改,此处列出了可能的更改。

这些更改应该确保LanmanWorkstation不使用NTLMv2会话安全。

2

这些信息基本上与@Appleman1234提供的相同(感谢!),只是更容易应用。

  1. 导出您当前的注册表设置,以便在必要时可以恢复您所拥有的内容。将以下代码放入一个.bat文件中,它将导出3个我们即将修改的注册表键到您的C:驱动器。
reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.Control.Lsa.reg
reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.services.LanmanWorkstation.Parameters.reg
reg export HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters HKEY_LOCAL_MACHINE.SYSTEM.CurrentControlSet.services.Netlogon.Parameters.reg
  1. 解除所需的注册表设置限制。以下是几乎与 @Appleman1234 建议的完全相同,只是它还启用了明文密码并禁用了安全签名。将以下代码放入 .reg 文件中并导入到您的注册表中。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"lmcompatibilitylevel"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters]
"EnablePlainTextPassword"=dword:00000001
"EnableSecuritySignature"=dword:00000000
"RequireSecuritySignature"=dword:00000000
"DomainCompatibilityMode"=dword:00000001
"DNSNameResolutionRequired"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters]
"RequireSignOrSeal"=dword:00000000
"RequireStrongKey"=dword:00000000
"RequireSignOnSeal"=dword:00000000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接