SMBv1 – Utilizzo, disattivazione e sicurezza

Con questo articolo cercherò di dare qualche utile indicazione sul perché, su come e su dove approfondire i concetti base riguardanti il protocollo SMBv1. 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.

*** In seguito alle modifiche apportate con le ultime build (1709 e successive), l’articolo è stato aggiornato. Link di riferimento disponibili in fondo all’articolo ***

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

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).

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

Windows Server 2012 R2

Windows Server 2016

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.
Attenzione: il fatto che il protocollo sia installato non implica che sia attivo
Attenzione: a partire dalla versione 1709 il protocollo SMBv1 non è installato per impostazione predefinita

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.

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

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

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

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…

***  SMBv1 non viene installato per impostazione predefinita in Windows 10 Fall Creators Update e in Windows Server versione 1709 ***

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 *

This site uses Akismet to reduce spam. Learn how your comment data is processed.