03.06.2013 Views

Un modello integrato control-flow e data-flow per il rilevamento ...

Un modello integrato control-flow e data-flow per il rilevamento ...

Un modello integrato control-flow e data-flow per il rilevamento ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1.1. Anomaly detection e system call 3<br />

dell’architettura x86, attualmente la più diffusa in ambiente desktop e server, <strong>il</strong> pro-<br />

blema di disassemblare correttamente un binario è addirittura indecidib<strong>il</strong>e [25, 14].<br />

Certamente disassemblatori come IDAPro fanno un egregio lavoro ma <strong>il</strong> loro output,<br />

<strong>per</strong> quanto vicino al codice “vero”, è inerentemente non corretto. <strong>Un</strong>a conseguen-<br />

za di questo fatto è che la ricostruzione del <strong>control</strong> <strong>flow</strong> di un programma dato <strong>il</strong><br />

suo binario non è possib<strong>il</strong>e, se non in modo approssimato. <strong>Un</strong> interessante lavoro<br />

in questa direzione basato sull’interpretazione astratta è [11]. Le tecniche black-<br />

box di contro, pur essendo universalmente applicab<strong>il</strong>i, possono osservare soltanto le<br />

interazioni di un processo con l’ambiente (ad esempio col sistema o<strong>per</strong>ativo o con<br />

la rete). Potrebbe succedere <strong>per</strong>ò che, pur osservando <strong>per</strong> tempi molto lunghi un<br />

processo, non si riesca ad osservare tutte le interazioni ottenendo anche in questo<br />

caso un quadro incompleto. Le tecniche white-box tipicamente sono di tipo statico,<br />

mentre le black-box di tipo dinamico. Le prime quindi necessitano della capacità di<br />

riconoscere ed elaborare sintassi e semantica del programma che si vuole analizzare<br />

(quindi devono avere la capacità di leggere ed interpretare <strong>il</strong> codice sorgente o <strong>il</strong><br />

codice eseguib<strong>il</strong>e) e questo richiede <strong>il</strong> supporto di tool abbastanza complessi, come<br />

ad esempio <strong>il</strong> comp<strong>il</strong>atore, <strong>il</strong> che introduce un ulteriore livello di complessità. Le<br />

tecniche black-box al contrario richiedono una fase di apprendimento in cui tramite<br />

l’osservazione viene costruito <strong>il</strong> <strong>modello</strong>. La bontà di quest’ultimo è direttamente<br />

legata al training svolto. Come nel caso del testing del software, anche <strong>il</strong> training del<br />

<strong>modello</strong> deve essere fatto cercando di massimizzare la “co<strong>per</strong>tura” dei casi. Nel caso<br />

del testing <strong>per</strong>ò se la co<strong>per</strong>tura non è adeguata non si scoprono possib<strong>il</strong>i bug, nel<br />

caso dei modelli black-box invece si ha una quantità inaccettab<strong>il</strong>e di falsi positivi.<br />

1.1 Anomaly detection e system call<br />

<strong>Un</strong>a tecnica d’attacco notevolmente diffusa è quella di fornire ad un programma un<br />

input confezionato ad hoc <strong>per</strong> far si che esso esca dal suo comportamento previsto<br />

ed esegua delle azioni ut<strong>il</strong>i al malintenzionato. Nel 1996 Aleph One in [17] mostrava<br />

come, sfruttando una copia di stringhe fatta senza <strong>control</strong>lare i bound, fosse possib<strong>il</strong>e<br />

iniettare codice arbitrario in un programma e portarlo a lanciare una shell. Come<br />

si può immaginare, se <strong>il</strong> programma gira con priv<strong>il</strong>egi di su<strong>per</strong>utente, in questo<br />

modo è possib<strong>il</strong>e ottenere <strong>il</strong> <strong>control</strong>lo completo sul sistema. L’idea di questo tipo di<br />

attacco è molto semplice e in Figura 1.2 è riportato un programma vulnerab<strong>il</strong>e. Nel<br />

frammento di codice la stringa some other string viene copiata in buf, che è un<br />

vettore allocato sullo stack. Non essendoci alcun <strong>control</strong>lo sul numero di caratteri

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!