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 ...
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 );