SMBv1 – Utilizzo, disattivazione e sicurezza

Dopo una lunga pausa riprendo a scrivere e lo faccio prendendo spunto da una call nella quale si parlava di SMBv1.

Con questo articolo cercherò di dare qualche utile indicazione sul perché, su come e su dove approfondire i concetti base che andrò ad esporre. Non mancheranno degli esempi di codice.
L’obbiettivo è quello di raggruppare in un unico articolo alcuni dei riferimenti che ho trovato in rete, così da poter avere una visione completa del problema e delle possibili soluzioni.

SMB (Server Message Block): è un protocollo utilizzato per le comunicazioni con vari componenti che formano una rete. Tra questi troviamo: Stampanti, Router, Access Point, NAS. Inoltre, il protocollo SMB è utilizzato per il browsing della rete. Nel tempo il protocollo si è evoluto ed è aumentata la sicurezza offerta dai nuovi SMBv2 ed SMBv3.

La versione SMBv3 è utilizzata da alcune funzionalità, tra le quali SMB Transparent Failover, SMB Multichannel, SMB Direct. Funzionalità che sono alla base di nuove offerte in ambito Enterprise per NAS/SAN ed HYPERVISOR.

Purtroppo, SMBv1 presenta alcuni problemi di sicurezza (chiamiamoli di gioventù) ed è stato utilizzato come grimaldello per mettere in atto attacchi, anche di grandi dimensioni. WannaCry ne è un lampante esempio.

Microsoft sta investendo molte risorse per aumentare la capacità elaborativa e la sicurezza di Azure ed è per questo motivo che SMBv1 è stato disattivo di default nel Marketplace di Azure. Stessa cosa per le nuove versioni dei sistemi operativi client e server.

VERSIONI SMB
La seguente tabella riporta le differenti versioni del protocollo in base alla versione del sistema operativo Server e Client
protocolli-smb

NEGOZIAZIONE SMB
Ovviamente, è impensabile che in una infrastruttura ci sia un’unica versione di sistema operativo e di servizi gestiti. La normale conseguenza è una negoziazione del protocollo utilizzato tra i vari dispositivi.
La seguente tabella riporta le differenti versioni del protocollo negoziato in base alla versione del Sistema Operativo Server (per i client si può fare riferimento alla stessa tabella).smb-negoziazione

Per verificare la versione negoziata all’interno dell’infrastruttura, o meglio tra due distinti dispositivi possiamo utilizzare un comodissimo Cmdlet PowerShell:

Get-SmbConnection

Attenzione: Se al momento dell’esecuzione del Cmdlet non sono attive connessioni non verrà visualizzato nessun messaggio di errore o di risposta

Di seguito alcuni esempi di negoziazione tra un Windows Server 2016 un Windows Server 2012 R2 ed un client Windows 10.  L’utilizzo del protocollo SMB avviene attraverso l’accesso al Server 2016 con un semplice \\HOST\C$.

Windows 10
W10-WS2016

Windows Server 2012 R2
WS2012-WS2016

Windows Server 2016
WS2016
Come si può notare dalla precedente screen nel server di destinazione non è presente nessuna evidenza dell’avvenuta connessione e della relativa negoziazione.

VERIFICARE SE SMBv1 E’ INSTALLATO
Per verificare se il protocollo SMBv1 è installato sul nostro server possiamo utilizzare l’interfaccia GUI oppure ricorrere nuovamente ad un Cmdlet PowerShell

Get-WindowsFeature -name FS-SMB1

Di seguito la screen che racchiude il risultato delle due opzioni.
SMB-ON-GUI-POWERSHELLAttenzione: il fatto che il protocollo sia installato non implica che sia attivo

DISABILITARE SMBv1
Le opzioni per disabilitare il protocollo sono differenti e coprono tutte le esigenze in base alla dimensione dell’infrastruttura ed alle conoscenze tecniche. In questo articolo utilizzeremo l’applicazione di una Group Policy che, a mio avviso, è lo strumento migliore per poter operare su grandi numeri con eventuali filtri di esclusione. Ovviamente per piccole realtà, singoli server o client è possibile operare direttamente da GUI, PowerShell o chiavi di registro. In fondo all’articolo troverete i riferimenti alla documentazione completa per eventuali approfondimenti.

Group Policy
Nell’esempio pratico creo una nuova Group Policy e la linko al dominio. Ovviamente, nella realtà di una infrastruttura di produzione è meglio applicare le Group Policy a specifiche Organizational Unit (OU). La Group Policy applicata è quella per disabilitare il protocollo lato server. Per la corrispondente Group Policy lato client fare riferimento alla documentazione completa.

SMB-GPO-01

SMB-GPO-02

SMB-GPO-03

I valori da inserire per creare la nuova chiave di registro sono:

  • Action: Create
  • Hive: HKEY_LOCAL_MACHINE
  • Key Path: SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • Value name: SMB
  • Value type: REG_DWORD
  • Value data: 0

VERIFICARE DISABILITAZIONE SMBv1
Come ho già scritto in precedenza, il fatto che il protocollo (Feature) sia installato non implica che sia attivo. Per verificare se quanto abbiamo fatto è andato  buon fine possiamo utilizzare il Cmdlet PowerShell Get-SmbServerConfiguration oppure interrogare la chiave di registro attraverso il comando reg query.

PowerShell: Get-SmbServerConfiguration | Select EnableSMB1Protocol
SMB-GPO-04

Registro di sistema: reg query HKEY_Local_machine\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\ /v SMB1
SMB-GPO-05

Anche la verifica della corretta applicazione della Group Policy attraverso un gpresult /Z può essere utile.
SMB-GPO-06

Sembra tutto facile… In effetti lo è. Anche se i pericoli sono sempre dietro l’angolo. Un possibile problema potrebbe essere il mancato accesso alle risorse di rete da parte dei client più vecchi.

L’unico problema nel disattivare o disinstallare SMBv1 nella propria infrastruttura è quello di sapere se è un prerequisito per il corretto funzionamento di qualche apparato utilizzato.

Microsoft ha reso disponibile un’elenco di prodotti che espressamente richiedono SMBv1.  L’elenco, che come potrete notare è costantemente aggiornato, è consultabile sul Blog del Team Storage SMB1 Product Clearinghouse. In ogni caso è bene chiedere al produttore oppure leggendo la documentazione tecnica.

Ovviamente questo è solo uno dei tanti aspetti che riguardano la sicurezza di una infrastruttura informatica, ma visto che ci siamo, se possiamo partiamo con il piede giusto. Per le nuove installazioni, a meno di precise indicazioni, è bene utilizzare l’ultima versione di sistema operativo, eseguire tutti gli aggiornamenti di sicurezza, attivare Windows Firewall, disattivare tutti i servizi non necessari, utilizzare password complesse con scadenza ed accedere ai sistemi senza credenziali elevate. Il tutto si traduce con il concetto diminuire il perimetro di attacco.

Un altro consiglio è quello di incapsulare il traffico SMB all’interno dei pacchetti TPC/IP andando ad eliminare il traffico NetBIOS over TCP (137 TCP/UDP, 138 UDP , 139 TCP).

Spero di aver chiarito qualche dubbio, di aver dato qualche spunto di verifica e di non avervi annoiato…

Per un approfondimento su questi aspetti vi consiglio la lettura dei seguenti articoli:
How to enable and disable SMBv1, SMBv2, and SMBv3 in Windows and Windows Server
Disabling Server Message Block Version 1 (SMB v1) in Azure
SMB1 Product Clearinghouse
Microsoft Security Bulletin MS17-010
Direct hosting of SMB over TCP/IP

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *