¿Cómo verificar, habilitar o deshabilitar las versiones del protocolo SMB en Windows?

La Bloque de mensajes del servidor (SMB) El protocolo de red se utiliza para compartir y acceder a carpetas, archivos, impresoras y otros dispositivos a través de la red (puerto TCP 445). En este artículo, veremos qué versiones (dialectos) de SMB están disponibles en diferentes versiones de Windows (y cómo se relacionan con samba versiones en Linux); cómo verificar la versión SMB en uso en su computadora; y cómo habilitar o deshabilitar los dialectos SMBv1, SMBv2 y SMBv3.

Versiones del protocolo SMB en Windows

Hay varias versiones del protocolo SMB (dialectos) que han aparecido constantemente en las nuevas versiones de Windows (y samba):

  • CIFS – Windows NT 4.0
  • SMB 1.0 – Windows 2000
  • SMB 2.0 – Windows Server 2008 y Windows Vista SP1 (compatible con Samba 3.6)
  • SMB 2.1 – Windows Server 2008 R2 y Windows 7 (Samba 4.0)
  • SMB 3.0 – Windows Server 2012 y Windows 8 (Samba 4.2)
  • SMB 3.02 – Windows Server 2012 R2 y Windows 8.1 (no compatible con Samba)
  • SMB 3.1.1 – Windows Server 2016 y Windows 10 (no compatible con Samba)

Samba se utiliza para implementar el protocolo SMB en Linux / Unix. Samba 4.14 y versiones posteriores usan SMB 2.1 de forma predeterminada.

En la comunicación de red SMB, el cliente y el servidor utilizan la versión máxima del protocolo SMB admitida tanto por el cliente como por el servidor.

La tabla de resumen de compatibilidad de versiones SMB se ve así. Con esta tabla, puede determinar la versión del protocolo SMB que se selecciona cuando interactúan diferentes versiones de Windows:

Sistema operativo Windows 10, servidor de Windows 2016 Windows 8.1, servidor Win 2012 R2 Windows 8, servidor 2012 Windows 7, servidor 2008 R2 Windows Vista, Server 2008 Windows XP, Server 2003 y versiones anteriores
Windows 10, Windows Server 2016 SMB 3.1.1 SMB 3.02 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 8.1, servidor 2012 R2 SMB 3.02 SMB 3.02 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 8, servidor 2012 SMB 3.0 SMB 3.0 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 7, servidor 2008 R2 SMB 2.1 SMB 2.1 SMB 2.1 SMB 2.1 SMB 2.0 SMB 1.0
Windows Vista, Server 2008 SMB 2.0 SMB 2.0 SMB 2.0 SMB 2.0 SMB 2.0 SMB 1.0
Windows XP, 2003 y anteriores SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0

Por ejemplo, si una computadora cliente que ejecuta Windows 8.1 se conecta a un servidor de archivos con Windows Server 2016, se utilizará el protocolo SMB 3.0.2.

Según la tabla, Windows XP y Windows Server 2003 ( ya no es compatible ) solo puede usar SMB 1.0 para acceder a carpetas y archivos compartidos. SMBv1 está deshabilitado en las versiones más recientes de Windows Server (2012 R2 / 2016). Por lo tanto, si todavía usa dispositivos con Windows XP y Windows Server 2003 en su red, no podrán acceder a las carpetas compartidas en el servidor de archivos que ejecuta Windows Server 2016.

Si se usa Windows Server 2019/2016 con SMB v1.0 deshabilitado como controlador de dominio, los clientes de Windows XP / Server 2003 no podrán acceder a las carpetas SYSVOL y NETLOGON en los controladores de dominio y autenticarse con AD.

Puede recibir el siguiente error al intentar conectarse a una carpeta compartida en un servidor de archivos con SMBv1 deshabilitado:

The specified network name is no longer available

¿Cómo verificar la versión SMB en Windows?

Veamos cómo averiguar qué versiones de SMB están habilitadas en su dispositivo Windows.

En Windows 10 / 8.1 y Windows Server 2019/2016 / 2012R2, puede verificar el estado de varios dialectos del protocolo SMB usando PowerShell:

Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol

Este comando devolvió que el protocolo SMB1 está deshabilitado (EnableSMB1Protocol = True) y los protocolos SMB2 y SMB3 están habilitados (EnableSMB1Protocol = False).

Tenga en cuenta que los protocolos SMBv3 y SMBv2 están estrechamente relacionados. No puede deshabilitar o habilitar SMBv3 o SMBv2 por separado. Siempre están habilitados / deshabilitados solo juntos porque comparten la misma pila.

En Windows 7, Vista y Windows Server 2008 R2 / 2008:

Get-Item HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters | ForEach-Object {Get-ItemProperty $_.pspath}

Si no hay parámetros nombrados SMB1 o SMB2 en esta clave de registro, los protocolos SMBv1 y SMBv2 están habilitados de forma predeterminada.

También en estas versiones de Windows, puede verificar qué dialectos de cliente SMB pueden conectarse a hosts remotos:

sc.exe query mrxsmb10

SERVICE_NAME: mrxsmb10
TYPE : 2 FILE_SYSTEM_DRIVER
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

sc.exe query mrxsmb20

SERVICE_NAME: mrxsmb20
TYPE : 2 FILE_SYSTEM_DRIVER
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

En ambos casos, los servicios se están ejecutando (STATE = 4 Running). Esto significa que el dispositivo Windows actual puede conectarse a hosts SMBv1 y SMBv2.

Comprobación de dialectos SMB usados ​​con Get-SMBConnection

Al comunicarse a través de SMB, las computadoras utilizan la versión máxima de SMB admitida tanto por el cliente como por el servidor. La Get-SMBConnection El cmdlet de PowerShell se puede usar para verificar la versión SMB usada para acceder a una computadora remota:

Cómo averiguar qué dialecto SMB está en uso mediante el cmdlet Get-SmbConnection

La versión SMB utilizada para conectarse al servidor remoto (Nombre del servidor) aparece en el Dialecto columna.

Puede mostrar información sobre las versiones SMB utilizadas para acceder a un servidor específico:

Get-SmbConnection -ServerName srvfs01

Si desea mostrar si el cifrado SMB está en uso (introducido en SMB 3.0):

Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName

En Linux, puede mostrar una lista de conexiones SMB y dialectos usados ​​en samba usando el comando:

$ sudo smbstatus

En el lado del servidor SMB de Windows, puede mostrar una lista de las versiones de los protocolos SMB que los clientes están usando actualmente. Ejecute el comando:

Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique

Get-SmbSession utilizó versiones de dialectoEn este ejemplo, hay 898 clientes conectados al servidor mediante SMB 2.1 (Windows 7 / Windows 2008 R2) y 8 clientes SMB 3.02.

Puede usar PowerShell para habilitar la auditoría de las versiones SMB utilizadas para la conexión:

Set-SmbServerConfiguration –AuditSmb1Access $true

Los eventos de conexión SMB se pueden exportar desde los registros del Visor de eventos:

Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit

Dejar de usar el protocolo SMBv1 inseguro

Durante los últimos años, Microsoft ha deshabilitado sistemáticamente el protocolo SMB 1.0 heredado en todos los productos por razones de seguridad. Esto se debe a la gran cantidad de vulnerabilidades críticas en este protocolo (recuerde los incidentes con wannacrypt y petya ransomware, que explotaban una vulnerabilidad en el protocolo SMBv1). Microsoft y otras empresas de TI recomiendan encarecidamente que deje de utilizar SMBv1 en su red.

Sin embargo, deshabilitar SMBv1 puede causar problemas para acceder a archivos y carpetas compartidos en versiones más recientes de Windows 10 (Windows Server 2016/2019) desde clientes heredados (Windows XP, Windows Server 2003), SO de terceros (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, distribuciones de Linux antiguas), dispositivos NAS antiguos.

Si no quedan dispositivos heredados en su red que solo admitan SMBv1, asegúrese de deshabilitar este dialecto SMB en Windows.

Si tiene clientes que ejecutan Windows XP, Windows Server 2003 u otros dispositivos que solo admiten SMBv1, deben actualizarse o aislarse.

¿Cómo habilitar y deshabilitar SMBv1, SMBv2 y SMBv3 en Windows?

Veamos formas de habilitar y deshabilitar diferentes versiones de SMB en Windows. Cubriremos la administración de servidores y clientes SMB (son componentes de Windows diferentes).

Windows 10, 8.1 y Windows Server 2019/2016 / 2012R2:

Deshabilite el cliente y el servidor SMBv1:

Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol

Desactive solo el servidor SMBv1:

Set-SmbServerConfiguration -EnableSMB1Protocol $false

Habilite el cliente y el servidor SMBv1:

Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol

Habilite solo el servidor SMBv1:

Set-SmbServerConfiguration -EnableSMB1Protocol $true

Deshabilite el servidor SMBv2 y SMBv3:

Set-SmbServerConfiguration -EnableSMB2Protocol $false

Habilite el servidor SMBv2 y SMBv3:

Set-SmbServerConfiguration -EnableSMB2Protocol $true

Dsable smb2 con el cmdlet set-smbserverconfiguration

Windows 7, Vista y Windows Server 2008 R2 / 2008:

Deshabilitar el servidor SMBv1:

Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB1 -Type DWORD -Value 0 –Force

¿Cómo deshabilitar SMB 1 en Windows 7 a través del registro?

Habilite el servidor SMBv1:

Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB1 -Type DWORD -Value 1 –Force

Deshabilitar el cliente SMBv1:

sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled

Habilite el cliente SMBv1:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= auto

Deshabilitar el servidor SMBv2:

Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB2 -Type DWORD -Value 0 -Force

Habilite el servidor SMBv2:

Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB2 -Type DWORD -Value 1 –Force

Deshabilitar el cliente SMBv2:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled

Habilite el cliente SMBv2:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto

Puede deshabilitar el servidor SMBv1 en equipos unidos a un dominio implementando el siguiente parámetro de registro a través del GPO:

  • Clave: HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services LanmanServer Parameters
  • Nombre: SMB1
  • Tipo: REG_DWORD
  • Valor: 0

Establecer el parámetro de registro SMB2=0 para deshabilitar el servidor SMBv2.

Para deshabilitar el cliente SMBv1, debe propagar la siguiente configuración de registro:

  • Clave: HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet services mrxsmb10
  • Nombre: Inicio
  • Tipo: REG_DWORD
  • Valor: 4

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *