SMB, cos'è e perché si usa Server Message Block

Cos'è SMB e come funziona il protocollo per condividere file, cartelle e altre risorse in Windows. È compatibile e interoperabile con altri sistemi operativi.

Oggi tanti utenti si servono del cloud per condividere documenti e file, soprattutto per evitare di inviare file pesanti via email. Per scambiare dati all’interno di una rete locale composta anche o prevalentemente da sistemi Windows si utilizza il protocollo SMB (Server Message Block).

SMB è un protocollo che è stato inventato in IBM (1983) da Barry A. Feigenbaum e progettato per condividere file stampanti attraverso i nodi di una rete formata da sistemi basati sul sistema operativo OS/2.
Nel 1987 Microsoft e 3Com implementarono SMB in LAN Manager (sistema operativo di rete ormai da tempo fuori produzione) per OS/2 utilizzando però NetBIOS, un protocollo per le comunicazioni all’interno della rete locale.
Con il rilascio di Windows NT 3.1, nel 1993, Microsoft inserì il supporto per SMB nel suo sistema operativo facendolo funzionare su reti TCP/IP.

L’utilizzo di SMB è quindi rimasto fino ai giorni nostri il modo più semplice per condividere file e cartelle in Windows. Meno popolare, invece, è il suo utilizzo per la condivisione delle stampanti vista la diffusione delle stampanti con supporto di rete (Ethernet o WiFi) capaci di ricevere un indirizzo IP ed essere raggiunge da qualunque dispositivo della rete locale (o anche di stampare da remoto via Internet).

Di SMB esiste anche un’implementazione libera chiamata Samba: integrato nei sistemi operativi Linux e Unix-like, Samba consente l’interoperabilità di rete con le macchine Windows. I sistemi Linux possono accedere in lettura e scrittura alle risorse condivise in Windows e le macchine Windows possono interagire con le risorse condivise sugli host Linux.

Quali sono le versioni di SMB

SMB 1.0 (1983-1984). La prima versione del protocollo si appoggiava a sua volta al protocollo NetBIOS. Utilizzava le porte TCP 139 per i servizi di sessione, TCP/UDP 137 per i servizi di nomi e la porta UDP 138 per i servizi di datagramma. Era un’implementazione ancora molto approssimativa, estremamente “chiacchierona”, insicura (non permetteva l’utilizzo della crittografia). È rimasta comunque pienamente supportata fino all’epoca di Windows XP e Windows Server 2003, oltre che in tutti i sistemi operativi Microsoft precedenti.

NetBIOS su TCP/IP (o NetBT, NBT) è un servizio completamente indipendente rispetto a SMB. Quest’ultimo, d’altra parte, può fare affidamento su NetBIOS per comunicare con i vecchi dispositivi che non supportano SMB su rete TCP/IP.

CIFS (1996). Rispetto ad altre soluzioni emergenti in quegli anni (come WebNFS di Sun MicroSystems), Microsoft aggiunse a CIFS il supporto per i link simbolici, le giunzioni, i file di grandi dimensioni e un primo tentativo di trasferimento dei file via TCP sulla porta 445 culminato con il rilascio in grande stile all’interno di Windows 2000.
CIFS è il tentativo di Microsoft di realizzare qualcosa di nuovo allontanandosi dalla prima versione di SMB (da qui la decisione di cambiare nome al protocollo). Era supportata in Windows 95 e Windows NT 4.0.

Normalmente per SMB su TCP/IP viene sempre usata la porta TCP 445: nel caso in cui su un sistema fossero attivati sia SMB che NetBIOS su TCP/IP, le porte TCP 445 e 139 sono poste entrambe in ascolto. Provate ad aprire il prompt dei comandi (cmd) e digitate netstat -an: troverete tra le prime porte in ascolto (LISTENING) restituite l’indicazione TCP 445 (ne parliamo nell’articolo dedicato a localhost).

SMB 2.0 (2006). Venne introdotto con Windows Vista e Windows Server 2008; può funzionare esclusivamente sulla porta TCP 445 ed è possibile disabilitare senza problemi NetBIOS su TCP/IP per una maggiore sicurezza e ridurre il sovraccarico sulla rete causato dalle trasmissioni NetBIOS.

SMB 2.1 (2010). Ha introdotto, con Windows 7 e Windows Server 2008 R2, alcuni miglioramenti prestazionali, un nuovo meccanismo di blocco opportunistico (blocco inserito da un client su un file che risiede lato server) e il supporto MTU (Maximum Transmission Unit, per indicare la dimensione massima in byte di un pacchetto dati).

SMB 3.0 (2012). Con Windows 8 e Windows Server 2012, SMB 3.0 introduce la crittografia end-to-end oltre a funzioni quali SMB transparent failover, SMB direct, SMB multichannel (più connessioni per sessione SMB), SMB scale out. Con Windows 8.1 debutta SMB 3.0.2 che però non integra novità di rilievo.

SMB 3.1.1 (2015-2021). Con l’avvento di Windows 10, Windows Server 2016 e 2019, la nuova versione di SMB supporta la cifratura AES-128-GCM e AES-128-CCM, un sistema di caching del contenuto delle cartelle, controlli di integrità pre-autenticazione per mitigare eventuali tentativi di attacchi MITM (man-in-the-middle).
L’arrivo di Windows 11 e Windows Server 2022, nel 2021, non ha determinato un cambio di versione (SMB 3.1.1 resta la release più aggiornata). Tuttavia, si è registrata l’aggiunta degli algoritmi crittografici AES-256-GCM e AES-256-CCM, di SMB over QUIC (utile per la compressione dati via SMB) e della funzione SMB direct crittografata.

Tutto questo per dire che il protocollo SMB non è rimasto statico nel corso degli anni ma è stato continuamente oggetto di aggiornamenti.

Come funziona SMB

Trattandosi di un protocollo per le comunicazioni client-server, SMB necessita di un servizio che funziona lato server (LanmanServer) e lato client (LanmanWorkstation): ogni sistema Windows viene installato con entrambi i servizi.
Usando il comando PowerShell seguente, è possibile conoscere lo stato di entrambi i servizi alla base del funzionamento di SMB:

Get-Service Lanman*

Anche se il PC in uso sta eseguendo una versione “client” di Windows e non un’istanza di Windows Server, il servizio LanmanServer viene comunque caricato perché permette all’utente di condividere risorse e consentire l’accesso in rete locale di condivisioni amministrative come admin$, C$, IPC$ (disattivate per default nelle più recenti versioni di Windows).

Il comando PowerShell Get-SmbShare consente di verificare le cartelle condivise in Windows e le altre risorse messe “a fattor comune”.

In un altro articolo abbiamo visto come comportarsi se le cartelle condivise non risultano accessibili.

Sicurezza e SMB: quali versioni utilizzare

Aprendo una finestra PowerShell con i diritti di amministratore quindi digitando il comando seguente, è possibile verificare quale versione di SMB sta usando ciascun client connesso alla macchina in uso (che ha aperto una delle risorse condivise):

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

Da sinistra verso destra si ottiene l’indirizzo IP del sistema client, il nome del computer e dell’utente Windows collegato, il numero dei file aperti nel corso della sessione di lavoro SMB, la versione di SMB utilizzata (Dialect).

Abbiamo già detto quanto sia approssimativa l’implementazione della prima versione di SMB (SMBv1).
I ransomware WannaCry e Petya oltre all’exploit EternalBlue hanno sfruttato proprio l’utilizzo di SMB 1.0 per aggredire gli utenti e diffondersi.
Microsoft consiglia da tempo di disattivare SMB1 per via dei rischi per la sicurezza troppo elevati e anzi ha disposto la disabilitazione della prima versione del protocollo.

Per controllare se si stesse ancora utilizzando SMBv1 sui propri sistemi basta aprire una finestra PowerShell con i diritti di amministratore quindi digitare quanto segue:

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

Per forzare la completa disattivazione di SMBv1 (nel caso in cui non si leggesse Disabled in corrispondenza delle varie voci), si può eseguire il comando PowerShell seguente:

Set-SmbServerConfiguration -EnableSMB1Protocol $False -Force

Digitando quanto segue, è possibile conoscere lo stato del supporto per SMB 2.0:

Get-SmbServerConfiguration | Select EnableSMB2Protocol

Il responso True conferma che il supporto per SMB 2.0 è abilitato e questo succede sulla stragrande maggioranza dei sistemi Windows. Se nella vostra rete non ci fossero più dispositivi legacy e si volesse utilizzare unicamente il più sicuro SMB 3.0, si può disattivare anche SMB 2.0 usando il comando successivo:

Set-SmbServerConfiguration -EnableSMB2Protocol $False -Force

L’importante è assicurarsi di aggiornare Windows con le patch di sicurezza più recenti perché periodicamente vengono scoperte vulnerabilità anche nelle implementazioni di SMB più recenti. È il caso della falla wormable scoperta in SMBv3 e della vulnerabilità in SMB 3.1.1.
In Windows 11 i file condivisi via SMB vengono protetti dagli attacchi brute force bloccando, grazie all’utilizzo di nuove policy, i tentativi di accesso alle risorse usando password errate che si concentrano in brevi periodi di tempo.

Ti consigliamo anche

Link copiato negli appunti