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.

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

“la funzione log event() può scrivere nel log-f<strong>il</strong>e che un utente ha fallito<br />

l’autenticazione oppure che un client ha inviato una richiesta malforma-<br />

ta”.<br />

Questo <strong>per</strong>mette ad un ipotetico attaccante di costruire attacchi tali che <strong>il</strong> pro-<br />

gramma, pur rimanendo all’interno del <strong>control</strong> <strong>flow</strong> ammesso, riporti informazioni<br />

diverse da quelle che normalmente dovrebbe riportare. Nel contesto di un processo<br />

industriale critico, questo potrebbe rappresentare un notevole problema. Sarebbe<br />

ideale quindi riuscire a far si che le informazioni <strong>data</strong> <strong>flow</strong> che vengono apprese siano<br />

qualcosa di più dettagliato, qualcosa del tipo<br />

“la funzione log event(), se chiamata dal codice che si occupa dell’au-<br />

tenticazione può scrivere nel log-f<strong>il</strong>e che un utente ha inserito la password<br />

errata, mentre se chiamata dal codice di dialogo col client può scrivere<br />

che un client ha inviato una richiesta malformata”.<br />

L’osservazione fondamentale che consente questo miglioramento è che una chiama-<br />

ta di sistema è caratterizzata in modo molto più preciso se, invece di considerare<br />

soltanto la sua posizione assoluta nel codice, si considera anche <strong>il</strong> contesto in cui è<br />

eseguita, ovvero la sequenza di record di attivazione che la precedono sullo stack.<br />

Nei due casi si osserveranno sequenze differenti e questo consente di capire che si<br />

è arrivati a log event() da due strade diverse. L’informazione relativa allo stack<br />

viene già raccolta <strong>per</strong> la costruzione dell’execution graph e dunque vale la pena far<br />

si che ne benefici anche <strong>il</strong> <strong>modello</strong> <strong>data</strong> <strong>flow</strong>. In questo modo, <strong>per</strong> un ipotetico IDS<br />

costruito con queste tecniche, è immediato capire da dove proviene la richiesta di<br />

inserire un messaggio nel log-f<strong>il</strong>e e quindi capire se quel messaggio è lecito oppure<br />

no. Vediamo, nella pratica, come può presentarsi questo scenario.<br />

3.1.1 Primo scenario: vulnerab<strong>il</strong>ità nel codice<br />

Nel programma della Figura 3.1 è presente un evidente buffer over<strong>flow</strong>, dovuto al-<br />

l’uso non sicuro della funzione strcpy(). Il buffer over<strong>flow</strong> <strong>per</strong>mette di eseguire<br />

codice arbitrario e, nel caso <strong>il</strong> programma sia installato setuid root, <strong>per</strong>mette ad un<br />

attaccante di prendere <strong>il</strong> <strong>control</strong>lo completo del sistema. <strong>Un</strong> attacco tramite buffer<br />

over<strong>flow</strong> fatto nel modo standard tuttavia viene immediatamente r<strong>il</strong>evato anche dal<br />

più semplice FSA (Figura 3.2). Quello che <strong>per</strong>ò l’FSA non può r<strong>il</strong>evare è un attacco<br />

che, iniettando codice opportuno in buf, esegue un numero arbitrario di chiamate<br />

a put str() (e quindi a write) con parametri arbitrari. Le cose non migliorano di

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

Saved successfully!

Ooh no, something went wrong!