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.

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

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

Saved successfully!

Ooh no, something went wrong!