Le protocole SMB
1. Introduction au protocole SMB
1.1 Définition
Le Server Message Block (SMB) est un protocole de partage de fichiers et d'imprimantes en réseau. Il permet à des applications (ou des utilisateurs) sur un ordinateur de lire et d'écrire dans des fichiers et de demander des services depuis des serveurs situés sur un réseau. SMB fonctionne essentiellement au-dessus de la couche transport TCP/IP.
1.2 Historique et évolution
- Origines (années 1980) : IBM a initialement développé le protocole SMB (appelé alors « IBM PC Network ») pour le partage de fichiers sur ses réseaux PC.
- Microsoft et CIFS : Microsoft a adopté SMB, l'a étendu et l'a rebaptisé CIFS (Common Internet File System) dans les années 1990. CIFS est souvent considéré comme la version « SMB1 » du protocole, avec des extensions Windows.
- Améliorations successives :
- SMB2 (introduit dans Windows Vista et Windows Server 2008) : Réduction de la complexité (moins de commandes, amélioration des performances)
- SMB3 (introduit dans Windows 8 et Windows Server 2012) : Nouvelles fonctionnalités (chiffrement, multicanaux, etc.)
1.3 Rôle et usage principal
Le protocole SMB sert principalement :
- Au partage de fichiers et de répertoires entre machines (Windows, macOS, Linux/Samba, etc.).
- Au partage d'imprimantes.
- À l'authentification et la gestion des droits d'accès lorsque SMB est couplé avec un service de gestion des identités (contrôleur de domaine Windows, LDAP, Kerberos, etc.).
- À d'autres usages tels que l'accès à des ressources sur des équipements de stockage en réseau (NAS), des boîtiers multimédias, etc.
2. Architecture du protocole SMB
2.1 Couche réseau et transport
- Modèle OSI : SMB fonctionne au-dessus de la couche transport (TCP/IP).
- Ports utilisés :
- TCP 445 : SMB direct (sans encapsulation NetBIOS).
- TCP 139 : SMB sur NetBIOS (historique, surtout SMB1/CIFS).
- UDP 137 et 138 : utilisées pour la résolution de noms NetBIOS et la navigation réseau (NMB, NBNS).
2.2 Composants et flux
- Client SMB : La machine qui initie la demande de connexion et qui souhaite accéder à une ressource partagée (fichiers, imprimantes, etc.).
- Serveur SMB : La machine qui héberge la ressource et accepte la connexion.
- Session : Une fois la connexion établie, le client et le serveur échangent des messages SMB pour lire, écrire, créer des fichiers, etc.
2.3 Interactions et mécanismes
- Négociation de protocole : Au début d'une connexion, le client et le serveur négocient la meilleure version commune de SMB supportée (SMB1, SMB2, SMB3, etc.).
- Authentification :
- Sur la base d'identifiants (nom d'utilisateur et mot de passe).
- Possibilité d'utiliser NTLM, Kerberos, ou d'autres mécanismes selon les versions du protocole et la configuration.
- Partage de ressources : Les ressources sont identifiées sous forme de « partage » (share), par exemple \\Serveur\Partage.
3. Versions du protocole SMB
3.1 SMB1 / CIFS
- Contexte : Historiquement, la première implémentation largement répandue dans les environnements Windows (jusqu'à Windows XP/Server 2003).
- Caractéristiques :
- Très verbeux, beaucoup de commandes (plus d'une centaine).
- Sécurité plus faible, vulnérabilités découvertes (telles que la faille EternalBlue exploitée par WannaCry).
- Généralement désactivé par défaut sur les systèmes récents (Windows 10, Windows Server 2016 et ultérieurs) pour des raisons de sécurité.
3.2 SMB2
- Introduction : Apparu avec Windows Vista et Windows Server 2008.
- Objectifs :
- Réduction de la complexité : Nombre de commandes fortement réduit (une vingtaine).
- Amélioration des performances : Mise en cache (oplocks améliorés), pipelining, moins de transactions.
- Avantages : Consommation de bande passante plus faible et temps de latence réduit par rapport à SMB1.
3.3 SMB3
- Introduction : Avec Windows 8 et Windows Server 2012.
- Nouvelles fonctionnalités clés :
- Chiffrement : Possibilité de chiffrer les données en transit pour protéger contre l'écoute (Man-in-the-middle).
- SMB Multichannel : Permet d'agréger plusieurs connexions réseau pour augmenter le débit et la tolérance aux pannes.
- SMB Direct (RDMA) : Réduction de la latence via une communication directe en mémoire (requiert un matériel compatible).
- Amélioration de la haute disponibilité pour les clusters (SMB Transparent Failover).
- Variantes de SMB3 (3.0, 3.0.2, 3.1.1) apportant des améliorations incrémentales, notamment au niveau de la sécurité et des performances.
4. Fonctionnement détaillé d'une session SMB
4.1 Négociation initiale
Le client envoie une liste de versions SMB qu'il supporte, le serveur choisit la version la plus élevée (parmi celles qu'il peut gérer). Cela se produit lors de l'établissement de la session.
4.2 Authentification
- NTLM / NTLMv2 : Protocole d'authentification propriétaire de Microsoft.
- Kerberos : Utilisé si le client et le serveur appartiennent au même domaine Active Directory (ou via Samba AD DC).
- Signature des paquets : SMB peut signer les paquets pour garantir leur intégrité.
4.3 Arborescence et partages
Une fois la session validée, le client peut lister les partages disponibles sur le serveur (e.g. \\serveur\partage1, \\serveur\partage2).
Chaque partage correspond à un point d'accès à un répertoire ou à une imprimante.
4.4 Opérations sur les fichiers et répertoires
- Ouverture de fichier (open) : Le client envoie une requête pour ouvrir un fichier, le serveur répond avec un descripteur ou un code d'erreur.
- Lecture/écriture : Le client peut ensuite lire ou écrire des blocs de données.
- Verrous (locks) : SMB gère différents types de locks pour éviter la corruption de données lors d'accès concurrent.
- Fermeture : Lorsque l'opération est terminée, le client ferme le fichier et le serveur libère la ressource.
4.5 Impression et autres services
- Les commandes SMB incluent également des opérations pour la gestion d'imprimantes en réseau, l'interrogation des propriétés d'une file d'attente d'impression, l'envoi d'un job d'impression, etc.
5. Sécurité dans SMB
5.1 Authentification
- Comptes locaux : Sur un serveur autonome, SMB peut utiliser des comptes locaux stockés dans une base de comptes (sous Windows ou Samba).
- Contrôleur de domaine : En environnement Active Directory, l'authentification peut être déportée vers le contrôleur de domaine (Kerberos ou NTLM en fallback).
5.2 Signature SMB
- Permet d'assurer l'intégrité des données échangées (protection contre des attaques de type « man-in-the-middle » qui modifieraient les paquets).
- Peut être obligatoire ou optionnelle, selon la configuration de la stratégie de groupe Windows ou du paramétrage Samba (server signing = mandatory/auto/disabled).
5.3 Chiffrement (SMB3)
- smb encrypt = required (côté Samba) ou paramétrage via la stratégie de groupe (côté Windows).
- Assure la confidentialité des données échangées (similaire à HTTPS pour un site web).
5.4 Vulnérabilités historiques
- SMB1 est connu pour des failles graves (EternalBlue, etc.). Microsoft recommande fortement de le désactiver si vous n'en avez pas explicitement besoin.
6. Implémentations de SMB
6.1 Microsoft Windows
- Intégration native dans tous les systèmes Windows (client et serveur).
- Dans les versions récentes, Windows privilégie SMB3 (et 3.1.1 dans Windows 10/11, Server 2016/2019/2022) et désactive SMB1 par défaut (ou en tout cas le rend optionnel).
6.2 Samba (Linux/Unix)
- Permet aux systèmes Linux/BSD/Unix d'être des serveurs ou des clients SMB.
- Outils : smbd, nmbd, winbindd, smbclient, etc.
6.3 macOS
- macOS prend en charge SMB de manière native (Apple a historiquement utilisé AFP, mais depuis macOS 10.9, SMB2 puis SMB3 sont devenus le protocole de partage de fichiers par défaut).
6.4 Autres NAS et systèmes embarqués
- La plupart des NAS (Synology, QNAP, etc.) intègrent Samba ou une implémentation propriétaire de SMB pour le partage de fichiers.
7. Configuration et usage pratique
7.1 Montage d'un partage SMB sur Linux (côté client)
Exemple d'utilisation du package cifs-utils :
Installer cifs-utils (selon la distribution) :
sudo apt install cifs-utils -y # Debian/Ubuntu
Créer un point de montage :
sudo mkdir -p /mnt/partage_smb
Monter le partage :
sudo mount -t cifs //SERVEUR/Partage /mnt/partage_smb -o username=USER,password=PASS,vers=3.0
- vers=3.0 force l'utilisation de SMB3. On peut aussi spécifier vers=2.1 ou vers=3.1.1, etc.
7.2 Partage SMB sous Windows
- Pour créer un partage, il suffit de :
- Sélectionner un dossier -> clic droit -> « Propriétés » -> « Partage ».
- Définir les permissions (Lecture/Écriture, etc.).
7.3 Réglages avancés
- Policy GPO sur un domaine Windows : contrôler l'activation/désactivation de SMB1, la signature SMB, le chiffrement, etc.
- Samba : directives telles que
[global]
server min protocol = SMB2
server max protocol = SMB3
encrypt passwords = yes
map to guest = Bad User
...
8. Performance et optimisations
8.1 OpLocks (Opportunistic Locks)
- Mécanisme qui permet au client de mettre en cache localement les données pour réduire le trafic réseau.
- SMB2 et SMB3 améliorent et gèrent automatiquement ces verrous opportunistes.
8.2 SMB Multichannel
- Introduit avec SMB3, autorise l'utilisation simultanée de plusieurs interfaces réseau.
- Permet d'accroître la bande passante disponible et la tolérance de panne (failover).
8.3 SMB Direct (RDMA)
- Disponible pour les environnements avec cartes réseau RDMA (Remote Direct Memory Access).
- Latence réduite, utile pour les serveurs de virtualisation ou de base de données à haut débit.
8.4 Choix de la version
- La version la plus récente commune au client et au serveur est généralement préférée (pour profiter d'optimisations et de la sécurité).
9. Cas d'usage spécifiques
9.1 Entreprise multi-plateformes
- Active Directory avec Windows, Linux (Samba) et macOS.
- SMB permet à tous les postes de se connecter aux mêmes partages, facilitant la collaboration.
9.2 Stockage réseau (NAS)
- La plupart des NAS intègrent SMB pour l'accès depuis des postes Windows, en plus d'autres protocoles (NFS, AFP, etc.).
- Sécurisation par des ACL, gestion multi-utilisateurs, snapshots, etc.
9.3 VDI et virtualisation
- SMB3 est utilisé pour stocker et partager des disques virtuels (VHDX) dans Hyper-V (via SMB Direct, SMB Multichannel), améliorant la performance et la résilience.
9.4 Cloud et conteneurs
- Des solutions type Azure Files (Microsoft Azure) s'appuient sur SMB3 pour fournir un partage de fichiers managé dans le Cloud.
10. Perspectives et tendances
- Désactivation de SMB1 : Fait désormais partie des bonnes pratiques de sécurité.
- Renforcement de la sécurité : Les versions SMB3.1.1 introduisent des mécanismes plus robustes de négociation sécurisée.
- Intégration avec le cloud : Services de fichier managés qui exposent des points de montage SMB pour simplifier la migration et la cohabitation on-premise/cloud.
11. Conseils et bonnes pratiques
- Utiliser SMB2 ou SMB3 : Désactiver SMB1 sauf nécessité absolue (compatibilité avec de très vieux systèmes).
- Activer la signature et/ou le chiffrement : Pour protéger l'intégrité et la confidentialité des données échangées.
- Mettre à jour régulièrement : Les correctifs de sécurité du protocole et des implémentations (Windows, Samba) sont cruciaux.
- Contrôler l'accès réseau : Limiter l'accessibilité des ports 139 et 445 depuis Internet, segmenter le réseau si nécessaire.
- Gérer soigneusement les ACL : Sur les systèmes Windows et Samba, s'assurer que seules les personnes autorisées accèdent aux ressources.
12. Conclusion
Le protocole SMB est un pilier incontournable des environnements informatiques modernes pour le partage de fichiers et d'imprimantes. Son évolution, de SMB1/CIFS vers SMB3, reflète la volonté d'améliorer la performance, la sécurité et la robustesse du protocole. Aujourd'hui, il demeure :
- Omniprésent : utilisé dans les systèmes Windows, macOS, Linux (via Samba), la plupart des NAS, etc.
- Flexible : adapté à de multiples scénarios (petits réseaux domestiques, grandes entreprises, stockage virtuel, etc.).
- Critique sur le plan de la sécurité : nécessite une configuration soignée pour éviter les failles liées à SMB1 et s'assurer d'une authentification solide, voire d'un chiffrement complet (SMB3).
En maîtrisant les fondamentaux de SMB (négociation de versions, authentification, gestion des partages, signatures et chiffrement), vous pouvez bâtir et maintenir un environnement de partage de ressources performant et sécurisé, quel que soit le mélange de systèmes d'exploitation déployés.