Habilita o deshabilita los protocolos SMBv1, SMBv2 y SMBv3 en Windows

SMB (Server Message Block) es uno de los protocolos por excelencia para compartir archivos en la red local, en el año 1998 Microsoft renombró este protocolo a CIFS (antiguamente era conocido como SMB pero ha sido renombrado a CIFS (Common Internet File System)). Desde entonces, se le conoce como SMB/CIFS en muchas partes, las últimas versiones de SMB/CIFS incorporan soporte para enlaces simbólicos y duros, mayores tamaños de archivos, e incluso tenemos autenticación y transferencia de archivos segura utilizando protocolos criptográficos. Samba es la implementación libre del protocolo SMB/CIFS de Windows, por lo que tendremos compatibilidad entre los sistemas de Microsoft y sistemas operativos basados en Linux y Unix sin tener problemas. Hoy en RedesZone os vamos a explicar cómo habilitar o deshabilitar los diferentes protocolos SMBv1, SMBv2 y SMBv3 que existen hoy en día en sistemas operativos Windows.

Características de SMB/CIFS en sus diferentes versiones

SMB es un protocolo de red que nos permite compartir archivos, carpetas e impresoras en la red local entre diferentes sistemas operativos, incluyendo Windows, Linux, MacOS y cualquier sistema operativo basado en Unix que incorpore Samba. Este protocolo está dentro de la capa de aplicación, y por debajo, hace uso del puerto 445 de TCP, por tanto, las transferencias de los datos son fiables porque existe retransmisión de los datos en caso de que haya problemas. Desde el nacimiento de SMB/CIFS hasta el momento, disponemos de varias versiones que han ido incorporando mejoras en el funcionamiento y también en la seguridad del protocolo, sin embargo, no todos los servidores que funcionan con SMB/CIFS hacen uso de las últimas versiones del protocolo, por lo que podríamos encontrarnos con fallos inesperados al intentar conectarnos a un servidor SMB local.

El acceso a los recursos de SMB/CIFS se puede realizar a través de autenticación con usuarios locales, a través de autenticación basada en servidor RADIUS o LDAP, y, por supuesto, autenticación a través de active directory. A nivel de configuración, podríamos configurar el servidor para evitar las contraseñas nulas, también podríamos crear cuentas de invitado que permitirán acceder a ciertos recursos sin ningún tipo de autenticación. Otras características de SMB/CIFS es que podremos habilitar soporte para atributos extendidos de OS/2 en un recurso compartido, así como almacenar dichos atributos DOS si estamos usando sistemas operativos de Microsoft. Por supuesto, podremos establecer una máscara de creación de archivos y también de directorios, para que esos archivos o carpetas que vayamos a crear nuevos tengan unos permisos específicos.

Respecto al rendimiento de SMB/CIFS, podemos habilitar las E/S asíncronas, con el objetivo de conseguir mejores velocidades de lectura y escritura en los recursos Samba, además, esto podríamos usarlo solamente para archivos de un tamaño mayor al definido en la configuración del servidor. Cuando vamos a configurar un servidor SMB/CIFS es muy importante la versión utilizada, tanto en el servidor como en el cliente. A nivel de configuración, podremos definir diferentes parámetros para fijar el protocolo máximo a nivel de servidor soportado, y también el protocolo mínimo a nivel de servidor, con el objetivo de proporcionar la mejor seguridad a los clientes. Por ejemplo, una configuración muy segura sería soportar únicamente el protocolo SMB3, sin embargo, es posible que tengamos problemas con algunos clientes que solamente soporta hasta SMB2, por lo que lo más normal es permitir como mínimo SMB2 y como máximo SMB3.

SMB/CIFS versión 1

La primera versión de este protocolo nació en el año 1983 y se construyó haciendo uso de NetBIOS de Microsoft, sin embargo, en versiones posteriores se dejó de utilizar NetBIOS. Todas las versiones antiguas de Microsoft Windows hacen uso de SMBv1, sin embargo, las nuevas versiones de las versiones de Windows 10 y Windows Server no incorporan SMBv1 instalado en el sistema operativo por seguridad, porque se ha demostrado que este protocolo actualmente no es nada seguro y no se recomienda utilizarlo. Por ejemplo, Windows Server 2016 y posteriores y Windows 10 Fall Creators Update no integran esta versión de forma predeterminada.

También es cierto que algunos routers todavía usan en sus servidores SMB/CIFS la primera versión del protocolo, en este caso, poco o nada podemos hacer para configurarlo con versiones superiores, porque depende del fabricante en la gran mayoría de los casos. Por ejemplo, si tienes un firmware de terceros como OpenWRT o DD-WRT entonces sí podrías deshabilitar este protocolo SMBv1 y activar las últimas versiones, porque el software incorporado en el firmware lo soporta.

SMB/CIFS versión 2

Microsoft lanzó la versión SMBv2 para Windows Vista en el año 2006 y en Windows Server 2008. Aunque este protocolo es privado, se ha publicado toda su especificación para permitir que programas como Samba para Linux y Unix puedan utilizarlo y que los diferentes sistemas operativos sean interoperables, de lo contrario, solamente los sistemas operativos Windows podrían intercambiar información entre ellos.

SMB2 supone un gran cambio respecto a la primera versión, también funcionamiento como también en seguridad. SMB2 reduce el establecimiento de la conexión respecto a SMB1.0, reduciendo el número de comandos y subcomandos, además, permite enviar solicitudes adicionales antes de que llegue la respuesta a una solicitud anterior, permitiendo ahorrar mucho tiempo y mejorando la velocidad cuando tenemos una alta latencia en las conexiones, o cuando queremos conseguir el mejor rendimiento posible. Otras opciones muy importantes son la posibilidad de combinar múltiples acciones en una sola solicitud, reduciendo la cantidad de información intercambiada. SMB 2.0 incorpora una serie de identificadores para evitar la reconexión desde cero en caso de un breve corte en la red, de esta forma, no tendremos que volver a establecer la comunicación.

Esta nueva versión SMB 2.0 soporta enlaces simbólicos, almacenamiento en caché, firma de mensajes con HMAC-SHA256 y una mejor escalabilidad para tener múltiples usuarios concurrentes en el mismo servidor, además, también permite mejorar el número de recursos compartidos y archivos abiertos por el servidor. Mientras que SMBv1 utiliza tamaño de datos de 16 bits y el límite de tamaño máximo de bloque son de 64K, en SMB2 se usan 32 o 64 bits para el almacenamiento, esto significa que en enlaces de redes ultrarrápidas como pueden ser las redes Gigabit, Multigigabit o 10G, la transferencia de los archivos es mucho más rápida al enviar archivos muy grandes.

En RedesZone hemos sido capaces de conseguir velocidades de 1.2GB/s en una red 10G haciendo uso de SMB2, con un servidor NAS QNAP TS-1277 con almacenamiento SSD, y en el PC de origen también teníamos almacenamiento SSD, porque el almacenamiento tradicional con discos duros no soporta estas velocidades tan elevadas a no ser que usemos ciertos RAID de muchos discos.

Los sistemas operativos Windows Vista y Windows Server 2008 y posteriores hacen uso de SMB2 de forma predeterminada, sin embargo, es posible que aún te encuentres con SMB1 en ciertos equipos, por lo que es posible que tengas que habilitarlo específicamente para conectarte a estos servidores tan antiguos. Por último, en la versión SMB 2.1 que fue introducida en Windows 7 y Windows Server 2008 R2 se mejoró aún más el rendimiento con un nuevo mecanismo de bloqueo oportunista.

SMB/CIFS versión 3

Esta versión SMB 3.0 anteriormente se llamó SMB 2.2, se introdujo con Windows 8 y Windows Server 2012, con nuevos cambios muy importantes orientados a agregar nuevas funcionalidades y a mejorar el rendimiento de SMB2 en centro de datos virtualizados. Algunos de los cambios introducidos fueron los siguientes:

  • SMB Direct Protocol: esto permite usar SMB sobre acceso directo a memoria remota RDMA, cualquier servidor con esta versión incorpora esta funcionalidad para mejorar enormemente el rendimiento.
  • Multicanal SMB: esta característica nos permite realizar múltiples conexiones por sesión de SMB, para forzar al máximo las comunicaciones y exprimir la red local donde estemos ejecutando el servidor y los clientes.
  • Conmutación por error totalmente transparente.

Sin embargo, la característica más importante es la autenticación del usuario en el SMB, ahora se realiza totalmente cifrada, antes se realiza siempre en texto en claro, por lo que un usuario malintencionado podría poner un sniffer de red y capturar las credenciales del usuario. Gracias a esto, la autenticación se realiza de forma segura. También se ha incorporado la posibilidad de tener cifrado extremo a extremo con AES con el objetivo de cifrar o encriptar las transferencias de archivos y carpetas. Por tanto, con SMB 3.0 tenemos dos posibilidades de configuración:

  • Autenticación segura con cifrado y la transferencia de archivos y carpetas sin cifrar.
  • Autenticación e intercambio de archivos y carpetas con cifrado simétrico, esto nos proporcionará la máxima seguridad, pero podría verse perjudicado el rendimiento.

Si el servidor SMB no soporta AES-NI en su procesador, es probable que el rendimiento que consigamos a la hora de transferir archivos y carpetas sea realmente bajo, por lo que es muy recomendable que dispongas de un procesador potente con motor de cifrado por hardware. Actualmente todos los procesadores a partir del año 2015 aproximadamente disponen de esta tecnología, pero deberías revisarlo en sus especificaciones técnicas.

Además de la versión de SMB 3.0, también se introdujo la versión SMB 3.0.2 en Windows 8.1 y Windows Server 2012 R2 mejorando funcionalidades y rendimiento, además, en estos sistemas operativos ya es posible deshabilitar la versión SMB 1.0 para mejorar la seguridad, porque a la hora de conectarse los clientes pueden negociar qué protocolo SMB se va a utilizar.

Por último, Microsoft ha introducido la versión SMB 3.1.1 en Windows 10 y en Windows Server 2016 y posteriores. Esta nueva versión incorpora el cifrado simétrico AES-128-GCM para proporcionar la mejor seguridad posible y el mejor rendimiento en lectura y escritura, también tenemos la opción de configurar el modo de cifrado CCM. Además de esto, implementa una verificación de integridad previa que hace uso de un hash SHA2-512, uno de los más seguros actualmente. Por último, esta versión SMB 3.1.1 obliga a que la negociación de los clientes usando SMB 2.0 o superior sea con seguridad, es decir, autenticación con cifrado.

Habilitar o deshabilitar los diferentes protocolos SMB en Windows

Actualmente si estamos usando las últimas versiones del sistema operativo Windows, la versión SMB 1.0 viene desactivada de forma predeterminada por seguridad, porque es un protocolo que actualmente no se considera seguro, es necesario que uses SMB 2.0 o superior para no tener problemas de seguridad. No obstante, sería recomendable comprobar si tenemos habilitado o no los diferentes protocolos para saber cuáles necesitamos habilitar o deshabilitar.

A continuación, os vamos a explicar cómo detectar, deshabilitar o habilitar las diferentes versiones de Samba, lo primero que tenemos que hacer es pulsar en la tecla «Windows» y a continuación, buscar «Powershell«, pinchamos clic derecho del ratón y lo «ejecutamos como administrador«.

SMBv1 tanto cliente como servidor

Si queremos habilitar o deshabilitar el soporte para SMBv1 en nuestro equipo, primero tenemos que verificar si lo tenemos activado o desactivado.

Para detectar:

Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

Para habilitar el protocolo SMBv1 (no es recomendable por seguridad), debes poner:

Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

Para deshabilitarlo:

Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

SMBv2/SMB3 tanto cliente como servidor

Si queremos habilitar o deshabilitar el soporte para SMBv2 o SMBv3 en nuestro equipo, primero tenemos que verificar si lo tenemos activado o desactivado.

Get-SmbServerConfiguration | Select EnableSMB2Protocol

Para habilitarlo:

Set-SmbServerConfiguration -EnableSMB2Protocol $true

Para deshabilitarlo:

Set-SmbServerConfiguration -EnableSMB2Protocol $false

Esto sirve tanto para la versión SMBv2 como para la versión SMBv3, de esta forma, no tendremos un comando específico para SMBv3 porque ya viene integrado en SMBv2, pero sí deberíamos verificar si el cifrado de datos está activado, una característica única en la última versión SMBv3:

Get-SmbServerConfiguration | Select EncryptData

Si nos indica «False» significa que el cifrado de datos no está habilitado, para habilitarlo, deberemos ejecutar el siguiente comando:

Set-SmbServerConfiguration -EncryptData $True

Debes asegurarte que el servidor remoto soporta SMBv3, de lo contrario, te dará error al intentar acceder a los recursos compartidos de cualquier servidor.