• Non ci sono risultati.

CC 11 L

N/A
N/A
Protected

Academic year: 2021

Condividi "CC 11 L"

Copied!
23
0
0

Testo completo

(1)

C

C

a

a

p

p

i

i

t

t

o

o

l

l

o

o

1

1

L

a virtualizzazione

Indice del capitolo

1.1 - Livelli di virtualizzazione...10

1.2 - La virtualizzazione a livello hardware: il Virtual Machine Monitor...13

1.2.1 Binary translation e dynamic recompilation...15

1.3 - Benefici e problemi per la sicurezza negli ambienti virtualizzati...16

1.4 - Una tecnologia di virtualizzazione: Xen...19

1.4.1 La gestione della memoria...21

1.4.2 La CPU...23

1.4.3 I dispositivi di I/O...24

1.4.4 La rete...24

1.4.5 - La comunicazione tra domini.. ...26

1.4.6 - sHype: un meccanismo di sicurezza in Xen...28

Nello sviluppo dei primi sistemi informatici, la fase iniziale della progettazione era dedicata al disegno dell'hardware, a cui era associato un insieme di istruzioni in linguaggio macchina. In seguito, in base al linguaggio definito, si sviluppava il software. Questo comprendeva il software di sistema, assemblatori e compilatori ed i programmi applicativi.

Quando crebbe la comunità degli utenti, i sistemi operativi divennero più complessi ed il numero di applicazioni aumentò rapidamente, per cui riscrivere e distribuire il

(2)

La virtualizzazione

software per nuove architetture hardware divenne uno sforzo importante. A questo punto i vantaggi della compatibilità e della portabilità del software divennero rapidamente evidenti. Lo sviluppo della famiglia IBM 360 all'inizio degli anni '60 segnò l'inizio della totale compatibilità software tra i vari modelli della serie; questo è stato possibile grazie all'introduzione del concetto di ISA(Instruction Set Architecture), grazie cioè alla precisa definizione ed al controllo dell'interfaccia tra l'hardware ed il software.

Inoltre, i sistemi operativi sono stati sviluppati con l'obiettivo di astrarre i programmi applicativi dalle specifiche dell'hardware, di farsi carico della gestione delle risorse fisiche, di proteggere le applicazioni ed i dati dell'utente, di supportare la condivisione controllata della memoria. Poiché i programmi applicativi dipendono pesantemente dai servizi forniti dal sistema operativo, l'interfaccia tra questi due livelli è diventata un punto importante per la standardizzazione. Oggi esiste un numero relativamente piccolo di sistemi operativi standard, ciascuno dei quali non opera nella completa indipendenza poiché deve garantire l'interoperabilità nelle reti di comunicazione.

Il consolidamento delle interfacce standard ha condotto allo sviluppo di sistemi grandi e complessi e, al tempo stesso, ha reso il software molto più flessibile e portabile di quanto era possibile in precedenza. La situazione non è perfetta, tuttavia, perché esistono un certo numero di ISA e di sistemi operativi incompatibili e la portabilità è limitata a quelle piattaforme che sono conformi agli stessi standard in base ai quali il software è stato sviluppato.

Come vedremo, esiste una grande varietà di macchine virtuali che forniscono una altrettanto grande varietà di benefici, come la compatibilità tra diverse piattaforme[2,3]. Esse possono essere utilizzate anche per migliorare la sicurezza, per fornire prestazioni o per migrare il software.

1.1 - Livelli di virtualizzazione

I moderni computer sono costituiti da tre componenti principali: l'hardware/firmware, il sistema operativo ed i programmi applicativi, come mostrato in figura 3, dove sono evidenziate le interfacce e la diretta interazione tra di essi.

(3)

La virtualizzazione

Figura 3: Componenti e interfacce

Ad esempio, il sistema operativo e le applicazioni interagiscono direttamente con l'hardware durante la normale esecuzione delle istruzioni. Poiché soltanto il sistema operativo possiede i privilegi per gestire e proteggere le risorse fisiche i programmi interagiscono con esse attraverso le chiamate al sistema operativo.

Purtroppo i prodotti relativi ad ognuna delle suddette componenti sono sviluppati da compagnie diverse e la crescita di hardware e software in termini di complessità e di varietà ha fatto della totale compatibilità tra di essi una proprietà difficilmente raggiungibile.

Di conseguenza, applicazioni compilate per una particolare architettura non possono essere eseguite su un hardware che implementa un insieme di istruzioni diverso, vedi figura 4.(b). Ad esempio, i programmi per Apple Mac non possono essere direttamente eseguiti sui processori Intel x86, è impossibile installare i sistemi operativi Windows su architetture Mac PowerPc e le applicazioni compilate per Linux non saranno eseguite su sistemi operativi Windows.

(4)

La virtualizzazione

I problemi appena introdotti possono essere risolti implementando un insieme di funzionalità software che fornisce un ambiente virtuale per l'esecuzione del software di interesse.

Per quanto riguarda la terminologia, ci si riferisce alla piattaforma fisica sottostante come host ed al software che è eseguito nella macchina virtuale come guest . Inoltre, ci si riferirà al software di virtualizzazione con il termine Virtual Machine Monitor (VMM) ed al software virtualizzato con Virtual Machine (VM).

Il software di virtualizzazione può essere implementato in modi diversi[5] per collegare ed adattare le tre maggiori componenti, illustrate in figura 3. Tra questi, i più importanti sono sicuramente:

la virtualizzazione a livello hardware, che rappresenta un livello software che incapsula l'hardware/firmware e ne esporta una astrazione ai livelli superiori. In questo modo esso emula le risorse fisiche, quali il processore, la memoria e i dispositivi di I/O, in risorse virtuali e le mette a disposizione del sistema operativo, come in figura 5.(a), o delle applicazioni, come in figura 5.(b). Questa tipologia di macchina virtuale è presente fin dagli anni '60, quando fu sviluppata dalla IBM la tecnologia su mainframe VM/370, ed è ancora utilizzata sulla tecnologia di virtualizzazione Vmware[21] per architetture x86.

la virtualizzazione a livello di sistema operativo, che implementa un livello di software che opera tra il sistema operativo ed i programmi applicativi. Le macchine virtuali così create eseguono applicazioni scritte per il particolare sistema operativo virtualizzato. Questo tipo di virtualizzazione è detta anche

server-level, poiché permette a numerose applicazioni residenti su un server di

condividere la stessa macchina in maniera isolata e sicura. Virtuozzo[22] e Jail[23] di FreeBSD rappresentano un esempio di questa tecnologia.

la virtualizzazione a livello applicativo, come mostrato in figura 5.(c), consiste di un programma applicativo, supportato dal sistema operativo, che è capace di eseguire programmi scritti in un linguaggio di alto livello e compilati per la particolare macchina astratta definita. Esempi di questo tipo di macchina virtuale sono JVM e Smalltalk.

(5)

La virtualizzazione

Figura 5: livelli di virtualizzazione

Ciascuna tipologia di virtualizzazione rappresenta quindi un approccio diverso ed è caratterizzato da differenti pregi e difetti, ma nell'insieme condividono le seguenti caratteristiche, esaminate più dettagliatamente nel prossimo paragrafo:compatibilità del software, isolamento tra gli ambienti virtuali, incapsulamento e livello di indirezione e diminuzione delle performance.

Con la presenza nel mercato di una grande varietà di applicazioni, le tecnologie di virtualizzazione sono oggi largamente utilizzate poiché permettono l'interoperabilità tra le componenti principali di un computer. Inoltre, a causa della forte resistenza su pochi standard e del loro consolidamento nell'industria dei computer, è prevedibile che gran parte delle innovazioni in futuro sfrutteranno i software di virtualizzazione, che quindi diventeranno la componente aggiuntiva di molti sistemi con un importanza pari all'hardware, ai sistemi operativi ed alle applicazioni.

1.2 - La virtualizzazione a livello hardware: il Virtual Machine

Monitor

Come già accennato e rappresentato in figura 5.(a), la virtualizzazione a livello hardware è implementata da un ridotto numero di funzioni software, chiamato Virtual Machine Monitor. Esso è eseguito direttamente dalla macchina fisica e, creando una corrispondenza tra l'interfaccia specifica dell'hardware e le macchine virtuali, permette a queste di eseguire tutto il software scritto per un determinato Instruction Set. Inoltre, poiché questo meccanismo è trasparente al software eseguito nella macchina virtuale, il VMM è responsabile di fornire e mantenere l'illusione della presenza di un determinato

(6)

La virtualizzazione

hardware e del suo reale stato.

Oltre al livello di virtualizzazione esiste una distinzione anche in base alle tipologie di virtualizzazione che possono essere fornite:

virtualizzazione completa, quando la macchina virtuale creata dall hypervisor può

eseguire un sistema operativo, senza che sia necessario modificarne il codice.

paravirtualizzazione, nel caso in cui sono necessarie alcune modifiche al sistema

operativo, ma non alle applicazioni che risiedono su di esso. In questo caso, il VMM presenta un interfaccia di astrazione, tramite la macchina virtuale, simile all interfaccia esportata dall hardware sottostante.

Uno dei vantaggi della paravirtualizzazione è una performance migliore poiché non è necessario effettuare la traduzione dinamica delle istruzioni, richiesta dalla virtualizzazione completa. Uno svantaggio, invece, è che il numero dei sistemi operativi che possono essere eseguiti con questa tecnologia è potenzialmente minore, cioè solo quelli di cui è stato modificato opportunamente il codice.

Per il VMM è estremamente complesso tradurre tutte le operazioni dall'hardware reale alla macchina virtuale in modo sicuro, trasparente ed efficiente. I moderni Virtual Machine Monitor risolvono questo problema attraverso una serie di caratteristiche che ciascuno di essi dovrebbe possedere. La prima è sicuramente la compatibilità del

software. Poiché la macchina virtuale rappresenta una astrazione della macchina fisica,

allora tutte i sistemi operativi e le applicazioni sviluppate per la macchina reale devono poter essere eseguite anche all'interno della macchina virtuale.

L'altra caratteristica è la capacità di isolamento, che consiste nel fatto che il software in esecuzione in una macchina virtuale deve essere isolato, cioè non deve potersi riferire ad ambienti diversi dal proprio o a quello in cui risiede il VMM. Quest'ultimo è capace di controllare a quali risorse ogni macchina virtuale può accedere e quindi di evitare attacchi accidentali o malevoli.

Ogni VMM fornisce anche incapsulamento, cioè le macchine virtuali a livello hardware incapsulano tutto il software eseguito direttamente sull'hardware e così permettono al VMM la gestione delle risorse fisiche ed il controllo sul software stesso. Questa caratteristica è concettualmente una conseguenza del fatto che lo strato di virtualizzazione consente al software eseguito nella macchina virtuale di essere effettivamente separato dall'hardware. In tal modo esso può gestire queste due componenti in maniera totalmente trasparente.

(7)

La virtualizzazione

Il VMM sfrutta questa caratteristica per eseguire più macchine virtuali contemporaneamente o per migrare macchine virtuali in esecuzione tra differenti piattaforme hardware. Infine, l'incapsulamento permette di controllare l'esecuzione della macchina virtuale, permettendo di interromperla definitivamente o per riprenderla successivamente, salvare lo stato o creare un checkpoint e in seguito tornare a quello stato.

In confronto alla dimensione ed alla complessità dei moderni sistemi operativi, che possono essere costituiti da milioni di linee di codice, la dimensione ridotta del Virtual Machine Monitor lo rende molto efficiente nell'esecuzione di alcune operazioni e permette una gestione relativamente semplice e la comprensione della sua implementazione.

La tecnica usata dal VMM per mappare la macchina virtuale direttamente sull'hardware della macchina reale ha prestazioni vicine a quelle native poiché, una volta create le risorse virtuali ed effettuato il loro mapping sulle risorse fisiche, la macchina virtuale può essere eseguita in modo molto efficiente sull'hardware reale. Ad esempio, la VMM emula la CPU in maniera semplice schedulando l'esecuzione della macchina virtuale sulla CPU reale o emula i dispositivi di I/O virtuali come i dischi usando i dischi reali.

La virtualizzazione a livello hardware produce quindi nel VMM un basso

overhead, gran parte del quale è causato dalla necessità di garantire l'isolamento tra le

macchine virtuali in esecuzione e la trasparenza delle loro operazioni.

1.2.1 Binary translation e dynamic recompilation

Tra le tecniche utilizzate per implementare la virtualizzazione completa citiamo quella della binary translation, che prevede una traduzione a tempo di esecuzione del codice destinato all architettura hardware. Poiché il codice del sistema operativo non viene modificato, tutte le parti di codice che contengono operazioni privilegiate, e che quindi richiedono l intervento del VMM, devono essere interpretate a tempo di esecuzione per inserirvi trap alla macchina virtuale.

Questa tecnica sfrutta il classico ciclo di prelievo-decodifica-esecuzione dell istruzione, e quindi ogni istruzione viene emulata per la nuova architettura.

Un altra tecnica per implementare la virtualizzazione completa è la dynamic recompilation. Come indicato dal nome un sistema operativo, progettato per essere eseguito su una particolare classe di CPU e quindi con un determinato linguaggio

(8)

La virtualizzazione

macchina, viene eseguito da una macchina virtuale che utilizza un altro tipo di CPU, con un differente insieme di istruzioni. Di conseguenza, a tempo di esecuzione parti di codice vengono ricompilate per essere eseguite sulla nuova architettura.

Nel caso della dynamic ricompilation , durante l esecuzione vengono riscritte in blocco sezioni di codice, ad esempio la prima volta che si invoca un metodo esso viene ricompilato. Successivamente, se quelle istruzioni verranno rieseguite, si utilizzerà nuovamente la sezione ricompilata. Un altra differenza tra le due tecniche è che, nel caso della binary translation le istruzioni che vengono eseguite direttamente dalle macchine virtuali non vengono tradotte; invece, nel caso della dynamic recompilation tutte le istruzioni devono essere emulate.

1.3 - La sicurezza negli ambienti virtualizzati

I Virtual Machine Monitor sono stati riproposti negli ultimi anni per affrontare i problemi posti in molteplici aree quali la sicurezza, l'amministrazione dei sistemi ed il mobile computing. Il successo di questa tecnologia risiede principalmente nel fatto che, esponendo una interfaccia semplice e ridotta, fornisce una base stabile per la costruzione di software. I servizi a livello di macchina virtuale forniscono, quindi, funzionalità che sarebbero altrimenti difficili da implementare in altri livelli, ad esempio dentro i kernel monolitici, i microkernel[24] o in hardware/firmware.

Inoltre, la virtualizzazione richiede che il VMM gestisca una serie di operazioni

privilegiate effettuate dalla macchina virtuale. Esso cattura queste particolari istruzioni e,

invece di farle gestire direttamente dall'hardware, ne implementa la relativa semantica via software. Questo meccanismo rappresenta uno svantaggio dal punto di vista delle prestazioni ma offre anche un beneficio notevole poiché può essere definito tramite software il comportamento dell'hardware virtuale[4].

In particolare, gli ambienti virtuali offrono notevoli vantaggi:

consolidamento: permettono di installare più sistemi operativi su una singola

macchina e ne facilitano la gestione tramite il controllo centralizzato;

risparmio in termini di denaro e tempo, in quanto si possono avere poche

macchine reali che eseguono numerose macchine virtuali, configurabili in modo centralizzato.

(9)

La virtualizzazione

altrimenti solitamente sottoutilizzate. Ad esempio, invece di macchine reali che eseguono solo alcune applicazioni, è possibile avere una macchina reale che esegue tante macchine virtuali;

isolamento: è possibile garantire un alto livello di protezione tra le macchine

virtuali. Ad esempio, un unica macchina reale può eseguire sistemi operativi con diversi livelli di confidenzialità

semplicità di creazione di macchine virtuali, ad esempio copiando un file

contenente l immagine del sistema operativo e il file system;

migrazione: poiché lo stato del sistema guest è incapsulato totalmente in una

macchina virtuale, è possibile far sì che il sistema sia trasferito da una macchina reale ad un altra, ad esempio per migliorare il bilanciamento del carico;

rollback: ripristino dello stato di una macchina virtuale e del suo sistema operativo

per tornare ad un punto precedente della sua storia;

testing di nuovi sistemi operativi e sandbox per applicazioni.

Questa flessibilità offre grandissimi vantaggi sia agli utenti che agli amministratori e sta velocemente portando ad un processo di sostituzione dei sistemi desktop e server con il loro corrispettivo virtuale. Sfortunatamente, questa transizione può essere pericolosa; la virtualizzazione infatti da origine a modelli di gestione ed utilizzo differenti, in particolare più dinamici, rispetto a quelli adottati negli ambienti tradizionali. Uno dei pericoli è quello di indebolire, attraverso l'utilizzo di nuove funzionalità (ad esempio rollback), l'architettura di sicurezza di molti sistemi, che spesso devono tenere sotto stretto controllo la propria configurazione.

Per questo motivo non si può pensare di sviluppare le piattaforme computazionali virtuali sfruttando l'architettura di sicurezza esistente ma è necessario un suo significativo riesame e riadattamento, in base alle nuove funzionalità, ai nuovi modelli di utilizzo ed all'impatto delle macchine virtuali sulla sicurezza[9].

Consideriamo ora una serie di aspetti coinvolti nell'adozione delle tecnologie di virtualizzazione:

scalabilità: mentre l'acquisto dei computer è limitata per motivi economici, la

creazione di nuove macchine virtuali è semplice ed economica. Gli utenti possono infatti crearle ed utilizzarle per testare nuove applicazioni o applicazioni che richiedono soltanto determinati sistemi operativi. In questo modo, il numero di macchine virtuali può crescere vorticosamente, proporzionalmente alle risorse

(10)

La virtualizzazione

computazionali di cui dispone l'organizzazione, e mettere alla prova i suoi sistemi di gestione della sicurezza, ad esempio patch delle vulnerabilità, configurazioni. Di conseguenza si moltiplicano le vulnerabilità, i rischi e quindi i possibili impatti;

transitorietà: le reti di computer tradizionali raggiungono rapidamente una

configurazione stabile e l'infezione di alcune di esse può essere risolta con facilità riportando il sistema in un altro stato stabile , nelle reti di macchine virtuali questo stato non viene raggiunto quasi mai. Nel caso di un gran numero di macchine virtuali specializzate, infatti, possono sorgere fenomeni che fanno sì che qualcuna di esse appaia e scompaia dalla rete in maniera discontinua. Se una di questa macchine è infetta da un worm e, mentre è attiva, ne infetta altre e scompare prima di essere identificata, il compito di identificare tutte le macchine colpite dal worm è particolarmente difficile;

ciclo di vita del software: nei sistemi operativi tradizionali lo stato di esecuzione

ha una storia lineare. Anche i sistemi virtuali permettono di creare dei checkpoint e di eseguire poi dei rollback per tornare a configurazioni precedenti, ma, a causa del loro grande numero, lo stato deve essere visto come un albero con fattore di branching elevato. Senza la virtualizzazione, se vengono installate tutte le patch disponibili a ritmi regolari, il sistema operativo è in ogni momento più aggiornato e sicuro rispetto al periodo precedente; invece, in ogni momento lo stato di una macchina virtuale può avere differenti punti di scelta che causano delle biforcazioni(fork) e che rappresentano diverse istanze della macchina virtuale nello stesso istante. Di conseguenza, la possibilità di tornare ad uno stato precedente fa sì che la macchina possa, ad esempio, essere esposta nuovamente a vulnerabilità che erano state precedentemente corrette, riattivare servizi insicuri o account disabilitati e cambiare le regole del firewall. Un problema più subdolo sta nel fatto che, mentre la memoria della macchina virtuale può essere riportata ad un punto di ripristino, quella dell'attaccante rimane invariata e quest'ultimo può facilmente eseguire un attacco di tipo replay su alcuni tipi di password;

mobilità: la possibilità di migrare una macchina virtuale su una o più macchine

fisiche crea dei problemi di sicurezza, cioè rende più difficile la definizione del Trusted Computing Base. In un sistema virtuale, esso deve comprendere anche tutte le macchine reali su cui la macchina virtuale è eseguita. Aumenta quindi la

(11)

La virtualizzazione

difficoltà nell'individuare i componenti compromessi, nel tracciare la storia completa della macchina virtuale e quindi nel capire il livello di fiducia che ad essa si può associare;

identità: gli ambienti tradizionali associano un identificatore statico(MAC address)

alla macchina fisica, senza il quale è difficile risalire al responsabile di quella macchina. La creazione dinamica di macchine virtuali e la loro mobilità rende questo metodo impraticabile e pone il problema dell'identificazione univoca di queste ultime all'interno di un ambiente computazionale; è difficile infatti stabilire chi sta utilizzando una delle macchine virtuali eseguite su un certo host.

Tempo di vita dei dati: un principio fondamentale per la costruzione di un sistema

sicuro è quello di minimizzare il tempo in cui i dati sensibili risiedono su di esso. La virtualizzazione può indebolire questa strategia in quanto il VMM deve registrare lo stato di esecuzione della macchina per eseguire in seguito rollback. Ciò invalida gli eventuali propositi degli utenti di rimuovere dati che non intendono mantenere in memoria(chiavi di cifratura,dati personali). La capacità di migrare una macchina virtuale tra host o zone di memoria fisica distinte all'interno dello stesso host introduce anche il problema di eliminare i dati sulla zona di memoria da cui essa migra. Questo pone ovviamente dei problemi di riservatezza delle informazioni più elevati rispetto al caso in cui i dati risiedano sempre su una stessa macchina fisica.

Il modello di utilizzo dinamico, causato dalle tecnologie di virtualizzazione, impone quindi una infrastruttura dedicata per forzare il rispetto della politica di sicurezza.

Il prossimo paragrafo esaminerà una tecnologia ed un prodotto sviluppato per definire a livello di VMM delle politiche di controllo degli accessi, sia per isolare le macchine virtuali che per condividere le risorse.

1.4 - Una tecnologia di virtualizzazione: Xen

Xen è un Virtual Machine Monitor (VMM), o hypervisor, che permette la virtualizzazione e il partizionamento dinamico delle risorse hardware di una macchina, eseguendo simultaneamente sulla stessa più sistemi operativi ospiti detti domini o

domains. La tecnologia implementata in Xen ha come principali obiettivi[25]:

(12)

La virtualizzazione

condizioni il funzionamento e le prestazioni di un altro, in particolare quando le macchine virtuali sono possedute da utenti che non hanno alcun rapporto di fiducia tra di loro;

supporto di molti dei sistemi operativi moderni al fine di soddisfare la compatibilità con gran parte delle applicazioni;

basso impatto introdotto dalla virtualizzazione sulle prestazioni rispetto al sistema nativo.

In particolare, Xen adotta una strategia di paravirtualizzazione che consente di eseguire sistemi operativi guest opportunamente modificati.

I domini possono richiedere all hypervisor di eseguire operazioni privilegiate tramite l interfaccia definita dalle hypercall: per fare questo i domini generano un interrupt software, come le chiamate di sistema. Questo meccanismo e l uso del vettore reale delle interruzioni presente in Xen, permette di invocare la procedura di esecuzione della relativa hypercall, definita dal registro EAX.

Hardware X86 CPU RAM Ethernet SCSI/IDE

XEN Virtual Machine Monitor

virtual block device virtual net device virtual physical memory virtual x86 CPU Interfaccia di controllo GuestOS (XenLinux) Software di controllo GuestOS (XenLinux) Applicazioni Dominio 0 GuestOS (BSDLinux) Applicazioni GuestOS (XPLinux) Applicazioni

Dominio 1 Dominio 2 Dominio 3

Safe Hardware Interface Event channel Back-end Driver Front-end Driver Front-end Driver Front-end Driver

Figura 6: l architettura di Xen

Xen virtualizza le interruzioni mappandole con i relativi event channels, un meccanismo per la trasmissione asincrona di notifiche ai domini, i quali associano ad ognuno degli eventi una funzione di callback, ad esempio la richiesta di terminazione di

(13)

La virtualizzazione

un domino. Xen ha il compito di stabilire, per ogni interruzione, a quale dominio essa è indirizzata[26] e per ciascuna macchina virtuale crea una bitmap, con un bit associato ad ogni evento. La bitmap deve essere modificata ogni volta che si deve notificare un evento al sistema operativo. Quindi si esegue la procedura di gestione per quell evento e si resetta il bit corrispondente.

In modo del tutto analogo alla disabilitazione delle interruzioni di un processore, è presente nella bitmap un altro flag, associato ad ogni evento, che specifica se l evento corrispondente deve essere mascherato. Il bit può essere utilizzato per garantire l'atomicità di alcune operazioni nel sistema operativo ospite.

Oltre che esportare istanze virtuali di CPU, memoria, rete e dispositivi a blocchi (dischi), Xen definisce una interfaccia di controllo per gestire e controllare come queste risorse sono condivise tra i domini in esecuzione[27]. L'accesso a questa interfaccia è ristretto a un dominio privilegiato, detto Dominio 0, che esegue il software applicativo per la gestione degli aspetti di controllo della piattaforma, permettendo così al Framework di Xen di separare i meccanismi dalle politiche. Più dettagliatamente, operando dal Dominio 0 è possibile creare e distruggere i domini, specificare alcuni parametri per la creazione e l'esecuzione dei domini, creare le interfacce virtuali di rete e configurare alcuni aspetti di Xen, come la modalità di condivisione della CPU o le regole di filtraggio dei pacchetti sulle interfacce virtuali di rete.

L interfaccia para-virtualizzata dell architettura x86, può essere suddivisa in tre componenti principali: la gestione della memoria, la CPU e i dispositivi di I/O.

1.4.1 La gestione della memoria

La virtualizzazione della memoria è indubbiamente la parte più complessa nella paravirtualizzazione di una architettura. In particolare, la complessità è dovuta alla virtualizzazione della TLB, a meno che l'architettura ne fornisca la gestione software. Nel caso dell'architettura x86, invece, se la ricerca nella TLB non produce alcun risultato allora automaticamente il processore scorre la tabella delle pagine. La soluzione sviluppata dagli sviluppatori del VMM per affrontare questo problema prevede che :

i sistemi operativi ospite siano responsabili dell'allocazione e della gestione della tabella delle pagine; il coinvolgimento di Xen in queste operazioni si limita ai controlli di correttezza e isolamento;

(14)

La virtualizzazione

nell architettura x86/32, in modo da evitare l'aggiornamento del TLB ogni volta che si accede e si esce dall hypervisor.

In questo modo, un sistema operativo ospite che richiede una nuova tabella delle pagine, ad esempio perché deve essere creato un nuovo processo, deve allocare una pagina della sua memoria per la nuova tabella e registrarla con Xen. Da questo momento in poi, tutti gli aggiornamenti a questa pagina, sulla quale il sistema operativo ha solo diritti in lettura, vengono eseguiti e validati da Xen. Al fine di prevenire la modifica arbitraria della tabella delle pagine da parte dei domini, Xen restringe l'accesso alla sola lettura, valida ogni esplicita richiesta di modifica da parte dei sistemi operativi ospite ed applica soltanto gli aggiornamenti che ritiene sicuri[27].

Figura 7: lo spazio di indirizzamento nell'architettura x86/32

Oltre a riservare una parte di memoria per uso privato, Xen alloca anche piccole porzioni di dimensione fissata di ciascun spazio degli indirizzi virtuali. La rimanente memoria fisica non riservata è disponibile per essere allocata dai domini, alla granularità della dimensione della pagina. A ciascuno dominio è assegnato uno spazio di memoria corrente e uno spazio di memoria massimo.

E' opportuno distinguere la machine memory, cioè l'intero spazio di memoria installata, dalla pseudo-physical memory, una astrazione dello spazio di memoria dedicato ad un dominio o a Xen. Quest'ultimo permette ad un sistema operativo ospite di considerare la propria porzione di memoria come un range contiguo, che parte da 0, di pagine fisiche, nonostante le stesse, a livello inferiore, possano essere allocate in altro ordine.

Per implementare questa strategia, Xen mantiene una tabella globale di sola

USER KERNEL XEN 0 3 GB 4 GB ring 0 ring 1 ring 3

(15)

La virtualizzazione

lettura, detta machine-to-physical, che mappa la corrispondenza tra la posizione reale e quella virtuale delle page frame, e ogni dominio è provvisto di una tabella, detta physical-to-machine, che effettua il mapping inverso.

1.4.2 La CPU

La virtualizzazione della CPU ha numerose ripercussioni sul sistema operativo ospite dovute al fatto che nei sistemi tradizionali quest'ultimo costituisce l'elemento del sistema che possiede maggiori privilegi. L'inserimento dello strato di virtualizzazione viola questo principio ed, al fine di proteggere l'hypervisor e gli altri domini da comportamenti scorretti da parte di un sistema operativo, il sistema operativo guest deve essere modificato in modo da essere eseguito con un livello di privilegio minore.

Ad esempio[35], nell architettura x86 i livelli di privilegio, detti anche ring, sono quattro, a partire dallo 0, con più privilegi, fino al ring 3, con minor privilegi.

Figura 8: il livello dei privilegi nell'architettura x86

Solitamente il codice del sistema operativo è eseguito nel ring 0, l unico che può eseguire le istruzioni privilegiate, mentre le applicazioni sono eseguite nel ring 3.

Nel caso in cui si introduca Xen, esso para-virtualizza ed esegue le istruzioni privilegiate ed i sistemi operativi devono essere modificati così da poter essere eseguiti nel ring 1. Se un sistema operativo tenta di eseguire un istruzione privilegiata, il processore non la esegue e genera un eccezione che trasferisce il controllo a Xen.

(16)

La virtualizzazione

1.4.3 I dispositivi di I/O

Invece di emulare i dispositivi esistenti, come negli ambienti di virtualizzazione completa, Xen fornisce un'architettura detta split device driver per astrarre i dispositivi fisici. Per creare l'illusione dei dispositivi virtuali, questa architettura utilizza due driver che cooperano tra di loro:

il frontend driver, che viene eseguito nei domini utente non privilegiati; esso fornisce al sistema operativo guest un interfaccia per accedere al dispositivo uguale a quella del dispositivo reale. Il driver riceve le richieste dal sistema operativo e, poiché non ha accesso al dispositivo, invia una richiesta al backend driver. Quando quest'ultimo ha servito la richiesta il frontend driver invia un segnale al sistema operativo e restituisce i dati contenuti nella risposta; il backend driver, che viene eseguito in un dominio che ha accesso diretto

all hardware, ad esempio il dominio 0 oppure un driver domain. Esso ha la responsabilità di soddisfare le richieste di I/O. In particolare, deve controllare che le richieste rispettino la politica di sicurezza e far passare solo le richieste corrette al dispositivo hardware. Quando il dispositivo ha terminato le normali operazioni di I/O, il backend driver segnala al frontend che i dati sono pronti.

Il driver domain è una macchina virtuale creata per contenere il codice dei driver e di permetterne la condivisione tra le varie istanze dei sistemi operativi[27]. Inoltre, grazie all interfaccia che i driver hanno verso il livello hardware/firmware, che è chiamata Safe

Hardware Interface, viene limitato l accesso che i driver hanno verso le risorse

hardware che gestiscono. Si ottiene altresì che i crash dei driver siano contenuti e abbiano ripercussioni minime sul sistema, perché sono limitati al dominio che li ospita.

I driver usano la memoria condivisa per soddisfare le richieste e inviare i dati di risposta, e utilizzano un event channel come canale di segnalazione, come descritto nel paragrafo 1.4.5.

1.4.4 La rete

Consideriamo, ad esempio, il dispositivo di rete. Tutte le interfacce di rete appartenenti a un dominio sono connesse a una interfaccia di rete virtuale contenuta nel dominio privilegiato, il Dom0, attraverso un collegamento punto-a-punto, ovvero un cavo

(17)

La virtualizzazione

crossover virtuale. Questi device presenti sui domini sono denominati con la sigla

vif<domid>.<vifid>, ad esempio vif1.0 per l'interfaccia 0 sul dominio 1 o vif3.1 per

l'interfaccia 1 sul dominio 3.

Il Dominio 0 gestisce il traffico sulle interfacce virtuali utilizzando i meccanismi standard di Linux per il bridging, il routing e la limitazione del carico. A differenza di questi però, Xen esegue all'avvio del sistema alcuni script attraverso i quali definisce la configurazione della rete e delle interfacce virtuali. Il vantaggio sta nel fatto che gli script possono essere modificati arbitrariamente per ottenere la configurazione di rete desiderata. Il driver di backend, contenuto nel device domain , è visto come uno switch ethernet virtuale al quale ciascun dominio utente può connettere una o più interfaccia di rete virtuale.

Invece, dal punto di vista del device domain, il driver di backend del dispositivo virtuale di rete può essere composto da un numero arbitrario di dispositivi ethernet, ognuno dei quali ha una connessione diretta con uno dei dispositivi virtuali presenti su un dominio utente. Il device domain può quindi effettuare routing e filtrare il traffico da e verso i domini utente ed il dominio privilegiato. Ciascuna interfaccia di rete virtuale usa due descriptor rings , descritti nel paragrafo 1.4.5, uno per trasmettere e uno per ricevere , che contengono i blocchi contigui di memoria da cui, rispettivamente, prelevare e in cui copiare i dati.

Il primo dominio genera i pacchetti da trasmettere al dominio che contiene il backend e, una volta terminato il trasferimento, riceve la conferma di successo

dell'operazione. A questo punto può liberare la memoria riservata sul descriptor ring. Il dominio che riceve i pacchetti pone i descrittori delle pagine di memoria non utilizzate sull'anello ricevente. Mediante esse il backend trasmette i pacchetti ricevuti scambiando queste pagine con quelle contenenti i dati ricevuti e inviando sull'anello ricevente i descrittori delle nuove pagine contenenti i pacchetti.

Questa tecnica, chiamata zero-copy, permette di trasmettere puntatori alla pagina e di evitare la copia di pagine di memoria tra domini diversi. Inoltre essa consente al dominio di backend di possedere sempre un insieme di pagine libere per ricevere dati dai domini utente trasmittenti e consegnare i pacchetti ai domini riceventi dopo aver esaminato le loro intestazioni.

(18)

La virtualizzazione

1.4.5 - La comunicazione tra domini

Partendo dalle assunzioni sull'isolamento tra domini, questo capitolo esamina un aspetto cruciale della architettura di Xen: la comunicazione e la cooperazione tra domini. Per default, un software di virtualizzazione non permette di condividere direttamente le risorse fisiche(CPU, memoria), esse sono invece virtualizzate dall'hypervisor e assegnate alle macchine virtuali, che possono accedere esclusivamente alle rispettive porzioni delle risorse virtuali(CPU virtuale, memoria virtuale). In questo modo, l'hypervisor forza l'isolamento delle risorse virtuali ma ogni macchina virtuale può decidere di condividere una propria risorsa virtuale con qualsiasi altra.

Figura 9: la comunicazione tra i domini

In generale, si ha un flusso di informazioni tra due domini se entrambi: accedono alla stessa risorsa virtuale, es. una VLAN

utilizzano in modo esclusivo l'utilizzo una stessa risorsa in tempi diversi, es. disco virtuale

accedono in modo esclusivo a differenti risorse virtuali non correttamente isolate accedono a risorse virtuali mappate in risorse fisiche non controllate, condivise (es.

Ethernet) o esclusive (es. memoria)

Vediamo ora in dettaglio come Xen implementa attualmente la condivisione e la comunicazione tra domini:

(19)

La virtualizzazione

ogni dominio può creare un event channel. Esso è canale bidirezionale collegato ad un altro dominio e che può inviare e ricevere notifiche asincrone degli eventi. Ogni event channel in pratica memorizza un bit di informazione, la cui modifica segnala il verificarsi dell'evento ad esso associato e viene notificata da Xen al sistema ospite. Le successive notifiche sono mascherate finché quel bit non viene resettato. Per stabilire un event channel è necessario che un dominio allochi una nuova porta, da connettere successivamente ad un dominio remoto, che, a sua volta, metterà a disposizione la propria porta per stabilire la comunicazione. Per trasferire i dati di I/O da e verso i domini, Xen utilizza degli anelli di descrittori, o

descriptor rings, che identificano blocchi contigui di memoria fisica allocata al

dominio e che implementano la tecnica del produttore-consumatore.

è possibile condividere risorse virtuali locali tra le macchine virtuali. Ad esempio, condividere risorse tramite i device domain, i domini che gestiscono direttamente una risorsa;

è possibile creare risorse condivise tra più hypervisor. Ad esempio, nel caso in cui si utilizzi un reference monitor distribuito[28] e si sfrutti quest ultimo per

controllare la condivisione delle risorse applicando le stesse politiche MAC tra differenti macchine fisiche[36]

Il problema da affrontare è la regolamentazione del flusso di informazioni tra macchine virtuali sullo stesso hypervisor, in modo da evitare interazioni incontrollate.

L'attuale meccanismo offerto dagli event channel e dalla memoria condivisa si basa sul fatto che ogni dominio possiede una grant table, cioè un meccanismo generico per la condivisione di memoria tra domini non privilegiati. Questa è una struttura dati condivisa con Xen, che permette al dominio di specificare i tipi di permessi degli altri domini sulle sue pagine di memoria. Le entrate in questa tabella sono dette grant reference ed hanno lo stesso ruolo delle capability che chi vuole accedere utilizza per effettuare operazioni sulla memoria del dominio che le concede.

E' importante specificare che il dominio che mette a disposizione pagine della propria memoria virtuale ha un accesso diretto alla grant table e non deve invocare Xen per creare, modificare o eliminare grant references. Invece, chi voglia usarne una deve invocare una hypercall, che restituisce l'indirizzo della pagina condivisa con il dominio invocante. Questo meccanismo è definito staticamente[30] e la risultante proprietà di isolamento è un effetto della gestione e della configurazione del sistema piuttosto che

(20)

La virtualizzazione

frutto di una ben definita politica di sicurezza.

Per quanto riguarda il secondo tipo di meccanismo per la condivisione, il prossimo paragrafo descrive uno strumento, integrato in Xen, che permette di descrivere una politica di sicurezza MAC tra domini e forzarne il rispetto.

1.4.6 - sHype: un meccanismo di sicurezza in Xen

Questo paragrafo presenta una architettura di sicurezza indipendente dal sistema operativo e le sue funzioni per il controllo del flusso di informazione tra sistemi operativi che condividono la stessa piattaforma hardware.

Uno dei fondamentali problemi di sicurezza è dato dal fatto che quasi tutti i controlli per la protezione dell'infrastruttura computazionale si basano sui meccanismi offerti dal sistema operativo, ma esso rappresenta ormai un entità troppo grande e

complessa per garantire la sicurezza necessaria alle applicazioni critiche. In particolare, i sistemi operativi in commercio permettono la condivisione di risorse critiche senza un forte isolamento e i controlli degli accessi che implementano sono basati sulla classe di politiche Discrectionary Access Control. Queste politiche non sono adeguate perché non permettono di stabilire vincoli sul comportamento degli utenti.

Recentemente sono stati creati molti sistemi operativi per garantire un forte isolamento tra processi ed una mediazione delle interazione tra processi[85]. Un tipico esempio è

SELinux, che sarà descritto nel capitolo 2. Anche se questi strumenti rappresentano un significativo passo in avanti per la sicurezza, essi possono essere bypassati poiché i relativi controlli sono implementati a livello del sistema operativo. Ad esempio, virus nel settore di boot o trapdoor del compilatore sono in grado di eludere questi controlli.

I Virtual Machine Monitor, sempre più diffusi sia sui sistemi client che server, sono disegnati per isolare i sistemi operativi potenzialmente modificati o pericolosi e confinare al loro interno i relativi problemi di sicurezza. Questi ultimi però, quando fanno parte di un sistema distribuito, hanno bisogno di cooperare e condividere le risorse.

Al fine di controllare e rendere sicura questa cooperazione tra i sistemi operativi, la IBM ha implementato sHype[31], i cui obiettivi sono:

il controllo delle risorse, cioè il controllo di tutte quelle operazioni che, per essere completate, richiedono l autorizzazione del sistema. Le risorse che vengono controllate sono le risorse virtuali, perché solamente queste possono essere condivise secondo modalità descritte nel paragrafo precedente;

(21)

La virtualizzazione

la definizione e l'applicazione di politiche di controllo degli accessi tra le macchine virtuali;

l'isolamento delle risorse virtuali;

essere in grado di proteggersi dalle modifiche;

essere di piccole dimensioni, in modo da poterne verificare facilmente la correttezza

Gli ultimi due requisiti sono garantiti dalle caratteristiche intrinseche del software di virtualizzazione a livello hardware che è di dimensioni ridotte, in numero di istruzioni, ed è protetto dall'interazione con le macchine virtuali grazie al livello in cui è implementato ed alla sua modalità protetta di esecuzione.

L'architettura di questo meccanismo di sicurezza estende l'isolamento offerto da Xen, includendo il controllo degli accessi alle risorse virtuali e permettendo di

condividerle secondo la politica Mandatory Access Control stabilita. In particolare, sHype permette all'amministratore del sistema di definire classi di macchine virtuali e descrivere in modo formale e verificabile i requisiti necessari per la condivisione delle risorse virtuali. Il progetto di sHype richiede solo modifiche minori al codice dell'hypervisor, realizza un elevato livello di assurance , come definito nei Common Criteria EAL4[32], per la sicurezza di Xen e minimizza l'overhead dovuto al controllo degli accessi.

Security policy manager Access control module Security policy Oggetto Hook GuestOS (soggetto) richiesta di autorizzazione decisione di autorizzazione H y p e rv is o r

Figura 10: l'architettura di sHype

I componenti principali di questa architettura, chiamata reference monitor, sono:

il security policy manager che si occupa di configurare le politiche MAC. Inoltre, esso ha il compito di permetterne la descrizione e salvarne le istanze in un formato

(22)

La virtualizzazione

comprensibile agli utenti, tipicamente XML, e di tradurre questo formato in un formato binario direttamente interpretabile dal modulo che deve effettuare le decisioni sugli accessi

i security enforcement hook che controllano l accesso dei soggetti alle risorse virtuali condivise . I soggetti sono i domini che eseguono le operazioni

privilegiate. Gli hook permettono di garantire che il modulo per il controllo degli accessi sia invocato ogni volta che è necessario prendere una decisione in base della politica corrente per concedere oppure negare l autorizzazione;

l access control module: è responsabile di prendere la decisione sulla base della politica di sicurezza corrente, delle etichette assegnate alle macchine virtuali e alle risorse e di eseguire le callback per comunicare all'hook invocante la decisione sull'accesso alla risorsa.

Nel caso in cui si prevede di condividere risorse virtuali locali tra le macchine virtuali, il reference monitor ha il compito di applicare i meccanismi di protezione definiti dalla politica MAC corrente. Xen, tramite sHype, implementa due politiche di controllo accessi: la Chinese Wall Policy[29] e la Simple Type Enforcement Policy.

La prima permette di definire quali macchine virtuali non devono essere mappate concorrentemente sulla stessa macchina fisica: a tale scopo, sono definiti un insieme di tipi (ChWall-Type), implementati mediante un etichetta, ciascuno dei quali può essere assegnato ad una macchina virtuale. Ad esempio, un dominio che si occupa di eseguire applicazioni di Home Banking avrà un etichetta diversa da uno che esegue applicazioni per Internet.

La Simple Type Enforcement Policy permette di specificare sia le macchine virtuali che possono condividere informazioni e che quelle con cui possono condividerle. Questa politica permette di controllare le comunicazioni tra i domini, che possono

avvenire tramite la rete, gli eventi o la memoria condivisa, e l accesso dei domini alle risorse fisiche. In particolare, essa permette la comunicazione tra quei domini che hanno la stessa etichetta di sicurezza, chiamata STEtype.

La valutazione di sHype non può che essere positiva dal punto di vista della qualità e della quantità dei controlli, della robustezza dell'architettura e dell'implementazione e complessivamente dall'elevato livello di sicurezza che esso introduce nel sistema. Occorre considerare, però, che ogni meccanismo di sicurezza implementato

(23)

La virtualizzazione

poiché intrinseci a qualunque software eseguito direttamente dall'hardware. Un limite a questa architettura è la complessità dei controlli a grana fine che l'hypervisor può applicare alle entità del sistema operativo ospite, quali i processi o i file.

Figura

Figura 4: compatibilità e incompatibilità
Figura 5: livelli di virtualizzazione
Figura 6: l architettura di Xen
Figura 7: lo spazio di indirizzamento nell'architettura x86/32
+4

Riferimenti

Documenti correlati

Il sistema operativo tiene traccia sull’uso dei blocchi di memoria (libero, occupato e a chi assegnato) mediante una tabella dei blocchi Quando un nuovo processo richiede

o istruzioni da memoria a registro, che permettono il passaggio delle parole dalla memoria ai registri della CPU, dove possono essere usate come input dell’ALU, quali operandi

La virtualizzazione permette una riduzione dei costi andando a diminuire le risorse fisiche e ottimizzando quelle software, risulta quindi banale utilizzare sistemi di

La virtualizzazione completa prevede che il VMM esponga ad ogni macchi- na virtuale interfacce hardware simulate funzionalmente identiche alle corrispondenti interfacce fisiche:

Nel capitolo 1 verrà fornita dapprima una panoramica generale sul funzionamento, sulle caratteristiche e sui campi di utilizzazione delle più importanti tecnologie

prestazioni di lavoro straordinario per il personale Aree ed Ex art... 3.1: risorse finanziarie

[r]

To use database software, one must be ready to design a database using a technique called Relational Data- base Design and to design and develop a user interface with which to