SMB, c’est quoi et pourquoi on utilise Server Message Block

Qu’est-ce que SMB et comment le protocole fonctionne pour le partage de fichiers, de dossiers et d’autres ressources dans Windows. Il est compatible et interopérable avec d’autres systèmes d’exploitation.

Aujourd’hui, de nombreux utilisateurs utilisent le cloud pour partager des documents et des fichiers, notamment pour éviter d’envoyer des fichiers lourds par courrier électronique. Le protocole SMB (Server Message Block) est utilisé pour échanger des données au sein d’un réseau local composé également ou majoritairement de systèmes Windows.

SMB est un protocole inventé chez IBM (1983) par Barry A. Feigenbaum et conçu pour partager des fichiers d’imprimante entre les nœuds d’un réseau constitué de systèmes basés sur le système d’exploitation OS/2.

En 1987, Microsoft et 3Com ont implémenté SMB dans LAN Manager (système d’exploitation réseau depuis longtemps abandonné) pour OS/2, mais en utilisant NetBIOS, un protocole de communication au sein du réseau local.

Avec la sortie de Windows NT 3.1 en 1993, Microsoft a inclus la prise en charge de SMB dans son système d’exploitation, ce qui lui permet de fonctionner sur les réseaux TCP/IP.

L’utilisation de SMB est donc restée à ce jour le moyen le plus simple de partager des fichiers et des dossiers dans Windows. En revanche, son utilisation pour le partage d’imprimantes est moins populaire, étant donné la généralisation des imprimantes en réseau (Ethernet ou Wifi) capables de recevoir une adresse IP et d’être accessibles par n’importe quel appareil du réseau local (ou même d’imprimer à distance via Internet).

Il existe également une implémentation gratuite de SMB appelée Samba : intégrée aux systèmes d’exploitation Linux et de type Unix, Samba permet l’interopérabilité du réseau avec les machines Windows. Les systèmes Linux peuvent accéder en lecture et en écriture aux ressources partagées dans Windows, et les machines Windows peuvent interagir avec les ressources partagées sur les hôtes Linux.

Quelles sont les versions de SMB

SMB 1.0 (1983-1984). La première version du protocole s’appuyait à son tour sur le protocole NetBIOS. Il utilisait le port TCP 139 pour les services de session, le port TCP/UDP 137 pour les services de nom et le port UDP 138 pour les services de datagramme. Il s’agissait encore d’une mise en œuvre très grossière, extrêmement « bavarde » et peu sûre (elle ne permettait pas l’utilisation du cryptage). Cependant, il est resté entièrement pris en charge jusqu’à l’époque de Windows XP et de Windows Server 2003, ainsi que dans tous les systèmes d’exploitation Microsoft précédents.

NetBIOS sur TCP/IP (ou NetBT, NBT) est un service totalement indépendant par rapport à SMB. Ces derniers, en revanche, peuvent s’appuyer sur NetBIOS pour communiquer avec des appareils plus anciens qui ne prennent pas en charge SMB sur TCP/IP.

CIFS (1996). Par rapport à d’autres solutions apparues ces années-là (comme WebNFS de Sun MicroSystems), Microsoft a ajouté à CIFS la prise en charge des liens symboliques, des épissures, des fichiers volumineux et une première tentative de transfert de fichiers via TCP sur le port 445 qui a abouti à la grande version au sein de Windows 2000.

CIFS est la tentative de Microsoft de faire quelque chose de nouveau en s’éloignant de la première version de SMB (d’où la décision de renommer le protocole). Il était pris en charge par Windows 95 et Windows NT 4.0.

Normalement, le port TCP 445 est toujours utilisé pour SMB sur TCP/IP : si SMB et NetBIOS sur TCP/IP sont tous deux activés sur un système, les ports TCP 445 et 139 sont tous deux en écoute. Essayez d’ouvrir l’invite de commande (cmd) et tapez netstat -an : vous trouverez parmi les premiers ports d’écoute (LISTENING) retournés le port TCP 445 (nous en parlons dans l’article sur localhost).

SMB 2.0 (2006). Il a été introduit avec Windows Vista et Windows Server 2008 ; il ne peut fonctionner que sur le port TCP 445 et il est possible de désactiver NetBIOS sur TCP/IP sans aucun problème pour une sécurité accrue et pour réduire la surcharge du réseau causée par les transmissions NetBIOS.

SMB 2.1 (2010). Il a introduit, avec Windows 7 et Windows Server 2008 R2, certaines améliorations des performances, un nouveau mécanisme de blocage opportuniste (blocage placé par un client sur un fichier qui réside côté serveur) et la prise en charge du MTU (Maximum Transmission Unit, pour indiquer la taille maximale en octets d’un paquet de données).

SMB 3.0 (2012). Avec Windows 8 et Windows Server 2012, SMB 3.0 introduit le chiffrement de bout en bout ainsi que des fonctionnalités telles que le basculement transparent SMB, SMB direct, SMB multicanal (plusieurs connexions par session SMB), SMB scale out. Avec Windows 8.1, SMB 3.0.2 fait ses débuts, mais ne comporte pas de nouvelles fonctionnalités majeures.

SMB 3.1.1 (2015-2021). Avec l’arrivée de Windows 10, Windows Server 2016 et 2019, la nouvelle version de SMB prend en charge le chiffrement AES-128-GCM et AES-128-CCM, un système de mise en cache du contenu des dossiers, des contrôles d’intégrité avant authentification pour atténuer toute tentative d’attaque de type man-in-the-middle (MITM).

L’arrivée de Windows 11 et de Windows Server 2022 en 2021 n’a pas entraîné de changement de version (SMB 3.1.1 reste la version la plus récente). Cependant, il y a eu l’ajout des algorithmes cryptographiques AES-256-GCM et AES-256-CCM, SMB over QUIC (utile pour la compression des données via SMB) et la fonction de chiffrement direct de SMB.

Tout cela pour dire que le protocole SMB n’est pas resté statique au fil des ans, mais a été continuellement mis à jour.

Comment fonctionne le SMB

Étant un protocole de communication client-serveur, SMB nécessite un service qui fonctionne côté serveur (LanmanServer) et côté client (LanmanWorkstation) : chaque système Windows est installé avec les deux services.

En utilisant la commande PowerShell suivante, il est possible de connaître l’état des deux services qui sous-tendent le fonctionnement de SMB :

Get-Service Lanman*
SMB, c'est quoi et pourquoi on utilise Server Message Block

Même si le PC utilisé fonctionne avec une version « client » de Windows et non avec une instance de Windows Server, le service LanmanServer est toujours chargé car il permet à l’utilisateur de partager des ressources et d’autoriser l’accès du réseau local aux partages administratifs tels que admin$, C$, IPC$ (désactivé par défaut dans les nouvelles versions de Windows).

La commande PowerShell Get-SmbShare permet à l’utilisateur de vérifier les dossiers partagés dans Windows et d’autres ressources « mutualisées ».

SMB, c'est quoi et pourquoi on utilise Server Message Block

Dans un autre article, nous avons vu ce qu’il faut faire si les dossiers partagés ne sont pas accessibles.

Sécurité et SMB : quelles versions utiliser

En ouvrant une fenêtre PowerShell avec des droits d’administrateur puis en tapant la commande suivante, vous pouvez vérifier quelle version de SMB utilise chaque client connecté à la machine en cours d’utilisation (qui a ouvert une des ressources partagées) :

Get-SmbSession | Select ClientComputerName, ClientUserName, NumOpens, Dialect

De gauche à droite, nous obtenons l’adresse IP du système client, le nom de l’ordinateur et de l’utilisateur Windows connecté, le nombre de fichiers ouverts pendant la session SMB, la version de SMB utilisée (Dialecte).

Nous avons déjà mentionné à quel point la mise en œuvre de la première version de SMB (SMBv1) est bâclée.

Les ransomwares WannaCry et Petya, ainsi que l’exploit EternalBlue, ont précisément exploité l’utilisation de SMB 1.0 pour attaquer les utilisateurs et se propager.

Microsoft recommande depuis longtemps de désactiver SMB1 en raison des risques de sécurité trop élevés, et a même ordonné la désactivation de la première version du protocole.

Pour vérifier si vous utilisez toujours SMBv1 sur vos systèmes, il suffit d’ouvrir une fenêtre PowerShell avec des droits d’administrateur, puis de taper ce qui suit :

Get-WindowsOptionalFeature -online | Where FeatureName -like SMB1*

Pour forcer la désactivation complète de SMBv1 (au cas où vous ne liriez pas Désactivé sous les différentes entrées), vous pouvez exécuter la commande PowerShell suivante :

Set-SmbServerConfiguration -EnableSMB1Protocol $False -Force

En tapant ce qui suit, vous pouvez connaître l’état de la prise en charge de SMB 2.0 :

Get-SmbServerConfiguration | Sélectionner EnableSMB2Protocol

La réponse True confirme que la prise en charge de SMB 2.0 est activée, et ce sur la grande majorité des systèmes Windows. S’il n’y a plus d’anciens périphériques dans votre réseau et que vous souhaitez uniquement utiliser la version SMB 3.0, plus sécurisée, vous pouvez également désactiver SMB 2.0 à l’aide de la commande suivante :

Set-SmbServerConfiguration -EnableSMB2Protocol $False -Force

L’important est de s’assurer que vous mettez à jour Windows avec les derniers correctifs de sécurité, car des vulnérabilités sont régulièrement découvertes, même dans les implémentations SMB les plus récentes. C’est le cas de la faille vermifuge découverte dans SMBv3 et de la vulnérabilité de SMB 3.1.1.

Dans Windows 11, les fichiers partagés via SMB sont protégés contre les attaques par force brute en bloquant, grâce à l’utilisation de nouvelles politiques, les tentatives d’accès aux ressources à l’aide de mots de passe incorrects qui sont concentrés dans de courtes périodes de temps.