Windows服务器默认启用的SMBv1协议是近年来企业内网最危险的横向移动通道之一,直接禁用是唯一正确的选择,但实际操作中往往卡在“遗留系统”这四个字上。很多运维人员不是不知道要关,而是一关就发现老旧的网络存储、多功能打印机、甚至某些工业控制模块直接失联,最终被迫重新开启。要彻底解决这个问题,必须采取“先摸底、后隔离、再迁移”的策略,而不是简单地勾选一个安全选项。

为什么SMBv1必须被强制屏蔽

SMBv1是微软在30多年前设计的协议,它完全不支持现代安全机制,没有加密、没有签名验证,极易遭受中间人攻击和重放攻击。2017年席卷全球的WannaCry勒索病毒,正是利用了SMBv1协议中的永恒之蓝漏洞进行蠕虫式传播,中招的机器不仅自身文件被加密,还会自动扫描内网其他开启445端口的设备进行攻击。微软从Windows 10秋季创意者更新和Windows Server 2016开始,会在系统闲置15天无SMBv1连接后自动卸载该组件,这个动作本身就说明了问题的严重性。在等保2.0测评中,未禁用SMBv1协议属于高风险项,直接导致合规不通过。从攻击链视角看,攻击者一旦获得内网初始立足点,首选侦察动作就是扫描445端口并探测SMB版本,SMBv1的存在等于把域控或文件服务器的权限拱手相送。

安全禁用的标准操作流程

在Windows Server上禁用SMBv1有三种主流方法,推荐使用PowerShell命令,因为它可以远程批量执行且返回明确的启用状态。打开管理员权限的PowerShell,执行以下检测命令确认当前状态:

Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

如果State显示Enabled,执行卸载命令:

Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -Remove

系统会提示需要重启,生产环境务必安排维护窗口。对于无法立即重启的服务器,可以先用以下命令临时禁用SMBv1服务而不卸载组件,重启后生效:

Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force

第二种方法是通过服务器管理器,在“删除角色和功能”向导中找到SMB 1.0/CIFS文件共享支持,取消勾选后完成卸载。第三种是通过组策略批量部署,在组策略管理编辑器中定位到计算机配置、管理模板、网络、Lanman工作站,启用“不允许SMBv1”策略。需要注意,禁用SMBv1客户端和禁用SMBv1服务端是两个独立操作,服务器如果同时作为客户端访问其他老旧设备,需要两端都处理。执行完操作后,用以下命令验证445端口上的SMB版本协商情况:

Get-SmbConnection | Select-Object ServerName,Dialect

Dialect列如果出现2.0.2、3.0、3.1.1等版本号,说明SMBv1已不再使用。

遗留系统识别与资产清点

禁用SMBv1最大的阻力不是技术操作,而是不知道哪些设备还在依赖它。在动手之前,必须建立完整的资产台账。Windows Server自带的SMB审计日志是最直接的排查工具,先在文件服务器上启用SMBv1审计:

Set-SmbServerConfiguration -AuditSmb1Access $true

此后所有通过SMBv1协议的连接尝试都会被记录到Windows事件日志中,路径为“应用程序和服务日志/Microsoft/Windows/SMBClient/Audit”。重点关注事件ID 3000,它会明确记录源IP地址和尝试访问的共享名称。建议连续收集一周以上的日志,覆盖完整的业务周期,因为很多遗留设备可能只在月底结算或特定批次任务时才发起连接。

除了审计日志,还可以通过网络流量分析来发现SMBv1通信。在核心交换机上配置端口镜像,用Wireshark抓包过滤“smb”或“smb2”关键字,查看Negotiate Protocol Request报文中的Dialect列表,如果客户端只发送NT LM 0.12方言,说明它仅支持SMBv1。对于无法安装代理的OT环境设备,这种方法几乎是唯一选择。另外,很多老旧的网络附加存储设备、门禁控制器、视频监控录像机、以及Windows XP/Server 2003系统的虚拟机,都是SMBv1依赖的重灾区,需要在资产清点中单独标记。

遗留系统的四种处理策略

清点出依赖SMBv1的设备后,不能一刀切直接禁用,需要根据设备类型和业务重要性分级处理。第一种策略是系统升级,对于仍然运行Windows Server 2003或Windows XP的遗留服务器,如果业务软件允许,直接原地升级操作系统到Windows Server 2019或2022,升级后SMBv2/v3自动启用。对于无法升级的专用设备,联系厂商获取固件更新,主流存储厂商如NetApp、Dell EMC、Synology等早已在固件中支持SMBv2/v3,只是很多用户从未更新过。

第二种策略是协议桥接,在遗留设备和现代Windows服务器之间放置一台Linux Samba网关。Samba 4.11及以上版本可以配置为同时接受SMBv1客户端连接,并以SMBv3协议将数据转发到后端Windows服务器。核心配置思路是在smb.conf中设置“server min protocol = NT1”允许老客户端连接,同时设置“client max protocol = SMB3”保证与后端通信安全。这台Samba网关本身需要加固,仅开放必要的445端口给特定源IP,并部署在隔离的VLAN中。

第三种策略是网络隔离,将仅支持SMBv1的设备划分到独立的VLAN或物理子网,通过防火墙策略严格控制访问来源。只允许特定应用服务器的IP地址访问这些设备的445端口,拒绝其他所有流量。同时在这个隔离网段内部署入侵检测规则,监控异常的SMB扫描行为。这种策略适用于短期内无法替换的工业控制设备或医疗影像设备,虽然SMBv1漏洞依然存在,但攻击面被大幅压缩。

第四种策略是替代方案,用其他协议完全绕过SMB。如果遗留设备只是用来共享文件,可以搭建一个基于WebDAV或SFTP的中间存储,让老旧设备通过HTTP或SSH协议上传下载文件,前端Windows服务器通过映射网络驱动器访问这个中间存储。对于打印机共享,可以在打印服务器上启用IPP协议,让客户端通过HTTP连接打印机,彻底切断SMB依赖。

验证与持续监控机制

禁用SMBv1不是一次性操作,Windows更新、新软件安装、甚至某些第三方驱动安装包都可能悄悄重新启用SMBv1组件。需要建立定期检查机制,通过计划任务每周执行一次检测脚本:

$smb1 = Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
if ($smb1.State -eq "Enabled") {
    Write-EventLog -LogName Application -Source "SMB1Monitor" -EventID 1001 -EntryType Warning -Message "SMBv1 is enabled on $env:COMPUTERNAME"
}

配合Windows事件收集器或SIEM平台,将所有服务器的SMBv1状态集中监控。在组策略中还可以设置“拒绝访问此计算机从网络”的安全策略,将ANONYMOUS LOGON和GUEST账户加入拒绝列表,进一步阻断SMBv1的匿名空会话攻击。对于使用Samba网关的场景,定期审计Samba日志中通过SMBv1连接的客户端列表,一旦发现某个客户端可以升级,立即将其从桥接列表中移除。

从长远来看,企业应该将SMB协议版本纳入安全基线标准,所有新上线的Windows服务器默认不安装SMBv1,所有新采购的网络设备必须在招标技术规格书中明确要求支持SMBv2及以上版本。安全团队在渗透测试中应将SMBv1探测作为固定检查项,确保没有遗漏的遗留系统。只有把技术控制和管理流程结合起来,才能真正杜绝SMBv1这个内网安全的定时炸弹。