El protocolo SMB es un protocolo de comunicación cliente-servidor que Windows ha utilizado desde el principio para compartir archivos, impresoras, canalizaciones con nombre y otros recursos de red. SMB significa "bloque de mensajes del servidor". Además del intercambio regular de recursos, SMB también es útil para la comunicación entre procesos (IPC), como en las ranuras de correo.
CERRARContenido
- Dialectos del protocolo SMB
- Comprender los servicios del protocolo SMB
- Varias implementaciones de protocolos SMB
- Consideraciones de seguridad para el protocolo SMB
- Conclusión
Dialectos del protocolo SMB
El protocolo SMB ha evolucionado con el tiempo y sus distintas versiones se denominan comúnmente dialectos . Microsoft continúa trabajando arduamente para mejorar SMB con cada nueva versión de Windows. La siguiente tabla muestra los dialectos SMB utilizados en varias versiones de Windows:
Dialecto PYME | Año | Sistema operativo | Puntos clave |
PyME 1.0 | 1984 | Windows XP, 2003 y anteriores | Extremadamente hablador, Sin cifrado, Inseguro |
CIFS | 1996 | Windows 95, Windows NT 4.0 | Admite archivos más grandes, transporte directo a través de TCP/IP Admite enlaces simbólicos y físicos |
Pymes 2.0 | 2006 | Windows Vista, servidor 2008 | Reducción de la charla del protocolo. Admite el mecanismo de canalización. |
PyME 2.1 | 2010 | Windows 7, servidor 2008 R2 | Mejoras menores de rendimiento, bloqueo oportunista, soporte significativo de MTU |
Pymes 3.0 | 2012 | Windows 8, servidor 2012 | Cifrado de extremo a extremo, conmutación por error transparente para SMB, SMB directo, SMB multicanal, escalamiento horizontal para SMB |
PyME 3.02 | 2014 | Windows 8.1, servidor 2012 R2 | Mejoras de rendimiento, capacidad de desactivar CIFS/SMB 1.0 para mayor seguridad |
PyME 3.1.1 | 2015 | Windows 10, Servidor 2016, Servidor 2019 | Admite cifrado AES-128-GCM y AES-128-CCM, admite almacenamiento en caché de directorios, admite comprobaciones de integridad previas a la autenticación para mitigar los ataques MITM |
Pymes 3.1.1* | 2021 | Windows 11, servidor 2022 | Admite cifrado AES-256-GCM y AES-256-CCM, SMB directo con cifrado, Admite SMB sobre QUIC |
Como puede ver en la tabla, Windows 11 y Windows Server 2022 todavía usan el dialecto SMB 3.1.1, que tiene pocas características nuevas y mejoras de seguridad.
Comprender los servicios del protocolo SMB
Como protocolo cliente-servidor, SMB requiere un servicio de servidor ( LanmanServer ) y un servicio de cliente ( LanmanWorkstation ). Cada computadora con Windows, ya sea que ejecute un sistema operativo de servidor (como Server 2016 o Server 2019) o un sistema operativo de cliente (como Windows 10 o Windows 11), tiene los servicios LanmanServer y LanmanWorkstation . Puede verificar el estado de ambos servicios usando el comando Get-Service Lanman* PowerShell.
Ver el estado de los servicios del servidor y la estación de trabajo mediante PowerShell
Después de los infames ataques WannaCry, Petya o similares, se pidió a las personas que desactivaran estos servicios. Primero comprendamos estos servicios.
servicio de servidor lanman
Recuerde, incluso si su computadora ejecuta un sistema operativo cliente, el servicio LanmanServer se asegura de que su computadora pueda actuar como un servidor para alojar recursos compartidos SMB. Incluso si no comparte ninguna carpeta por su cuenta, existen recursos compartidos predeterminados (como admin$, C$, IPC$, etc.) que son importantes para fines administrativos. Todos estos recursos compartidos dependen del servicio LanmanServer . Puede utilizar el comando Get-SmbShare PowerShell para ver todos los recursos compartidos en su computadora.
Ver todos los recursos compartidos en su computadora usando PowerShell
La información sobre el servicio LanmanServer se almacena en la siguiente ubicación de registro:
Computadora\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer
¿Es seguro desactivar el servicio del servidor Lanman?
Como se mencionó anteriormente, el servicio LanmanServer es importante para que su computadora pueda alojar recursos compartidos SMB. Si detiene este servicio, todo el uso compartido dejará de funcionar y otras computadoras no podrán acceder a los recursos que está compartiendo en su computadora (incluidas carpetas, impresoras y recursos compartidos de administrador predeterminados). Esto debería darle una idea de lo importante que es realmente el servicio LanmanServer, particularmente para un servidor de archivos o un controlador de dominio en Active Directory (debido a los recursos compartidos sysvol y netlogon ).
Para los usuarios domésticos, si no utilizan ningún servicio para compartir archivos o impresoras, el servicio se puede desactivar de forma segura. Antes de deshabilitarlo, use el siguiente comando para verificar si hay algún servicio que dependa de él:
Obtener servicio LanmanServer -Servicios dependientes
Ver servicios dependientes en LanmanServer usando PowerShell
Puede ver que el servicio de escritorio de la ventana acoplable de mi computadora depende del servicio LanmanServer. Si desactivo LanmanServer, el servicio Docker no podrá iniciarse. Si no ve ningún servicio dependiente importante en su computadora, puede continuar y deshabilitar de forma segura el servicio LanmanServer usando el siguiente comando de PowerShell:
Establecer servicio LanmanServer -StartupType deshabilitado -PassThru | Detener-Servicio-Forzar
Deshabilitar y detener el servicio LanmanServer usando PowerShell
Reinicie su computadora después de ejecutar este comando y notará que el puerto 445 ya no está escuchando. Deshabilitar este servicio no afectará su capacidad para utilizar Internet.
Servicio de estación de trabajo Lanman
De manera similar, el servicio LanmanWorkstation en su computadora se asegura de que pueda utilizar recursos compartidos SMB e impresoras compartidas desde computadoras o servidores remotos. La información sobre este servicio se almacena en la siguiente ubicación de registro:
Computadora\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation
¿Es seguro desactivar el servicio de la estación de trabajo Lanman?
Detener el servicio LanmanWorkstation significa esencialmente detener la capacidad de la computadora para usar recursos compartidos SMB remotos. Si ejecuta el comando Get-Service LanmanWorkstation -DependentServices , notará dos servicios (Netlogon y Configuración de escritorio remoto) que dependen del servicio LanmanWorkstation. Como sugiere el nombre, netlogon es un servicio importante para el inicio de sesión y la autenticación de la red. Si lo desactiva, su computadora no podrá comunicarse correctamente con otros dispositivos de red.
Ver servicios dependientes en LanmanWorkstation usando PowerShell
Nuevamente, los usuarios domésticos que no utilizan ningún tipo de servicio de red pueden desactivar este servicio. Deshabilitarlo no afectará su capacidad para usar Internet, la impresora local (conectada mediante USB) o incluso la impresora de red (que tiene soporte TCP/IP incorporado). Recuerde, su computadora no podrá acceder a los recursos compartidos en computadoras remotas y otras computadoras no podrán acceder a su computadora. Para una computadora doméstica normal, desactivar este servicio podría ser algo bueno en términos de seguridad. Para deshabilitar el servicio LanmanWorkstation, use el siguiente comando:
Establecer servicio LanmanWorkstation -StartupType deshabilitado -PassThru | Detener-Servicio-Forzar
Deshabilitar y detener el servicio LanmanWorkstation usando PowerShell
Cuando el servicio LanmanWorkstation se detiene en una computadora, cualquiera que intente acceder a esa computadora desde la red verá el error El nombre de red especificado ya no está disponible , como se muestra en la siguiente captura de pantalla:
El nombre de red especificado ya no está disponible
Si recibe este error en su dominio o entorno de grupo de trabajo, asegúrese de que el servicio LanmanWorkstation se esté ejecutando en la computadora remota a la que está intentando conectarse. Una vez que inicie este servicio, recuerde también iniciar el servicio netlogon dependiente; de lo contrario, podría obtener el siguiente error:
Se intentó iniciar sesión, pero el servicio de inicio de sesión de red no se inició
Nota importante para ordenadores en red
Si su computadora es parte de un grupo de trabajo o red de dominio, le recomiendo dejar habilitados los servicios LanmanServer y LanmanWorkstation . Deshabilitarlos no servirá de nada, sino que le causará muchos dolores de cabeza como administrador. En lugar de deshabilitarlos, restringir adecuadamente el acceso de los puertos relevantes (TCP 139 y 445) a una red confiable será una medida de seguridad suficiente.
Varias implementaciones de protocolos SMB
El protocolo SMB es uno de los protocolos más populares para compartir archivos y recursos a través de redes. Y no sólo con Windows: también ha sido ampliamente adoptado por otros sistemas operativos, como Linux/Unix y macOS. A continuación se muestran algunas de las implementaciones más populares del protocolo SMB:
- CIFS: el sistema de archivos común de Internet (CIFS) es la implementación del protocolo SMB de Microsoft.
- Samba: una implementación para PYMES de código abierto que es muy popular en Linux/Unix y macOS.
- NQ (YNQ, jNQ, NQ Storage): esta es otra implementación para SMB desarrollada por Visuality Systems.
- Fusion File Share: anteriormente conocido como Tuxera SMB, es una implementación patentada de Samba desarrollada por Tuxera Inc.
Tenga en cuenta que el protocolo SMB no es exclusivo de Windows. Para darle una idea aproximada de la popularidad de SMB, existen muchas otras implementaciones de SMB en varios lenguajes de programación: JFileServer (basado en Java), pySMB e impacket (basado en Python), MoSMB (basado en mojo), etc.
Consideraciones de seguridad para el protocolo SMB
¿Recuerdas los infames ataques WannaCry y Petya y el exploit EternalBlue? Todos ellos conducen a una vulnerabilidad SMB 1.0, de una forma u otra. Por lo tanto, es vital cubrir algunas funciones SMB que puede utilizar para proteger la comunicación SMB en su red.
Cubriremos las siguientes mejores prácticas para asegurar la comunicación de las PYMES:
- Desactive explícitamente los dialectos SMB obsoletos (SMB 1.0 en particular) y NBT en su red.
- Restrinja el acceso de los puertos SMB a redes y clientes confiables.
- Utilice siempre el dialecto SMB más reciente (SMB 3.1.1) siempre que sea posible y habilite las funciones de seguridad.
Deshabilitar SMB 1.0
Como ya hemos comentado, SMB 1.0 ya no se considera seguro. Es ineficiente, no admite ningún cifrado y ha sido explotado en el pasado. Una mejor práctica recomendada es desactivarlo explícitamente en su red. Hay varias formas de hacerlo y cubrir todas las formas posibles está fuera del alcance de este artículo.
Recuerde, si todavía hay muchos clientes heredados (como impresoras antiguas, computadoras con Windows XP u otros dispositivos que ejecutan firmware muy antiguo) en su red, no desactive simplemente la compatibilidad con SMB 1.0 de inmediato, ya que podría causar problemas y posibles problemas. pérdida de productividad. Primero, debe habilitar el registro de auditoría y luego monitorear los registros para determinar los dispositivos que todavía usan SMB 1.0. Al determinar la cantidad de clientes antiguos, puede evaluar el impacto general de desactivar la compatibilidad con SMB 1.0 en su red. Para habilitar el registro de auditoría, ejecute el siguiente comando de PowerShell en el servidor de archivos donde están alojados todos los recursos compartidos SMB:
Establecer-SmbServerConfiguration -AuditSmb1Access $True -Force
Después de ejecutar este comando, espere unos días y luego verifique los registros de acceso en el Visor de eventos. La ubicación del archivo de registro es:
Registros de aplicaciones y servicios > Microsoft > Windows > SMBServer > Auditoría
La siguiente captura de pantalla muestra cómo se ve un registro de eventos de acceso a SMB 1.0:
Comprobación de los registros de auditoría de acceso de SMB 1.0 en el Visor de eventos
Dichos eventos se registrarán con ID de evento: 3000 y Fuente: SMBServer . Puede anotar la dirección IP del cliente e identificar dichos dispositivos, o puede usar el siguiente comando de PowerShell para ver estos eventos:
Get-WinEvent -Nombre de registro Microsoft-Windows-SMBServer/Audit | Vista fuera de la red
Una vez que identifique dichos dispositivos, podrá actualizarlos o tomar ciertas medidas para aislarlos adecuadamente del resto de la red para mitigar el riesgo de seguridad.
Cuando esté listo para desactivar la compatibilidad con SMB 1.0, siga estos pasos:
Para determinar si SMB 1.0 está habilitado, use el siguiente comando:
Obtener-SmbServerConfiguration | seleccione Habilitar protocolo SMB1
Comprobar si el protocolo SMB 1.0 está habilitado mediante PowerShell
Si ve Verdadero en la columna EnableSMB1Protocol , significa que su servidor todavía admite SMB 1.0.
Para deshabilitar la compatibilidad con SMB 1.0 en su servidor, ejecute el siguiente comando:
Establecer-SmbServerConfiguration -EnableSMB1Protocol $False -Force
Deshabilitar la compatibilidad con SMB 1.0 mediante PowerShell
Si su red ejecuta completamente los dispositivos más recientes y no hay un cliente heredado, puede desactivar la compatibilidad con SMB 2.0 y forzar a todos los dispositivos a usar el dialecto SMB 3.0, que es más seguro. Para deshabilitar SMB 2.0, use el siguiente comando:
Establecer-SmbServerConfiguration -EnableSMB2Protocol $False -Force
Para saber qué dialecto SMB utilizan la mayoría de las computadoras cliente en su red desde la perspectiva del servidor de archivos, puede usar el siguiente comando en el servidor de archivos:
Obtener-SmbSession | seleccione ClientComputerName, ClientUserName, NumOpens, Dialecto
Aquí, el comando Get-SmbSession muestra el dialecto SMB utilizado por varios clientes para comunicarse con recursos compartidos SMB alojados por el servicio LanmanServer en el servidor de archivos.
Ver las sesiones SMB para mostrar el dialecto SMB utilizado por los clientes en el servidor de archivos
La captura de pantalla anterior muestra que la mayoría de los dispositivos cliente en mi red usan SMB 3.1.1, excepto un cliente que todavía usa SMB 3.0.2 (marcado con naranja). Esto se debe a que es un dispositivo con Windows Server 2012 R2 y aún tenemos que actualizarlo a Server 2019.
Del mismo modo, puede utilizar el siguiente comando en una computadora cliente para saber qué dialecto SMB está utilizando para acceder a recursos compartidos SMB:
Obtener-SmbConnection
Ver las conexiones SMB para mostrar el dialecto SMB utilizado por un cliente en particular
Aquí, el comando Get-SmbConnection muestra el dialecto SMB utilizado para acceder a recursos compartidos SMB remotos utilizando el servicio LanmanWorkstation en su computadora local.
Restringir el tráfico SMB a una red confiable
Para restringir el tráfico SMB solo a la red confiable, puede utilizar varias técnicas, como implementar VLAN, utilizar la política IPsec o simplemente crear reglas de firewall restrictivas.
Puede configurar el Firewall de Windows Defender en cada sistema para habilitar el uso compartido de archivos e impresoras solo para perfiles privados o de dominio . Para hacerlo, use el siguiente comando en PowerShell:
Set-NetFirewallRule -DisplayGroup "Compartir archivos e impresoras" -Habilitado Verdadero -Perfil privado
Nunca habilite esta regla para el perfil público . Para hacer esto usando la interfaz de usuario, abra el Firewall de Windows Defender y luego haga clic en el enlace Permitir una aplicación o función a través del Firewall de Windows Defender en la esquina izquierda. Ahora marque la casilla Compartir archivos e impresoras en Dominio o Sólo público . No marque la casilla debajo de Público . Consulte la siguiente captura de pantalla como referencia:
Permitir compartir archivos e impresoras a través del Firewall de Windows Defender
Por supuesto, también puede utilizar el Firewall de Windows Defender con seguridad avanzada para definir reglas más restrictivas y granulares para compartir archivos e impresoras .
Una cosa más que quiero enfatizar es deshabilitar explícitamente los puertos TCP 445 y 139 en su firewall perimetral para estar absolutamente seguro de que el tráfico SMB nunca abandone su red. Dejar estos puertos expuestos a Internet supone un gran riesgo para la seguridad.
Habilitación de funciones de seguridad en SMB 3.x
Microsoft realizó algunos cambios importantes en SMB 3.0 para mejorar la seguridad y el rendimiento. Se recomienda encarecidamente ejecutar siempre el dialecto SMB más reciente (SMB 3.1.1 es el último en el momento de escribir este artículo) siempre que sea posible. SMB 3.x ofrece las siguientes características de seguridad que vale la pena mencionar:
- Cifrado PYME
- firma de pymes
- Integridad de la autenticación previa de SMB
- Limitador de tasa de autenticación SMB (solo en la próxima versión del servidor)
Cifrado PYME
El cifrado de extremo a extremo se puede habilitar en cada recurso compartido SMB individualmente o en todo el servidor de archivos. El cifrado SMB está controlado por la propiedad EncryptData de ambos servidores SMB. Para habilitar el cifrado en un recurso compartido en particular (por ejemplo, Proyectos), use el siguiente comando de PowerShell:
Set-SmbShare -Nombre Proyectos$ -EncryptData $True -Force
Para habilitar el cifrado en todo el servidor de archivos, utilice el siguiente comando de PowerShell:
Set-SmbServerConfiguration –EncryptData $True -Force
Una vez que habilite el cifrado en un recurso compartido SMB, los clientes que no admitan el cifrado no podrán acceder a él.
Habilitar el cifrado SMB en un servidor de archivos completo usando PowerShell
Ahora, podría haber situaciones (como durante el período de transición mientras se actualizan los clientes antiguos) en las que tenga que habilitar el cifrado en recursos compartidos SMB, pero aún desee permitir clientes antiguos que aún no admiten el cifrado. En esta situación, puede ejecutar el siguiente comando de PowerShell:
Set-SmbServerConfiguration -RejectUnencryptedAccess $False -Force
Esto no se recomienda, ya que anula el propósito de habilitar el cifrado en primer lugar, pero es útil para permitir clientes heredados hasta que puedan actualizarse por completo.
Firma de protocolo SMB
La firma SMB o firma de seguridad es una característica de seguridad del protocolo SMB que evita que alguien altere los datos durante la comunicación SMB. Esto se logra agregando el hash de todo el mensaje dentro del campo de firma del encabezado SMB. Si alguien cambia los datos en tránsito, el hash no coincidirá y SMB sabrá que los datos han sido manipulados. Si bien la firma SMB existe desde SMB 1.0, ha evolucionado con el tiempo para satisfacer las necesidades de seguridad modernas. SMB 1.0 admitía la firma de mensajes basada en MD5 y SMB 3.1.1 admite la firma basada en AES CMAC.
Tenga en cuenta que firmar no es lo mismo que cifrar. Si bien el cifrado dificulta que un espía lea los datos en el cable, la firma es responsable de la validación de la integridad de los datos. La firma SMB está controlada por la propiedad RequireSecuritySignature tanto del servidor como del cliente SMB. Para habilitar la firma SMB en el servidor, use el siguiente comando:
Set-SmbServerConfiguration -RequireSecuritySignature $True -Force
Hay otra propiedad denominada EnableSecuritySignature, que sólo se utiliza con SMB 1.0. Con SMB 2.0 o superior, esta configuración se ignora y no tiene ningún efecto. También puede controlar la firma de SMB en su entorno de dominio mediante la política de grupo tanto para el servidor como para los clientes SMB.
Habilitar la firma SMB usando un objeto de política de grupo
La siguiente tabla muestra cuándo se realizará la firma y cuándo no durante la comunicación SMB:
Servidor SMB RequireSecuritySignature = 0 |
Servidor SMB RequireSecuritySignature = 1 |
|
Cliente SMB RequireSecuritySignature = 0 |
No firmado | Firmado |
Cliente SMB RequireSecuritySignature = 1 |
Firmado | Firmado |
Puede ver que la firma SMB no se realizará solo cuando tanto el cliente SMB como el servidor SMB tengan EnableSecuritySignature configurado en False . En todos los demás casos, se realizará la firma.
Integridad de la autenticación previa de SMB
Se introdujo la integridad de la autenticación previa para complementar la firma de SMB. El problema con la firma SMB era que podía proteger la integridad de los datos una vez configurada la sesión SMB. Sin embargo, si alguien se convierte en intermediario durante la etapa inicial de negociación de las PYMES, aún podría alterar los datos. La integridad de la autenticación previa resolvió este problema. Es una característica de seguridad obligatoria introducida en SMB 3.1.1 que utiliza hash SHA-512 para mejorar la validación de la integridad de los datos, incluso durante la etapa inicial de establecimiento de la conexión. Protege contra ataques de degradación de protocolo en los que un atacante podría degradar una conexión cifrada SMB 3.1.1 a un protocolo SMB 2.x para dar como resultado una conexión no cifrada. Como característica obligatoria, está habilitada de forma predeterminada con SMB 3.1.1.
Todas las funciones de seguridad del servidor SMB analizadas anteriormente se pueden ver utilizando el siguiente comando de PowerShell:
Obtener-SmbServerConfiguration | seleccione EnableSMB1Protocol, EncryptData, RejectUnencryptedAccess, EnableSecuritySignature, RequireSecuritySignature
Visualización de funciones de seguridad seleccionadas de la configuración del servidor SMB
Todas estas funciones aceptan un valor booleano. Entonces, para habilitar o deshabilitar cualquier función, solo tiene que proporcionar el nombre del parámetro junto con el cmdlet Set-SmbServerConfiguration y luego escribir $true o $false para alternar la configuración de la función. El siguiente comando de PowerShell deshabilita SMB 1.0 y habilita todas las políticas de seguridad de SMB al mismo tiempo en el servidor de archivos:
Set-SmbServerConfiguration -EnableSMB1Protocol $false -EncryptData $true -EnableSecuritySignature $true -RequireSecuritySignature $true -Force
Deshabilitar SMB 1.0 y habilitar el cifrado SMB, firmar con un único comando de PowerShell
Limitador de tasa de autenticación SMB (disponible solo con la vista previa de Server vNext)
Los ataques a la mesa arcoíris o los ataques de fuerza bruta no son infrecuentes en Internet. Es realmente una mala idea exponer los puertos SMB en Internet, ya que SMB no tiene funciones integradas para ralentizar dichos ataques. Con la potencia informática moderna, una PC normal hoy en día puede probar miles de contraseñas por segundo.
Con la próxima versión, Windows Server vNext, que aún está en fase de vista previa, Microsoft introdujo una nueva característica SMB para ralentizar este tipo de ataques de fuerza bruta. Esta característica se conoce como limitador de tasa de autenticación SMB (o limitador de tasa SMB para abreviar) y se puede controlar mediante el parámetro -InvalidAuthenticationDelayTimeInMs del cmdlet Set-SmbServerConfiguration . Para ver la configuración actual, utilice el siguiente comando:
Obtener-SmbServerConfiguration | seleccione InvalidAuthenticationDelayTimeInMs
El tiempo predeterminado de demora de autenticación no válida es de 2 segundos (2000 milisegundos), pero puede configurarlo hasta 10 000 milisegundos (10 segundos). Imagínese cuánta diferencia podría hacer un retraso de 10 segundos para frenar los ataques de fuerza bruta. Para configurar el limitador de velocidad usando PowerShell, use el siguiente comando:
Set-SmbServerConfiguration -InvalidAuthenticationDelayTimeInMs 10000 -Force
Configuración del tiempo de demora de autenticación no válida en Server vNext usando PowerShell
Este comando establece el retraso de autenticación no válida en 10 segundos, que es el retraso máximo admitido. Establecer el valor en 0 desactiva la función. Recuerde, esta función solo está disponible con Windows Server vNext Insider Preview (compilación 25075 o superior).
Conclusión
Espero que al leer este artículo comprenda bien cómo funciona el protocolo SMB y las diferentes formas de proteger la comunicación SMB en su red. Esta no es una lista de verificación de seguridad completa, pero da una idea bastante clara sobre algunas medidas de seguridad de las PYMES.
En mi próxima publicación, aclararé cierta confusión sobre el número de puerto SMB .