• Non ci sono risultati.

Al caricamento, HiMod alloca una pagina condivisa con l’Analyst, in spazio kernel, dove salva il numero ed i parametri delle system call intercettate. Ogni volta che P esegue una system call, HiMod notifica l’evento all’Analyst che legge dalla pagina condivisa la chiamata di sistema intercettata e la passa all’input del Lexical Analyzer. La comunicazione fra Analyst ed HiMod `e a rendez-vous esteso: ogni volta che l’Analyst riceve una notifica, sospende l’esecuzione della Mon-VM finch`e non sono terminati i controlli di sicurezza. Un funzionamento di questo tipo non fornisce all’attaccante alcuna fine- stra temporale di attacco e permette di valutare le prestazioni del prototipo considerando il massimo livello di sicurezza ottenibile. `E possibile rendere asincrona la cooperazione tra Analyst ed HiMod, evitando di sospendere la Mon-VM ad ogni invocazione del sistema operativo. Questa soluzione rappre- senta un compromesso tra prestazioni e sicurezza, poich´e una comunicazione

asincrona permette di migliorare le prestazioni ma, in pratica, riducendo la sicurezza complessiva del sistema. In questo modo, infatti, si fornisce all’at- taccante una “finestra di attacco” di dimensioni proporzionali al grado di asincronia scelto.

Il Lexical Analyzer verifica se la system call ricevuta appartiene all’al- fabeto delle chiamate di sistema che P pu`o invocare e trasmette il relativo

token corrispondente al Parser che controlla se la sequenza `e coerente rispetto

a CFG(P).

Il Parser restituisce un syntax error, o propaga un errore lessicale, se la chiamata di sistema corrente non pu`o essere derivata da alcuna produzione sintattica di CFG(P) o non appartiene all’insieme delle system call invocabili da P. Se non si verifica alcun errore, il Parser memorizza l’attuale chiamata di sistema e modifica il proprio stato interno in modo che, alla prossima invoca- zione, il parsing riprenda dal punto in cui si `e arrestato. Di conseguenza, Psy- coTrace implementa una soluzione di parsing stream-oriented molto diversa dalla situazione standard in cui il Parser conosce tutta la sequenza di token da analizzare gi`a all’atto della sua invocazione. Questo permette di evitare di ripetere il parsing di tutta la sequenza di system call ad ogni invocazione dell’Analyst, migliorando considerevolmente la performance complessiva.

Tramite la Introspection Library, l’Analyst pu`o conoscere i registri del processore virtuale della Mon-VM, il numero della chiamate di sistema, i suoi parametri e recuperare i valori di qualsiasi variabile nella memoria del processo monitorato. Di conseguenza, l’Assertion Checker pu`o valutare gli invarianti in Inv (P) mappando nel proprio spazio di indirizzamento le aree di memoria del Monitored Process che contengono i valori d’interesse, e acce- dendo ai registri della CPU virtuale associata alla Mon-VM. La Introspection Library supporta architetture x86 32-bit con Paginazione Regolare e PAE e

permette di tradurre qualsiasi indirizzo virtuale appartenente a P nel cor- rispondente indirizzo fisico, che viene successivamente mappato nello spazio di indirizzamento dell’Assertion Checker. Inoltre, `e possibile effettuare in- trospezione anche a livello del contesto della CPU Virtuale per verificare il contenuto dei registri come, ad esempio, quelli utilizzati per salvare i valori dei parametri delle system call. Sfruttando la tecnologia di virtualizzazio- ne `e quindi possibile implementare l’introspezione sulla Mon-VM in modo flessibile e potente, senza dover utilizzare apparati hardware dedicati.

Coerentemente con l’adozione di un approccio di tipo default deny, il processo monitorato viene terminato appena PsycoTrace verifica che una system call non `e coerente con la grammatica o quando un invariante non `e verificato.

La terminazione del processo monitorato P viene gestita in due modi: a. se P termina la sua esecuzione normalemente, ad esempio tramite le

chiamate exit o exit group, HiMod ed Analyst terminano la loro esecuzione automaticamente;

b. se P termina in maniera inattesa, ad esempio con un errore o con un’eccezione imprevista, HiMod notifica la fine dello stream di invoca- zioni all’Analyst, il quale, a sua volta, gestisce la terminazione delle sue componenti.

STRUMENTI STATICI

PsycoTrace sfrutta l’analisi statica del codice del processo da monitorare per definire un modello che ne descriva accuratamente l’identit`a. In questo modo, `e possibile evitare che il sistema generi dei falsi positivi garantendo una corretta estrazione del modello di riferimento. Infatti, la presenza della grammatica per il controllo del flusso di esecuzione del processo fa s`ı che, ogni volta che una invocazione intercettata risulta incoerente con quanto definito dal modello, il processo viene terminato senza possibilit`a che venga generato un falso allarme.

Per aumentare la robustezza dell’architettura, e per migliorare le informa- zioni relative al processo, il modello che descrive l’identit`a del processo viene integrato con asserzioni sul valore dei parametri delle invocazioni e delle va- riabili del programma. Dall’analisi statica, anche mediante l’uso di strumenti automatici, `e possibile estrarre degli invarianti sul valore delle variabili che permettono di verificare il comportamento del programma, specialmente in quei casi in cui la grammatica da sola non riesce a garantire la completa sicurezza dell’esecuzione, ad esempio, per la possibilit`a di attacchi mimicry.

I vincoli definiti dagli invarianti vengono controllati a tempo di esecuzione sfruttando la libreria di introspezione, come vedremo in seguito.

Non tutti gli strumenti statici presentati sono oggetto del lavoro di tesi. In seguito si presentano gli strumenti statici utilizzati per la realizzazione di PsycoTrace.

6.1

PsycoTrace: Strumenti statici

L’architettura di PsycoTrace prevede una serie di strumenti statici, atti prin- cipalmente alla definizione dell’identit`a del processo da monitorare. Questi strumenti sono i seguenti:

a. Grammar Generating Algorithm (GGA): `e l’algoritmo di generazione della grammatica che specifica la sequenza legale di invocazioni al si- stema operativo generate dal processo P monitorato. La grammatica prodotta dal GGA `e di tipo context-free e permette di definire in mo- do accurato la sequenza di system call legale prodotta da P. Questo strumento `e stato sviluppato per un’altra tesi di laurea, quindi viene solamente citato.

b. Generatore di Asserzioni (AG): come gi`a anticipato, PsycoTrace inte- gra nella definizione di identit`a di P anche un insieme di invarianti, nella forma I (P, i) che devono valere all’istante definito da i nell’e- secuzione di P. Questo insieme viene prodotto dall’analisi statica del codice di P e riguarda il valore dei parametri delle invocazioni e delle variabili del programma. Nel seguito del capitolo si presentano i tipi di invarianti e gli strumenti utilizzati per la generazione dell’insieme usato per i controlli a tempo d’esecuzione.

Documenti correlati