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.

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

Algoritmo 4: Algoritmo <strong>data</strong> <strong>flow</strong> completo.<br />

for T ∈ T do<br />

for e ∈ T do<br />

learn<strong>Un</strong>ary(arg(e), value(e), stack(e));<br />

learnBinary(arg(e), value(e));<br />

end<br />

end<br />

for R ∈ R do<br />

for X ∈ X do<br />

apply 3.1 to CurRels[R][X]<br />

end<br />

end<br />

L’algoritmo genera una formula logica <strong>per</strong> ogni argomento X osservato e <strong>per</strong> ogni<br />

relazione R che si vuole apprendere. Tali formule dovranno essere tutte e sempre<br />

verificate a runtime, in caso contrario si ha un’anomalia che potrebbe corrispondere<br />

ad un’intrusione.<br />

3.3.3 Descrizione dell’algoritmo<br />

Siano dati una traccia T , una relazione R e un valore V . Allora l’algoritmo apprende<br />

quali sono le coppie di argomenti {(xi, xj) : xi, xj ∈ T ∧ (xi, xj) ∈ R}<br />

Se la traccia è composta da un singolo evento (x = v), allora banalmente <strong>il</strong><br />

risultato è CurRels[R][x][v] = ∅<br />

Supponiamo ora che la traccia sia composta da più eventi {(x1 = v1), . . . , (xk−1 =<br />

vk−1)}. All’arrivo dell’evento (xk, vk) <strong>il</strong> valore vk viene cercato nella tabella di lookup<br />

e viene restituito l’insieme Y di tutti gli argomenti xi finora visti che hanno valore<br />

in relazione con vk. Allora si possono manifestare differenti casi:<br />

• CurRels[R][X][V ] = ∅ e Y = ∅: In questo caso non è stata osservata nessu-<br />

na relazione <strong>per</strong> l’argomento X quando ha valore V che sia valida su tutta<br />

la traccia finora processata. Inoltre non ci sono visti argomenti che hanno<br />

avuto come ultimo valore <strong>il</strong> valore V . Dunque l’argomento in analisi non ha<br />

nessuna relazione con argomenti passati e in questo caso l’algoritmo apprende<br />

correttamente CurRels[R][X][V ] = ∅<br />

• CurRels[R][X][V ] = ∅ e Y = ∅: Per quanto riguarda la prima parte vale <strong>il</strong><br />

discorso fatto al punto precedente. Per quanto riguarda la seconda parte, <strong>il</strong><br />

fatto che Y sia non vuoto significa che in passato sono stati osservati parametri<br />

<strong>il</strong> cui argomento aveva valore in relazione con <strong>il</strong> valore dell’argomento corrente.

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

Saved successfully!

Ooh no, something went wrong!