INTRODUZIONE Il concetto di virtualizzazione di un sistema di elaborazione non è recente: uno dei primi esempi, introdotto dalla IBM, risale agli anni ’60. Tuttavia, negli ultimi dieci anni, si è assistito ad un forte incremento dell’uso di questa tecnica, che permette di contenere i costi di gestione e di sfruttare al meglio le risorse dei centri di elaborazione dati. Si può stimare che in media la potenza di calcolo di ogni singolo elaboratore si sfruttata solo in minima parte. Questo dato - unito a quelli relativi ai costi di manutenzione, energia elettrica ed impianti di condizionamento - rende particolarmente conveniente per i responsabili dei CED, adottare la virtualizzazione dei server, una tecnica che permette l’esecuzione di più macchine virtuali su un solo server fisico. L’uso e il numero dei server installati viene razionalizzato, mantenendo inalterate le capacità funzionali del sistema. Oggi la virtualizzazione è una tecnologia matura che sta diventando ampiamente utilizzata a livello enterprise: numerose e particolarmente delicate sono le problematiche di sicurezza legate all’uso di questa soluzione. La presente pubblicazione ha quindi l’obiettivo di apportare un contributo a quanti abbiano adottato o intendano adottare tecniche di virtualizzazione e si trovino ad affrontare le relative problematiche di sicurezza. La prima parte del volume, che va dal primo al quarto capitolo, si focalizza sulle tecniche implementative, le soluzioni e i prodotti per la virtualizzazione, mentre il quinto capitolo affronta gli aspetti legati alla sicurezza. Il primo capitolo si sofferma sull’evoluzione storica della virtualizzazione ed esamina una classificazione delle diverse tecniche. Il secondo capitolo prende in considerazione le soluzioni tecnologiche e gli approcci implementativi più diffusi, mentre il terzo descrive alcuni dei prodotti commerciali e dei progetti open source più noti. Il quarto capitolo tratta i diversi aspetti che devono essere presi in considerazione quando si realizza un’infrastruttura di virtualizzazione complessa facendo riferimento ai componenti di base: networking, storage e server. Il quinto capitolo, che rappresenta una parte molto consistente dell’elaborato, affronta gli aspetti di sicurezza di una specifica tecnica di virtualizzazione dei server, la Partitionig Virtualization, e in particolar modo dei sistemi di Hypervisor e di VMM (Virtual Machine Monitor). Vengono affrontati gli aspetti di sicurezza più critici legati al mondo della virtualizzazione, in particolare: • Virus basati sulla virtualizzazione • Rilevamento di un sistema virtualizzato • Riallocazione dinamica delle immagini virtuali • Isolamento delle macchine virtuali e denial-of-service • Integrità delle macchine virtuali • Isolamento del traffico di rete Il sesto e ultimo capitolo, esamina un nuovo paradigma di sicurezza che sfrutta la virtualizzazione in modo sinergico con una tecnologia sempre più emergente chiamata Trusted Computing. -6- 1. LA VIRTUALIZZAZIONE: CONCETTI DI BASE Il concetto di virtualizzazione è molto ampio e per questo motivo spesso genera confusione e imprecisioni. E’ necessario quindi, prima di analizzare le problematiche inerenti questa tecnologia, soffermarsi sull’evoluzione storica della virtualizzazione ed effettuare una classificazione delle diverse tecniche. 1.1 CHE COSA SI INTENDE PER VIRTUALIZZAZIONE In generale si può definire virtualizzazione qualunque processo in grado di astrarre i dettagli fisici di una risorsa reale al fine di permettere ai suoi utenti un accesso più semplice, efficiente o sicuro. Utente Risorsa Logica Livello di astrazione Risorsa Fisica Figura 1: Concetto generale di virtualizzazione Per spiegare questo concetto (di per se molto astratto) possono essere utili degli esempi: • 1 Un comune disco rigido di un personal computer è composto da uno o più piatti i quali a loro volto sono suddivisi in cilindri e settori1. L’utente finale, ovviamente, non deve conoscerne la geometria fisica in quanto vi è il sistema operativo che, attraverso un opportuno modulo, denominato file system, mostra all’utente un generico spazio di memorizzazione Si parla di geometria del disco. -7- organizzato in cartelle (directory) e documenti (file) 2. Facendo riferimento alla Figura 1 questo esempio può essere così schematizzato: Utente Cartelle e documenti File System del S.O. Geometria fisica del disco Figura 2: Esempio: astrazione di un disco • Un altro esempio è quello della memoria virtuale, ovvero quella tecnica mediante la quale il sistema operativo mostra alle applicazioni una memoria (RAM) ben più ampia di quello che è, mediante l’uso di ulteriori supporti di memorizzazione. Applicazione Memoria Virtuale Gestore della memoria del S.O. RAM DISCO Figura 3: Esempio: memoria virtuale 2 I file system più noti sono FAT, NTFS e EXT. -8- La virtualizzazione dei server è una tecnica che permette l’esecuzione di più macchine virtuali su un solo server fisico ed è usata allo scopo di ottimizzare le risorse disponibili. Come verrà illustrato nei prossimi paragrafi, con la virtualizzazione vengono creati diversi livelli di astrazione che fanno sì che il sistema operativo non veda l’hardware fisico ma l’hardware virtuale. Utente Server Virtuale 1 Server Virtuale N Gestore dei server virtuali Server Fisico Figura 4: Virtualizzazione dei server 1.2 CENNI STORICI Come accennato nell’introduzione, uno dei primi esempi di virtualizzazione di un sistema di elaborazione risale agli anni ’60 ed è stato introdotto coi sistemi chiamati CP/CMS progettati ed implementati dall’IBM; la componente CP (Control Program) di fatto rappresentava il livello di astrazione il cui compito era quello di fare vedere ai livelli superiori (il sistema operativo) diverse macchine logiche al posto dell’hardware fisico; il CMS (Conversational Monitor System) era il sistema operativo (monoutente) che girava sopra ogni macchina virtuale; il vantaggio di questa architettura era enorme se si considera che in quel periodo storico non esistevano ancora sistemi operativi multitasking interattivi. In seguito, l’avvento dei nuovi sistemi operativi ha fatto sì che questa architettura venisse abbandonata con la conseguente progressiva dismissione dei mainframe e l’aumento spropositato del numero di PC/server presso i CED delle aziende. Negli ultimi 10-15 anni ci si è resi conto che la potenza di calcolo di ogni singolo elaboratore è mediamente utilizzata solo al 20%; questa considerazione - unita ai dati relativi ai costi in termini di manutenzione, energia elettrica ed impianti di condizionamento - ha fatto sì che si intraprendesse nuovamente la strada della virtualizzazione. -9- 1.3 VANTAGGI E SVANTAGGI DELLA VIRTUALIZZAZIONE Come si è detto la virtualizzazione dei server permette di ottimizzare le risorse fisiche disponibili e di facilitare la gestione e l’uso dei server. Più nel dettaglio, i vantaggi di questa tecnica di virtualizzazione sono i seguenti: • la riduzione dei server fisici: le soluzioni hardware/software per la virtualizzazione permettono l’esecuzione di diverse macchine virtuali su un solo server fisico con il vantaggio di ridurre i consumi energetici, il calore generato (sono necessari impianti di condizionamento meno potenti), i guasti hardware, i tempi tecnici per il montaggio e il cablaggio, il numero di armadi rack, lo spazio dedicato in sala macchine e il relativo cablaggio; • il consolidamento dei server: si stima che mediamente un moderno server venga sfruttato solo al 15-20%. È quindi ragionevole che possano essere eseguite 3 o 4 macchine virtuali sullo stesso hardware fisico; • l’indipendenza hardware: il software, ed in particolar modo il sistema operativo, è strettamente legato all’hardware sottostante. Se quindi per qualche motivo un’installazione di un server deve essere spostata o clonata su un’altra macchina, si dovranno tenere in conto diversi problemi di incompatibilità hardware (ad esempio si dovranno installare tutti i driver mancanti del nuovo hardware). Come verrà illustrato nei prossimi capitoli, una delle caratteristiche della virtualizzazione è quella di creare livelli di astrazione tali per cui il sistema operativo non vede l’hardware fisico bensì un hardware virtuale. In questo modo l’amministratore può spostare o clonare un sistema su altre macchine che eseguono lo stesso ambiente di virtualizzazione senza preoccuparsi dei dettagli fisici (modello delle schede di rete, schede grafiche, chipset e così via); • l’adattabilità: spesso in un’azienda cambiano le priorità e le esigenze, per cui un servizio può diventare più importante di un altro e necessitare di risorse maggiori. La virtualizzazione permette di allocare le risorse hardware virtuali in modo decisamente più veloce e flessibile. Se necessario, la macchina virtuale può, inoltre, essere spostata su un hardware più efficiente in modo totalmente trasparente; • il supporto alle applicazioni legacy: non è raro trovare nelle sale macchine delle aziende vecchi server con vecchi sistemi operativi (ad esempio il DOS) che non possono essere spostati su macchine nuove in quanto questi non sarebbero supportate. Gli ambienti di virtualizzazione permettono l’esecuzione anche di sistemi legacy permettendo ai responsabili IT di liberarsi di vecchio hardware non più supportato e più soggetto a guasti; • la standardizzazione delle installazioni: grazie all’astrazione dell’hardware è possibile preparare una sola volta le immagini di ambienti omogenei (come ad esempio quello delle postazioni di lavoro o server di sviluppo) comprensivi di sistema operativo, applicazioni e configurazioni particolari (ad esempio dominio, posta elettronica, LDAP, policy di sicurezza, ecc…); • la creazione di ambienti di test: capita frequentemente che su un sistema in produzione si debbano apportare delle modifiche senza sapere quali siano le conseguenze: ad esempio l’installazione di un aggiornamento del sistema operativo o soprattutto di una service pack non è un’operazione priva di rischi. La virtualizzazione permette la replica immediata di una macchina virtuale per poter effettuare tutti i test di stabilità richiesti. - 10 - Ovviamente, come ogni altra tecnologia, l’uso della virtualizzazione porta inevitabilmente a degli inconvenienti che variano a seconda dello scenario applicativo e devono essere valutati prima di avviare la virtualizzazione. Gli aspetti che devono essere tenuti in considerazione sono i seguenti: 1.4 • l’overhead: ogni soluzione di virtualizzazione fa decrescere le performance globali, come ad esempio i tempi di accesso ai dischi, accesso alla memoria e cosi via. Alcune applicazioni particolarmente critiche potrebbero risentire dell’overhead introdotto dall’ambiente di virtualizzazione; • l’hardware non virtualizzabile: a seconda dei prodotti utilizzati, alcune periferiche potrebbero non essere usate dalle macchine virtuali, come ad esempio porte seriali / parallele, dispositivi USB, interfacce bluetooth, accelerazioni grafiche hardware e così via. TECNICHE DI VIRTUALIZZAZIONE DEI SERVER La virtualizzazione dei server può essere divisa in diverse tipologie a seconda della tecnica utilizzata. La seguente figura mostra una possibile classificazione. Server Virtualization Aggregation Virtualization Instruction-Set Virtualization Partitioning Virtualization Hardware Partitioning Hypervisor Virtual Machine Monitor Hypervisor Hosted VMM OS Hosted VMM Figura 5: Classificazione delle tecniche di virtualizzazione3 3 La figura è tratta (e qui riadattata) da Phelp J.R., Dawson P. (luglio 2007). - 11 - OS Virtualization Come si può notare si possono identificare tre macro tecniche di virtualizzazione: 1. Mediante partizionamento (Partitioning Virtualization): in questa categoria rientrano quei sistemi che permettono di configurare l’hardware fisico in più macchine logiche in grado di ospitare ognuna un suo sistema operativo. Questi sistemi possono essere ancora classificati in: • Hardware Partitioning • Hypervisor • Virtual Machine Monitor (VMM) • OS Virtualization 2. Mediante emulazione (Instruction-Set Virtualization): questi sistemi permettono di emulare un diverso sistema hardware/software allo scopo di eseguire applicazioni scritte per diverse piattaforme; per questa ragione sono comunemente chiamati emulatori. Esempi molto noti sono: • gli ambienti di sviluppo per dispositivi mobili, in cui è possibile eseguire gli applicativi (ad esempio Symbian) su PC in modo tale da agevolare le fasi di debugging; • MAME4 (Multiple Arcade Machine Emulator), il quale permette l’esecuzione su PC dei vecchi videogiochi da bar degli anni ’80 (senza modificare il codice originale). Gli esempi precedenti fanno riferimento a emulatori software; esistono anche emulatori hardware come ad esempio il processore Crusoe della Transmeta5; si tratta di CPU che, pur non essendo in modo nativo compatibili con l’architettura x866, tramite il livello di astrazione Code Morphing Software (CMS), possono essere usate come normali CPU x86 grazie alla traduzione delle istruzioni x86 in istruzioni VLIW. In questa categoria si può far rientrare anche la nota JAVA Virtual Machine (JVM) 7 in quanto effettua una traduzione al volo del byte code java in istruzioni eseguibili sul sistema nativo. 3. Mediante aggregazione (Aggregation Virtualization): a differenza delle altre due tecniche, in questo caso più macchine virtuali vengono aggregate fra di loro per fare eseguire un’unica applicazione. Un caso tipico è l’uso del GRID Computing o più in generale delle tecniche di calcolo distribuito; esse sono basate sulla possibilità di poter suddividere il “compito” principale in task più semplici e indipendenti fra di loro: ogni task è assegnato ai diversi nodi dell’infrastruttura di calcolo ed alla fine i risultati vengono assemblati da nodi dedicati. 4 http://mamedev.org/ 5 http://www.transmeta.com/tech/microip.html 6 Queste CPU appartengono all’architettura Very Long Instruction Word (VLIW). 7 http://java.sun.com/ - 12 - La presente pubblicazione è focalizzata sugli aspetti di sicurezza della virtualizzazione basata su partizionamento (ed in particolar modo sugli Hypervisor e il Virtual Machine Monitor) che costituisce il sistema più diffuso nelle aziende e tra gli utenti privati. - 13 -