Menu Fermer

Le protocole SMB (Server Message Block) : fonctionnement et versions

Cette entrée fait partie d'une série de 23 sur 23 dans la série Les partages réseaux sur Windows pour transférer des données sur un réseau local LAN

Lorsque l’on s’intéresse aux partages de fichiers, impression par le réseau ou plus globalement la mise en réseau dans Windows, on tombe forcément sur le protocole SMB.
Un administrateur réseau se doit se connaître ce protocole fondamental sans Windows pour partager des fichiers, dossiers et imprimantes.

Dans ce tutoriel, je vous explique ce qu’est SMB (Server Message Block), comment il fonctionne et les ports utilisés.
Vous trouverez aussi les versions majeures de SMB et son historique et évolutions.
En fin d’article, j’aborderai quelques éléments de sécurité.

Le protocole SMB (Server Message Block) : fonctionnement et versions

Qu’est-ce que SMB (Server Message Block)

SMB est un protocole application (niveau 7) du modèle OSI qui fournit un accès partagé aux fichiers et aux imprimantes via un réseau ainsi que la communication inter-processus (IPC).
SMB s’appuie sur le protocole TCP/IP pour le transport. Cette combinaison permet potentiellement le partage de fichiers sur des réseaux complexes et interconnectés, y compris l’Internet public.

Plus particulièrement, il est conçu pour fournit les fonctionnalités suivantes :

  • Négociation du dialecte par exemple si des versions différentes de SMB sont utilisées
  • Détermination des autres serveurs du protocole Microsoft SMB sur le réseau, ou navigation sur le réseau
  • Impression sur un réseau
  • Authentification de l’accès aux fichiers, aux répertoires et aux partages
  • Verrouillage des fichiers et des dossiers
  • Notification des changements de fichiers et de répertoires
  • Gestion étendue des attributs de fichiers
  • Support de l’Unicode
  • Verrouillages opportunistes

Ce protocole est actif par défaut dans Windows pour partager des fichiers et dossiers dans un groupe de travail Windows (WORKGROUP) au sein d’un LAN ou dans un réseau d’entreprise avec un domaine NT.
Il est aussi mis à disposition sur les NAS dans le cadre d’un serveur de fichiers.
Une autre implémentation de SMB est Samba, un logiciel libre disponible sur Linux.
Samba fournit des services de fichiers et d’impression pour divers clients Microsoft Windows et peut s’intégrer à un domaine Microsoft Windows Server, soit en tant que contrôleur de domaine (DC), soit en tant que membre du domaine.
On trouve d’autres implémentations comme Netsmb pour BSD, FreeNAS ou ConnectedNAS.
Enfin trouve des dérivés comme SMB over QUIC pour un partage par VPN pour les télétravailleurs, les utilisateurs d’appareils mobiles et les organisations à haute sécurité.

Pour que le partage de fichiers fonctionnement, le protocole SMB s’appuie sur d’autres protocoles comme LAN Manager (NTLM), Kerberos, LLMNR et NetBIOS/NetBT.

SMB comment ça marche

L’établissement de connexion SMB (session)

SMB fonctionne avec une architecture réseau client-serveur.
Le protocole utilise un ensemble de paquets de données contenant une demande envoyée par un client ou une réponse envoyée par un serveur.
Les clients peuvent se connecter à un serveur en utilisant une adresse IP ou un nom d’hôte.
Ces paquets de données SMB peuvent être classés comme suit :

  • Paquets de contrôle de session, qui établissent/arrêtent les connexions aux partages de fichiers.
  • Paquets d’accès aux fichiers, qui, comme leur nom l’indique, accèdent aux partages de fichiers et manipulent les fichiers.
  • Paquets de messages généraux

Voici un schéma de l’établissement de connexion SMB entre un client et un serveur.

L’authentification SMB requiert des informations d’identification pour accéder à un serveur. Ce processus d’authentification est contrôlé par un administrateur système, qui peut également ajouter ou bloquer des utilisateurs comme bon lui semble.
Lorsqu’il s’agit de serveurs et de fichiers partagés, les utilisateurs devront saisir un mot de passe de connexion unique, mais l’authentification de l’identité n’est pas nécessaire dans ce cas.
Dans Windows, l’authentification client/serveur se fait à l’aide du protocole LAN Manager (NTLM). SMB peut utiliser ce dernier.
Mais si le PC fait partie d’un domaine Windows, l’authentification est gérée le protocole Kerberos (MS-KILE).

Voici un exemple de négociation de sessions SMB avec NTLM :

  1. Négociation du protocole SMB  (SMB2 NEGOTIATE)
  2. Negociation NTLM
  3. Challenge puis Authentification NTLM et le résultat : autorisation ou blocage de l’accès
  4. La session SMB démarre et les messages SMB sont envoyées au fur et à mesures des actions de l’utilisateur (SMB2 TREE_CONNECT, SMB2 CREATE, SMB2 WRITE, SMB2 OPLOCK_BREAK, …)
Exemple de négociation de sessions SMB avec NTLM

Les services, pilotes SMB dans Windows

Dans Microsoft Windows, deux services Windows vaguement nommés mettent en œuvre SMB.

  • Le service “Server” (LanmanServer) est chargé de servir les ressources partagées
  • Le service “Station de travail” (LanmanWorkstation) maintient le nom de l’ordinateur et aide à accéder aux ressources partagées sur d’autres ordinateurs
Le service "Server" (LanmanServer) dans Windows

Les binaires du client SMB sont répertoriés dans %windir%\system32\Drivers.

  • Pour le client : RDBSS.sys, MRXSMB.sys, MRXSMB10.sys, MRXSMB20.sys, MUP.sys, SMBdirect.sys
  • Pour le serveur : SRVNET.sys, SRV.sys, SRV2.sys, SMBdirect.sys et la DLL %windir%\system32\srvsvc.dll

Quels sont les ports réseau utilisés par SMB

Voici les ports utilisés par le protocole SMB :

  • pour les versions actuelles : directement via TCP en utilisant le port 445 (sans NetBIOS) – c’est l’approche moderne
  • pour les anciennes versions de SMB : via l’API NetBIOS en utilisant les ports UDP 137 (NETBIOS Name Service) et 138 (NETBIOS Datagram Service) et les ports TCP 137 et 139 (NETBIOS Session Service)

NetBIOS est l’approche traditionnelle utilisée jusqu’à Windows 2000. Les premières versions de SMB utilisaient NetBIOS sur TCP/IP pour le transport.
Depuis Windows 95 et l’implémentation de SMB1 en CIFS, c’est le port 445 (sans NetBIOS) qui est utilisé.
Pour plus d’explications, reportez vous à la version SMB1 du paragraphe suivant.

SMB et NetBIOS dans le modèle OSI (port, transport, session, ...)

Ci-dessous, sur Windows 10, les ports TCP 139 et 445 en écoute ainsi que les ports UDP 137 et 138 (NetBT).
Cela vient du fait que NetBIOS over TCP/IP est encore actif par défaut dans les versions récentes de Windows.

Les ports de connexion de SMB

Lorsque Samba est installé, le service smbd fait office de serveur de fichiers.
Les ports TCP 139 et 445 sont aussi alors en écoute.

Les ports de connexion de SMB

Quelles sont les versions de SMB

SMB étant un protocole ancien, plusieurs versions se sont succédées.
Vous pouvez changer de version SMB dans Windows en suivant ce tutoriel : Activer ou désactiver SMB sur Windows

SMB 1.0 ou SMB1

SMB est un protocole conçu par IBM au début de 1983 dans le but de transformer l’accès local aux fichiers DOS INT 21h en un système de fichiers en réseau.
En 1987, Microsoft et 3Com ont mis en œuvre SMB dans LAN Manager pour OS/2. À cette époque, SMB utilisait le service NetBIOS au sommet du protocole NetBIOS Frames comme transport sous-jacent.
C’est à partir de 1990 que Microsoft a commencé à amélioré SMB de manière significative pour l’intégrer dans Windows for Workgroups 3.1.
Les protocoles de connexion au domaine Windows utilisaient initialement un chiffrement 40 bits en dehors des États-Unis puis par la suite un chiffrement 128 bits.

SMB 1.0 (ou SMB1) a été conçu à l’origine pour fonctionner sur des trames NetBIOS (NetBIOS sur IEEE 802.2). Depuis, il a été adapté à NetBIOS sur IPX/SPX (NBX), et NetBIOS sur TCP/IP (NetBT) à partir de Windows 2000.

Par la suite, en 1996, Microsoft a produit une implémentation spécifique de SMB1 connu sous le nom de CIFS ( Common Internet File System).
La spécification du protocole CIFS est basée sur le protocole SMB original, mais avec quelques fonctionnalités supplémentaires ajoutées par Microsoft. Microsoft a mis en œuvre des connexions directes via TCP et le port 445 sans utiliser NetBIOS sur TCP qui était utilisé sur les premières implémentations de SMB 1.
On parle de “SMB hôte direct“.
CIFS est une mise en œuvre de SMB 1 et non un protocole de partage de fichiers distinct.
Il fut destiné à Windows 95.

Mais SMB1 souffre de nombreux problèmes.
Tout d’abord, il est très bavard, ce qui le rend peu efficace sur les LAN à faible latence et lent sur les réseaux WAN étendus.
Il expose à de nombreux problèmes de sécurité (chiffrement dépassé, nombreuses vulnérabilités, etc).
En 2017, il est à l’origine de nombreuses attaques par WannaCry et NotPetya.

SMB1 est la version présente dans Windows XP, Windows Server 2003 et précédents.
Microsoft a marqué SMB1 comme étant déprécié en juin 2013, Windows Server 2016 et Windows 10 version 1709 n’ont pas SMB1 installé par défaut.

SMB 2.0 ou SMB2

Microsoft a publié SMB 2.0 (ou SMB2) en 2006 avec Windows Vista. Cette version de SMB est plus fiable que SMB 1.0/CIFS, et n’est pas CIFS. Le nombre de commandes nécessaires pour transférer des fichiers est réduit de plus de 100 à 20.
Les performances sont plus élevées grâce aux mécanismes de traitement en pipeline, c’est-à-dire la possibilité d’envoyer une demande supplémentaire avant d’obtenir la réponse à la précédente. Le regroupement de plusieurs actions en une seule demande réduit le nombre de demandes adressées à un client, ce qui améliore les performances.

SMB 2.1

SMB 2.1 apporte des améliorations insignifiantes en termes de performances et de mécanismes de blocage par rapport à SMB 2.0. Cette version du protocole a été publiée avec Windows 7 et Windows Server 2008 R2.

SMB 3.0 ou SMB3

Au départ, cette version du protocole s’appelait SMB 2.2, mais elle a ensuite été renommée SMB 3.0 avec Windows 8. La version SMB 3.0 :

  • ajout de SMB Direct (accès direct à la mémoire), SMB Multichannel et SMB Transport Failover
  • amélioration de la sécurité
  • ajout de la prise en charge du chiffrement de bout en bout
  • amélioration de l’efficacité du réseau en réduisant la latence

SMB 3.0.2

SMB 3.0.2 ou 3.02 est disponible depuis Windows 8.1 et Windows Server 2012 R2. Dans cette version, la compatibilité SMB 1.0 peut être désactivée pour améliorer la sécurité.

SMB 3.1.1

Cette version est disponible depuis Windows 10 et Windows Server 2016. Les améliorations portent notamment sur un meilleur chiffrement (AES 128 GCM et AES 128 CCM) et un hachage SHA-512 pour les contrôles d’intégrité avant authentification.

SMB : sécurité et précaution

SMB possède des fonctionnalisé de sécurité nommées SMB Encryption.
Le chiffrement SMB offre une garantie de confidentialité et d’intégrité de bout en bout entre le serveur de fichiers et le client, quels que soient les réseaux traversés, tels que les connexions de réseau étendu (WAN) gérées par des fournisseurs autres que Microsoft.
L’activation de SMB Encryption permet de protéger ces informations contre les attaques par espionnage comme des attaques MiM.

Voici quelques recommandations de sécurité concernant SMB :

  • N’utilisez pas la version SMBv1, car elle ne permet pas le chiffrement, est inefficace et, en raison de sa mise en œuvre complexe, d’autres bogues critiques similaires aux vulnérabilités MS17-010 pourraient apparaître à l’avenir
  • Dans la mesure du possible, préférez la dernière version de SMB (SMBv3.1.1 à la date de ce billet). SMBv3.1.1 est plus efficace que les versions précédentes de SMB et offre des fonctions de sécurité de pointe
  • En tant que meilleure pratique de sécurité, l’accès SMB doit être limité aux seuls réseaux et clients de confiance
  • N’exposez pas SMB sur internet, privilégiez un accès par VPN ou utilisez SMB over QUIC
  • Enfin, si la fonctionnalité de SMB n’est pas nécessaire, il convient de la désactiver sur les plates-formes Windows afin de réduire la surface d’attaque globale et de laisser échapper le moins possible d’informations d’empreintes digitales aux attaquants
Naviguer dans la série<< Comment activer les fichiers hors connexion sur Windows 10, 11