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.
22 2. Modelli <strong>per</strong> l’anomaly detection<br />
esempio <strong>il</strong> problema dell’impossible path) e questo è causato dall’eccessiva semplicità<br />
del <strong>modello</strong>.<br />
L’execution graph invece può certamente generare falsi positivi, quindi riconosce-<br />
re come attacchi sequenze di stack che non lo sono (e questo è causato di nuovo dal<br />
training insufficiente), ma le successioni di stack che ammette sono tutte ammesse<br />
anche dal <strong>control</strong> <strong>flow</strong> graph.<br />
Modello Costruzione Relazione con CFG<br />
FSA Dinamica né ⊆ né ⊇<br />
VtPath Dinamica né ⊆ né ⊇<br />
Execution graph Dinamica Dimostrato formalmente ⊆<br />
Abs. Stack Statica = <strong>per</strong> costruzione<br />
Tabella 2.1: Caratteristiche dei modelli.<br />
Il <strong>modello</strong> FSA è estremamente semplice e se l’automa viene costruito con l’op-<br />
portuna cura si rivela efficace contro una discreta quantità di attacchi. <strong>Un</strong> buffer<br />
over<strong>flow</strong> <strong>per</strong> esempio, fatto nel modo standard [17], viene rivelato senza grossi pro-<br />
blemi. Anche l’implementazione di un IDS basato su questa tecnica non presenta<br />
difficoltà, se non quelle legate alla gestione di fork ed exec [21]. La semplicità del<br />
<strong>modello</strong> <strong>per</strong>ò è anche la sua debolezza ed è fac<strong>il</strong>e immaginare casi in cui l’automa<br />
non è in grado di osservare comportamenti anomali. <strong>Un</strong>o di questi casi è quello<br />
dell’impossible path. Supponiamo che in un programma ci sia una funzione f() e<br />
che <strong>il</strong> codice al suo interno sia vulnerab<strong>il</strong>e ad un buffer over<strong>flow</strong>: l’attaccante po-<br />
trebbe modificare <strong>il</strong> return address di f() in modo da farla ritornare in un punto<br />
diverso da quello di chiamata (<strong>il</strong> codice di Figura 2.3 potrebbe essere un esempio di<br />
questo scenario, si entra da riga 4 e si esce da riga 6). Questo <strong>modello</strong> è totalmente<br />
cieco a questo tipo di attacco e questa è una mancanza grave, in quanto <strong>il</strong> codice<br />
tra le due invocazioni di f() potrebbe essere ad esempio quello che verifica delle<br />
credenziali e consente o meno l’accesso al sistema.<br />
Il <strong>modello</strong> VtPath si avvicina all’execution graph e <strong>per</strong> come è costruito è ve-<br />
rosim<strong>il</strong>e che le stringhe di system call che accetta sono un sottoinsieme di quelle<br />
che sarebbero accettate dal <strong>control</strong> <strong>flow</strong> graph, questo fatto <strong>per</strong>ò non è provato<br />
formalmente dagli autori.<br />
Il <strong>modello</strong> dell’execution graph infine è sicuramente quello più interessante pro-<br />
prio <strong>per</strong> <strong>il</strong> fatto che è stato relazionato formalmente con <strong>il</strong> <strong>control</strong> <strong>flow</strong> graph, mo-<br />
strando che le stringhe riconosciute sono contenute in quest’ultimo. Questo significa<br />
che possono esserci casi in cui l’execution graph riconosce come <strong>il</strong>lecita un’azione