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.

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

eseguire:<br />

jmp put msg<br />

A questo punto avviene la write con l’esatto stack che l’IDS si aspetta e dunque<br />

non viene segnalata come non valida. Terminata la put msg() viene distrutto <strong>il</strong> suo<br />

stack frame e viene passato <strong>il</strong> <strong>control</strong>lo al codice dell’ep<strong>il</strong>ogo di g(), che distrugge<br />

<strong>il</strong> relativo frame. Il <strong>control</strong>lo infine torna al main(), dove verrà eseguita la seconda<br />

chiamata di put msg().<br />

Per poter ricostruire lo stack <strong>per</strong>ò è necessario ottenere alcune informazioni, in<br />

particolare i return address delle procedure coinvolte. Nel nostro esempio vogliamo<br />

simulare la prima write , quindi lo stack da ricostruire è:<br />

[main.22|g.10|put_msg.5|write]<br />

La prima informazione che ci serve è <strong>il</strong> punto in cui ritorna g quando è chiamata<br />

dalla riga 22 di main:<br />

(gdb) disas main<br />

Dump of assembler code for function main:<br />

0x00001fc7 : push %ebp<br />

0x00001fc8 : mov %esp,%ebp<br />

0x00001fca : push %ebx<br />

0x00001fcb : sub $0x14,%esp<br />

0x00001fce : call 0x1fd3 <br />

0x00001fd3 : pop %ebx<br />

0x00001fd4 : call 0x1fae <br />

0x00001fd9 : call 0x1f8d <br />

0x00001fde : lea 0x26(%ebx),%eax ;

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

Saved successfully!

Ooh no, something went wrong!