Figura 1.1: Architettura TrustedVM
Figura 1.2: P2P con TrustedVM
inferiore rispetto a quello che un attaccante può ottenere, quindi per un
peer malizioso diventa molto difficile evadere i controlli dell’attestatore.
1.2 Stato dell’arte
Attualmente, sono stati pubblicati molti lavori che trattano la sicurezza di
un sistema attraverso la tecnologia di virtualizzazione e l’attestazione. In
particolare, molti di questi studi utilizzano un TPM per garantire la sicurez-
za e l’integrità della macchina. Grazie alla virtualizzazione vengono create
le cosidette Trusted Virtual Machine. Tramite queste macchine vengo-
no attestate le proprietà del codice che si sta eseguendo, come mostrato in
figura 1.1.
Le trustedVM, quindi, possono anche essere utilizzate nell’architetture
P2P; tramite l’attestazione remota un nodo può controllare esplicitamente
6
i requisiti di sicurezza, come mostrato in figura 1.2.
Altri approcci utilizzano protocolli basati sulla crittografia per assumere
integra e sicura una macchina. Altri ancora sfruttano un ”trusted” boot per
garantire la sicurezza di un sistema, infatti il processo di boot termina nel
caso in cui il controllo d’integrità fallisca.
Anche per quanto riguarda l’introspezione esistono molte tecniche pre-
sentate, tra queste citiamo ReVirt che supporta il recovery, il checkpoint
e il roll-back delle MV e utilizza la tecnica chiamata virtual-machine re-
play per rieseguire un sistema, istruzione per istruzione, all’interno di una
MV, per ripristinare il sistema dopo compromissioni. Un altro esempio è
XENKimono, che rileva le violazioni della sicurezza del kernel di un sistema
operativo a tempo di esecuzione, utilizzando le tecnologie di virtualizza-
zione per effettuare i controlli attraverso una macchina distinta da quella
monitorata.
Infine, occorre considerare che l’evoluzione tecnologica nel campo del-
l’hardware ha notevolemente contribuito allo sviluppo di applicazioni che
richiedono una maggiore potenza di calcolo. Senza contare che i numerosi
benefici apportati dalla virtualizzazione, hanno spinto i produttori di com-
ponenti hardware a facilitare il processo di virtualizzazione delle risorse,
tramite supporti hardware e firmware, ne sono un esempio l’INTEL-VT e
l’AMD-VT.
7
1.3 Organizzazione della relazione
I capitoli successivi esaminano in maniera più approfondita i concetti pre-
sentati in questa introduzione.
La struttura dei capitoli è la seguente:
Capitolo 2 - Attestazione
Questo capitolo descrive i vari aspetti dell’attestazione, dal suo signifi-
cato al suo utilizzo. Inoltre, analizza alcune tecniche di attestazione, come
l’attestazione con crittografia o l’attestazione nel TPM.
Capitolo 3 - Peer-to-Peer
Questo capitolo analizza la storia e l’architettura delle reti peer-to-peer.
In particolare, descrive le differenze architetturali tra Reti Centralizzate,
Reti Decentralizzate e Reti Ibride. Inoltre, descrive una breve valutazione
della sicurezza di queste reti e su alcuni tipi di attacchi.
Capitolo 4 - Gnutella
Questo capitolo descrive la storia e il protocollo di Gnutella, una rete
Peer-to-Peer di condivisione di file aperta. Inoltre, spiega nello specifico i
messaggi di Handshake, di Query e Query Hit, di Ping e Pong ed infine di
Push
Capitolo 5 - Attestazione di reti p2p
Questo capitolo descrive l’implementazione dell’attestazione nel proto-
collo di Gnutella, oggetto del tirocinio. Inoltre, introduce la virtualizza-
zione, soffermandosi su Xen, un esempio di tecnologia di virtualizzazio-
ne. Infine, descrive la libreria d’introspezione utilizzata per implementare
l’attestazione.
Capitolo 6 - Risultati Sperimentali
Questo capitolo descrive i test eseguiti per verificare le prestazioni e
l’effecienza dell’attestazione introdotta nel protocollo di Gnutella.
Il progetto è completamente riproducibile. A tale proposito, sia l’Attesta-
tore che le modifiche fatte al codice di Gnutella sono tutte documentate.
Inoltre, sono stati utilizzati solo strumenti Open Source. Il codice realizzato
per questo lavoro è pubblicato negli Appendici A e B, sempre sotto licenza
Open Source, nella speranza che possa essere utile per studi futuri.
8
Capitolo 2
Attestazione
Con il termine sicurezza informatica si indica il ramo dell’informatica che
si occupa della difesa da possibili rischi e violazioni sui dati. L’obiettivo
della sicurezza informatica è quello di garantire l’affidabilità dei sistemi e
dei dati, durante tutto il periodo di utilizzo dei dati stessi. Esistono due
strategie di implementazione della sicurezza nei sistemi:
• Passiva: si basa sull’utilizzo di tecniche incentrate sulla difesa del
software dagli attacchi.
• Attiva: rende i dati intrinsecamente sicuri, garantendone la confi-
denzialità e l’integrità.
Il problema della sicurezza informatica dei sistemi software, si è svilup-
pato con la crescita dell’utilizzo delle reti. Infatti, la straordinaria diffusione,
verificatasi negli ultimi 3 anni, degli strumenti informatici e degli appara-
ti di telecomunicazione che consentono un accesso ad internet, ha fatto si
che il numero delle informazioni scambiate a livello mondiale sia aumentato
vertiginosamente.
Bisogna considerare che internet è un canale privilegiato di intrusione e
un moltiplicatore di possibilità di intrusione con un effetto esponenziale.
Solitamente, gli attacchi al codice di un processo si basano su buffer o
stack overflow. Per questo, le principali strategie di rilevazione di un attacco
sfruttano le sequenze di invocazioni al sistema operativo, generate dal pro-
cesso, ed il valore dei loro parametri per definire i modelli che identificano
la corretta esecuzione di un’applicazione. Esistono due tipi di analisi per la
generazione di questi modelli.
Analisi Statica
L’analisi statica produce informazioni che permettono di valutare a runti-
me l’integrità dell’esecuzione di un processo. Infatti, un codice integro sarà
definito da una serie legale di invocazioni al sistema operativo durante il
suo tempo di esecuzione. Tutte le possibili sequenze sono definite, statica-
mente, da una grammatica che rappresenta il modello di riferimento a cui
ogni processo deve attenersi, infatti, questo modello definisce tutte e sole le
sequenze di invocazioni legali.
9
Ogni volta che il comportamento di un processo non è coerente con la
grammatica, l’analisi lo interpreta come un possibile attacco all’integrità
del processo o al sistema operativo stesso.
Oltre alla grammatica, l’analisi statica può produrre un insieme di as-
serzioni sul valore delle variabili del processo che possono essere utilizzate
per definire ulteriori vincoli sulla correttezza dell’esecuzione.
L’analisi statica, comunque, è definita a partire da un’analisi del codice
sorgente del processo, codice che non sempre è disponibile.
Analisi Dinamica
L’analisi dinamica, a differenza di quella statica, è di più semplice implemen-
tazione, però richiede una quantità maggiore di risorse per l’apprendimento
e la memorizzazione delle informazioni relative al processo.
Questo tipo di analisi presenta anche un altro problema, infatti, può
accadere che il modello prodotto possa essere poco accurato a causa delle
condizioni particolari in cui è stato eseguito il processo durante la fase di
apprendimento. Ad esempio, se durante la fase di costruzione del modello,
il processo venisse attaccato con successo, il comportamento del processo
verrebbe interpretato come corretto e quindi, successivamente, non verrebbe
rilevato l’attacco.
La sicurezza all’interno dei programmi software, non solo deve effettuare
l’eliminazione della produzione di danni irreparabili all’interno del sistema,
ma anche gestire il controllo degli accessi da parte di possibili utenti ma-
liziosi. Se la sicurezza del programma è garantita, è possibile parlare di
affidabilità del programma stesso. L’Institute of Electrical and Electronics
Engineers (IEEE) ha catalogato tutti gli errori software conosciuti, per po-
ter garantire una risoluzione veloce. Questo ha incrementato la produzione
di software protetto che garantisce l’assenza di condizioni conflittuali capa-
ci di produrre errori al sistema. Lo sviluppo di sistemi di sicurezza sempre
più avanzati ha portato ad un aumento della complessità delle tecniche di
attacco.
2.1 Sicurezza nelle Reti
Una rete Peer-To-Peer (P2P) è stata definita come un’insieme di sistemi
e applicazioni che implementano le funzioni critiche di distribuzione delle
risorse in un ambiente decentralizzato. Sistemi che utilizzano una rete P2P
sono sistemi come Napster e Gnutella.
Tra i vari aspetti delle reti P2P, è interessante trattare la sicurezza di
questo tipo di reti e i servizi che devono essere garantiti per avere un sistema
affidabile.
Le architetture per la sicurezza, associate ai modelli di riferimento delle
International Organization for Standardization/International Telecommu-
nication Union (ISO/ITU), sono un framework utile per la sicurezza della
rete. Il sistema, per essere sicuro, deve essere governato da un insieme di
10
servizi di sicurezza creati a questo scopo e da meccanismi utilizzati per sod-
disfare questi servizi. L’insieme dei potenziali servizi di sicurezza è diviso
in cinque aree fondamentali:
• Riservatezza
• Integrità
• Autenticazione
• Controllo degli accessi
• Non-ripudio
Il sistema P2P garantisce anche l’anonimato nel senso stretto del termi-
ne, cioè non ci possono essere meccanismi per rilevare l’identità dell’altro
peer. L’anonimato nel P2P è caratterizzato da quattro distinte categorie:
autore, server, distributore, documento. La mancanza di una di queste
classi di anonimato violerebbe i diritti della privacy. In generale, le ricerche
sulla sicurezza del P2P sono state ostacolate da molti problemi, tra questi,
è stata rilevata la mancanza di un’identità stabile e l’incapacità di fornire
servizi di autenticazione stabili, che, a loro volta, sono alla base della sicu-
rezza dei servizi di controllo accessi, mantenendo la riservatezza e l’integrità
della rete stessa.
2.1.1 Trusted Computing
Utilizzando un protocollo P2P, vogliamo che il nostro sistema sia capace di
bloccare gli utenti maliziosi all’interno della rete. Ciò implica che, i client,
siano in grado di individuare i peer che possono essere dannosi per il sistema
ed isolarli dalla rete. Inizialmente i sistemi operativi venivano gestiti da una
lista di affidabilità, oggigiorno però, i sistemi, sono completamente gestiti
dagli utenti e per questo gli host non possono più fidarsi dell’affidabilità del
sistema.
Con il termine affidabilità vogliamo indicare la sicurezza che la macchina
esegua esattamente ciò che gli è stato detto di fare.
I possibili tipi di sistema esistenti sono:
• Closed: Un closed system può essere considerato affidabile quando è
prodotto da una casa produttrice affidabile.
• Open: Un open system non sempre è considerato affidabile.
Per garantire l’affidabilità di un open system è necessario implementare
il Trusted Computing (TC), una nuova tecnologia che ha come obiettivo
quello di rendere i dispositivi, come computer e telefoni cellulari, più sicuri
mediante l’uso di opportuni componenti hardware e software. Questa tec-
nica di protezione si è sviluppata basandosi sul concetto di crittografia sim-
metrica, con lo scopo di identificare ogni sistema tramite un codice univoco
e di cifrare e firmare le informazioni tramite l’unica chiave di sistema.
11
Figura 2.1: Architettura TPM
Per raggiungere tale scopo, è necessario utilizzare un componente hard-
ware: il Trusted Platform Module (TPM)(Figura:2.1).
Il TPM è un chip dotato di una coppia di chiavi crittografiche, univoca
per ogni chip, impossibili da modificare anche per il proprietario e capace di
generare altre chiavi per la crittografia di dati o dispositivi. Normalmente,
il TPM, è fissato sulla scheda madre del pc.
La natura di questo dispositivo è far si che i dati memorizzati siano
protetti, sia da attacchi da parte di software esterni, sia da attacchi fisici.
Il TPM ha cinque fondamentali capacità:
Endorsement Key (chiave di approvazione): garantisce l’integrità di
sistema utilizzando due chiavi RSA a 2048bit che identificano univo-
camente il TPM. Questa coppia di chiavi viene generata al momento
della produzione del chip.
Secure I/O (Input/Output sicuro): le operazioni di input/output ven-
gono rese sicure tramite meccanismi di cifratura a chiave simmetrica.
Tutte le informazioni che transitano su bus del sistema sono cifrate.
Memory curtaining (separazione della memoria): prevede che l’hard-
ware impedisca ad ogni programma la lettura e la scrittura di zone di
memoria utilizzate dagli altri applicativi in esecuzione.
12
Figura 2.2: Protocollo di attestazione
Sealed storage / Trusted storage (memoria sigillata / memoria fidata):
protegge le informazioni per mezzo della cifratura usando una chiave
che deriva dallo stato del sistema. Questo vuol dire che tali informazio-
ni possono esssere fruibili solo con la stessa combinazione di software
ed hardware.
Remote attestation (attestazione remota): permette a terzi di inter-
rogare il sistema e di conoscerne lo stato. Ciò permette di evitare che
informazioni riservate siano inviate da un computer compromesso o
non sicuro.
2.1.2 Attestazione remota nel TPM
Quando un verificatore vuole ispezionare la configurazione della piattaforma
di un host, richiede un insieme specifico di valori del Platform Configuration
Register (PCR), che contiene le firme rappresentative della sequenza di
eventi avvenuti su quella piattaforma. La sicurezza della validità dei valori
del PCR è garantita tramite il valore della firma sul registro prodotto dal
TPM.
Come si è detto, la tecnologia TPM, utilizza una componente con una
coppia di chiavi simmetriche private chiamate Attestation Identity Key
(AIK) per migliorare le operazioni di autenticazione. Con la piattaforma
Trusted Computing Group (TCG), la coppia di chiavi del AIK viene usata
come alias per un altra coppia di chiavi Endorsement Key (EK).
Questo meccanismo può utilizzare differenti AIK ogni volta in cui valuta
i valori di PCR, rendendo tali attestazioni non rintracciabili.
La ragione per cui viene utilizzato questo meccanismo anonimo è che
l’EK identifica univocamente una piattaforma e, potenzialmente, il gestore
della piattaforma.
13