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.

36 3. <strong>Un</strong> <strong>modello</strong> che integra <strong>control</strong> <strong>flow</strong> e <strong>data</strong> <strong>flow</strong><br />

la loro efficacia nel proteggere un’applicazione sia elevata, si sono identificati dei casi<br />

in cui degli attacchi passano inosservati. I falsi negativi sono dovuti al fatto che le<br />

informazioni raccolte sono troppo povere e prive di un adeguato contesto. In questa<br />

tesi si propone un <strong>modello</strong> <strong>integrato</strong> <strong>control</strong> <strong>flow</strong>/<strong>data</strong> <strong>flow</strong> in grado di risolvere<br />

questi problemi e di r<strong>il</strong>evare attacchi non visib<strong>il</strong>i dai modelli già esistenti.<br />

Per quanto riguarda la parte <strong>control</strong> <strong>flow</strong> si è adottato <strong>il</strong> <strong>modello</strong> dell’execution<br />

graph. La sua precisione è estremamente elevata e forse anche diffic<strong>il</strong>e da su<strong>per</strong>are.<br />

Per quanto riguarda la parte <strong>data</strong> <strong>flow</strong> invece si sono studiate delle estensioni al<br />

<strong>modello</strong> di [2] relative alle relazioni unarie e alle relazioni binarie, inoltre lo si è<br />

dotato della capacità di apprendere delle alternative.<br />

chiedi_nome_f<strong>il</strong>e<br />

read main.22<br />

main.24 main.25<br />

g.10<br />

put_msg.5<br />

write<br />

stack = [main.22 | g.10 | put_msg.5] implies buf@5 = “Hello,”<br />

stack = [main.25 | put_msg.5] implies buf@5 = “world\n”<br />

Figura 3.9: Nuovo <strong>modello</strong> <strong>per</strong> l’esempio del primo scenario.<br />

Il risultato può essere visto come un execution graph annotato su ogni nodo<br />

foglia con delle informazioni <strong>data</strong> <strong>flow</strong> che <strong>per</strong> ogni esecuzione valida del programma<br />

devono essere verificate. Se non lo sono si è di fronte ad un comportamento anomalo,<br />

verosim<strong>il</strong>mente un attacco.<br />

Durante <strong>il</strong> training ad ogni evento viene aggiunta informazione al <strong>modello</strong>. Ogni<br />

chiamata di sistema viene osservata assieme allo stack user-space e a tutti i suoi<br />

parametri. Lo stack viene ut<strong>il</strong>izzato <strong>per</strong> costruire l’execution graph e <strong>per</strong> contestua-<br />

lizzare le relazioni unarie, mentre i parametri vengono ut<strong>il</strong>izzati nell’apprendimento<br />

sia delle relazioni unarie che delle relazioni binarie.<br />

Nella sua forma più semplice l’idea <strong>per</strong> apprendere le relazioni unarie è quella<br />

di creare una tabella in cui le righe sono indicizzate dagli stack che si osservano<br />

mentre le colonne sono indicizzate dai nomi dei parametri. Ad ogni chiamata di

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

Saved successfully!

Ooh no, something went wrong!