La virtualizzazione è un tema molto attuale, e quindi si sprecano gli articoli che trattano dei suoi problemi di sicurezza. Alcuni sono qui… Le basi per sostenere che l’uso di macchine virtuali diminuisce la sicurezza sono sostanzialmente due: che con le macchine virtuali ci si permettono cose che con macchine reali non si farebbero, e il fatto che la virtualizzazione aggiunge un altro strato soggetto a proprie vulnerabilità.
La prima è molto debole: se le macchine virtuali non sono intrinsecamente più sicure, e direi che non lo sono, allora è chiaramente sbagliata l’ipotesi, ma d’altra parte i confronti andrebbero fatti a parità di utilizzi. Chi usasse in modo incauto le macchine virtuali secondo l’ipotesi che per qualche motivo siano più sicure sbaglierebbe, ma la cosa non vuol dire che la virtualizzazione sia più insicura in generale. In effetti, questa critica alla virtualizzazione viene di solito accennata ma poi abbandonata.
La seconda affermazione, che le macchine virtuali aggiungono la propria dose di vulnerabilità, è certamente vera, ma da questo a dire che comporta una minore sicurezza ne passa parecchio. Non vale l’equazione nuovo componente = nuove vulnerabilità = meno sicurezza: se così fosse, anche l’introduzione di un antivirus diminuirebbe la sicurezza di un sistema. La sicurezza di un sistema informativo non si misura certo in termini di numero di vulnerabilità dei suoi componenti.
La virtualizzazione può essere usata sostanzialmente secondo due logiche: virtualizzando sistemi che sarebbero fisicamente separati e raccogliendoli su un’unica macchina fisica, oppure separando componenti che condividono su un’unica macchina fisica realizzando per ognuno una macchina virtuale.
Il primo caso è il più comune. Chi ad esempio compra un virtual host da un provider anziché un servizio di housing, cade in questo caso. Sistemi che sarebbero fisicamente separati si trovano quindi a condividere lo strato di virtualizzazione (e quello sottostante). In queste condizioni, le vulnerabilità dei meccanismi di virtualizzazione esprimono il loro massimo potenziale. Chi abbia accesso ad una macchina virtuale (chiunque ne può comprare una ed avervi accesso con i massimi privilegi) può sfruttarle per accedere ad altre macchine virtuali, o per bloccare il sistema o le macchine virtuali.
A tutto questo si aggiungono naturalmente i problemi dell’interfaccia di gestione. In effetti, guardando le vulnerabilità associate ad esempio ai prodotti VMWare su Securityfocus, la maggior parte si riferiscono a questo componente. È chiaro che in queste condizioni, l’uso di soluzioni di virtualizzazione aumenta il rischio. Allo stesso tempo, l’uso di soluzioni di virtualizzazione garantisce vantaggi da altri punti di vista, che comprendono diversi aspetti della gestione che hanno a loro volta delle conseguenze dal punto di vista della sicurezza. Ad esempio, il fatto di poter replicare lo stesso sistema “di base” per tutti i sistemi virtualizzati permette di avere meno variabilità fra i sistemi e quindi maggiore facilità nell’applicare le patch. Non si corre ad esempio il rischio di aver testato la patch su un isstema, e poi avere difficoltà su un altro sistema solo perché usa una scheda di rete diversa o simili. Di esempi di questo genere, che mostrano il legame fra capacità di gestire i sistemi e sicurezza, se ne potrebbero fare molti, ma a seconda del contesto non è detto che riescano a compensare il rischio aggiuntivo. E naturalmente, i vantaggi per i quali normalmente vengono scelte soluzioni di virtualizzazione hanno poco a che fare con la sicurezza.
C’è però un altro caso in cui invece la virtualizzazione costituisce di per sé un miglioramento della sicurezza, ed è quando componenti che convivono su una macchina fisica vengono separati su macchine virtuali. Per restare nello stesso ambito, l’hosting è un esempio di questo caso: più domini utilizzano lo stesso server http sulla stessa macchina fisica (e sullo stesso sistema operativo). Problemi del server http portano alla compromissione di tutti i domini che gestisce. Ad esempio, il fatto che su alcuni domini venga utilizzato un componente che richiede un componente obsoleto impedisce l’aggiornamento di quel componente anche per i domini che non richiedono la versione obsoleta (per intenderci: se un dominio usa un CMS che non è compatibile con una versione aggiornata di PHP, questo impedisce di aggiornare PHP anche per chi usa altri CMS che non hanno lo stesso problema). Assegnare ad ognuno di questi domini una macchina virtuale li rende indipendenti, e la compromissione dell’uno non ha conseguenze sugli altri. In questo caso, l’uso della virtualizzazione aumenta la sicurezza. Eventuali vulnerabilità del meccanismo di sicurezza potranno, più o meno, degradare la situazione al caso iniziale di condivisione. In questo caso è però facile che il costo sia una maggiore complessità dal punto di vista della gestione. C’è un caso particolare in cui la condivisione fra applicazioni e contesti diversi è elevata, i rischi associati anche, e la separazione sarebbe vantaggiosa, ed è quello della postazione di lavoro dell’utente. In questo caso, avere macchine virtuali separate permette di non compromettere contesti critici a causa di attacchi portati a quelli più a rischio come la navigazione su Internet. Questo tipo di virtualizzazione è molto diverso dal concetto di “virtualizzazione del desktop” che prevede che il desktop sia memorizzato su un server remoto, che invece è solo uno dei tanti modi per implementare un desktop remoto; in questo caso invece, più macchine virtuali sono sullo stesso pc fisico a disposizione dell’utente. I due concetti sono diversi e in generale ortogonali. La critica principale alla possibilità di dividere il pc dell’utente in più macchine virtuali è che il tipo di segregazione che fornisce dovrebbe essere fornita dal sistema operativo. Certo, sarebbe bello che il sistema operativo fornisse dei meccanismi di segregazione efficaci, ma se ci vogliamo occupare di sicurezza dobbiamo fare i conti con quello che viene effettivamente fornito dal mercato, e non con quello che sarebbe bello che qualcuno realizzasse… e con i sistemi attualmente disponibili, il sistema operativo non fornisce meccanismi adeguati.
L’uso di strumenti di questo tipo permette anche di migrare con più facilità a sistemi operativi alternativi a Windows. L’installazione esistente di Windows può infatti essere migrata su una macchina virtuale, dove rimane sempre disponibile per accedere ad applicazioni proprietarie e al supporto di periferiche particolari (in particolare se su interfaccia USB), mentre nello stesso tempo è possibile iniziare ad utilizzare sistemi operativi diversi, sia sul sistema reale che su macchine virtuali.