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.

3.1. Debolezze dei modelli esistenti 33<br />

Il mancato apprendimento di informazioni ut<strong>il</strong>i relative ai parametri della open è<br />

legato alla numerosità dei casi che potrebbero presentarsi: un client infatti potrebbe,<br />

del tutto legittimamente, eseguire la PUT di un f<strong>il</strong>e che ha un nome non incontra-<br />

to durante <strong>il</strong> training e poi farne la GET. Non è ovviamente possib<strong>il</strong>e segnalare<br />

un’intrusione ogni qualvolta si presenti questa situazione.<br />

Quello che l’IDS potrebbe <strong>per</strong>ò apprendere è dove i f<strong>il</strong>e richiesti sono ubicati.<br />

Supponendo che la root directory del server sia /srv, verrà appreso che <strong>il</strong> parametro<br />

di open deve essere un f<strong>il</strong>e nelle directory /srv oppure /etc. Questa informazione<br />

tuttavia non aiuta a capire se è stato tentato <strong>il</strong> download del f<strong>il</strong>e di configurazione.<br />

Se osserviamo <strong>il</strong> sorgente possiamo notare <strong>per</strong>ò che l’unico caso in cui è richiesto<br />

di aprire un f<strong>il</strong>e in /etc è quando <strong>il</strong> server viene lanciato, tramite la chiamata<br />

read f<strong>il</strong>e in main. In altre parole, se lo stack è<br />

[main.37|read_f<strong>il</strong>e.6|open]<br />

allora <strong>il</strong> f<strong>il</strong>e che viene passato alla open deve essere /etc/simpleserver.conf,<br />

mentre se lo stack è<br />

[main.42|server_loop.24|read_f<strong>il</strong>e.6|open]<br />

allora può essere a<strong>per</strong>to qualunque f<strong>il</strong>e stia in /srv. Se si costruisce <strong>il</strong> <strong>modello</strong> usando<br />

anche le informazioni sullo stack è molto semplice r<strong>il</strong>evare che queste condizioni<br />

valgano a runtime.<br />

28<br />

12<br />

read<br />

open<br />

read<br />

21<br />

accept<br />

write<br />

13 14<br />

read<br />

close<br />

open<br />

6 7<br />

20<br />

close<br />

8<br />

accept<br />

end<br />

Figura 3.6: FSA <strong>per</strong> <strong>il</strong> secondo esempio.<br />

read<br />

In questo caso naturalmente <strong>il</strong> comportamento <strong>il</strong>lecito è stato consentito non da<br />

un errore da parte di chi ha creato <strong>il</strong> software e dunque da un bug, ma da parte di

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

Saved successfully!

Ooh no, something went wrong!