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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

2.2. Modelli <strong>data</strong> <strong>flow</strong> 19<br />

suo scopo è autenticare un utente su un sistema e <strong>per</strong> farlo ut<strong>il</strong>izza una procedura<br />

authenticate() (che potrebbe essere di complessità arbitraria). Se l’autenticazione<br />

ha successo viene impostato un flag <strong>per</strong> ricordarlo ed <strong>il</strong> programma può procedere.<br />

L’uso non sicuro di gets() <strong>per</strong>mette <strong>per</strong>ò ad un utente malintenzionato di impostar-<br />

lo ad un valore diverso da zero e, anche se l’autenticazione non ha successo, l’accesso<br />

al sistema viene garantito. Al di là del fatto che gets() è qualcosa di talmente<br />

<strong>per</strong>icoloso che se viene usata viene generato un warning dal comp<strong>il</strong>atore, in un caso<br />

come questo un IDS potrebbe verificare i valori di ritorno delle read() provocate<br />

dalle gets() ed, essendo anomali, uccidere <strong>il</strong> processo.<br />

È notevole fino a dove ci si sia spinti con attacchi classificab<strong>il</strong>i come non-<strong>control</strong><br />

<strong>data</strong>: in [3], provocando fallimenti casuali all’hardware e dunque errori nelle com-<br />

putazioni, è stato mostrato come sia possib<strong>il</strong>e rendere del tutto vulnerab<strong>il</strong>i alcuni<br />

codici crittografici, RSA compreso.<br />

necessario proteggere anche <strong>il</strong> <strong>data</strong> <strong>flow</strong>.<br />

2.2.1 <strong>Un</strong> <strong>modello</strong> <strong>data</strong> <strong>flow</strong><br />

È dunque chiaro come, oltre al <strong>control</strong> <strong>flow</strong>, sia<br />

Nel tempo diversi sono stati i tentativi di ut<strong>il</strong>izzare anche i parametri nel r<strong>il</strong>evamento<br />

di comportamenti anomali [13, 22, 8] e gli approcci ut<strong>il</strong>izzati sono stati prevalen-<br />

temente statistici. <strong>Un</strong> <strong>modello</strong> notevole <strong>per</strong>ò è quello proposto in [2]. Gli autori<br />

mostrano una tecnica che <strong>per</strong>mette di apprendere delle relazioni tra i parametri del-<br />

le system call. Ad esempio, se viene eseguita una open() ed <strong>il</strong> f<strong>il</strong>e descriptor da<br />

essa restituito viene usato da una successiva read() e da una successiva close(), <strong>il</strong><br />

sistema è in grado di apprendere che <strong>il</strong> valore del f<strong>il</strong>e descriptor tra le tre chiamate<br />

deve essere uguale.<br />

Il sistema è in grado di apprendere sia relazioni unarie, ovvero che valgono pun-<br />

tualmente su un singolo argomento, sia binarie, ovvero che valgono tra due argomenti<br />

differenti.<br />

Algoritmo 1: Algoritmo del <strong>modello</strong> <strong>data</strong> <strong>flow</strong>.<br />

learnRelations(EvArg X, Value V);<br />

Y = lookup(V );<br />

CurRels[R][X] = CurRels[R][X] ∩ Y;<br />

Yn = Y ∩ NewArgs(X);<br />

CurRels[R][X] = CurRels[R][X] ∪ Yn;<br />

update(X, V );

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

Saved successfully!

Ooh no, something went wrong!