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