Server Message Block ( SMB ) es un protocolo de comunicación [1] utilizado para compartir archivos, impresoras , puertos serie y comunicaciones diversas entre nodos de una red . En Microsoft Windows , la implementación de SMB consta de dos servicios de Windows con nombres vagos : "Servidor" (ID: LanmanServer
) y "Estación de trabajo" (ID: LanmanWorkstation
). [2] Utiliza protocolos NTLM o Kerberos para la autenticación de usuarios. También proporciona un mecanismo de comunicación entre procesos (IPC) autenticado.
SMB fue desarrollado originalmente en 1983 por Barry A. Feigenbaum en IBM [3] para compartir el acceso a archivos e impresoras a través de una red de sistemas que ejecutaban IBM PC DOS de IBM . En 1987, Microsoft y 3Com implementaron SMB en LAN Manager para OS/2 , momento en el que SMB utilizó el servicio NetBIOS sobre el protocolo NetBIOS Frames como su transporte subyacente. Más tarde, Microsoft implementó SMB en Windows NT 3.1 y lo ha estado actualizando desde entonces, adaptándolo para que funcione con transportes subyacentes más nuevos: TCP/IP y NetBT . SMB sobre QUIC se introdujo en Windows Server 2022 .
En 1996, Microsoft publicó una versión de SMB 1.0 [4] con modificaciones menores bajo el nombre de Common Internet File System ( CIFS / sɪfs / ) . CIFS era compatible incluso con la primera encarnación de SMB, incluido LAN Manager . [4] Admite enlaces simbólicos, enlaces duros y archivos de mayor tamaño, pero ninguna de las características de SMB 2.0 y posteriores. [ 4] [5] Sin embargo, la propuesta de Microsoft permaneció como borrador de Internet y nunca alcanzó el estatus de estándar. [6] Desde entonces, Microsoft ha descontinuado el nombre CIFS, pero continúa desarrollando SMB y publicando especificaciones posteriores. Samba es una reimplementación de software libre del protocolo SMB y las extensiones de Microsoft para este.
El bloque de mensajes del servidor (SMB) permite compartir archivos e impresoras , navegar en red y comunicarse entre procesos (a través de canales con nombre ) en una red informática . SMB sirve como base para la implementación del sistema de archivos distribuido de Microsoft .
SMB se basa en los protocolos TCP e IP para el transporte. Esta combinación permite compartir archivos a través de redes complejas e interconectadas , incluida la Internet pública. El componente de servidor SMB utiliza el puerto TCP 445. SMB originalmente operaba en NetBIOS sobre IEEE 802.2 ( NetBIOS Frames o NBF) y sobre IPX/SPX , y más tarde en NetBIOS sobre TCP/IP (NetBT), pero desde entonces Microsoft ha dejado de utilizar estos protocolos. En NetBT, el componente de servidor utiliza tres puertos TCP o UDP : 137 (NETBIOS Name Service), 138 (NETBIOS Datagram Service) y 139 (NETBIOS Session Service).
En Microsoft Windows, dos servicios de Windows con nombres vagos implementan SMB. El servicio "Servidor" (ID: LanmanServer
) se encarga de servir recursos compartidos . El servicio "Estación de trabajo" (ID: LanmanWorkstation
) mantiene el nombre de la computadora y ayuda a acceder a los recursos compartidos en otras computadoras. [2] SMB usa el protocolo Kerberos para autenticar usuarios en Active Directory en redes de dominio de Windows . En redes punto a punto más simples, SMB usa el protocolo NTLM .
Windows NT 4.0 SP3 y posteriores pueden firmar digitalmente mensajes SMB para evitar algunos ataques de intermediarios . [7] [8] [9] La firma SMB se puede configurar individualmente para conexiones SMB entrantes (por el servicio "LanmanServer") y conexiones SMB salientes (por el servicio "LanmanWorkstation"). La configuración predeterminada para los controladores de dominio de Windows que ejecutan Windows Server 2003 y posteriores es no permitir conexiones entrantes sin firmar. [10] Por lo tanto, las versiones anteriores de Windows que no admiten la firma SMB desde el principio (incluido Windows 9x ) no pueden conectarse a un controlador de dominio de Windows Server 2003. [8]
SMB admite el bloqueo oportunista (ver a continuación) de archivos para mejorar el rendimiento. La compatibilidad con el bloqueo oportunista ha cambiado con cada versión de Windows Server.
En el protocolo SMB, el bloqueo oportunista es un mecanismo diseñado para mejorar el rendimiento al controlar el almacenamiento en caché de archivos de red por parte del cliente. [11] A diferencia de los bloqueos tradicionales , los bloqueos oportunistas (OpLocks) no son estrictamente bloqueos de archivos ni se utilizan para proporcionar exclusión mutua.
Hay cuatro tipos de bloqueos oportunistas.
El uso del protocolo SMB se ha relacionado a menudo con un aumento significativo del tráfico de difusión en una red. Sin embargo, el propio SMB no utiliza difusiones; los problemas de difusión que se suelen asociar con SMB se originan en realidad en el protocolo de ubicación de servicios NetBIOS . [ aclaración necesaria ] De forma predeterminada, un servidor Microsoft Windows NT 4.0 utiliza NetBIOS para anunciar y localizar servicios. NetBIOS funciona difundiendo los servicios disponibles en un host en particular a intervalos regulares. Aunque esto suele ser un valor predeterminado aceptable en una red con un número menor de hosts, el aumento del tráfico de difusión puede causar problemas a medida que aumenta el número de hosts en la red. La implementación de la infraestructura de resolución de nombres en forma de Windows Internet Naming Service (WINS) o Domain Name System (DNS) resuelve este problema. WINS era una implementación propietaria utilizada con redes Windows NT 4.0, pero trajo consigo sus propios problemas y complejidades en el diseño y mantenimiento de una red Microsoft.
Desde el lanzamiento de Windows 2000, Microsoft ha dejado de utilizar WINS para la resolución de nombres y ahora el DNS dinámico jerárquico está configurado como el protocolo de resolución de nombres predeterminado para todos los sistemas operativos Windows. La resolución de nombres NetBIOS (cortos) por DNS requiere que un cliente DNS amplíe los nombres cortos, normalmente añadiendo un sufijo DNS específico de la conexión a sus consultas de búsqueda DNS. WINS todavía se puede configurar en los clientes como un protocolo de resolución de nombres secundario para la interoperabilidad con entornos y aplicaciones Windows heredados. Además, los servidores DNS de Microsoft pueden reenviar solicitudes de resolución de nombres a servidores WINS heredados para admitir la integración de la resolución de nombres con entornos heredados (anteriores a Windows 2000) que no admiten DNS.
Los diseñadores de redes han descubierto que la latencia tiene un impacto significativo en el rendimiento del protocolo SMB 1.0, que tiene un rendimiento peor que otros protocolos como FTP . El monitoreo revela un alto grado de "conversación" y una indiferencia hacia la latencia de red entre hosts. [13] Por ejemplo, una conexión VPN a través de Internet a menudo introducirá latencia de red. Microsoft ha explicado que los problemas de rendimiento surgen principalmente porque SMB 1.0 es un protocolo de nivel de bloque en lugar de un protocolo de transmisión , que originalmente fue diseñado para LAN pequeñas ; tiene un tamaño de bloque que está limitado a 64K, la firma SMB crea una sobrecarga adicional y el tamaño de la ventana TCP no está optimizado para enlaces WAN. [14] Las soluciones a este problema incluyen el protocolo SMB 2.0 actualizado, [15] Archivos sin conexión , escalado de ventana TCP y dispositivos de optimización de WAN de varios proveedores de red que almacenan en caché y optimizan SMB 1.0 [16] y 2.0. [17]
Barry Feigenbaum diseñó originalmente SMB en IBM a principios de 1983 con el objetivo de convertir el acceso a archivos locales de DOS INT 21h en un sistema de archivos en red. [3] Microsoft realizó modificaciones considerables a la versión más utilizada e incluyó soporte SMB en el sistema operativo LAN Manager que había comenzado a desarrollar para OS/2 con 3Com alrededor de 1990. [18] [19] [20] Microsoft continuó agregando características al protocolo en Windows para Trabajo en Grupo ( c. 1992 ) y en versiones posteriores de Windows. La autenticación de LAN Manager se implementó en base al requisito de la especificación SMB heredada original de usar contraseñas de "LAN Manager" de IBM, pero implementó DES de una manera defectuosa que permitió que las contraseñas se descifraran. [21] Más tarde, también se agregó la autenticación Kerberos . Los protocolos de inicio de sesión de dominio de Windows inicialmente usaban un cifrado de 40 bits fuera de los Estados Unidos , debido a las restricciones a la exportación de un cifrado más fuerte de 128 bits [22] (posteriormente levantadas en 1996 cuando el presidente Bill Clinton firmó la Orden Ejecutiva 13026 [23] ).
SMB 1.0 (o SMB1) fue diseñado originalmente para ejecutarse en tramas NetBIOS (NetBIOS sobre IEEE 802.2 ). Desde entonces, se ha adaptado a NetBIOS sobre IPX/SPX (NBX) y NetBIOS sobre TCP/IP (NetBT). Además, desde Windows 2000 , SMB se ejecuta en TCP utilizando el puerto TCP 445, una característica conocida como "SMB de host directo". [24] Todavía hay una capa delgada (similar al paquete de mensajes de sesión del servicio de sesión de NetBT) entre SMB y TCP. [24] Windows Server 2003 y los dispositivos NAS heredados utilizan SMB1 de forma nativa.
SMB1 es un protocolo extremadamente comunicativo, lo que no es un problema en una red de área local (LAN) con baja latencia. Se vuelve muy lento en redes de área amplia (WAN) ya que el protocolo de enlace de ida y vuelta magnifica la alta latencia inherente de dicha red. Las versiones posteriores del protocolo redujeron la gran cantidad de intercambios de enlaces. Un enfoque para mitigar las ineficiencias en el protocolo es utilizar productos de optimización de WAN como los proporcionados por Riverbed , Silver Peak o Cisco . Un mejor enfoque es actualizar a una versión posterior de SMB. Esto incluye actualizar tanto los dispositivos NAS como Windows Server 2003. El método más eficaz para identificar el tráfico SMB1 es con una herramienta de análisis de red, como Wireshark . Microsoft también proporciona una herramienta de auditoría en Windows Server 2016 para rastrear dispositivos que usan SMB1. [25]
Microsoft marcó SMB1 como obsoleto en junio de 2013. [26] Windows Server 2016 y Windows 10 versión 1709 no tienen SMB1 instalado de forma predeterminada. [27]
En 1996, cuando Sun Microsystems anunció WebNFS , [28] Microsoft lanzó una iniciativa para cambiar el nombre de SMB a Common Internet File System (CIFS) [3] y agregó más características, incluyendo soporte para enlaces simbólicos , enlaces duros , tamaños de archivo más grandes y un intento inicial de soportar conexiones directas sobre el puerto TCP 445 sin requerir NetBIOS como transporte (un esfuerzo en gran parte experimental que requirió un mayor refinamiento). Microsoft presentó algunas especificaciones parciales como Borradores de Internet al IETF . [6] Estas presentaciones han expirado desde entonces.
Microsoft introdujo una nueva versión del protocolo (SMB 2.0 o SMB2) en 2006 con Windows Vista y Windows Server 2008. [ 29] Aunque el protocolo es propietario, su especificación ha sido publicada para permitir que otros sistemas interoperen con los sistemas operativos de Microsoft que utilizan el nuevo protocolo. [30]
SMB2 reduce la "locuacidad" del protocolo SMB 1.0 al reducir el número de comandos y subcomandos de más de cien a solo diecinueve. [13] Tiene mecanismos para canalizar , es decir, enviar solicitudes adicionales antes de que llegue la respuesta a una solicitud anterior, mejorando así el rendimiento en enlaces de alta latencia . Añade la capacidad de combinar múltiples acciones en una sola solicitud, lo que reduce significativamente el número de viajes de ida y vuelta que el cliente necesita hacer al servidor, mejorando el rendimiento como resultado. [13] SMB1 también tiene un mecanismo de composición, conocido como AndX, para combinar múltiples acciones, pero los clientes de Microsoft rara vez usan AndX. [ cita requerida ] También introduce la noción de "identificadores de archivos duraderos": estos permiten que una conexión a un servidor SMB sobreviva a breves cortes de red, como son típicos en una red inalámbrica, sin tener que incurrir en la sobrecarga de renegociar una nueva sesión.
SMB2 incluye soporte para enlaces simbólicos . Otras mejoras incluyen el almacenamiento en caché de propiedades de archivos, firma de mensajes mejorada con el algoritmo de hash HMAC SHA-256 y mejor escalabilidad al aumentar el número de usuarios, recursos compartidos y archivos abiertos por servidor, entre otros. [13] El protocolo SMB1 utiliza tamaños de datos de 16 bits, lo que, entre otras cosas, limita el tamaño máximo de bloque a 64K. SMB2 utiliza campos de almacenamiento de 32 o 64 bits de ancho y 128 bits en el caso de los identificadores de archivos , eliminando así las restricciones anteriores sobre los tamaños de bloque, lo que mejora el rendimiento con transferencias de archivos grandes en redes rápidas. [13]
Los sistemas operativos Windows Vista/ Server 2008 y posteriores utilizan SMB2 cuando se comunican con otras máquinas que también pueden utilizar SMB2. SMB1 sigue utilizándose para conexiones con versiones anteriores de Windows, así como con soluciones NAS de varios proveedores . Samba 3.5 también incluye soporte experimental para SMB2. [31] Samba 3.6 es totalmente compatible con SMB2, excepto la modificación de cuotas de usuario mediante las herramientas de gestión de cuotas de Windows. [32]
Cuando se introdujo SMB2, trajo consigo una serie de ventajas sobre SMB1 para los implementadores de protocolos SMB de terceros. SMB1, diseñado originalmente por IBM , fue sometido a ingeniería inversa y más tarde pasó a formar parte de una amplia variedad de sistemas operativos no Windows, como Xenix , OS/2 y VMS ( Pathworks ). X/Open lo estandarizó parcialmente; Microsoft había enviado borradores de Internet que describían SMB2 al IETF , en parte como respuesta a la estandarización formal del IETF de la versión 4 del Sistema de archivos de red en diciembre de 2000 como IETF RFC 3010; [33] sin embargo, esos borradores de Internet relacionados con SMB expiraron sin lograr ninguna aprobación de la vía de estándares del IETF ni ningún otro respaldo del IETF. (Consulte http://ubiqx.org/cifs/Intro.html para obtener detalles históricos). SMB2 también supone una ruptura relativamente clara con el pasado. El código SMB1 de Microsoft tiene que funcionar con una gran variedad de clientes y servidores SMB. SMB1 incluye muchas versiones de información para comandos (selección de la estructura que se devolverá para una solicitud en particular) porque características como la compatibilidad con Unicode se incorporaron posteriormente. SMB2 implica pruebas de compatibilidad significativamente reducidas para los implementadores del protocolo. El código SMB2 tiene una complejidad considerablemente menor, ya que existe mucha menos variabilidad (por ejemplo, las rutas de código que no son Unicode se vuelven redundantes ya que SMB2 requiere compatibilidad con Unicode).
Apple migró a SMB2 (de su propio Apple Filing Protocol , ahora heredado) a partir de OS X 10.9 "Mavericks" . [34] Sin embargo, esta transición estuvo plagada de problemas de compatibilidad. [35] [36] De hecho, el soporte no predeterminado para SMB2 apareció en OS X 10.7, cuando Apple abandonó Samba en favor de su propia implementación de SMB llamada SMBX [34] después de que Samba adoptara la GPLv3 . [37] [38]
El sistema de archivos cliente CIFS del kernel de Linux tiene soporte SMB2 desde la versión 3.7. [39]
SMB 2.1, introducido con Windows 7 y Server 2008 R2, introdujo mejoras menores en el rendimiento con un nuevo mecanismo de bloqueo oportunista. [40]
SMB 3.0 (anteriormente llamado SMB 2.2) [41] se introdujo con Windows 8 [41] y Windows Server 2012. [ 41] Introdujo varios cambios significativos que tienen como objetivo agregar funcionalidad y mejorar el rendimiento de SMB2, [42] especialmente en centros de datos virtualizados :
También introduce varias mejoras de seguridad, como el cifrado de extremo a extremo y un nuevo algoritmo de firma basado en AES . [47] [48]
SMB 3.0.2 (conocido como 3.02 en ese momento) se introdujo con Windows 8.1 y Windows Server 2012 R2; [49] [50] en esas y versiones posteriores, la versión 1 anterior de SMB se puede deshabilitar opcionalmente para aumentar la seguridad. [51] [52]
SMB 3.1.1 se introdujo con Windows 10 y Windows Server 2016. [ 53] Esta versión admite el cifrado AES-128 GCM además del cifrado AES-128 CCM agregado en SMB3, e implementa la verificación de integridad previa a la autenticación mediante hash SHA-512 . SMB 3.1.1 también hace obligatoria la negociación segura al conectarse a clientes que usan versiones de SMB que lo admiten. [54]
Las especificaciones del SMB son propietarias y estaban inicialmente cerradas, lo que obligó a otros proveedores y proyectos a aplicar ingeniería inversa al protocolo para que pudiera interoperar con él. El protocolo SMB 1.0 se publicó finalmente algún tiempo después de que se aplicara ingeniería inversa, mientras que el protocolo SMB 2.0 se puso a disposición desde el Centro de desarrolladores de especificaciones abiertas de Microsoft desde el principio. [55]
En 1991, Andrew Tridgell comenzó el desarrollo de Samba, una reimplementación de software libre (usando ingeniería inversa ) del protocolo de red SMB/CIFS para sistemas tipo Unix , inicialmente para implementar un servidor SMB para permitir que los clientes de PC que ejecutan el cliente DEC Pathworks accedan a archivos en máquinas SunOS . [3] [56] Debido a la importancia del protocolo SMB en la interacción con la plataforma generalizada Microsoft Windows , Samba se convirtió en una implementación de software libre popular de un cliente y servidor SMB compatible para permitir que los sistemas operativos que no son Windows, como los sistemas operativos tipo Unix , interoperen con Windows.
A partir de la versión 3 (2003), Samba proporciona servicios de archivos e impresión para clientes de Microsoft Windows y puede integrarse con un dominio de servidor Windows NT 4.0 , ya sea como controlador de dominio primario (PDC) o como miembro del dominio. Las instalaciones de Samba4 pueden actuar como un controlador de dominio de Active Directory o un servidor miembro, en los niveles funcionales de dominio y bosque de Windows 2008. [57]
Los administradores de paquetes en las distribuciones Linux pueden buscar el paquete cifs-utils . El paquete es obra de los mantenedores de Samba.
NSMB (Netsmb y SMBFS) es una familia de implementaciones de clientes SMB en el núcleo de los sistemas operativos BSD. Fue aportada por primera vez a FreeBSD 4.4 por Boris Popov, y ahora se encuentra en una amplia gama de otros sistemas BSD, incluidos NetBSD y macOS . [58] Las implementaciones han divergido significativamente desde entonces. [59]
La versión de NSMB para macOS es notable por su esquema ahora común de representación de enlaces simbólicos. Este formato "Minshall-French" muestra los enlaces simbólicos como archivos de texto con una .symlink
extensión y un Xsym\n
número mágico, siempre de 1067 bytes de longitud. Este formato también se utiliza para almacenar enlaces simbólicos en servidores SMB nativos o sistemas de archivos no compatibles. Samba admite este formato con una mfsymlink
opción. [60] Docker en Windows también parece usarlo. [ cita requerida ]
NQ es una familia de implementaciones de cliente y servidor SMB portátiles desarrolladas por Visuality Systems, una empresa con sede en Israel fundada en 1998 por Sam Widerman, exdirector ejecutivo de Siemens Data Communications. La familia NQ incluye una pila SMB integrada (escrita en C), un cliente SMB basado en Java puro y una implementación de servidor SMB de almacenamiento. Todas las soluciones son compatibles con el último dialecto SMB 3.1.1. La solución configurable NQ es compatible con NQ para Linux, NQ para WinCE, iOS, Android, VxWorks y otros sistemas operativos en tiempo real.
MoSMB es una implementación de SMB de espacio de usuario para Linux. Es compatible con SMB 2.x y SMB 3.x. Las características clave incluyen clústeres de escalamiento activo-activo a escala de nube, SMB Direct (RDMA), SMB multicanal, conmutación por error transparente y disponibilidad continua. MoSMB también es compatible con el almacenamiento de objetos Amazon S3 como backend de almacenamiento, además de los sistemas de archivos POSIX como ext4 , ZFS , Lustre , Ceph , etc. [61]
Fusion File Share de Tuxera es una implementación de servidor SMB patentada desarrollada por Tuxera que se puede ejecutar tanto en el kernel como en el espacio de usuario . [62] Es compatible con SMB 3.1.1 y todas las versiones anteriores, además de funciones SMB avanzadas como disponibilidad continua (controladores persistentes), escalabilidad horizontal, RDMA (SMB Direct), SMB multicanal, compresión transparente, copia de sombra .
Asimismo, desarrolló una implementación CIFS/SMB (versiones 1.0, 2.0, 2.1 y NFS 3.0) en 2009 que proporcionaba una plataforma multiprotocolo que reconoce la identidad para el acceso en red a los archivos utilizados en productos de almacenamiento OEM creados en dispositivos basados en Linux/Unix. La plataforma se podía utilizar para dispositivos NAS, Cloud Gateway y Cloud Caching tradicionales para proporcionar acceso seguro a los archivos en una red. Asimismo, fue adquirida por EMC Isilon en 2012.
KSMBD es una implementación de servidor CIFS/SMB de código abierto para el núcleo Linux. En comparación con las implementaciones en el espacio de usuario, ofrece un mejor rendimiento y facilita la implementación de algunas funciones, como SMB Direct. Es compatible con SMB 3.1.1 y versiones anteriores.
A lo largo de los años, ha habido muchas vulnerabilidades de seguridad en la implementación de Microsoft del protocolo o los componentes en los que se basa directamente. [63] [64] Las vulnerabilidades de seguridad de otros proveedores radican principalmente en la falta de soporte para protocolos de autenticación más nuevos como NTLMv2 y Kerberos en favor de protocolos como NTLMv1, LanMan o contraseñas de texto simple . El seguimiento de ataques en tiempo real [65] muestra que SMB es uno de los principales vectores de ataque para los intentos de intrusión, [66] por ejemplo, el ataque de Sony Pictures de 2014 , [67] y el ataque de ransomware WannaCry de 2017. [68] En 2020, se revelaron dos vulnerabilidades de alta gravedad de SMB y se denominaron SMBGhost (CVE-2020-0796) y SMBleed (CVE-2020-1206), que cuando se encadenan pueden proporcionar privilegios de ejecución remota de código (RCE) al atacante. [69]
Este artículo trata sobre [...] la firma de mensajes del Bloque de mensajes del servidor (SMB).
Este mecanismo de seguridad en el protocolo SMB ayuda a evitar problemas como la manipulación de paquetes y los ataques de "man in the middle". [...] La firma SMB está disponible en todas las versiones de Windows compatibles actualmente, pero solo está habilitada de forma predeterminada en los controladores de dominio. Esto se recomienda para los controladores de dominio porque SMB es el protocolo que utilizan los clientes para descargar información de la directiva de grupo. La firma SMB proporciona una forma de garantizar que el cliente reciba la directiva de grupo genuina.
De forma predeterminada, la firma SMB es necesaria para las sesiones SMB entrantes en los controladores de dominio basados en Windows Server 2003.